<?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>43489</bug_id>
          
          <creation_ts>2010-08-04 08:49:27 -0700</creation_ts>
          <short_desc>Web Inspector: It would be better to make did* method calls automatically</short_desc>
          <delta_ts>2010-08-10 23:05:41 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ilya Tikhonovsky">loislo</reporter>
          <assigned_to name="Ilya Tikhonovsky">loislo</assigned_to>
          <cc>abarth</cc>
    
    <cc>bweinstein</cc>
    
    <cc>eric</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>260042</commentid>
    <comment_count>0</comment_count>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2010-08-04 08:49:27 -0700</bug_when>
    <thetext>In the current implementation of inspector agent&apos;s we&apos;re calling did methods manually.
That is error prone and bad from protocol point of view.
It would be better to call did methods automatically  from the corresponding methods of InspectorBackendDispatcher and report the results.
As far as our protocol is statefull this trick will keep it in the consistent state.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260043</commentid>
    <comment_count>1</comment_count>
      <attachid>63453</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2010-08-04 08:51:22 -0700</bug_when>
    <thetext>Created attachment 63453
[patch] preliminary version. Not for landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260044</commentid>
    <comment_count>2</comment_count>
      <attachid>63454</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2010-08-04 08:52:12 -0700</bug_when>
    <thetext>Created attachment 63454
InspectorBackendDispatcher.cpp - sample of generated file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260073</commentid>
    <comment_count>3</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2010-08-04 10:04:10 -0700</bug_when>
    <thetext>Is this missing the frontend&apos;s implementation of protocolError? I&apos;m assuming
it just removes the wrapped Callback so it doesn&apos;t leak.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260497</commentid>
    <comment_count>4</comment_count>
      <attachid>63570</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2010-08-05 03:34:44 -0700</bug_when>
    <thetext>Created attachment 63570
[patch] initial version.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260498</commentid>
    <comment_count>5</comment_count>
      <attachid>63571</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2010-08-05 03:35:16 -0700</bug_when>
    <thetext>Created attachment 63571
InspectorBackendDispatcher.cpp - sample of generated file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260501</commentid>
    <comment_count>6</comment_count>
      <attachid>63570</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2010-08-05 03:52:09 -0700</bug_when>
    <thetext>Comment on attachment 63570
[patch] initial version.

Double entry in ChangeLog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260559</commentid>
    <comment_count>7</comment_count>
      <attachid>63570</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-08-05 06:17:12 -0700</bug_when>
    <thetext>Comment on attachment 63570
[patch] initial version.

WebCore/ChangeLog:5
 +          WebInspector: In the current implementation of inspector agent&apos;s we&apos;re calling
typo: agent&apos;s -&gt; agents

WebCore/inspector/CodeGeneratorInspector.pm:306
 +      push(@function, &quot;        protocolError(callId, backendFunctionName, formatWrongArgumentsCountMessage(args-&gt;length() - 1, $expectedParametersCount));&quot;);
I think it should be retportProtocolError according to the style guide

WebCore/inspector/InspectorBackend.cpp:129
 +      RefPtr&lt;InspectorArray&gt; result = InspectorArray::create();
this should be *names = InspectorArray::create()

WebCore/inspector/Inspector.idl:131
 +          [handler=DOM, customResponse=didApplyDomChange] void setTextNodeValue(in long callId, in long nodeId, in String value, out boolean success);
Would be nice if we could avoid custom responses

WebCore/inspector/Inspector.idl:134
 +          [handler=DOM] void removeNode(in long callId, in long nodeId, out long outNodeId);
I think we don&apos;t need out outNodeId in this method.

WebCore/inspector/InspectorDOMAgent.cpp:1303
 +  void InspectorDOMAgent::addRule(long, const String&amp; selector, long selectedNodeId, RefPtr&lt;InspectorValue&gt;* ruleObject, bool* selectorAffectsNode)
remove first parameter completely?

WebCore/inspector/InspectorController.cpp:1452
 +  void InspectorController::removeDOMStorageItem(long, long storageId, const String&amp; key, bool* success)
remove first parameter completely?

WebCore/inspector/InspectorController.cpp:1521
 +  void InspectorController::getProfileHeaders(long, RefPtr&lt;InspectorArray&gt;* headers)
remove first parameter completely here and in other places?

WebCore/inspector/InspectorController.cpp:1707
 +          *newCallFrames = currentCallFrames();
please add else branch *newCallFrames = InspectorValue::null();

WebCore/inspector/InspectorController.h:221
 +      void getDOMStorageEntries(long callId, long storageId, RefPtr&lt;InspectorArray&gt;* entries);
no need to pass callId

WebCore/inspector/InspectorDOMAgent.cpp:560
 +  {
 outNodeId should be removed

WebCore/inspector/InspectorDOMAgent.cpp:1140
 +      *success = false;
consider generating those initializers in InspectorBackendDispatcher</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260610</commentid>
    <comment_count>8</comment_count>
      <attachid>63591</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2010-08-05 07:49:50 -0700</bug_when>
    <thetext>Created attachment 63591
[patch] second iteration

WebCore/ChangeLog:5
 +          WebInspector: In the current implementation of inspector agent&apos;s
we&apos;re calling
typo: agent&apos;s -&gt; agents

done.



WebCore/inspector/CodeGeneratorInspector.pm:306
 +      push(@function, &quot;        protocolError(callId, backendFunctionName,
formatWrongArgumentsCountMessage(args-&gt;length() - 1,
$expectedParametersCount));&quot;);
I think it should be retportProtocolError according to the style guide

done.



WebCore/inspector/InspectorBackend.cpp:129
 +      RefPtr&lt;InspectorArray&gt; result = InspectorArray::create();
this should be *names = InspectorArray::create()

default values are assigning in the generated code.



WebCore/inspector/Inspector.idl:131
 +          [handler=DOM, customResponse=didApplyDomChange] void
setTextNodeValue(in long callId, in long nodeId, in String value, out boolean
success);
Would be nice if we could avoid custom responses

will do that in another patch



WebCore/inspector/Inspector.idl:134
 +          [handler=DOM] void removeNode(in long callId, in long nodeId, out
long outNodeId);
I think we don&apos;t need out outNodeId in this method.

will do that in another patch



WebCore/inspector/InspectorController.cpp:1521
 +  void InspectorController::getProfileHeaders(long, RefPtr&lt;InspectorArray&gt;*
headers)
remove first parameter completely here and in other places?

will do that in another patch



WebCore/inspector/InspectorController.cpp:1707
 +          *newCallFrames = currentCallFrames();
please add else branch *newCallFrames = InspectorValue::null();

default values are assigning in the generated code.



WebCore/inspector/InspectorDOMAgent.cpp:560
 +  {
 outNodeId should be removed

will do that in another patch



WebCore/inspector/InspectorDOMAgent.cpp:1140
 +      *success = false;
consider generating those initializers in InspectorBackendDispatcher

done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260612</commentid>
    <comment_count>9</comment_count>
      <attachid>63592</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2010-08-05 07:50:39 -0700</bug_when>
    <thetext>Created attachment 63592
sample: InspectorBackendDispatcher.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260795</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-05 13:06:17 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/64770 might have broken Leopard Intel Release (Tests)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>263054</commentid>
    <comment_count>11</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-08-10 23:05:41 -0700</bug_when>
    <thetext>This patch appears to have been landed.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63453</attachid>
            <date>2010-08-04 08:51:22 -0700</date>
            <delta_ts>2010-08-05 03:34:44 -0700</delta_ts>
            <desc>[patch] preliminary version. Not for landing.</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>61239</size>
            <attacher name="Ilya Tikhonovsky">loislo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucG0g
Yi9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnBtCmluZGV4IDBhZTll
ODUuLjU0Mjg5YTEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJ
bnNwZWN0b3IucG0KKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rv
ci5wbQpAQCAtMTcsMTIgKzE3LDExIEBAICR0eXBlVHJhbnNmb3JteyJJbnNwZWN0b3JDbGllbnQi
fSA9IHsKICR0eXBlVHJhbnNmb3JteyJCYWNrZW5kIn0gPSB7CiAgICAgImZvcndhcmQiID0+ICJJ
bnNwZWN0b3JCYWNrZW5kIiwKICAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yQmFja2VuZC5oIiwK
LSAgICAiaGFuZGxlckFjY2Vzc29yIiA9PiAibV9pbnNwZWN0b3JCYWNrZW5kIiwKKyAgICAiaGFu
ZGxlckFjY2Vzc29yIiA9PiAibV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0b3JCYWNrZW5k
KCkiLAogfTsKICR0eXBlVHJhbnNmb3JteyJDb250cm9sbGVyIn0gPSB7Ci0gICAgImZvcndhcmQi
ID0+ICJJbnNwZWN0b3JDb250cm9sbGVyIiwKLSAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yQ29u
dHJvbGxlci5oIiwKLSAgICAiaGFuZGxlckFjY2Vzc29yIiA9PiAibV9pbnNwZWN0b3JCYWNrZW5k
LT5pbnNwZWN0b3JDb250cm9sbGVyKCkiLAorICAgICJmb3J3YXJkSGVhZGVyIiA9PiAiSW5zcGVj
dG9yQ29udHJvbGxlci5oIiwKKyAgICAiaGFuZGxlckFjY2Vzc29yIiA9PiAibV9pbnNwZWN0b3JD
b250cm9sbGVyIiwKIH07CiAkdHlwZVRyYW5zZm9ybXsiRGVidWcifSA9IHsKICAgICAiZm9yd2Fy
ZCIgPT4gIlNjcmlwdERlYnVnU2VydmVyIiwKQEAgLTMyLDEyICszMSwxNiBAQCAkdHlwZVRyYW5z
Zm9ybXsiRGVidWcifSA9IHsKICR0eXBlVHJhbnNmb3JteyJET00ifSA9IHsKICAgICAiZm9yd2Fy
ZCIgPT4gIkluc3BlY3RvckRPTUFnZW50IiwKICAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yRE9N
QWdlbnQuaCIsCi0gICAgImhhbmRsZXJBY2Nlc3NvciIgPT4gIm1faW5zcGVjdG9yQmFja2VuZC0+
aW5zcGVjdG9yRE9NQWdlbnQoKSIsCisgICAgImhhbmRsZXJBY2Nlc3NvciIgPT4gIm1faW5zcGVj
dG9yQ29udHJvbGxlci0+ZG9tQWdlbnQoKSIsCiB9OwogJHR5cGVUcmFuc2Zvcm17IkFwcGxpY2F0
aW9uQ2FjaGUifSA9IHsKICAgICAiZm9yd2FyZCIgPT4gIkluc3BlY3RvckFwcGxpY2F0aW9uQ2Fj
aGVBZ2VudCIsCiAgICAgImhlYWRlciIgPT4gIkluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2Vu
dC5oIiwKLSAgICAiaGFuZGxlckFjY2Vzc29yIiA9PiAibV9pbnNwZWN0b3JCYWNrZW5kLT5pbnNw
ZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQoKSIsCisgICAgImhhbmRsZXJBY2Nlc3NvciIgPT4g
Im1faW5zcGVjdG9yQ29udHJvbGxlci0+YXBwbGljYXRpb25DYWNoZUFnZW50KCkiLAorfTsKKyR0
eXBlVHJhbnNmb3JteyJGcm9udGVuZCJ9ID0geworICAgICJmb3J3YXJkIiA9PiAiUmVtb3RlSW5z
cGVjdG9yRnJvbnRlbmQiLAorICAgICJoZWFkZXIiID0+ICJSZW1vdGVJbnNwZWN0b3JGcm9udGVu
ZC5oIiwKIH07CiAkdHlwZVRyYW5zZm9ybXsiUGFzc1JlZlB0ciJ9ID0gewogICAgICJmb3J3YXJk
SGVhZGVyIiA9PiAid3RmL1Bhc3NSZWZQdHIuaCIsCkBAIC00NSw2ICs0OCw3IEBAICR0eXBlVHJh
bnNmb3JteyJQYXNzUmVmUHRyIn0gPSB7CiAkdHlwZVRyYW5zZm9ybXsiT2JqZWN0In0gPSB7CiAg
ICAgInBhcmFtIiA9PiAiUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IiwKICAgICAicmV0VmFs
IiA9PiAiUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IiwKKyAgICAidmFyaWFibGUiID0+ICJS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiIsCiAgICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JPYmpl
Y3QiLAogICAgICJoZWFkZXIiID0+ICJJbnNwZWN0b3JWYWx1ZXMuaCIsCiAgICAgImFjY2Vzc29y
U3VmZml4IiA9PiAiIgpAQCAtNTIsNiArNTYsNyBAQCAkdHlwZVRyYW5zZm9ybXsiT2JqZWN0In0g
PSB7CiAkdHlwZVRyYW5zZm9ybXsiQXJyYXkifSA9IHsKICAgICAicGFyYW0iID0+ICJQYXNzUmVm
UHRyPEluc3BlY3RvckFycmF5PiIsCiAgICAgInJldFZhbCIgPT4gIlBhc3NSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+IiwKKyAgICAidmFyaWFibGUiID0+ICJSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IiwK
ICAgICAiZm9yd2FyZCIgPT4gIkluc3BlY3RvckFycmF5IiwKICAgICAiaGVhZGVyIiA9PiAiSW5z
cGVjdG9yVmFsdWVzLmgiLAogICAgICJhY2Nlc3NvclN1ZmZpeCIgPT4gIiIKQEAgLTU5LDYgKzY0
LDcgQEAgJHR5cGVUcmFuc2Zvcm17IkFycmF5In0gPSB7CiAkdHlwZVRyYW5zZm9ybXsiVmFsdWUi
fSA9IHsKICAgICAicGFyYW0iID0+ICJQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiIsCiAgICAg
InJldFZhbCIgPT4gIlBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IiwKKyAgICAidmFyaWFibGUi
ID0+ICJSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IiwKICAgICAiZm9yd2FyZCIgPT4gIkluc3BlY3Rv
clZhbHVlIiwKICAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yVmFsdWVzLmgiLAogICAgICJhY2Nl
c3NvclN1ZmZpeCIgPT4gIiIKQEAgLTkxLDYgKzk3LDEzIEBAICR0eXBlVHJhbnNmb3JteyJ1bnNp
Z25lZCBsb25nIn0gPSB7CiAgICAgImhlYWRlciIgPT4gIiIsCiAgICAgImFjY2Vzc29yU3VmZml4
IiA9PiAiTnVtYmVyIgogfTsKKyR0eXBlVHJhbnNmb3JteyJ1bnNpZ25lZCBpbnQifSA9IHsKKyAg
ICAicGFyYW0iID0+ICJ1bnNpZ25lZCBpbnQiLAorICAgICJyZXRWYWwiID0+ICJ1bnNpZ25lZCBp
bnQiLAorICAgICJmb3J3YXJkIiA9PiAiIiwKKyAgICAiaGVhZGVyIiA9PiAiIiwKKyAgICAiYWNj
ZXNzb3JTdWZmaXgiID0+ICJOdW1iZXIiCit9OwogJHR5cGVUcmFuc2Zvcm17ImJvb2xlYW4ifSA9
IHsKICAgICAicGFyYW0iID0+ICJib29sIiwKICAgICAicmV0VmFsIj0+ICJib29sIiwKQEAgLTE4
NCwxMiArMTk3LDE1IEBAIHN1YiBHZW5lcmF0ZUludGVyZmFjZQogCiAgICAgJGJhY2tlbmRDbGFz
c05hbWUgPSAkY2xhc3NOYW1lIC4gIkJhY2tlbmREaXNwYXRjaGVyIjsKICAgICBteSBAYmFja2Vu
ZEhlYWQ7Ci0gICAgcHVzaChAYmFja2VuZEhlYWQsICIgICAgJHtiYWNrZW5kQ2xhc3NOYW1lfShJ
bnNwZWN0b3JCYWNrZW5kKiBpbnNwZWN0b3JCYWNrZW5kKSA6IG1faW5zcGVjdG9yQmFja2VuZChp
bnNwZWN0b3JCYWNrZW5kKSB7IH0iKTsKKyAgICBwdXNoKEBiYWNrZW5kSGVhZCwgIiAgICAke2Jh
Y2tlbmRDbGFzc05hbWV9KEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIp
IDogbV9pbnNwZWN0b3JDb250cm9sbGVyKGluc3BlY3RvckNvbnRyb2xsZXIpIHsgfSIpOworICAg
IHB1c2goQGJhY2tlbmRIZWFkLCAiICAgIFJlbW90ZUluc3BlY3RvckZyb250ZW5kKiBpbnNwZWN0
b3JGcm9udGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1faW5zcGVjdG9yQ29udHJvbGxlci0+cmVtb3Rl
SW5zcGVjdG9yRnJvbnRlbmQoKTsgfSIpOworICAgIHB1c2goQGJhY2tlbmRIZWFkLCAiICAgIHZv
aWQgcHJvdG9jb2xFcnJvcihjb25zdCBsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2Qs
IGNvbnN0IFN0cmluZyYgZXJyb3JUZXh0KSBjb25zdDsiKTsKICAgICBwdXNoKEBiYWNrZW5kSGVh
ZCwgIiAgICB2b2lkIGRpc3BhdGNoKGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7Iik7CiAgICAgcHVz
aChAYmFja2VuZEhlYWQsICJwcml2YXRlOiIpOwogICAgICRiYWNrZW5kQ29uc3RydWN0b3IgPSBq
b2luKCJcbiIsIEBiYWNrZW5kSGVhZCk7Ci0gICAgJGJhY2tlbmRGb290ZXIgPSAiICAgIEluc3Bl
Y3RvckJhY2tlbmQqIG1faW5zcGVjdG9yQmFja2VuZDsiOwotICAgICRiYWNrZW5kVHlwZXN7IkJh
Y2tlbmQifSA9IDE7CisgICAgJGJhY2tlbmRGb290ZXIgPSAiICAgIEluc3BlY3RvckNvbnRyb2xs
ZXIqIG1faW5zcGVjdG9yQ29udHJvbGxlcjsiOworICAgICRiYWNrZW5kVHlwZXN7IkNvbnRyb2xs
ZXIifSA9IDE7CisgICAgJGJhY2tlbmRUeXBlc3siSW5zcGVjdG9yQ2xpZW50In0gPSAxOwogICAg
ICRiYWNrZW5kVHlwZXN7IlBhc3NSZWZQdHIifSA9IDE7CiAgICAgJGJhY2tlbmRUeXBlc3siQXJy
YXkifSA9IDE7CiAKQEAgLTIwNiw2ICsyMjIsNyBAQCBzdWIgZ2VuZXJhdGVGdW5jdGlvbnMKICAg
ICAgICAgZ2VuZXJhdGVCYWNrZW5kRnVuY3Rpb24oJGZ1bmN0aW9uKTsKICAgICB9CiAgICAgcHVz
aChAYmFja2VuZE1ldGhvZHNJbXBsLCBnZW5lcmF0ZUJhY2tlbmREaXNwYXRjaGVyKCkpOworICAg
IHB1c2goQGJhY2tlbmRNZXRob2RzSW1wbCwgZ2VuZXJhdGVCYWNrZW5kUHJvdG9jb2xFcnJvcigp
KTsKIH0KIAogc3ViIGdlbmVyYXRlRnJvbnRlbmRGdW5jdGlvbgpAQCAtMjQ5LDEyICsyNjYsMTIg
QEAgc3ViIGdlbmVyYXRlQmFja2VuZFByaXZhdGVGdW5jdGlvbnMKICAgICBteSAkcHJpdmF0ZUZ1
bmN0aW9ucyA9IDw8ICJFT0YiOwogc3RhdGljIFN0cmluZyBmb3JtYXRXcm9uZ0FyZ3VtZW50c0Nv
dW50TWVzc2FnZSh1bnNpZ25lZCBleHBlY3RlZCwgdW5zaWduZWQgYWN0dWFsKQogewotICAgIHJl
dHVybiBTdHJpbmc6OmZvcm1hdChcIldyb25nIG51bWJlciBvZiBwYXJhbWV0ZXJzOiAlZCAoZXhw
ZWN0ZWQ6ICVkKVwiLCBhY3R1YWwsIGV4cGVjdGVkKTsKKyAgICByZXR1cm4gU3RyaW5nOjpmb3Jt
YXQoIldyb25nIG51bWJlciBvZiBwYXJhbWV0ZXJzOiAlZCAoZXhwZWN0ZWQ6ICVkKSIsIGFjdHVh
bCwgZXhwZWN0ZWQpOwogfQogCiBzdGF0aWMgU3RyaW5nIGZvcm1hdFdyb25nQXJndW1lbnRUeXBl
TWVzc2FnZSh1bnNpZ25lZCBwb3NpdGlvbiwgY29uc3QgY2hhciogbmFtZSwgY29uc3QgY2hhciog
ZXhwZWN0ZWRUeXBlKQogewotICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdChcIkZhaWxlZCB0byBj
b252ZXJ0IHBhcmFtZXRlciAlZCAoJXMpIHRvICVzXCIsIHBvc2l0aW9uLCBuYW1lLCBleHBlY3Rl
ZFR5cGUpOworICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgiRmFpbGVkIHRvIGNvbnZlcnQgcGFy
YW1ldGVyICVkICglcykgdG8gJXMiLCBwb3NpdGlvbiwgbmFtZSwgZXhwZWN0ZWRUeXBlKTsKIH0K
IEVPRgogICAgIHB1c2goQGJhY2tlbmRNZXRob2RzSW1wbCwgJHByaXZhdGVGdW5jdGlvbnMpOwpA
QCAtMjY3LDQ2ICsyODQsMTAwIEBAIHN1YiBnZW5lcmF0ZUJhY2tlbmRGdW5jdGlvbgogCiAgICAg
bXkgJGZ1bmN0aW9uTmFtZSA9ICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5uYW1lOwogCi0gICAgbXkg
QGFyZ3NGaWx0ZXJlZCA9IGdyZXAoJF8tPmRpcmVjdGlvbiBlcSAiaW4iLCBAeyRmdW5jdGlvbi0+
cGFyYW1ldGVyc30pOwotICAgIG1hcCgkYmFja2VuZFR5cGVzeyRfLT50eXBlfSA9IDEsIEBhcmdz
RmlsdGVyZWQpOyAjIHJlZ2lzdGVyIHJlcXVpcmVkIHR5cGVzCi0gICAgbXkgJGFyZ3VtZW50cyA9
IGpvaW4oIiwgIiwgbWFwKCR0eXBlVHJhbnNmb3JteyRfLT50eXBlfS0+eyJwYXJhbSJ9IC4gIiAi
IC4gJF8tPm5hbWUsIEBhcmdzRmlsdGVyZWQpKTsKKyAgICBteSBAaW5BcmdzID0gZ3JlcCgkXy0+
ZGlyZWN0aW9uIGVxICJpbiIsIEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfSk7CisgICAgbXkgQG91
dEFyZ3MgPSBncmVwKCRfLT5kaXJlY3Rpb24gZXEgIm91dCIsIEB7JGZ1bmN0aW9uLT5wYXJhbWV0
ZXJzfSk7CisgICAgbWFwKCRiYWNrZW5kVHlwZXN7JF8tPnR5cGV9ID0gMSwgQGluQXJncyk7ICMg
cmVnaXN0ZXIgcmVxdWlyZWQgdHlwZXMKKyAgICBtYXAoJGJhY2tlbmRUeXBlc3skXy0+dHlwZX0g
PSAxLCBAb3V0QXJncyk7ICMgcmVnaXN0ZXIgcmVxdWlyZWQgdHlwZXMKIAotICAgIG15ICRzaWdu
YXR1cmUgPSAiICAgIHZvaWQgJHtmdW5jdGlvbk5hbWV9KFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJy
YXk+IGFyZ3MsIFN0cmluZyogZXhjZXB0aW9uKTsiOworICAgIG15ICRzaWduYXR1cmUgPSAiICAg
IGJvb2wgJHtmdW5jdGlvbk5hbWV9KFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3MpOyI7
CiAgICAgISRiYWNrZW5kTWV0aG9kc3ske3NpZ25hdHVyZX19IHx8IGRpZSAiRHVwbGljYXRlIGZ1
bmN0aW9uIHdhcyBkZXRlY3RlZCBmb3Igc2lnbmF0dXJlICckc2lnbmF0dXJlJy4iOwogICAgICRi
YWNrZW5kTWV0aG9kc3ske3NpZ25hdHVyZX19ID0gJGZ1bmN0aW9uTmFtZTsKIAogICAgIG15IEBm
dW5jdGlvbjsKLSAgICBwdXNoKEBmdW5jdGlvbiwgInZvaWQgJHtiYWNrZW5kQ2xhc3NOYW1lfTo6
JHtmdW5jdGlvbk5hbWV9KFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3MsIFN0cmluZyog
ZXhjZXB0aW9uKSIpOworICAgIHB1c2goQGZ1bmN0aW9uLCAiYm9vbCAke2JhY2tlbmRDbGFzc05h
bWV9Ojoke2Z1bmN0aW9uTmFtZX0oUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJncykiKTsK
ICAgICBwdXNoKEBmdW5jdGlvbiwgInsiKTsKLSAgICBteSAkaSA9IDE7ICMgemVybyBlbGVtZW50
IGlzIHRoZSBtZXRob2QgbmFtZS4KLSAgICBteSAkZXhwZWN0ZWRQYXJhbWV0ZXJzQ291bnQgPSBz
Y2FsYXIoQGFyZ3NGaWx0ZXJlZCk7Ci0gICAgbXkgJGV4cGVjdGVkUGFyYW1ldGVyc0NvdW50V2l0
aE1ldGhvZE5hbWUgPSBzY2FsYXIoQGFyZ3NGaWx0ZXJlZCkgKyAxOworICAgIHB1c2goQGZ1bmN0
aW9uLCAiICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBiYWNrZW5kRnVuY3Rpb25OYW1l
LCAoXCIkZnVuY3Rpb25OYW1lXCIpKTsiKTsKKyAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICBsb25n
IGNhbGxJZCA9IDA7Iik7CisgICAgcHVzaChAZnVuY3Rpb24sICIiKTsKKworICAgIG15ICRleHBl
Y3RlZFBhcmFtZXRlcnNDb3VudCA9IHNjYWxhcihAaW5BcmdzKTsKKyAgICBteSAkZXhwZWN0ZWRQ
YXJhbWV0ZXJzQ291bnRXaXRoTWV0aG9kTmFtZSA9IHNjYWxhcihAaW5BcmdzKSArIDE7CiAgICAg
cHVzaChAZnVuY3Rpb24sICIgICAgaWYgKGFyZ3MtPmxlbmd0aCgpICE9ICRleHBlY3RlZFBhcmFt
ZXRlcnNDb3VudFdpdGhNZXRob2ROYW1lKSB7Iik7Ci0gICAgcHVzaChAZnVuY3Rpb24sICIgICAg
ICAgICpleGNlcHRpb24gPSBmb3JtYXRXcm9uZ0FyZ3VtZW50c0NvdW50TWVzc2FnZShhcmdzLT5s
ZW5ndGgoKSAtIDEsICRleHBlY3RlZFBhcmFtZXRlcnNDb3VudCk7Iik7CiAgICAgcHVzaChAZnVu
Y3Rpb24sICIgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyIpOwotICAgIHB1c2goQGZ1bmN0
aW9uLCAiICAgICAgICByZXR1cm47Iik7CisgICAgcHVzaChAZnVuY3Rpb24sICIgICAgICAgIHBy
b3RvY29sRXJyb3IoMCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudHND
b3VudE1lc3NhZ2UoYXJncy0+bGVuZ3RoKCkgLSAxLCAkZXhwZWN0ZWRQYXJhbWV0ZXJzQ291bnQp
KTsiKTsKKyAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICAgICAgcmV0dXJuIGZhbHNlOyIpOwogICAg
IHB1c2goQGZ1bmN0aW9uLCAiICAgIH0iKTsKKyAgICBwdXNoKEBmdW5jdGlvbiwgIiIpOwogCi0g
ICAgZm9yZWFjaCBteSAkcGFyYW1ldGVyIChAYXJnc0ZpbHRlcmVkKSB7CisgICAgbXkgJGkgPSAx
OyAjIHplcm8gZWxlbWVudCBpcyB0aGUgbWV0aG9kIG5hbWUuCisgICAgZm9yZWFjaCBteSAkcGFy
YW1ldGVyIChAaW5BcmdzKSB7CiAgICAgICAgIG15ICRwYXJhbWV0ZXJUeXBlID0gJHBhcmFtZXRl
ci0+dHlwZTsKLSAgICAgICAgcHVzaChAZnVuY3Rpb24sICIgICAgIiAuICR0eXBlVHJhbnNmb3Jt
eyRwYXJhbWV0ZXJUeXBlfS0+eyJyZXRWYWwifSAuICIgIiAuICRwYXJhbWV0ZXItPm5hbWUgLiAi
OyIpOworICAgICAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICAiIC4gJHR5cGVUcmFuc2Zvcm17JHBh
cmFtZXRlclR5cGV9LT57InJldFZhbCJ9IC4gIiAiIC4gJHBhcmFtZXRlci0+bmFtZSAuICI7Iikg
aWYgISgkcGFyYW1ldGVyLT5uYW1lIGVxICJjYWxsSWQiKTsKICAgICAgICAgcHVzaChAZnVuY3Rp
b24sICIgICAgaWYgKCFhcmdzLT5nZXQoIiAuICRpIC4gIiktPmFzIiAuICR0eXBlVHJhbnNmb3Jt
eyRwYXJhbWV0ZXJUeXBlfS0+eyJhY2Nlc3NvclN1ZmZpeCJ9IC4gIigmIiAuICRwYXJhbWV0ZXIt
Pm5hbWUgLiAiKSkgeyIpOwotICAgICAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICAgICAgKmV4Y2Vw
dGlvbiA9IGZvcm1hdFdyb25nQXJndW1lbnRUeXBlTWVzc2FnZSgkaSwgXCIiIC4gJHBhcmFtZXRl
ci0+bmFtZSAuICJcIiwgXCIkcGFyYW1ldGVyVHlwZVwiKTsiKTsKICAgICAgICAgcHVzaChAZnVu
Y3Rpb24sICIgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyIpOwotICAgICAgICBwdXNoKEBm
dW5jdGlvbiwgIiAgICAgICAgcmV0dXJuOyIpOworICAgICAgICBwdXNoKEBmdW5jdGlvbiwgIiAg
ICAgICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdy
b25nQXJndW1lbnRUeXBlTWVzc2FnZSgkaSwgXCIiIC4gJHBhcmFtZXRlci0+bmFtZSAuICJcIiwg
XCIkcGFyYW1ldGVyVHlwZVwiKSk7Iik7CisgICAgICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgICAg
ICByZXR1cm4gZmFsc2U7Iik7CiAgICAgICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgIH0iKTsKKyAg
ICAgICAgcHVzaChAZnVuY3Rpb24sICIiKTsKICAgICAgICAgKyskaTsKICAgICB9Ci0gICAgbXkg
JGhhbmRsZXIgPSAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Imhh
bmRsZXIifSB8fCAiQmFja2VuZCI7CisKKyAgICBteSAkaGFuZGxlciA9ICRmdW5jdGlvbi0+c2ln
bmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiaGFuZGxlciJ9IHx8ICJDb250cm9sbGVyIjsK
ICAgICBteSAkaGFuZGxlckFjY2Vzc29yID0gJHR5cGVUcmFuc2Zvcm17JGhhbmRsZXJ9LT57Imhh
bmRsZXJBY2Nlc3NvciJ9OwogICAgICRiYWNrZW5kVHlwZXN7JGhhbmRsZXJ9ID0gMTsKLSAgICBw
dXNoKEBmdW5jdGlvbiwgIiAgICBpZiAoJGhhbmRsZXJBY2Nlc3NvcikiKTsKLSAgICBwdXNoKEBm
dW5jdGlvbiwgIiAgICAgICAgJGhhbmRsZXJBY2Nlc3Nvci0+JGZ1bmN0aW9uTmFtZSgiIC4gam9p
bigiLCAiLCBtYXAoJF8tPm5hbWUsIEBhcmdzRmlsdGVyZWQpKSAuICIpOyIpOworICAgIHB1c2go
QGZ1bmN0aW9uLCAiICAgIGlmICgkaGFuZGxlckFjY2Vzc29yID09IDApIHsiKTsKKyAgICBwdXNo
KEBmdW5jdGlvbiwgIiAgICAgICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlv
bk5hbWUsIFwiRXJyb3I6ICRoYW5kbGVyIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS5cIik7Iik7
CisgICAgcHVzaChAZnVuY3Rpb24sICIgICAgICAgIHJldHVybiBmYWxzZTsiKTsKKyAgICBwdXNo
KEBmdW5jdGlvbiwgIiAgICB9Iik7CisgICAgcHVzaChAZnVuY3Rpb24sICIiKTsKKworICAgIGZv
cmVhY2ggbXkgJHBhcmFtZXRlciAoQG91dEFyZ3MpIHsKKyAgICAgICAgbXkgJHR5cGUgPSAkdHlw
ZVRyYW5zZm9ybXskcGFyYW1ldGVyLT50eXBlfS0+eyR0eXBlVHJhbnNmb3JteyRwYXJhbWV0ZXIt
PnR5cGV9LT57InZhcmlhYmxlIn0gPyAidmFyaWFibGUiIDogInJldFZhbCJ9OworICAgICAgICBw
dXNoKEBmdW5jdGlvbiwgIiAgICAkdHlwZSAiIC4gJHBhcmFtZXRlci0+bmFtZSAuICI7Iik7Cisg
ICAgfQorCisgICAgbXkgQGFyZ3MgPSAobWFwKCRfLT5uYW1lLCBAaW5BcmdzKSwgbWFwKCImIiAu
ICRfLT5uYW1lLCBAb3V0QXJncykpOworICAgIG15ICRhcmdzID0gam9pbigiLCAiLCBAYXJncyk7
CisgICAgcHVzaChAZnVuY3Rpb24sICIgICAgJGhhbmRsZXJBY2Nlc3Nvci0+JGZ1bmN0aW9uTmFt
ZSgkYXJncyk7Iik7CisgICAgcHVzaChAZnVuY3Rpb24sICIiKTsKKworICAgIGlmIChzY2FsYXIo
QG91dEFyZ3MpKSB7CisgICAgICAgIG1hcCgkYmFja2VuZFR5cGVzeyRfLT50eXBlfSA9IDEsIEBv
dXRBcmdzKTsgIyByZWdpc3RlciByZXF1aXJlZCB0eXBlcy4KKyAgICAgICAgbXkgQHB1c2hBcmd1
bWVudHMgPSBtYXAoIiAgICAgICAgYXJndW1lbnRzLT5wdXNoIiAuICR0eXBlVHJhbnNmb3JteyRf
LT50eXBlfS0+eyJhY2Nlc3NvclN1ZmZpeCJ9IC4gIigiIC4gJF8tPm5hbWUgLiAiKTsiLCBAb3V0
QXJncyk7CisgICAgICAgIG15ICRjdXN0b21SZXNwb25zZSA9ICRmdW5jdGlvbi0+c2lnbmF0dXJl
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiY3VzdG9tUmVzcG9uc2UifTsKKyAgICAgICAgbXkgJGRp
ZEZ1bmN0aW9uTmFtZSA9ICRjdXN0b21SZXNwb25zZSA/ICRjdXN0b21SZXNwb25zZSA6ICJkaWQi
IC4gdWNmaXJzdCgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZSk7CisKKyAgICAgICAgcHVzaChA
ZnVuY3Rpb24sICIgICAgaWYgKG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdG9yQ2xpZW50
KCkpIHsiKTsKKyAgICAgICAgcHVzaChAZnVuY3Rpb24sICIgICAgICAgIFJlZlB0cjxJbnNwZWN0
b3JBcnJheT4gYXJndW1lbnRzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOyIpOworICAgICAg
ICBwdXNoKEBmdW5jdGlvbiwgIiAgICAgICAgYXJndW1lbnRzLT5wdXNoU3RyaW5nKFwiJGRpZEZ1
bmN0aW9uTmFtZVwiKTsiKTsKKyAgICAgICAgcHVzaChAZnVuY3Rpb24sICIgICAgICAgIGFyZ3Vt
ZW50cy0+cHVzaE51bWJlcihjYWxsSWQpOyIpOworICAgICAgICBwdXNoKEBmdW5jdGlvbiwgQHB1
c2hBcmd1bWVudHMpOworICAgICAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICAgICAgbV9pbnNwZWN0
b3JDb250cm9sbGVyLT5pbnNwZWN0b3JDbGllbnQoKS0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGFy
Z3VtZW50cy0+dG9KU09OU3RyaW5nKCkpOyIpOworICAgICAgICBwdXNoKEBmdW5jdGlvbiwgIiAg
ICB9Iik7CisgICAgfQorICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgIHJldHVybiB0cnVlOyIpOwog
ICAgIHB1c2goQGZ1bmN0aW9uLCAifSIpOwogICAgIHB1c2goQGZ1bmN0aW9uLCAiIik7CiAgICAg
cHVzaChAYmFja2VuZE1ldGhvZHNJbXBsLCBAZnVuY3Rpb24pOwogfQogCitzdWIgZ2VuZXJhdGVC
YWNrZW5kUHJvdG9jb2xFcnJvcgoreworICAgIG15ICRwcm90b2NvbEVycm9yID0gPDwgIkVPRiI7
CisKK3ZvaWQgJHtiYWNrZW5kQ2xhc3NOYW1lfTo6cHJvdG9jb2xFcnJvcihjb25zdCBsb25nIGNh
bGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIGNvbnN0IFN0cmluZyYgZXJyb3JUZXh0KSBjb25z
dAoreworICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJndW1lbnRzID0gSW5zcGVjdG9yQXJy
YXk6OmNyZWF0ZSgpOworICAgIGFyZ3VtZW50cy0+cHVzaFN0cmluZygicHJvdG9jb2xFcnJvciIp
OworICAgIGFyZ3VtZW50cy0+cHVzaE51bWJlcihjYWxsSWQpOworICAgIGFyZ3VtZW50cy0+cHVz
aFN0cmluZyhtZXRob2QpOworICAgIGFyZ3VtZW50cy0+cHVzaFN0cmluZyhlcnJvclRleHQpOwor
ICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdG9yQ2xpZW50KCktPnNlbmRNZXNzYWdl
VG9Gcm9udGVuZChhcmd1bWVudHMtPnRvSlNPTlN0cmluZygpKTsKK30KK0VPRgorICAgIHJldHVy
biBzcGxpdCgiXG4iLCAkcHJvdG9jb2xFcnJvcik7Cit9CisKIHN1YiBnZW5lcmF0ZUJhY2tlbmRE
aXNwYXRjaGVyCiB7CiAgICAgbXkgQGJvZHk7CkBAIC0zMTUsOCArMzg2LDcgQEAgc3ViIGdlbmVy
YXRlQmFja2VuZERpc3BhdGNoZXIKIAogICAgIHB1c2goQGJvZHksICJ2b2lkICR7YmFja2VuZENs
YXNzTmFtZX06OmRpc3BhdGNoKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkiKTsKICAgICBwdXNoKEBi
b2R5LCAieyIpOwotICAgIHB1c2goQGJvZHksICIgICAgU3RyaW5nIGV4Y2VwdGlvbjsiKTsKLSAg
ICBwdXNoKEBib2R5LCAiICAgIHR5cGVkZWYgdm9pZCAoJHtiYWNrZW5kQ2xhc3NOYW1lfTo6KkNh
bGxIYW5kbGVyKShQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcmdzLCBTdHJpbmcqIGV4Y2Vw
dGlvbik7Iik7CisgICAgcHVzaChAYm9keSwgIiAgICB0eXBlZGVmIGJvb2wgKCR7YmFja2VuZENs
YXNzTmFtZX06OipDYWxsSGFuZGxlcikoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJncyk7
Iik7CiAgICAgcHVzaChAYm9keSwgIiAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBDYWxsSGFu
ZGxlcj4gRGlzcGF0Y2hNYXA7Iik7CiAgICAgcHVzaChAYm9keSwgIiAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKERpc3BhdGNoTWFwLCBkaXNwYXRjaE1hcCwgKTsiKTsKICAgICBwdXNoKEBib2R5LCAi
ICAgIGlmIChkaXNwYXRjaE1hcC5pc0VtcHR5KCkpIHsiKTsKQEAgLTMyNiwzOCArMzk2LDM4IEBA
IHN1YiBnZW5lcmF0ZUJhY2tlbmREaXNwYXRjaGVyCiAgICAgcHVzaChAYm9keSwgIiAgICBSZWZQ
dHI8SW5zcGVjdG9yVmFsdWU+IHBhcnNlZE1lc3NhZ2UgPSBJbnNwZWN0b3JWYWx1ZTo6cGFyc2VK
U09OKG1lc3NhZ2UpOyIpOwogICAgIHB1c2goQGJvZHksICIgICAgaWYgKCFwYXJzZWRNZXNzYWdl
KSB7Iik7CiAgICAgcHVzaChAYm9keSwgIiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Iik7
Ci0gICAgcHVzaChAYm9keSwgIiAgICAgICAgZXhjZXB0aW9uID0gXCJFcnJvcjogSW52YWxpZCBt
ZXNzYWdlIGZvcm1hdC4gTWVzc2FnZSBzaG91bGQgYmUgaW4gSlNPTiBmb3JtYXQuXCI7Iik7Cisg
ICAgcHVzaChAYm9keSwgIiAgICAgICAgcHJvdG9jb2xFcnJvcigwLCBcImRpc3BhdGNoXCIsIFwi
RXJyb3I6IEludmFsaWQgbWVzc2FnZSBmb3JtYXQuIE1lc3NhZ2Ugc2hvdWxkIGJlIGluIEpTT04g
Zm9ybWF0LlwiKTsiKTsKICAgICBwdXNoKEBib2R5LCAiICAgICAgICByZXR1cm47Iik7CiAgICAg
cHVzaChAYm9keSwgIiAgICB9Iik7CiAgICAgcHVzaChAYm9keSwgIiIpOwogICAgIHB1c2goQGJv
ZHksICIgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBtZXNzYWdlQXJyYXkgPSBwYXJzZWRNZXNz
YWdlLT5hc0FycmF5KCk7Iik7CiAgICAgcHVzaChAYm9keSwgIiAgICBpZiAoIW1lc3NhZ2VBcnJh
eSkgeyIpOwogICAgIHB1c2goQGJvZHksICIgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyIp
OwotICAgIHB1c2goQGJvZHksICIgICAgICAgIGV4Y2VwdGlvbiA9IFwiRXJyb3I6IEludmFsaWQg
bWVzc2FnZSBmb3JtYXQuIFRoZSBtZXNzYWdlIHNob3VsZCBiZSBhIEpTT05pZmllZCBhcnJheSBv
ZiBhcmd1bWVudHMuXCI7Iik7CisgICAgcHVzaChAYm9keSwgIiAgICAgICAgcHJvdG9jb2xFcnJv
cigwLCBcImRpc3BhdGNoXCIsIFwiRXJyb3I6IEludmFsaWQgbWVzc2FnZSBmb3JtYXQuIFRoZSBt
ZXNzYWdlIHNob3VsZCBiZSBhIEpTT05pZmllZCBhcnJheSBvZiBhcmd1bWVudHMuXCIpOyIpOwog
ICAgIHB1c2goQGJvZHksICIgICAgICAgIHJldHVybjsiKTsKICAgICBwdXNoKEBib2R5LCAiICAg
IH0iKTsKICAgICBwdXNoKEBib2R5LCAiIik7CiAgICAgcHVzaChAYm9keSwgIiAgICBpZiAoIW1l
c3NhZ2VBcnJheS0+bGVuZ3RoKCkpIHsiKTsKICAgICBwdXNoKEBib2R5LCAiICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsiKTsKLSAgICBwdXNoKEBib2R5LCAiICAgICAgICBleGNlcHRpb24g
PSBcIkVycm9yOiBJbnZhbGlkIG1lc3NhZ2UgZm9ybWF0LiBFbXB0eSBtZXNzYWdlIHdhcyByZWNl
aXZlZC5cIjsiKTsKKyAgICBwdXNoKEBib2R5LCAiICAgICAgICBwcm90b2NvbEVycm9yKDAsIFwi
ZGlzcGF0Y2hcIiwgXCJFcnJvcjogSW52YWxpZCBtZXNzYWdlIGZvcm1hdC4gRW1wdHkgbWVzc2Fn
ZSB3YXMgcmVjZWl2ZWQuXCIpOyIpOwogICAgIHB1c2goQGJvZHksICIgICAgICAgIHJldHVybjsi
KTsKICAgICBwdXNoKEBib2R5LCAiICAgIH0iKTsKICAgICBwdXNoKEBib2R5LCAiIik7CiAgICAg
cHVzaChAYm9keSwgIiAgICBTdHJpbmcgbWV0aG9kTmFtZTsiKTsKICAgICBwdXNoKEBib2R5LCAi
ICAgIGlmICghbWVzc2FnZUFycmF5LT5nZXQoMCktPmFzU3RyaW5nKCZtZXRob2ROYW1lKSkgeyIp
OwogICAgIHB1c2goQGJvZHksICIgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyIpOwotICAg
IHB1c2goQGJvZHksICIgICAgICAgIGV4Y2VwdGlvbiA9IFwiRXJyb3I6IEludmFsaWQgbWVzc2Fn
ZSBmb3JtYXQuIFRoZSBmaXJzdCBlbGVtZW50IG9mIHRoZSBtZXNzYWdlIHNob3VsZCBiZSBtZXRo
b2QgbmFtZS5cIjsiKTsKKyAgICBwdXNoKEBib2R5LCAiICAgICAgICBwcm90b2NvbEVycm9yKDAs
IFwiZGlzcGF0Y2hcIiwgXCJFcnJvcjogSW52YWxpZCBtZXNzYWdlIGZvcm1hdC4gVGhlIGZpcnN0
IGVsZW1lbnQgb2YgdGhlIG1lc3NhZ2Ugc2hvdWxkIGJlIG1ldGhvZCBuYW1lLlwiKTsiKTsKICAg
ICBwdXNoKEBib2R5LCAiICAgICAgICByZXR1cm47Iik7CiAgICAgcHVzaChAYm9keSwgIiAgICB9
Iik7CiAgICAgcHVzaChAYm9keSwgIiIpOwogICAgIHB1c2goQGJvZHksICIgICAgSGFzaE1hcDxT
dHJpbmcsIENhbGxIYW5kbGVyPjo6aXRlcmF0b3IgaXQgPSBkaXNwYXRjaE1hcC5maW5kKG1ldGhv
ZE5hbWUpOyIpOwogICAgIHB1c2goQGJvZHksICIgICAgaWYgKGl0ID09IGRpc3BhdGNoTWFwLmVu
ZCgpKSB7Iik7CiAgICAgcHVzaChAYm9keSwgIiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Iik7Ci0gICAgcHVzaChAYm9keSwgIiAgICAgICAgZXhjZXB0aW9uID0gU3RyaW5nOjpmb3JtYXQo
XCJFcnJvcjogSW52YWxpZCBtZXRob2QgbmFtZS4gJyVzJyB3YXNuJ3QgZm91bmQuXCIsIG1ldGhv
ZE5hbWUudXRmOCgpLmRhdGEoKSk7Iik7CisgICAgcHVzaChAYm9keSwgIiAgICAgICAgcHJvdG9j
b2xFcnJvcigwLCBcImRpc3BhdGNoXCIsIFN0cmluZzo6Zm9ybWF0KFwiRXJyb3I6IEludmFsaWQg
bWV0aG9kIG5hbWUuICclcycgd2Fzbid0IGZvdW5kLlwiLCBtZXRob2ROYW1lLnV0ZjgoKS5kYXRh
KCkpKTsiKTsKICAgICBwdXNoKEBib2R5LCAiICAgICAgICByZXR1cm47Iik7CiAgICAgcHVzaChA
Ym9keSwgIiAgICB9Iik7CiAgICAgcHVzaChAYm9keSwgIiIpOwotICAgIHB1c2goQGJvZHksICIg
ICAgKCgqdGhpcykuKml0LT5zZWNvbmQpKG1lc3NhZ2VBcnJheSwgJmV4Y2VwdGlvbik7Iik7Cisg
ICAgcHVzaChAYm9keSwgIiAgICAoKCp0aGlzKS4qaXQtPnNlY29uZCkobWVzc2FnZUFycmF5KTsi
KTsKICAgICBwdXNoKEBib2R5LCAifSIpOwogICAgIHJldHVybiBAYm9keTsKIH0KZGlmZiAtLWdp
dCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5pZGwgYi9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3IuaWRsCmluZGV4IGRlYTFjZDAuLjVjYTQ2MDAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3Rvci5pZGwKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
LmlkbApAQCAtMzksNiArMzksNyBAQCBtb2R1bGUgY29yZSB7CiAgICAgICAgIFtub3RpZnldIHZv
aWQgY2hpbGROb2RlQ291bnRVcGRhdGVkKG91dCBsb25nIGlkLCBvdXQgaW50IG5ld1ZhbHVlKTsK
ICAgICAgICAgW25vdGlmeV0gdm9pZCBjaGlsZE5vZGVJbnNlcnRlZChvdXQgbG9uZyBwYXJlbnRJ
ZCwgb3V0IGxvbmcgcHJldklkLCBvdXQgT2JqZWN0IG5vZGUpOwogICAgICAgICBbbm90aWZ5XSB2
b2lkIGNoaWxkTm9kZVJlbW92ZWQob3V0IGxvbmcgcGFyZW50SWQsIG91dCBsb25nIGlkKTsKKyAg
ICAgICAgW25vdGlmeV0gdm9pZCBwcm90b2NvbEVycm9yKG91dCBsb25nIGNhbGxJZCwgb3V0IFN0
cmluZyBtZXRob2ROYW1lLCBvdXQgU3RyaW5nIGVycm9yVGV4dCk7CiAgICAgICAgIFtub3RpZnld
IHZvaWQgc2V0Q2hpbGROb2RlcyhvdXQgbG9uZyBwYXJlbnRJZCwgb3V0IEFycmF5IG5vZGVzKTsK
ICAgICAgICAgW25vdGlmeV0gdm9pZCBzZXREZXRhY2hlZFJvb3Qob3V0IE9iamVjdCByb290KTsK
ICAgICAgICAgW25vdGlmeV0gdm9pZCBzZXREb2N1bWVudChvdXQgVmFsdWUgcm9vdCk7CkBAIC03
NSw3ICs3Niw3IEBAIG1vZHVsZSBjb3JlIHsKICAgICAgICAgW2hhbmRsZXI9QmFja2VuZF0gdm9p
ZCBlbmFibGVEZWJ1Z2dlcihpbiBib29sZWFuIGFsd2F5cyk7CiAgICAgICAgIFtoYW5kbGVyPUNv
bnRyb2xsZXJdIHZvaWQgZGlzYWJsZURlYnVnZ2VyKGluIGJvb2xlYW4gYWx3YXlzKTsKIAotICAg
ICAgICBbaGFuZGxlcj1Db250cm9sbGVyXSB2b2lkIHNldEJyZWFrcG9pbnQoaW4gbG9uZyBjYWxs
SWQsIGluIFN0cmluZyBzb3VyY2VJRCwgaW4gdW5zaWduZWQgbG9uZyBsaW5lTnVtYmVyLCBpbiBi
b29sZWFuIGVuYWJsZWQsIGluIFN0cmluZyBjb25kaXRpb24pOworICAgICAgICBbaGFuZGxlcj1D
b250cm9sbGVyXSB2b2lkIHNldEJyZWFrcG9pbnQoaW4gbG9uZyBjYWxsSWQsIGluIFN0cmluZyBz
b3VyY2VJRCwgaW4gdW5zaWduZWQgaW50IGxpbmVOdW1iZXIsIGluIGJvb2xlYW4gZW5hYmxlZCwg
aW4gU3RyaW5nIGNvbmRpdGlvbiwgb3V0IGJvb2xlYW4gc3VjY2Vzcywgb3V0IHVuc2lnbmVkIGlu
dCBhY3R1YWxMaW5lTnVtYmVyKTsKICAgICAgICAgW2hhbmRsZXI9Q29udHJvbGxlcl0gdm9pZCBy
ZW1vdmVCcmVha3BvaW50KGluIFN0cmluZyBzb3VyY2VJRCwgaW4gdW5zaWduZWQgbG9uZyBsaW5l
TnVtYmVyKTsKICAgICAgICAgW2hhbmRsZXI9RGVidWddIHZvaWQgYWN0aXZhdGVCcmVha3BvaW50
cygpOwogICAgICAgICBbaGFuZGxlcj1EZWJ1Z10gdm9pZCBkZWFjdGl2YXRlQnJlYWtwb2ludHMo
KTsKQEAgLTExNiwxMyArMTE3LDEzIEBAIG1vZHVsZSBjb3JlIHsKICAgICAgICAgW2hhbmRsZXI9
RE9NXSB2b2lkIGdldENoaWxkTm9kZXMoaW4gbG9uZyBjYWxsSWQsIGluIGxvbmcgbm9kZUlkKTsK
ICAgICAgICAgW2hhbmRsZXI9RE9NLCBjdXN0b21SZXNwb25zZT1kaWRBcHBseURvbUNoYW5nZV0g
dm9pZCBzZXRBdHRyaWJ1dGUoaW4gbG9uZyBjYWxsSWQsIGluIGxvbmcgZWxlbWVudElkLCBpbiBT
dHJpbmcgbmFtZSwgaW4gU3RyaW5nIHZhbHVlLCBvdXQgYm9vbGVhbiBzdWNjZXNzKTsKICAgICAg
ICAgW2hhbmRsZXI9RE9NLCBjdXN0b21SZXNwb25zZT1kaWRBcHBseURvbUNoYW5nZV0gdm9pZCBy
ZW1vdmVBdHRyaWJ1dGUoaW4gbG9uZyBjYWxsSWQsIGluIGxvbmcgZWxlbWVudElkLCBpbiBTdHJp
bmcgbmFtZSwgb3V0IGJvb2xlYW4gc3VjY2Vzcyk7Ci0gICAgICAgIFtoYW5kbGVyPURPTV0gdm9p
ZCBzZXRUZXh0Tm9kZVZhbHVlKGluIGxvbmcgY2FsbElkLCBpbiBsb25nIG5vZGVJZCwgaW4gU3Ry
aW5nIHZhbHVlKTsKLSAgICAgICAgW2hhbmRsZXI9RE9NXSB2b2lkIGdldEV2ZW50TGlzdGVuZXJz
Rm9yTm9kZShpbiBsb25nIGNhbGxJZCwgaW4gbG9uZyBub2RlSWQsIG91dCBsb25nIG5vZGVJZCwg
b3V0IEFycmF5IGxpc3RlbmVyc0FycmF5KTsKKyAgICAgICAgW2hhbmRsZXI9RE9NLCBjdXN0b21S
ZXNwb25zZT1kaWRBcHBseURvbUNoYW5nZV0gdm9pZCBzZXRUZXh0Tm9kZVZhbHVlKGluIGxvbmcg
Y2FsbElkLCBpbiBsb25nIG5vZGVJZCwgaW4gU3RyaW5nIHZhbHVlLCBvdXQgYm9vbGVhbiBzdWNj
ZXNzKTsKKyAgICAgICAgW2hhbmRsZXI9RE9NXSB2b2lkIGdldEV2ZW50TGlzdGVuZXJzRm9yTm9k
ZShpbiBsb25nIGNhbGxJZCwgaW4gbG9uZyBub2RlSWQsIG91dCBsb25nIG91dE5vZGVJZCwgb3V0
IEFycmF5IGxpc3RlbmVyc0FycmF5KTsKICAgICAgICAgW2hhbmRsZXI9RE9NXSB2b2lkIGNvcHlO
b2RlKGluIGxvbmcgbm9kZUlkKTsKLSAgICAgICAgW2hhbmRsZXI9RE9NXSB2b2lkIHJlbW92ZU5v
ZGUoaW4gbG9uZyBjYWxsSWQsIGluIGxvbmcgbm9kZUlkLCBvdXQgbG9uZyBub2RlSWQpOwotICAg
ICAgICBbaGFuZGxlcj1ET01dIHZvaWQgY2hhbmdlVGFnTmFtZShpbiBsb25nIGNhbGxJZCwgaW4g
bG9uZyBub2RlSWQsIGluIFN0cmluZyBuZXdUYWdOYW1lLCBvdXQgbG9uZyBub2RlSWQpOworICAg
ICAgICBbaGFuZGxlcj1ET01dIHZvaWQgcmVtb3ZlTm9kZShpbiBsb25nIGNhbGxJZCwgaW4gbG9u
ZyBub2RlSWQsIG91dCBsb25nIG91dE5vZGVJZCk7CisgICAgICAgIFtoYW5kbGVyPURPTV0gdm9p
ZCBjaGFuZ2VUYWdOYW1lKGluIGxvbmcgY2FsbElkLCBpbiBsb25nIG5vZGVJZCwgaW4gU3RyaW5n
IG5ld1RhZ05hbWUsIG91dCBsb25nIG91dE5vZGVJZCk7CiAgICAgICAgIFtoYW5kbGVyPURPTV0g
dm9pZCBnZXRPdXRlckhUTUwoaW4gbG9uZyBjYWxsSWQsIGluIGxvbmcgbm9kZUlkLCBvdXQgU3Ry
aW5nIG91dGVySFRNTCk7Ci0gICAgICAgIFtoYW5kbGVyPURPTV0gdm9pZCBzZXRPdXRlckhUTUwo
aW4gbG9uZyBjYWxsSWQsIGluIGxvbmcgbm9kZUlkLCBpbiBTdHJpbmcgb3V0ZXJIVE1MLCBvdXQg
bG9uZyBub2RlSWQpOworICAgICAgICBbaGFuZGxlcj1ET01dIHZvaWQgc2V0T3V0ZXJIVE1MKGlu
IGxvbmcgY2FsbElkLCBpbiBsb25nIG5vZGVJZCwgaW4gU3RyaW5nIG91dGVySFRNTCwgb3V0IGxv
bmcgb3V0Tm9kZUlkKTsKICAgICAgICAgW2hhbmRsZXI9RE9NXSB2b2lkIGFkZEluc3BlY3RlZE5v
ZGUoaW4gbG9uZyBub2RlSWQpOwogICAgICAgICBbaGFuZGxlcj1ET01dIHZvaWQgcGVyZm9ybVNl
YXJjaChpbiBTdHJpbmcgcXVlcnksIGluIGJvb2xlYW4gcnVuU3luY2hyb25vdXNseSk7CiAgICAg
ICAgIFtoYW5kbGVyPURPTV0gdm9pZCBzZWFyY2hDYW5jZWxlZCgpOwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JCYWNrZW5kLmNwcAppbmRleCBhNDUxMzI5Li5lYzdlZDk2IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmNwcAorKysgYi9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JCYWNrZW5kLmNwcApAQCAtNzQsMjIgKzc0LDE3IEBAIHZvaWQgSW5zcGVj
dG9yQmFja2VuZDo6dGFrZUhlYXBTbmFwc2hvdCgpCiAgICAgU2NyaXB0UHJvZmlsZXI6OnRha2VI
ZWFwU25hcHNob3QoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JCYWNrZW5kOjpnZXRQcm9maWxlckxv
Z0xpbmVzKGxvbmcgY2FsbElkLCBsb25nIHBvc2l0aW9uKQordm9pZCBJbnNwZWN0b3JCYWNrZW5k
OjpnZXRQcm9maWxlckxvZ0xpbmVzKGxvbmcsIGxvbmcgcG9zaXRpb24sIGxvbmcqIG91dFBvc2l0
aW9uLCBTdHJpbmcqIGRhdGEpCiB7CiAgICAgLy8gRklYTUU6IHdlIHNob3VsZCBtYWtlIGluc3Bl
Y3RvciBkaXNwYXRjaGVyIHBsdWdnYWJsZSwgc28gdGhhdCBlbWJlZGRlcnMgY291bGQgY29udHJp
YnV0ZSBBUElzIGluc3RlYWQgb2YgcG9sbHV0aW5nIHRoZSBjb3JlIG9uZQogICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MzM1NwotICAgIGlmIChSZW1vdGVJ
bnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQgPSByZW1vdGVGcm9udGVuZCgpKSB7Ci0gICAgICAg
IFN0cmluZyBkYXRhOwotICAgICAgICBpbnQgb3V0UG9zaXRpb24gPSBTY3JpcHRQcm9maWxlcjo6
Z2V0UHJvZmlsZXJMb2dMaW5lcyhwb3NpdGlvbiwgJmRhdGEpOwotICAgICAgICBmcm9udGVuZC0+
ZGlkR2V0UHJvZmlsZXJMb2dMaW5lcyhjYWxsSWQsIG91dFBvc2l0aW9uLCBkYXRhKTsKLSAgICB9
CisgICAgKm91dFBvc2l0aW9uID0gU2NyaXB0UHJvZmlsZXI6OmdldFByb2ZpbGVyTG9nTGluZXMo
cG9zaXRpb24sIGRhdGEpOwogfQogI2VuZGlmCiAKIHZvaWQgSW5zcGVjdG9yQmFja2VuZDo6c2V0
SW5qZWN0ZWRTY3JpcHRTb3VyY2UoY29uc3QgU3RyaW5nJiBzb3VyY2UpCiB7Ci0gICAgaWYgKG1f
aW5zcGVjdG9yQ29udHJvbGxlcikKLSAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbmpl
Y3RlZFNjcmlwdEhvc3QoKS0+c2V0SW5qZWN0ZWRTY3JpcHRTb3VyY2Uoc291cmNlKTsKKyAgICAg
bV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbmplY3RlZFNjcmlwdEhvc3QoKS0+c2V0SW5qZWN0ZWRT
Y3JpcHRTb3VyY2Uoc291cmNlKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JCYWNrZW5kOjpkaXNwYXRj
aE9uSW5qZWN0ZWRTY3JpcHQobG9uZyBjYWxsSWQsIGxvbmcgaW5qZWN0ZWRTY3JpcHRJZCwgY29u
c3QgU3RyaW5nJiBtZXRob2ROYW1lLCBjb25zdCBTdHJpbmcmIGFyZ3VtZW50cywgYm9vbCBhc3lu
YykKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaCBiL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaAppbmRleCA3ZjRiNTAwLi5jZWUyMWM2
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmgKKysrIGIv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5oCkBAIC02Miw3ICs2Miw3IEBAIHB1
YmxpYzoKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKICAgICB2b2lkIGVuYWJsZURl
YnVnZ2VyKGJvb2wgYWx3YXlzKTsKICAgICB2b2lkIHRha2VIZWFwU25hcHNob3QoKTsKLSAgICB2
b2lkIGdldFByb2ZpbGVyTG9nTGluZXMobG9uZyBjYWxsSWQsIGxvbmcgcG9zaXRpb24pOworICAg
IHZvaWQgZ2V0UHJvZmlsZXJMb2dMaW5lcyhsb25nIGNhbGxJZCwgbG9uZyBwb3NpdGlvbiwgbG9u
Zyogb3V0UG9zaXRpb24sIFN0cmluZyogZGF0YSk7CiAjZW5kaWYKIAogICAgIHZvaWQgc2V0SW5q
ZWN0ZWRTY3JpcHRTb3VyY2UoY29uc3QgU3RyaW5nJiBzb3VyY2UpOwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTU3RvcmUuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQ1NTU3RvcmUuY3BwCmluZGV4IGQwOTgyMzAuLjE2ZDI1MDggMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU1N0b3JlLmNwcAorKysgYi9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JDU1NTdG9yZS5jcHAKQEAgLTgxLDcgKzgxLDcgQEAgdm9pZCBJbnNw
ZWN0b3JDU1NTdG9yZTo6cmVtb3ZlRG9jdW1lbnQoRG9jdW1lbnQqIGRvYykKICAgICBtX2RvY3Vt
ZW50Tm9kZVRvSW5zcGVjdG9yU3R5bGVTaGVldE1hcC5yZW1vdmUoZG9jKTsKIH0KIAotQ1NTU3R5
bGVTaGVldCogSW5zcGVjdG9yQ1NTU3RvcmU6Omluc3BlY3RvclN0eWxlU2hlZXQoRG9jdW1lbnQq
IG93bmVyRG9jdW1lbnQsIGJvb2wgY3JlYXRlSWZBYnNlbnQsIGxvbmcgY2FsbElkKQorQ1NTU3R5
bGVTaGVldCogSW5zcGVjdG9yQ1NTU3RvcmU6Omluc3BlY3RvclN0eWxlU2hlZXQoRG9jdW1lbnQq
IG93bmVyRG9jdW1lbnQsIGJvb2wgY3JlYXRlSWZBYnNlbnQpCiB7CiAgICAgRG9jdW1lbnRUb1N0
eWxlU2hlZXRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9kb2N1bWVudE5vZGVUb0luc3BlY3RvclN0eWxl
U2hlZXRNYXAuZmluZChvd25lckRvY3VtZW50KTsKICAgICBpZiAoaXQgIT0gbV9kb2N1bWVudE5v
ZGVUb0luc3BlY3RvclN0eWxlU2hlZXRNYXAuZW5kKCkpCkBAIC05NCwxNiArOTQsMTIgQEAgQ1NT
U3R5bGVTaGVldCogSW5zcGVjdG9yQ1NTU3RvcmU6Omluc3BlY3RvclN0eWxlU2hlZXQoRG9jdW1l
bnQqIG93bmVyRG9jdW1lbnQsIGIKICAgICAgICAgc3R5bGVFbGVtZW50LT5zZXRBdHRyaWJ1dGUo
InR5cGUiLCAidGV4dC9jc3MiLCBlYyk7CiAgICAgaWYgKCFlYykKICAgICAgICAgb3duZXJEb2N1
bWVudC0+aGVhZCgpLT5hcHBlbmRDaGlsZChzdHlsZUVsZW1lbnQsIGVjKTsKLSAgICBpZiAoZWMp
IHsKLSAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5yZW1vdGVJbnNwZWN0b3JGcm9udGVu
ZCgpLT5kaWRBZGRSdWxlKGNhbGxJZCwgSW5zcGVjdG9yVmFsdWU6Om51bGwoKSwgZmFsc2UpOwor
ICAgIGlmIChlYykKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQogICAgIFN0eWxlU2hlZXRMaXN0
KiBzdHlsZVNoZWV0cyA9IG93bmVyRG9jdW1lbnQtPnN0eWxlU2hlZXRzKCk7CiAgICAgU3R5bGVT
aGVldCogc3R5bGVTaGVldCA9IHN0eWxlU2hlZXRzLT5pdGVtKHN0eWxlU2hlZXRzLT5sZW5ndGgo
KSAtIDEpOwotICAgIGlmICghc3R5bGVTaGVldC0+aXNDU1NTdHlsZVNoZWV0KCkpIHsKLSAgICAg
ICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5yZW1vdGVJbnNwZWN0b3JGcm9udGVuZCgpLT5kaWRB
ZGRSdWxlKGNhbGxJZCwgSW5zcGVjdG9yVmFsdWU6Om51bGwoKSwgZmFsc2UpOworICAgIGlmICgh
c3R5bGVTaGVldC0+aXNDU1NTdHlsZVNoZWV0KCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIH0K
ICAgICBDU1NTdHlsZVNoZWV0KiBpbnNwZWN0b3JTdHlsZVNoZWV0ID0gc3RhdGljX2Nhc3Q8Q1NT
U3R5bGVTaGVldCo+KHN0eWxlU2hlZXQpOwogICAgIG1fZG9jdW1lbnROb2RlVG9JbnNwZWN0b3JT
dHlsZVNoZWV0TWFwLnNldChvd25lckRvY3VtZW50LCBpbnNwZWN0b3JTdHlsZVNoZWV0KTsKICAg
ICByZXR1cm4gaW5zcGVjdG9yU3R5bGVTaGVldDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckNTU1N0b3JlLmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NT
dG9yZS5oCmluZGV4IDRmN2RmMDAuLjU2OTEyMDEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckNTU1N0b3JlLmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
Q1NTU3RvcmUuaApAQCAtNzEsNyArNzEsNyBAQCBwdWJsaWM6CiAgICAgQ1NTU3R5bGVTaGVldCog
c3R5bGVTaGVldEZvcklkKGxvbmcgc3R5bGVTaGVldElkKTsKICAgICBDU1NTdHlsZVJ1bGUqIHJ1
bGVGb3JJZChsb25nIHN0eWxlUnVsZUlkKTsKICAgICBEaXNhYmxlZFN0eWxlRGVjbGFyYXRpb24q
IGRpc2FibGVkU3R5bGVGb3JJZChsb25nIHN0eWxlSWQsIGJvb2wgY3JlYXRlSWZBYnNlbnQpOwot
ICAgIENTU1N0eWxlU2hlZXQqIGluc3BlY3RvclN0eWxlU2hlZXQoRG9jdW1lbnQqIG93bmVyRG9j
dW1lbnQsIGJvb2wgY3JlYXRlSWZBYnNlbnQsIGxvbmcgY2FsbElkKTsKKyAgICBDU1NTdHlsZVNo
ZWV0KiBpbnNwZWN0b3JTdHlsZVNoZWV0KERvY3VtZW50KiBvd25lckRvY3VtZW50LCBib29sIGNy
ZWF0ZUlmQWJzZW50KTsKICAgICB2b2lkIHJlbW92ZURvY3VtZW50KERvY3VtZW50Kik7CiAKICAg
ICBsb25nIGJpbmRSdWxlKENTU1N0eWxlUnVsZSogcnVsZSk7CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNvbnRyb2xsZXIuY3BwCmluZGV4IDBlYWNmMjguLmRlYjIwMzkgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCisrKyBiL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCkBAIC0xODYsNyArMTg2LDcgQEAgSW5z
cGVjdG9yQ29udHJvbGxlcjo6SW5zcGVjdG9yQ29udHJvbGxlcihQYWdlKiBwYWdlLCBJbnNwZWN0
b3JDbGllbnQqIGNsaWVudCkKICAgICAsIG1fcmVzb3VyY2VUcmFja2luZ0VuYWJsZWQoZmFsc2Up
CiAgICAgLCBtX3NldHRpbmdzTG9hZGVkKGZhbHNlKQogICAgICwgbV9pbnNwZWN0b3JCYWNrZW5k
KEluc3BlY3RvckJhY2tlbmQ6OmNyZWF0ZSh0aGlzKSkKLSAgICAsIG1faW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXIobmV3IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKG1faW5zcGVjdG9yQmFj
a2VuZC5nZXQoKSkpCisgICAgLCBtX2luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKG5ldyBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcih0aGlzKSkKICAgICAsIG1faW5qZWN0ZWRTY3JpcHRIb3N0
KEluamVjdGVkU2NyaXB0SG9zdDo6Y3JlYXRlKHRoaXMpKQogI2lmIEVOQUJMRShKQVZBU0NSSVBU
X0RFQlVHR0VSKQogICAgICwgbV9kZWJ1Z2dlckVuYWJsZWQoZmFsc2UpCkBAIC0xNTMxLDI2ICsx
NTMxLDIxIEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6Y2xlYXJQcm9maWxlcygpCiAgICAg
bV9uZXh0VXNlckluaXRpYXRlZFByb2ZpbGVOdW1iZXIgPSAxOwogfQogCi12b2lkIEluc3BlY3Rv
ckNvbnRyb2xsZXI6OmdldFByb2ZpbGVIZWFkZXJzKGxvbmcgY2FsbElkKQordm9pZCBJbnNwZWN0
b3JDb250cm9sbGVyOjpnZXRQcm9maWxlSGVhZGVycyhsb25nLCBSZWZQdHI8SW5zcGVjdG9yQXJy
YXk+KiBoZWFkZXJzKQogewotICAgIGlmICghbV9yZW1vdGVGcm9udGVuZCkKLSAgICAgICAgcmV0
dXJuOwotICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcmVzdWx0ID0gSW5zcGVjdG9yQXJyYXk6
OmNyZWF0ZSgpOworICAgICpoZWFkZXJzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwogICAg
IFByb2ZpbGVzTWFwOjppdGVyYXRvciBwcm9maWxlc0VuZCA9IG1fcHJvZmlsZXMuZW5kKCk7CiAg
ICAgZm9yIChQcm9maWxlc01hcDo6aXRlcmF0b3IgaXQgPSBtX3Byb2ZpbGVzLmJlZ2luKCk7IGl0
ICE9IHByb2ZpbGVzRW5kOyArK2l0KQotICAgICAgICByZXN1bHQtPnB1c2goY3JlYXRlUHJvZmls
ZUhlYWRlcigqaXQtPnNlY29uZCkpOwotICAgIG1fcmVtb3RlRnJvbnRlbmQtPmRpZEdldFByb2Zp
bGVIZWFkZXJzKGNhbGxJZCwgcmVzdWx0KTsKKyAgICAgICAgKCpoZWFkZXJzKS0+cHVzaChjcmVh
dGVQcm9maWxlSGVhZGVyKCppdC0+c2Vjb25kKSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ29udHJv
bGxlcjo6Z2V0UHJvZmlsZShsb25nIGNhbGxJZCwgdW5zaWduZWQgdWlkKQordm9pZCBJbnNwZWN0
b3JDb250cm9sbGVyOjpnZXRQcm9maWxlKGxvbmcsIHVuc2lnbmVkIHVpZCwgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4qIHByb2ZpbGVPYmplY3QpCiB7Ci0gICAgaWYgKCFtX2Zyb250ZW5kKQotICAg
ICAgICByZXR1cm47CisgICAgKnByb2ZpbGVPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpOwogICAgIFByb2ZpbGVzTWFwOjppdGVyYXRvciBpdCA9IG1fcHJvZmlsZXMuZmluZCh1aWQp
OwogICAgIGlmIChpdCAhPSBtX3Byb2ZpbGVzLmVuZCgpKSB7Ci0gICAgICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHByb2ZpbGVPYmplY3QgPSBjcmVhdGVQcm9maWxlSGVhZGVyKCppdC0+c2Vj
b25kKTsKLSAgICAgICAgcHJvZmlsZU9iamVjdC0+c2V0KCJoZWFkIiwgaXQtPnNlY29uZC0+YnVp
bGRJbnNwZWN0b3JPYmplY3RGb3JIZWFkKCkpOwotICAgICAgICBtX3JlbW90ZUZyb250ZW5kLT5k
aWRHZXRQcm9maWxlKGNhbGxJZCwgcHJvZmlsZU9iamVjdCk7CisgICAgICAgICpwcm9maWxlT2Jq
ZWN0ID0gY3JlYXRlUHJvZmlsZUhlYWRlcigqaXQtPnNlY29uZCk7CisgICAgICAgICgqcHJvZmls
ZU9iamVjdCktPnNldCgiaGVhZCIsIGl0LT5zZWNvbmQtPmJ1aWxkSW5zcGVjdG9yT2JqZWN0Rm9y
SGVhZCgpKTsKICAgICB9CiB9CiAKQEAgLTE3MTgsMjIgKzE3MTMsMTYgQEAgdm9pZCBJbnNwZWN0
b3JDb250cm9sbGVyOjpkaXNhYmxlRGVidWdnZXIoYm9vbCBhbHdheXMpCiAgICAgICAgIG1fZnJv
bnRlbmQtPmRlYnVnZ2VyV2FzRGlzYWJsZWQoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDb250cm9s
bGVyOjplZGl0U2NyaXB0U291cmNlKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIHNvdXJjZUlE
LCBjb25zdCBTdHJpbmcmIG5ld0NvbnRlbnQpCit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmVk
aXRTY3JpcHRTb3VyY2UobG9uZywgY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgY29uc3QgU3RyaW5n
JiBuZXdDb250ZW50LCBib29sKiBzdWNjZXNzLCBTdHJpbmcqIHJlc3VsdCwgUmVmUHRyPEluc3Bl
Y3RvclZhbHVlPiogbmV3Q2FsbEZyYW1lcykKIHsKLSAgICBTdHJpbmcgcmVzdWx0OwotICAgIGJv
b2wgc3VjY2VzcyA9IFNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5lZGl0U2NyaXB0U291cmNl
KHNvdXJjZUlELCBuZXdDb250ZW50LCByZXN1bHQpOwotICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1
ZT4gY2FsbEZyYW1lczsKLSAgICBpZiAoc3VjY2VzcykKLSAgICAgICAgY2FsbEZyYW1lcyA9IGN1
cnJlbnRDYWxsRnJhbWVzKCk7Ci0gICAgbV9yZW1vdGVGcm9udGVuZC0+ZGlkRWRpdFNjcmlwdFNv
dXJjZShjYWxsSWQsIHN1Y2Nlc3MsIHJlc3VsdCwgY2FsbEZyYW1lcy5nZXQoKSk7CisgICAgKm5l
d0NhbGxGcmFtZXMgPSBJbnNwZWN0b3JWYWx1ZTo6bnVsbCgpOworICAgIGlmICgqc3VjY2VzcyA9
IFNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5lZGl0U2NyaXB0U291cmNlKHNvdXJjZUlELCBu
ZXdDb250ZW50LCAqcmVzdWx0KSkKKyAgICAgICAgKm5ld0NhbGxGcmFtZXMgPSBjdXJyZW50Q2Fs
bEZyYW1lcygpOwogfQogCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmdldFNjcmlwdFNvdXJj
ZShsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBzb3VyY2VJRCkKK3ZvaWQgSW5zcGVjdG9yQ29u
dHJvbGxlcjo6Z2V0U2NyaXB0U291cmNlKGxvbmcsIGNvbnN0IFN0cmluZyYgc291cmNlSUQsIFN0
cmluZyogc2NyaXB0U291cmNlKQogewotICAgIGlmICghbV9mcm9udGVuZCkKLSAgICAgICAgcmV0
dXJuOwotICAgIFN0cmluZyBzY3JpcHRTb3VyY2UgPSBtX3NjcmlwdElEVG9Db250ZW50LmdldChz
b3VyY2VJRCk7Ci0gICAgbV9yZW1vdGVGcm9udGVuZC0+ZGlkR2V0U2NyaXB0U291cmNlKGNhbGxJ
ZCwgc2NyaXB0U291cmNlKTsKKyAgICAqc2NyaXB0U291cmNlID0gbV9zY3JpcHRJRFRvQ29udGVu
dC5nZXQoc291cmNlSUQpOwogfQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnJlc3VtZSgp
CkBAIC0xNzYyLDI3ICsxNzUxLDI1IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IEluc3Bl
Y3RvckNvbnRyb2xsZXI6OmN1cnJlbnRDYWxsRnJhbWVzKCkKICAgICByZXR1cm4gaW5qZWN0ZWRT
Y3JpcHQuY2FsbEZyYW1lcygpOwogfQogCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNldEJy
ZWFrcG9pbnQobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgc291cmNlSUQsIHVuc2lnbmVkIGxp
bmVOdW1iZXIsIGJvb2wgZW5hYmxlZCwgY29uc3QgU3RyaW5nJiBjb25kaXRpb24pCit2b2lkIElu
c3BlY3RvckNvbnRyb2xsZXI6OnNldEJyZWFrcG9pbnQobG9uZywgY29uc3QgU3RyaW5nJiBzb3Vy
Y2VJRCwgdW5zaWduZWQgbGluZU51bWJlciwgYm9vbCBlbmFibGVkLCBjb25zdCBTdHJpbmcmIGNv
bmRpdGlvbiwgYm9vbCogc3VjY2VzcywgdW5zaWduZWQgaW50KiBhY3R1YWxMaW5lTnVtYmVyKQog
ewogICAgIFNjcmlwdEJyZWFrcG9pbnQgYnJlYWtwb2ludChlbmFibGVkLCBjb25kaXRpb24pOwot
ICAgIHVuc2lnbmVkIGFjdHVhbExpbmVOdW1iZXIgPSAwOwotICAgIGJvb2wgc3VjY2VzcyA9IFNj
cmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5zZXRCcmVha3BvaW50KHNvdXJjZUlELCBicmVha3Bv
aW50LCBsaW5lTnVtYmVyLCAmYWN0dWFsTGluZU51bWJlcik7Ci0gICAgbV9mcm9udGVuZC0+ZGlk
U2V0QnJlYWtwb2ludChjYWxsSWQsIHN1Y2Nlc3MsIGFjdHVhbExpbmVOdW1iZXIpOwotICAgIGlm
ICghc3VjY2VzcykKKyAgICAqc3VjY2VzcyA9IFNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5z
ZXRCcmVha3BvaW50KHNvdXJjZUlELCBicmVha3BvaW50LCBsaW5lTnVtYmVyLCBhY3R1YWxMaW5l
TnVtYmVyKTsKKyAgICBpZiAoISpzdWNjZXNzKQogICAgICAgICByZXR1cm47CiAKICAgICBTdHJp
bmcgdXJsID0gbV9zb3VyY2VJRFRvVVJMLmdldChzb3VyY2VJRCk7CiAgICAgaWYgKHVybC5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFN0cmluZyBicmVha3BvaW50SWQgPSBmb3Jt
YXRCcmVha3BvaW50SWQoc291cmNlSUQsIGFjdHVhbExpbmVOdW1iZXIpOwotICAgIG1fYnJlYWtw
b2ludHNNYXBwaW5nLnNldChicmVha3BvaW50SWQsIGFjdHVhbExpbmVOdW1iZXIpOworICAgIFN0
cmluZyBicmVha3BvaW50SWQgPSBmb3JtYXRCcmVha3BvaW50SWQoc291cmNlSUQsICphY3R1YWxM
aW5lTnVtYmVyKTsKKyAgICBtX2JyZWFrcG9pbnRzTWFwcGluZy5zZXQoYnJlYWtwb2ludElkLCAq
YWN0dWFsTGluZU51bWJlcik7CiAKICAgICBTdHJpbmcga2V5ID0gbWQ1QmFzZTE2KHVybCk7CiAg
ICAgSGFzaE1hcDxTdHJpbmcsIFNvdXJjZUJyZWFrcG9pbnRzPjo6aXRlcmF0b3IgaXQgPSBtX3N0
aWNreUJyZWFrcG9pbnRzLmZpbmQoa2V5KTsKICAgICBpZiAoaXQgPT0gbV9zdGlja3lCcmVha3Bv
aW50cy5lbmQoKSkKICAgICAgICAgaXQgPSBtX3N0aWNreUJyZWFrcG9pbnRzLnNldChrZXksIFNv
dXJjZUJyZWFrcG9pbnRzKCkpLmZpcnN0OwotICAgIGl0LT5zZWNvbmQuc2V0KGFjdHVhbExpbmVO
dW1iZXIsIGJyZWFrcG9pbnQpOworICAgIGl0LT5zZWNvbmQuc2V0KCphY3R1YWxMaW5lTnVtYmVy
LCBicmVha3BvaW50KTsKICAgICBzYXZlQnJlYWtwb2ludHMoKTsKIH0KIApAQCAtMjE1NiwxNCAr
MjE0MywxMCBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnJlbW92ZUFsbFNjcmlwdHNUb0V2
YWx1YXRlT25Mb2FkKCkKICAgICBtX3NjcmlwdHNUb0V2YWx1YXRlT25Mb2FkLmNsZWFyKCk7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6Z2V0UmVzb3VyY2VDb250ZW50KGxvbmcgY2Fs
bElkLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpCit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6
OmdldFJlc291cmNlQ29udGVudChsb25nLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIFN0cmlu
ZyogY29udGVudCkKIHsKLSAgICBpZiAoIW1fcmVtb3RlRnJvbnRlbmQpCi0gICAgICAgIHJldHVy
bjsKLQogICAgIFJlZlB0cjxJbnNwZWN0b3JSZXNvdXJjZT4gcmVzb3VyY2UgPSBtX3Jlc291cmNl
cy5nZXQoaWRlbnRpZmllcik7Ci0gICAgU3RyaW5nIGNvbnRlbnQgPSByZXNvdXJjZSA/IHJlc291
cmNlLT5zb3VyY2VTdHJpbmcoKSA6IFN0cmluZygpOwotICAgIG1fcmVtb3RlRnJvbnRlbmQtPmRp
ZEdldFJlc291cmNlQ29udGVudChjYWxsSWQsIGNvbnRlbnQpOworICAgICpjb250ZW50ID0gcmVz
b3VyY2UgPyByZXNvdXJjZS0+c291cmNlU3RyaW5nKCkgOiBTdHJpbmcoKTsKIH0KIAogdm9pZCBJ
bnNwZWN0b3JDb250cm9sbGVyOjpyZWxvYWRQYWdlKCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckNvbnRyb2xsZXIuaAppbmRleCBlYWU1ZDE2Li4xYzUzZGE0IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQ29udHJvbGxlci5oCkBAIC0xMjEsNiArMTIxLDcgQEAgcHVibGljOgogCiAgICAg
SW5zcGVjdG9yQmFja2VuZCogaW5zcGVjdG9yQmFja2VuZCgpIHsgcmV0dXJuIG1faW5zcGVjdG9y
QmFja2VuZC5nZXQoKTsgfQogICAgIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBpbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcigpIHsgcmV0dXJuIG1faW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXIuZ2V0KCk7IH0KKyAgICBJbnNwZWN0b3JDbGllbnQqIGluc3BlY3RvckNsaWVudCgpIHsgcmV0
dXJuIG1fY2xpZW50OyB9CiAgICAgSW5qZWN0ZWRTY3JpcHRIb3N0KiBpbmplY3RlZFNjcmlwdEhv
c3QoKSB7IHJldHVybiBtX2luamVjdGVkU2NyaXB0SG9zdC5nZXQoKTsgfQogCiAgICAgdm9pZCBp
bnNwZWN0ZWRQYWdlRGVzdHJveWVkKCk7CkBAIC0yNjMsOCArMjY0LDggQEAgcHVibGljOgogICAg
IHZvaWQgZGlzYWJsZURlYnVnZ2VyKGJvb2wgYWx3YXlzID0gZmFsc2UpOwogICAgIGJvb2wgZGVi
dWdnZXJFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1Z2dlckVuYWJsZWQ7IH0KIAotICAg
IHZvaWQgZWRpdFNjcmlwdFNvdXJjZShsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBzb3VyY2VJ
RCwgY29uc3QgU3RyaW5nJiBuZXdDb250ZW50KTsKLSAgICB2b2lkIGdldFNjcmlwdFNvdXJjZShs
b25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBzb3VyY2VJRCk7CisgICAgdm9pZCBlZGl0U2NyaXB0
U291cmNlKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIHNvdXJjZUlELCBjb25zdCBTdHJpbmcm
IG5ld0NvbnRlbnQsIGJvb2wqIHN1Y2Nlc3MsIFN0cmluZyogcmVzdWx0LCBSZWZQdHI8SW5zcGVj
dG9yVmFsdWU+KiBuZXdDYWxsRnJhbWVzKTsKKyAgICB2b2lkIGdldFNjcmlwdFNvdXJjZShsb25n
IGNhbGxJZCwgY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgU3RyaW5nKiBzY3JpcHRTb3VyY2UpOwog
CiAgICAgdm9pZCByZXN1bWUoKTsKICAgICB2b2lkIHNldFBhdXNlT25FeGNlcHRpb25zU3RhdGUo
bG9uZyBwYXVzZVN0YXRlKTsKQEAgLTMwOCw3ICszMDksNyBAQCBwcml2YXRlOgogI2lmIEVOQUJM
RShKQVZBU0NSSVBUX0RFQlVHR0VSKQogICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGN1
cnJlbnRDYWxsRnJhbWVzKCk7CiAKLSAgICB2b2lkIHNldEJyZWFrcG9pbnQobG9uZyBjYWxsSWQs
IGNvbnN0IFN0cmluZyYgc291cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIGJvb2wgZW5hYmxl
ZCwgY29uc3QgU3RyaW5nJiBjb25kaXRpb24pOworICAgIHZvaWQgc2V0QnJlYWtwb2ludChsb25n
IGNhbGxJZCwgY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgdW5zaWduZWQgbGluZU51bWJlciwgYm9v
bCBlbmFibGVkLCBjb25zdCBTdHJpbmcmIGNvbmRpdGlvbiwgYm9vbCogc3VjY2VzcywgdW5zaWdu
ZWQgaW50KiBhY3R1YWxMaW5lTnVtYmVyKTsKICAgICB2b2lkIHJlbW92ZUJyZWFrcG9pbnQoY29u
c3QgU3RyaW5nJiBzb3VyY2VJRCwgdW5zaWduZWQgbGluZU51bWJlcik7CiAKICAgICB0eXBlZGVm
IEhhc2hNYXA8dW5zaWduZWQgaW50LCBSZWZQdHI8U2NyaXB0UHJvZmlsZT4gPiBQcm9maWxlc01h
cDsKQEAgLTMxNiw4ICszMTcsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgc3RhcnRVc2VySW5pdGlh
dGVkUHJvZmlsaW5nU29vbigpOwogICAgIHZvaWQgdG9nZ2xlUmVjb3JkQnV0dG9uKGJvb2wpOwog
ICAgIHZvaWQgZW5hYmxlRGVidWdnZXJGcm9tRnJvbnRlbmQoYm9vbCBhbHdheXMpOwotICAgIHZv
aWQgZ2V0UHJvZmlsZUhlYWRlcnMobG9uZyBjYWxsSWQpOwotICAgIHZvaWQgZ2V0UHJvZmlsZShs
b25nIGNhbGxJZCwgdW5zaWduZWQgdWlkKTsKKyAgICB2b2lkIGdldFByb2ZpbGVIZWFkZXJzKGxv
bmcgY2FsbElkLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBoZWFkZXJzKTsKKyAgICB2b2lkIGdl
dFByb2ZpbGUobG9uZyBjYWxsSWQsIHVuc2lnbmVkIHVpZCwgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4qIHByb2ZpbGVPYmplY3QpOwogICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBjcmVh
dGVQcm9maWxlSGVhZGVyKGNvbnN0IFNjcmlwdFByb2ZpbGUmIHByb2ZpbGUpOwogI2VuZGlmCiAj
aWYgRU5BQkxFKERBVEFCQVNFKQpAQCAtMzM4LDcgKzMzOSw3IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBhZGRSZXNvdXJjZShJbnNwZWN0b3JSZXNvdXJjZSopOwogICAgIHZvaWQgcmVtb3ZlUmVzb3Vy
Y2UoSW5zcGVjdG9yUmVzb3VyY2UqKTsKICAgICBJbnNwZWN0b3JSZXNvdXJjZSogZ2V0VHJhY2tl
ZFJlc291cmNlKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcik7Ci0gICAgdm9pZCBnZXRSZXNvdXJj
ZUNvbnRlbnQobG9uZyBjYWxsSWQsIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcik7CisgICAgdm9p
ZCBnZXRSZXNvdXJjZUNvbnRlbnQobG9uZyBjYWxsSWQsIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmll
ciwgU3RyaW5nKiBjb250ZW50KTsKIAogICAgIHZvaWQgcHJ1bmVSZXNvdXJjZXMoUmVzb3VyY2Vz
TWFwKiwgRG9jdW1lbnRMb2FkZXIqIGxvYWRlclRvS2VlcCA9IDApOwogICAgIHZvaWQgcmVtb3Zl
QWxsUmVzb3VyY2VzKFJlc291cmNlc01hcCogbWFwKSB7IHBydW5lUmVzb3VyY2VzKG1hcCk7IH0K
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcCBiL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAppbmRleCAwNzU5NDRhLi4wMjNh
MTUyIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAK
KysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCkBAIC00MzIsNzIg
KzQzMiw2MCBAQCBsb25nIEluc3BlY3RvckRPTUFnZW50OjpwdXNoTm9kZVBhdGhUb0Zyb250ZW5k
KE5vZGUqIG5vZGVUb1B1c2gpCiAgICAgcmV0dXJuIG1hcC0+Z2V0KG5vZGVUb1B1c2gpOwogfQog
Ci12b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRBdHRyaWJ1dGUobG9uZyBjYWxsSWQsIGxvbmcg
ZWxlbWVudElkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCit2b2lk
IEluc3BlY3RvckRPTUFnZW50OjpzZXRBdHRyaWJ1dGUobG9uZywgbG9uZyBlbGVtZW50SWQsIGNv
bnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCogc3VjY2VzcykKIHsK
KyAgICAqc3VjY2VzcyA9IGZhbHNlOwogICAgIE5vZGUqIG5vZGUgPSBub2RlRm9ySWQoZWxlbWVu
dElkKTsKICAgICBpZiAobm9kZSAmJiAobm9kZS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpFTEVNRU5U
X05PREUpKSB7CiAgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50
Kj4obm9kZSk7CiAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgICAgICBlbGVtZW50
LT5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUsIGVjKTsKLSAgICAgICAgbV9mcm9udGVuZC0+ZGlk
QXBwbHlEb21DaGFuZ2UoY2FsbElkLCBlYyA9PSAwKTsKLSAgICB9IGVsc2UgewotICAgICAgICBt
X2Zyb250ZW5kLT5kaWRBcHBseURvbUNoYW5nZShjYWxsSWQsIGZhbHNlKTsKKyAgICAgICAgKnN1
Y2Nlc3MgPSBlYyA9PSAwOwogICAgIH0KIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cmVt
b3ZlQXR0cmlidXRlKGxvbmcgY2FsbElkLCBsb25nIGVsZW1lbnRJZCwgY29uc3QgU3RyaW5nJiBu
YW1lKQordm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cmVtb3ZlQXR0cmlidXRlKGxvbmcsIGxvbmcg
ZWxlbWVudElkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHN1Y2Nlc3MpCiB7CisgICAgKnN1
Y2Nlc3MgPSBmYWxzZTsKICAgICBOb2RlKiBub2RlID0gbm9kZUZvcklkKGVsZW1lbnRJZCk7CiAg
ICAgaWYgKG5vZGUgJiYgKG5vZGUtPm5vZGVUeXBlKCkgPT0gTm9kZTo6RUxFTUVOVF9OT0RFKSkg
ewogICAgICAgICBFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUp
OwogICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICAgICAgZWxlbWVudC0+cmVtb3Zl
QXR0cmlidXRlKG5hbWUsIGVjKTsKLSAgICAgICAgbV9mcm9udGVuZC0+ZGlkQXBwbHlEb21DaGFu
Z2UoY2FsbElkLCBlYyA9PSAwKTsKLSAgICB9IGVsc2UgewotICAgICAgICBtX2Zyb250ZW5kLT5k
aWRBcHBseURvbUNoYW5nZShjYWxsSWQsIGZhbHNlKTsKKyAgICAgICAgKnN1Y2Nlc3MgPSBlYyA9
PSAwOwogICAgIH0KIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cmVtb3ZlTm9kZShsb25n
IGNhbGxJZCwgbG9uZyBub2RlSWQpCit2b2lkIEluc3BlY3RvckRPTUFnZW50OjpyZW1vdmVOb2Rl
KGxvbmcsIGxvbmcgbm9kZUlkLCBsb25nKiBvdXROb2RlSWQpCiB7CisgICAgKm91dE5vZGVJZCA9
IDA7CiAgICAgTm9kZSogbm9kZSA9IG5vZGVGb3JJZChub2RlSWQpOwotICAgIGlmICghbm9kZSkg
ewotICAgICAgICBtX2Zyb250ZW5kLT5kaWRSZW1vdmVOb2RlKGNhbGxJZCwgMCk7CisgICAgaWYg
KCFub2RlKQogICAgICAgICByZXR1cm47Ci0gICAgfQogCiAgICAgTm9kZSogcGFyZW50Tm9kZSA9
IG5vZGUtPnBhcmVudE5vZGUoKTsKLSAgICBpZiAoIXBhcmVudE5vZGUpIHsKLSAgICAgICAgbV9m
cm9udGVuZC0+ZGlkUmVtb3ZlTm9kZShjYWxsSWQsIDApOworICAgIGlmICghcGFyZW50Tm9kZSkK
ICAgICAgICAgcmV0dXJuOwotICAgIH0KIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAg
IHBhcmVudE5vZGUtPnJlbW92ZUNoaWxkKG5vZGUsIGVjKTsKLSAgICBpZiAoZWMpIHsKLSAgICAg
ICAgbV9mcm9udGVuZC0+ZGlkUmVtb3ZlTm9kZShjYWxsSWQsIDApOworICAgIGlmIChlYykKICAg
ICAgICAgcmV0dXJuOwotICAgIH0KIAotICAgIG1fZnJvbnRlbmQtPmRpZFJlbW92ZU5vZGUoY2Fs
bElkLCBub2RlSWQpOworICAgICpvdXROb2RlSWQgPSBub2RlSWQ7CiB9CiAKLXZvaWQgSW5zcGVj
dG9yRE9NQWdlbnQ6OmNoYW5nZVRhZ05hbWUobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkLCBjb25z
dCBTdHJpbmcmIHRhZ05hbWUpCit2b2lkIEluc3BlY3RvckRPTUFnZW50OjpjaGFuZ2VUYWdOYW1l
KGxvbmcsIGxvbmcgbm9kZUlkLCBjb25zdCBTdHJpbmcmIHRhZ05hbWUsIGxvbmcqIG5ld0lkKQog
eworICAgICpuZXdJZCA9IDA7CiAgICAgTm9kZSogb2xkTm9kZSA9IG5vZGVGb3JJZChub2RlSWQp
OwotICAgIGlmICghb2xkTm9kZSB8fCAhb2xkTm9kZS0+aXNFbGVtZW50Tm9kZSgpKSB7Ci0gICAg
ICAgIG1fZnJvbnRlbmQtPmRpZENoYW5nZVRhZ05hbWUoY2FsbElkLCAwKTsKKyAgICBpZiAoIW9s
ZE5vZGUgfHwgIW9sZE5vZGUtPmlzRWxlbWVudE5vZGUoKSkKICAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIGJvb2wgY2hpbGRyZW5SZXF1ZXN0ZWQgPSBtX2NoaWxkcmVuUmVxdWVzdGVkLmNv
bnRhaW5zKG5vZGVJZCk7CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBSZWZQdHI8
RWxlbWVudD4gbmV3RWxlbSA9IG9sZE5vZGUtPmRvY3VtZW50KCktPmNyZWF0ZUVsZW1lbnQodGFn
TmFtZSwgZWMpOwotICAgIGlmIChlYykgewotICAgICAgICBtX2Zyb250ZW5kLT5kaWRDaGFuZ2VU
YWdOYW1lKGNhbGxJZCwgMCk7CisgICAgaWYgKGVjKQogICAgICAgICByZXR1cm47Ci0gICAgfQog
CiAgICAgLy8gQ29weSBvdmVyIHRoZSBvcmlnaW5hbCBub2RlJ3MgYXR0cmlidXRlcy4KICAgICBF
bGVtZW50KiBvbGRFbGVtID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG9sZE5vZGUpOwpAQCAtNTE1
LDM2ICs1MDMsMjkgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Y2hhbmdlVGFnTmFtZShsb25n
IGNhbGxJZCwgbG9uZyBub2RlSWQsIGNvbnN0IFN0cmluZyYgdGEKICAgICBwYXJlbnQtPmluc2Vy
dEJlZm9yZShuZXdFbGVtLCBvbGROb2RlLT5uZXh0U2libGluZygpLCBlYyk7CiAgICAgcGFyZW50
LT5yZW1vdmVDaGlsZChvbGROb2RlLCBlYyk7CiAKLSAgICBpZiAoZWMpIHsKLSAgICAgICAgbV9m
cm9udGVuZC0+ZGlkQ2hhbmdlVGFnTmFtZShjYWxsSWQsIDApOworICAgIGlmIChlYykKICAgICAg
ICAgcmV0dXJuOwotICAgIH0KIAotICAgIGxvbmcgbmV3SWQgPSBwdXNoTm9kZVBhdGhUb0Zyb250
ZW5kKG5ld0VsZW0uZ2V0KCkpOwotICAgIGlmIChjaGlsZHJlblJlcXVlc3RlZCkKLSAgICAgICAg
cHVzaENoaWxkTm9kZXNUb0Zyb250ZW5kKG5ld0lkKTsKLSAgICBtX2Zyb250ZW5kLT5kaWRDaGFu
Z2VUYWdOYW1lKGNhbGxJZCwgbmV3SWQpOworICAgICpuZXdJZCA9IHB1c2hOb2RlUGF0aFRvRnJv
bnRlbmQobmV3RWxlbS5nZXQoKSk7CisgICAgaWYgKG1fY2hpbGRyZW5SZXF1ZXN0ZWQuY29udGFp
bnMobm9kZUlkKSkKKyAgICAgICAgcHVzaENoaWxkTm9kZXNUb0Zyb250ZW5kKCpuZXdJZCk7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldE91dGVySFRNTChsb25nIGNhbGxJZCwgbG9u
ZyBub2RlSWQpCit2b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRPdXRlckhUTUwobG9uZywgbG9u
ZyBub2RlSWQsIFdlYkNvcmU6OlN0cmluZyogb3V0ZXJIVE1MKQogewogICAgIE5vZGUqIG5vZGUg
PSBub2RlRm9ySWQobm9kZUlkKTsKLSAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPmlzSFRNTEVsZW1l
bnQoKSkgewotICAgICAgICBtX2Zyb250ZW5kLT5kaWRHZXRPdXRlckhUTUwoY2FsbElkLCAiIik7
CisgICAgaWYgKCFub2RlIHx8ICFub2RlLT5pc0hUTUxFbGVtZW50KCkpCiAgICAgICAgIHJldHVy
bjsKLSAgICB9CiAKLSAgICBIVE1MRWxlbWVudCogaHRtbEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxI
VE1MRWxlbWVudCo+KG5vZGUpOwotICAgIG1fZnJvbnRlbmQtPmRpZEdldE91dGVySFRNTChjYWxs
SWQsIGh0bWxFbGVtZW50LT5vdXRlckhUTUwoKSk7CisgICAgKm91dGVySFRNTCA9IHN0YXRpY19j
YXN0PEhUTUxFbGVtZW50Kj4obm9kZSktPm91dGVySFRNTCgpOwogfQogCi12b2lkIEluc3BlY3Rv
ckRPTUFnZW50OjpzZXRPdXRlckhUTUwobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkLCBjb25zdCBT
dHJpbmcmIG91dGVySFRNTCkKK3ZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldE91dGVySFRNTChs
b25nLCBsb25nIG5vZGVJZCwgY29uc3QgU3RyaW5nJiBvdXRlckhUTUwsIGxvbmcqIG5ld0lkKQog
eworICAgICpuZXdJZCA9IDA7CiAgICAgTm9kZSogbm9kZSA9IG5vZGVGb3JJZChub2RlSWQpOwot
ICAgIGlmICghbm9kZSB8fCAhbm9kZS0+aXNIVE1MRWxlbWVudCgpKSB7Ci0gICAgICAgIG1fZnJv
bnRlbmQtPmRpZFNldE91dGVySFRNTChjYWxsSWQsIDApOworICAgIGlmICghbm9kZSB8fCAhbm9k
ZS0+aXNIVE1MRWxlbWVudCgpKQogICAgICAgICByZXR1cm47Ci0gICAgfQogCiAgICAgYm9vbCBj
aGlsZHJlblJlcXVlc3RlZCA9IG1fY2hpbGRyZW5SZXF1ZXN0ZWQuY29udGFpbnMobm9kZUlkKTsK
ICAgICBOb2RlKiBwcmV2aW91c1NpYmxpbmcgPSBub2RlLT5wcmV2aW91c1NpYmxpbmcoKTsKQEAg
LTU1NCw0MSArNTM1LDM3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldE91dGVySFRNTChs
b25nIGNhbGxJZCwgbG9uZyBub2RlSWQsIGNvbnN0IFN0cmluZyYgb3V0CiAgICAgRXhjZXB0aW9u
Q29kZSBlYyA9IDA7CiAgICAgaHRtbEVsZW1lbnQtPnNldE91dGVySFRNTChvdXRlckhUTUwsIGVj
KTsKICAgICBpZiAoZWMpCi0gICAgICAgIG1fZnJvbnRlbmQtPmRpZFNldE91dGVySFRNTChjYWxs
SWQsIDApOworICAgICAgICByZXR1cm47CiAKICAgICBOb2RlKiBuZXdOb2RlID0gcHJldmlvdXNT
aWJsaW5nID8gcHJldmlvdXNTaWJsaW5nLT5uZXh0U2libGluZygpIDogcGFyZW50Tm9kZS0+Zmly
c3RDaGlsZCgpOwogCi0gICAgbG9uZyBuZXdJZCA9IHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQobmV3
Tm9kZSk7CisgICAgKm5ld0lkID0gcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChuZXdOb2RlKTsKICAg
ICBpZiAoY2hpbGRyZW5SZXF1ZXN0ZWQpCi0gICAgICAgIHB1c2hDaGlsZE5vZGVzVG9Gcm9udGVu
ZChuZXdJZCk7Ci0KLSAgICBtX2Zyb250ZW5kLT5kaWRTZXRPdXRlckhUTUwoY2FsbElkLCBuZXdJ
ZCk7CisgICAgICAgIHB1c2hDaGlsZE5vZGVzVG9Gcm9udGVuZCgqbmV3SWQpOwogfQogCi12b2lk
IEluc3BlY3RvckRPTUFnZW50OjpzZXRUZXh0Tm9kZVZhbHVlKGxvbmcgY2FsbElkLCBsb25nIG5v
ZGVJZCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3ZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldFRl
eHROb2RlVmFsdWUobG9uZywgbG9uZyBub2RlSWQsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wq
IHN1Y2Nlc3MpCiB7CisgICAgKnN1Y2Nlc3MgPSBmYWxzZTsKICAgICBOb2RlKiBub2RlID0gbm9k
ZUZvcklkKG5vZGVJZCk7CiAgICAgaWYgKG5vZGUgJiYgKG5vZGUtPm5vZGVUeXBlKCkgPT0gTm9k
ZTo6VEVYVF9OT0RFKSkgewogICAgICAgICBUZXh0KiB0ZXh0X25vZGUgPSBzdGF0aWNfY2FzdDxU
ZXh0Kj4obm9kZSk7CiAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgICAgICB0ZXh0
X25vZGUtPnJlcGxhY2VXaG9sZVRleHQodmFsdWUsIGVjKTsKLSAgICAgICAgbV9mcm9udGVuZC0+
ZGlkQXBwbHlEb21DaGFuZ2UoY2FsbElkLCBlYyA9PSAwKTsKLSAgICB9IGVsc2UgewotICAgICAg
ICBtX2Zyb250ZW5kLT5kaWRBcHBseURvbUNoYW5nZShjYWxsSWQsIGZhbHNlKTsKKyAgICAgICAg
KnN1Y2Nlc3MgPSBlYyA9PSAwOwogICAgIH0KIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6
Z2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2RlKGxvbmcgY2FsbElkLCBsb25nIG5vZGVJZCkKK3ZvaWQg
SW5zcGVjdG9yRE9NQWdlbnQ6OmdldEV2ZW50TGlzdGVuZXJzRm9yTm9kZShsb25nLCBsb25nIG5v
ZGVJZCwgbG9uZyogb3V0Tm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBsaXN0ZW5lcnNB
cnJheSkKIHsKICAgICBOb2RlKiBub2RlID0gbm9kZUZvcklkKG5vZGVJZCk7Ci0gICAgUmVmUHRy
PEluc3BlY3RvckFycmF5PiBsaXN0ZW5lcnNBcnJheSA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUo
KTsKKyAgICAqbGlzdGVuZXJzQXJyYXkgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAg
Km91dE5vZGVJZCA9IG5vZGVJZDsKICAgICBFdmVudFRhcmdldERhdGEqIGQ7CiAKICAgICAvLyBR
dWljayBicmVhayBpZiBhIG51bGwgbm9kZSBvciBubyBsaXN0ZW5lcnMgYXQgYWxsCi0gICAgaWYg
KCFub2RlIHx8ICEoZCA9IG5vZGUtPmV2ZW50VGFyZ2V0RGF0YSgpKSkgewotICAgICAgICBtX2Zy
b250ZW5kLT5kaWRHZXRFdmVudExpc3RlbmVyc0Zvck5vZGUoY2FsbElkLCBub2RlSWQsIGxpc3Rl
bmVyc0FycmF5LnJlbGVhc2UoKSk7CisgICAgaWYgKCFub2RlIHx8ICEoZCA9IG5vZGUtPmV2ZW50
VGFyZ2V0RGF0YSgpKSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAogICAgIC8vIEdldCB0aGUg
bGlzdCBvZiBldmVudCB0eXBlcyB0aGlzIE5vZGUgaXMgY29uY2VybmVkIHdpdGgKICAgICBWZWN0
b3I8QXRvbWljU3RyaW5nPiBldmVudFR5cGVzOwpAQCAtNTk5LDEwICs1NzYsOCBAQCB2b2lkIElu
c3BlY3RvckRPTUFnZW50OjpnZXRFdmVudExpc3RlbmVyc0Zvck5vZGUobG9uZyBjYWxsSWQsIGxv
bmcgbm9kZUlkKQogCiAgICAgLy8gUXVpY2sgYnJlYWsgaWYgbm8gdXNlZnVsIGxpc3RlbmVycwog
ICAgIHNpemVfdCBldmVudFR5cGVzTGVuZ3RoID0gZXZlbnRUeXBlcy5zaXplKCk7Ci0gICAgaWYg
KGV2ZW50VHlwZXNMZW5ndGggPT0gMCkgewotICAgICAgICBtX2Zyb250ZW5kLT5kaWRHZXRFdmVu
dExpc3RlbmVyc0Zvck5vZGUoY2FsbElkLCBub2RlSWQsIGxpc3RlbmVyc0FycmF5LnJlbGVhc2Uo
KSk7CisgICAgaWYgKGV2ZW50VHlwZXNMZW5ndGggPT0gMCkKICAgICAgICAgcmV0dXJuOwotICAg
IH0KIAogICAgIC8vIFRoZSBOb2RlJ3MgRXZlbnQgQW5jZXN0b3JzIChub3QgaW5jbHVkaW5nIHNl
bGYpCiAgICAgVmVjdG9yPFJlZlB0cjxDb250YWluZXJOb2RlPiA+IGFuY2VzdG9yczsKQEAgLTYz
Myw3ICs2MDgsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRFdmVudExpc3RlbmVyc0Zv
ck5vZGUobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkKQogICAgICAgICBmb3IgKHNpemVfdCBqID0g
MDsgaiA8IHZlY3Rvci5zaXplKCk7ICsraikgewogICAgICAgICAgICAgY29uc3QgUmVnaXN0ZXJl
ZEV2ZW50TGlzdGVuZXImIGxpc3RlbmVyID0gdmVjdG9yW2pdOwogICAgICAgICAgICAgaWYgKGxp
c3RlbmVyLnVzZUNhcHR1cmUpCi0gICAgICAgICAgICAgICAgbGlzdGVuZXJzQXJyYXktPnB1c2go
YnVpbGRPYmplY3RGb3JFdmVudExpc3RlbmVyKGxpc3RlbmVyLCBpbmZvLmV2ZW50VHlwZSwgaW5m
by5ub2RlKSk7CisgICAgICAgICAgICAgICAgKCpsaXN0ZW5lcnNBcnJheSktPnB1c2goYnVpbGRP
YmplY3RGb3JFdmVudExpc3RlbmVyKGxpc3RlbmVyLCBpbmZvLmV2ZW50VHlwZSwgaW5mby5ub2Rl
KSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTY0NCwxMSArNjE5LDkgQEAgdm9pZCBJbnNwZWN0
b3JET01BZ2VudDo6Z2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2RlKGxvbmcgY2FsbElkLCBsb25nIG5v
ZGVJZCkKICAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCB2ZWN0b3Iuc2l6ZSgpOyArK2op
IHsKICAgICAgICAgICAgIGNvbnN0IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyJiBsaXN0ZW5lciA9
IHZlY3RvcltqXTsKICAgICAgICAgICAgIGlmICghbGlzdGVuZXIudXNlQ2FwdHVyZSkKLSAgICAg
ICAgICAgICAgICBsaXN0ZW5lcnNBcnJheS0+cHVzaChidWlsZE9iamVjdEZvckV2ZW50TGlzdGVu
ZXIobGlzdGVuZXIsIGluZm8uZXZlbnRUeXBlLCBpbmZvLm5vZGUpKTsKKyAgICAgICAgICAgICAg
ICAoKmxpc3RlbmVyc0FycmF5KS0+cHVzaChidWlsZE9iamVjdEZvckV2ZW50TGlzdGVuZXIobGlz
dGVuZXIsIGluZm8uZXZlbnRUeXBlLCBpbmZvLm5vZGUpKTsKICAgICAgICAgfQogICAgIH0KLQot
ICAgIG1fZnJvbnRlbmQtPmRpZEdldEV2ZW50TGlzdGVuZXJzRm9yTm9kZShjYWxsSWQsIG5vZGVJ
ZCwgbGlzdGVuZXJzQXJyYXkucmVsZWFzZSgpKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JET01BZ2Vu
dDo6YWRkSW5zcGVjdGVkTm9kZShsb25nIG5vZGVJZCkKQEAgLTEwMDYsMTkgKzk3OSwxNiBAQCB2
b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaWRNb2RpZnlET01BdHRyKEVsZW1lbnQqIGVsZW1lbnQp
CiAgICAgbV9mcm9udGVuZC0+YXR0cmlidXRlc1VwZGF0ZWQoaWQsIGJ1aWxkQXJyYXlGb3JFbGVt
ZW50QXR0cmlidXRlcyhlbGVtZW50KSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6Omdl
dFN0eWxlcyhsb25nIGNhbGxJZCwgbG9uZyBub2RlSWQsIGJvb2wgYXV0aG9yT25seSkKK3ZvaWQg
SW5zcGVjdG9yRE9NQWdlbnQ6OmdldFN0eWxlcyhsb25nLCBsb25nIG5vZGVJZCwgYm9vbCBhdXRo
b3JPbmx5LCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiBzdHlsZXMpCiB7CisgICAgKnN0eWxlcyA9
IEluc3BlY3RvclZhbHVlOjpudWxsKCk7CiAgICAgTm9kZSogbm9kZSA9IG5vZGVGb3JJZChub2Rl
SWQpOwotICAgIGlmICghbm9kZSB8fCBub2RlLT5ub2RlVHlwZSgpICE9IE5vZGU6OkVMRU1FTlRf
Tk9ERSkgewotICAgICAgICBtX2Zyb250ZW5kLT5kaWRHZXRTdHlsZXMoY2FsbElkLCBJbnNwZWN0
b3JWYWx1ZTo6bnVsbCgpKTsKKyAgICBpZiAoIW5vZGUgfHwgbm9kZS0+bm9kZVR5cGUoKSAhPSBO
b2RlOjpFTEVNRU5UX05PREUpCiAgICAgICAgIHJldHVybjsKLSAgICB9CiAKICAgICBET01XaW5k
b3cqIGRlZmF1bHRWaWV3ID0gbm9kZS0+b3duZXJEb2N1bWVudCgpLT5kZWZhdWx0VmlldygpOwot
ICAgIGlmICghZGVmYXVsdFZpZXcpIHsKLSAgICAgICAgbV9mcm9udGVuZC0+ZGlkR2V0U3R5bGVz
KGNhbGxJZCwgSW5zcGVjdG9yVmFsdWU6Om51bGwoKSk7CisgICAgaWYgKCFkZWZhdWx0VmlldykK
ICAgICAgICAgcmV0dXJuOwotICAgIH0KIAogICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNf
Y2FzdDxFbGVtZW50Kj4obm9kZSk7CiAgICAgUmVmUHRyPENTU0NvbXB1dGVkU3R5bGVEZWNsYXJh
dGlvbj4gY29tcHV0ZWRTdHlsZUluZm8gPSBjb21wdXRlZFN0eWxlKG5vZGUsIHRydWUpOyAvLyBT
dXBwb3J0IHRoZSB2aWV3aW5nIG9mIDp2aXNpdGVkIGluZm9ybWF0aW9uIGluIGNvbXB1dGVkIHN0
eWxlLgpAQCAtMTA1MCwxMCArMTAyMCwxMCBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRT
dHlsZXMobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkLCBib29sIGF1dGhvck9ubHkpCiAgICAgICAg
IHBhcmVudEVsZW1lbnQgPSBwYXJlbnRFbGVtZW50LT5wYXJlbnRFbGVtZW50KCk7CiAgICAgICAg
IGN1cnJlbnRTdHlsZSA9IHBhcmVudFN0eWxlOwogICAgIH0KLSAgICBtX2Zyb250ZW5kLT5kaWRH
ZXRTdHlsZXMoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpKTsKKyAgICAqc3R5bGVzID0gcmVzdWx0
LnJlbGVhc2UoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0QWxsU3R5bGVzKGxv
bmcgY2FsbElkKQordm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0QWxsU3R5bGVzKGxvbmcsIFJl
ZlB0cjxJbnNwZWN0b3JBcnJheT4qIHN0eWxlcykKIHsKICAgICBSZWZQdHI8SW5zcGVjdG9yQXJy
YXk+IHJlc3VsdCA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKICAgICBmb3IgKExpc3RIYXNo
U2V0PFJlZlB0cjxEb2N1bWVudD4gPjo6aXRlcmF0b3IgaXQgPSBtX2RvY3VtZW50cy5iZWdpbigp
OyBpdCAhPSBtX2RvY3VtZW50cy5lbmQoKTsgKytpdCkgewpAQCAtMTA2NCwyNyArMTAzNCwyNSBA
QCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRBbGxTdHlsZXMobG9uZyBjYWxsSWQpCiAgICAg
ICAgICAgICAgICAgcmVzdWx0LT5wdXNoKGJ1aWxkT2JqZWN0Rm9yU3R5bGVTaGVldCgoKml0KS5n
ZXQoKSwgc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldCo+KHN0eWxlU2hlZXQpKSk7CiAgICAgICAg
IH0KICAgICB9Ci0gICAgbV9mcm9udGVuZC0+ZGlkR2V0QWxsU3R5bGVzKGNhbGxJZCwgcmVzdWx0
LnJlbGVhc2UoKSk7CisgICAgKnN0eWxlcyA9IHJlc3VsdC5yZWxlYXNlKCk7CiB9CiAKLXZvaWQg
SW5zcGVjdG9yRE9NQWdlbnQ6OmdldFN0eWxlU2hlZXQobG9uZyBjYWxsSWQsIGxvbmcgc3R5bGVT
aGVldElkKQordm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0U3R5bGVTaGVldChsb25nLCBsb25n
IHN0eWxlU2hlZXRJZCwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogc3R5bGVTaGVldE9iamVjdCkK
IHsKKyAgICAqc3R5bGVTaGVldE9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAg
ICAgQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCA9IGNzc1N0b3JlKCktPnN0eWxlU2hlZXRGb3JJ
ZChzdHlsZVNoZWV0SWQpOwogICAgIGlmIChzdHlsZVNoZWV0ICYmIHN0eWxlU2hlZXQtPmRvYygp
KQotICAgICAgICBtX2Zyb250ZW5kLT5kaWRHZXRTdHlsZVNoZWV0KGNhbGxJZCwgYnVpbGRPYmpl
Y3RGb3JTdHlsZVNoZWV0KHN0eWxlU2hlZXQtPmRvYygpLCBzdHlsZVNoZWV0KSk7Ci0gICAgZWxz
ZQotICAgICAgICBtX2Zyb250ZW5kLT5kaWRHZXRTdHlsZVNoZWV0KGNhbGxJZCwgSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKSk7CisgICAgICAgICpzdHlsZVNoZWV0T2JqZWN0ID0gYnVpbGRPYmpl
Y3RGb3JTdHlsZVNoZWV0KHN0eWxlU2hlZXQtPmRvYygpLCBzdHlsZVNoZWV0KTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0UnVsZVJhbmdlcyhsb25nIGNhbGxJZCwgbG9uZyBzdHls
ZVNoZWV0SWQpCit2b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRSdWxlUmFuZ2VzKGxvbmcsIGxv
bmcgc3R5bGVTaGVldElkLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiBydWxlUmFuZ2UpCiB7Cisg
ICAgKnJ1bGVSYW5nZSA9IEluc3BlY3RvclZhbHVlOjpudWxsKCk7CiAgICAgQ1NTU3R5bGVTaGVl
dCogc3R5bGVTaGVldCA9IGNzc1N0b3JlKCktPnN0eWxlU2hlZXRGb3JJZChzdHlsZVNoZWV0SWQp
OwogICAgIGlmIChzdHlsZVNoZWV0ICYmIHN0eWxlU2hlZXQtPmRvYygpKSB7CiAgICAgICAgIEhh
c2hNYXA8bG9uZywgU291cmNlUmFuZ2U+IHJ1bGVSYW5nZXMgPSBjc3NTdG9yZSgpLT5nZXRSdWxl
UmFuZ2VzKHN0eWxlU2hlZXQpOwotICAgICAgICBpZiAoIXJ1bGVSYW5nZXMuc2l6ZSgpKSB7Ci0g
ICAgICAgICAgICBtX2Zyb250ZW5kLT5kaWRHZXRTdHlsZVNoZWV0KGNhbGxJZCwgSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKSk7CisgICAgICAgIGlmICghcnVsZVJhbmdlcy5zaXplKCkpCiAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgZm9yIChIYXNo
TWFwPGxvbmcsIFNvdXJjZVJhbmdlPjo6aXRlcmF0b3IgaXQgPSBydWxlUmFuZ2VzLmJlZ2luKCk7
IGl0ICE9IHJ1bGVSYW5nZXMuZW5kKCk7ICsraXQpIHsKICAgICAgICAgICAgIGlmIChpdC0+c2Vj
b25kLnNlY29uZCkgewpAQCAtMTA5NiwzOSArMTA2NCwzMiBAQCB2b2lkIEluc3BlY3RvckRPTUFn
ZW50OjpnZXRSdWxlUmFuZ2VzKGxvbmcgY2FsbElkLCBsb25nIHN0eWxlU2hlZXRJZCkKICAgICAg
ICAgICAgICAgICBib2R5UmFuZ2UtPnNldE51bWJlcigiZW5kIiwgaXQtPnNlY29uZC5zZWNvbmQp
OwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIG1fZnJvbnRlbmQtPmRpZEdldFJ1
bGVSYW5nZXMoY2FsbElkLCByZXN1bHQpOwotICAgIH0gZWxzZQotICAgICAgICBtX2Zyb250ZW5k
LT5kaWRHZXRSdWxlUmFuZ2VzKGNhbGxJZCwgSW5zcGVjdG9yVmFsdWU6Om51bGwoKSk7CisgICAg
ICAgICpydWxlUmFuZ2UgPSByZXN1bHQucmVsZWFzZSgpOworICAgIH0KIH0KIAotdm9pZCBJbnNw
ZWN0b3JET01BZ2VudDo6Z2V0SW5saW5lU3R5bGUobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkKQor
dm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0SW5saW5lU3R5bGUobG9uZywgbG9uZyBub2RlSWQs
IFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHN0eWxlKQogeworICAgICpzdHlsZSA9IEluc3BlY3Rv
clZhbHVlOjpudWxsKCk7CiAgICAgTm9kZSogbm9kZSA9IG5vZGVGb3JJZChub2RlSWQpOwotICAg
IGlmICghbm9kZSB8fCBub2RlLT5ub2RlVHlwZSgpICE9IE5vZGU6OkVMRU1FTlRfTk9ERSkgewot
ICAgICAgICBtX2Zyb250ZW5kLT5kaWRHZXRJbmxpbmVTdHlsZShjYWxsSWQsIEluc3BlY3RvclZh
bHVlOjpudWxsKCkpOworICAgIGlmICghbm9kZSB8fCBub2RlLT5ub2RlVHlwZSgpICE9IE5vZGU6
OkVMRU1FTlRfTk9ERSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBFbGVtZW50KiBlbGVt
ZW50ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpOwotICAgIG1fZnJvbnRlbmQtPmRpZEdl
dElubGluZVN0eWxlKGNhbGxJZCwgYnVpbGRPYmplY3RGb3JTdHlsZShlbGVtZW50LT5zdHlsZSgp
LCB0cnVlKSk7CisgICAgKnN0eWxlID0gYnVpbGRPYmplY3RGb3JTdHlsZShzdGF0aWNfY2FzdDxF
bGVtZW50Kj4obm9kZSktPnN0eWxlKCksIHRydWUpOwogfQogCi12b2lkIEluc3BlY3RvckRPTUFn
ZW50OjpnZXRDb21wdXRlZFN0eWxlKGxvbmcgY2FsbElkLCBsb25nIG5vZGVJZCkKK3ZvaWQgSW5z
cGVjdG9yRE9NQWdlbnQ6OmdldENvbXB1dGVkU3R5bGUobG9uZywgbG9uZyBub2RlSWQsIFJlZlB0
cjxJbnNwZWN0b3JWYWx1ZT4qIHN0eWxlKQogeworICAgICpzdHlsZSA9IEluc3BlY3RvclZhbHVl
OjpudWxsKCk7CiAgICAgTm9kZSogbm9kZSA9IG5vZGVGb3JJZChub2RlSWQpOwotICAgIGlmICgh
bm9kZSB8fCBub2RlLT5ub2RlVHlwZSgpICE9IE5vZGU6OkVMRU1FTlRfTk9ERSkgewotICAgICAg
ICBtX2Zyb250ZW5kLT5kaWRHZXRDb21wdXRlZFN0eWxlKGNhbGxJZCwgSW5zcGVjdG9yVmFsdWU6
Om51bGwoKSk7CisgICAgaWYgKCFub2RlIHx8IG5vZGUtPm5vZGVUeXBlKCkgIT0gTm9kZTo6RUxF
TUVOVF9OT0RFKQogICAgICAgICByZXR1cm47Ci0gICAgfQogCiAgICAgRE9NV2luZG93KiBkZWZh
dWx0VmlldyA9IG5vZGUtPm93bmVyRG9jdW1lbnQoKS0+ZGVmYXVsdFZpZXcoKTsKLSAgICBpZiAo
IWRlZmF1bHRWaWV3KSB7Ci0gICAgICAgIG1fZnJvbnRlbmQtPmRpZEdldENvbXB1dGVkU3R5bGUo
Y2FsbElkLCBJbnNwZWN0b3JWYWx1ZTo6bnVsbCgpKTsKKyAgICBpZiAoIWRlZmF1bHRWaWV3KQog
ICAgICAgICByZXR1cm47Ci0gICAgfQogCiAgICAgRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19j
YXN0PEVsZW1lbnQqPihub2RlKTsKLSAgICBSZWZQdHI8Q1NTU3R5bGVEZWNsYXJhdGlvbj4gY29t
cHV0ZWRTdHlsZSA9IGRlZmF1bHRWaWV3LT5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQsICIiKTsK
LSAgICBtX2Zyb250ZW5kLT5kaWRHZXRDb21wdXRlZFN0eWxlKGNhbGxJZCwgYnVpbGRPYmplY3RG
b3JTdHlsZShjb21wdXRlZFN0eWxlLmdldCgpLCBmYWxzZSkpOworICAgICpzdHlsZSA9IGJ1aWxk
T2JqZWN0Rm9yU3R5bGUoZGVmYXVsdFZpZXctPmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCwgIiIp
LmdldCgpLCBmYWxzZSk7CiB9CiAKIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0
b3JET01BZ2VudDo6YnVpbGRPYmplY3RGb3JBdHRyaWJ1dGVTdHlsZXMoRWxlbWVudCogZWxlbWVu
dCkKQEAgLTExNzQsMTMgKzExMzUsMTQgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gSW5z
cGVjdG9yRE9NQWdlbnQ6OmJ1aWxkQXJyYXlGb3JQc2V1ZG9FbGVtZW50cyhFbGVtZW4KICAgICBy
ZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6YXBw
bHlTdHlsZVRleHQobG9uZyBjYWxsSWQsIGxvbmcgc3R5bGVJZCwgY29uc3QgU3RyaW5nJiBzdHls
ZVRleHQsIGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKQordm9pZCBJbnNwZWN0b3JET01BZ2Vu
dDo6YXBwbHlTdHlsZVRleHQobG9uZywgbG9uZyBzdHlsZUlkLCBjb25zdCBTdHJpbmcmIHN0eWxl
VGV4dCwgY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIGJvb2wqIHN1Y2Nlc3MsIFJlZlB0cjxJ
bnNwZWN0b3JWYWx1ZT4qIHN0eWxlT2JqZWN0LCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBjaGFu
Z2VkUHJvcGVydGllc0FycmF5KQogeworICAgICpzdWNjZXNzID0gZmFsc2U7CisgICAgKnN0eWxl
T2JqZWN0ID0gSW5zcGVjdG9yVmFsdWU6Om51bGwoKTsKKyAgICAqY2hhbmdlZFByb3BlcnRpZXNB
cnJheSA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKICAgICBDU1NTdHlsZURlY2xhcmF0aW9u
KiBzdHlsZSA9IGNzc1N0b3JlKCktPnN0eWxlRm9ySWQoc3R5bGVJZCk7Ci0gICAgaWYgKCFzdHls
ZSkgewotICAgICAgICBtX2Zyb250ZW5kLT5kaWRBcHBseVN0eWxlVGV4dChjYWxsSWQsIGZhbHNl
LCBJbnNwZWN0b3JWYWx1ZTo6bnVsbCgpLCBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCkpOworICAg
IGlmICghc3R5bGUpCiAgICAgICAgIHJldHVybjsKLSAgICB9CiAKICAgICAvLyBSZW1vdmUgZGlz
YWJsZWQgcHJvcGVydHkgZW50cnkgZm9yIHByb3BlcnR5IHdpdGggZ2l2ZW4gbmFtZS4KICAgICBE
aXNhYmxlZFN0eWxlRGVjbGFyYXRpb24qIGRpc2FibGVkU3R5bGUgPSBjc3NTdG9yZSgpLT5kaXNh
YmxlZFN0eWxlRm9ySWQoc3R5bGVJZCwgZmFsc2UpOwpAQCAtMTIwNywyNCArMTE2OSwxOSBAQCB2
b2lkIEluc3BlY3RvckRPTUFnZW50OjphcHBseVN0eWxlVGV4dChsb25nIGNhbGxJZCwgbG9uZyBz
dHlsZUlkLCBjb25zdCBTdHJpbmcmCiAgICAgICAgIGlmICghZWMpCiAgICAgICAgICAgICBzdHls
ZS0+cmVtb3ZlUHJvcGVydHkocHJvcGVydHlOYW1lLCBlYyk7CiAKLSAgICAgICAgaWYgKGVjKSB7
Ci0gICAgICAgICAgICBtX2Zyb250ZW5kLT5kaWRBcHBseVN0eWxlVGV4dChjYWxsSWQsIGZhbHNl
LCBJbnNwZWN0b3JWYWx1ZTo6bnVsbCgpLCBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCkpOworICAg
ICAgICBpZiAoZWMpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KICAgICB9CiAKICAg
ICAvLyBOb3RpZnkgY2FsbGVyIHRoYXQgdGhlIHByb3BlcnR5IHdhcyBzdWNjZXNzZnVsbHkgZGVs
ZXRlZC4KICAgICBpZiAoIXN0eWxlVGV4dExlbmd0aCkgewotICAgICAgICBSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+IGNoYW5nZWRQcm9wZXJ0aWVzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwot
ICAgICAgICBjaGFuZ2VkUHJvcGVydGllcy0+cHVzaFN0cmluZyhwcm9wZXJ0eU5hbWUpOwotICAg
ICAgICBtX2Zyb250ZW5kLT5kaWRBcHBseVN0eWxlVGV4dChjYWxsSWQsIHRydWUsIEluc3BlY3Rv
clZhbHVlOjpudWxsKCksIGNoYW5nZWRQcm9wZXJ0aWVzLnJlbGVhc2UoKSk7CisgICAgICAgICgq
Y2hhbmdlZFByb3BlcnRpZXNBcnJheSktPnB1c2hTdHJpbmcocHJvcGVydHlOYW1lKTsKKyAgICAg
ICAgKnN1Y2Nlc3MgPSB0cnVlOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCF0
ZW1wU3R5bGUtPmxlbmd0aCgpKSB7Ci0gICAgICAgIG1fZnJvbnRlbmQtPmRpZEFwcGx5U3R5bGVU
ZXh0KGNhbGxJZCwgZmFsc2UsIEluc3BlY3RvclZhbHVlOjpudWxsKCksIEluc3BlY3RvckFycmF5
OjpjcmVhdGUoKSk7CisgICAgaWYgKCF0ZW1wU3R5bGUtPmxlbmd0aCgpKQogICAgICAgICByZXR1
cm47Ci0gICAgfQogCiAgICAgLy8gSXRlcmF0ZSBvZiB0aGUgcHJvcGVydGllcyBvbiB0aGUgdGVz
dCBlbGVtZW50J3Mgc3R5bGUgZGVjbGFyYXRpb24gYW5kCiAgICAgLy8gYWRkIHRoZW0gdG8gdGhl
IHJlYWwgc3R5bGUgZGVjbGFyYXRpb24uIFdlIHRha2UgY2FyZSB0byBtb3ZlIHNob3J0aGFuZHMu
CkBAIC0xMjU4LDQxICsxMjE1LDQwIEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmFwcGx5U3R5
bGVUZXh0KGxvbmcgY2FsbElkLCBsb25nIHN0eWxlSWQsIGNvbnN0IFN0cmluZyYKICAgICAgICAg
ICAgIGRpc2FibGVkU3R5bGUtPnJlbW92ZShuYW1lKTsKICAgICAgICAgY2hhbmdlZFByb3BlcnRp
ZXMuYXBwZW5kKG5hbWUpOwogICAgIH0KLSAgICBtX2Zyb250ZW5kLT5kaWRBcHBseVN0eWxlVGV4
dChjYWxsSWQsIHRydWUsIGJ1aWxkT2JqZWN0Rm9yU3R5bGUoc3R5bGUsIHRydWUpLCB0b0FycmF5
KGNoYW5nZWRQcm9wZXJ0aWVzKSk7CisgICAgKnN1Y2Nlc3MgPSB0cnVlOworICAgICpzdHlsZU9i
amVjdCA9IGJ1aWxkT2JqZWN0Rm9yU3R5bGUoc3R5bGUsIHRydWUpOworICAgICpjaGFuZ2VkUHJv
cGVydGllc0FycmF5ID0gdG9BcnJheShjaGFuZ2VkUHJvcGVydGllcyk7CiB9CiAKLXZvaWQgSW5z
cGVjdG9yRE9NQWdlbnQ6OnNldFN0eWxlVGV4dChsb25nIGNhbGxJZCwgbG9uZyBzdHlsZUlkLCBj
b25zdCBTdHJpbmcmIGNzc1RleHQpCit2b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRTdHlsZVRl
eHQobG9uZywgbG9uZyBzdHlsZUlkLCBjb25zdCBTdHJpbmcmIGNzc1RleHQsIGJvb2wqIHN1Y2Nl
c3MpCiB7CisgICAgKnN1Y2Nlc3MgPSBmYWxzZTsKICAgICBDU1NTdHlsZURlY2xhcmF0aW9uKiBz
dHlsZSA9IGNzc1N0b3JlKCktPnN0eWxlRm9ySWQoc3R5bGVJZCk7Ci0gICAgaWYgKCFzdHlsZSkg
ewotICAgICAgICBtX2Zyb250ZW5kLT5kaWRTZXRTdHlsZVRleHQoY2FsbElkLCBmYWxzZSk7Cisg
ICAgaWYgKCFzdHlsZSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KICAgICBFeGNlcHRpb25Db2Rl
IGVjID0gMDsKICAgICBzdHlsZS0+c2V0Q3NzVGV4dChjc3NUZXh0LCBlYyk7Ci0gICAgbV9mcm9u
dGVuZC0+ZGlkU2V0U3R5bGVUZXh0KGNhbGxJZCwgIWVjKTsKKyAgICAqc3VjY2VzcyA9ICFlYzsK
IH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0U3R5bGVQcm9wZXJ0eShsb25nIGNhbGxJ
ZCwgbG9uZyBzdHlsZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUp
Cit2b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRTdHlsZVByb3BlcnR5KGxvbmcsIGxvbmcgc3R5
bGVJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sKiBzdWNj
ZXNzKQogeworICAgICpzdWNjZXNzID0gZmFsc2U7CiAgICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiog
c3R5bGUgPSBjc3NTdG9yZSgpLT5zdHlsZUZvcklkKHN0eWxlSWQpOwotICAgIGlmICghc3R5bGUp
IHsKLSAgICAgICAgbV9mcm9udGVuZC0+ZGlkU2V0U3R5bGVQcm9wZXJ0eShjYWxsSWQsIGZhbHNl
KTsKKyAgICBpZiAoIXN0eWxlKQogICAgICAgICByZXR1cm47Ci0gICAgfQogCiAgICAgRXhjZXB0
aW9uQ29kZSBlYyA9IDA7CiAgICAgc3R5bGUtPnNldFByb3BlcnR5KG5hbWUsIHZhbHVlLCBlYyk7
Ci0gICAgbV9mcm9udGVuZC0+ZGlkU2V0U3R5bGVQcm9wZXJ0eShjYWxsSWQsICFlYyk7CisgICAg
KnN1Y2Nlc3MgPSAhZWM7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnRvZ2dsZVN0eWxl
RW5hYmxlZChsb25nIGNhbGxJZCwgbG9uZyBzdHlsZUlkLCBjb25zdCBTdHJpbmcmIHByb3BlcnR5
TmFtZSwgYm9vbCBkaXNhYmxlZCkKK3ZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnRvZ2dsZVN0eWxl
RW5hYmxlZChsb25nLCBsb25nIHN0eWxlSWQsIGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lLCBi
b29sIGRpc2FibGVkLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiBzdHlsZU9iamVjdCkKIHsKKyAg
ICAqc3R5bGVPYmplY3QgPSBJbnNwZWN0b3JWYWx1ZTo6bnVsbCgpOwogICAgIENTU1N0eWxlRGVj
bGFyYXRpb24qIHN0eWxlID0gY3NzU3RvcmUoKS0+c3R5bGVGb3JJZChzdHlsZUlkKTsKLSAgICBp
ZiAoIXN0eWxlKSB7Ci0gICAgICAgIG1fZnJvbnRlbmQtPmRpZFRvZ2dsZVN0eWxlRW5hYmxlZChj
YWxsSWQsIEluc3BlY3RvclZhbHVlOjpudWxsKCkpOworICAgIGlmICghc3R5bGUpCiAgICAgICAg
IHJldHVybjsKLSAgICB9CiAKICAgICBEaXNhYmxlZFN0eWxlRGVjbGFyYXRpb24qIGRpc2FibGVk
U3R5bGUgPSBjc3NTdG9yZSgpLT5kaXNhYmxlZFN0eWxlRm9ySWQoc3R5bGVJZCwgdHJ1ZSk7CiAK
QEAgLTEzMDgsMzAgKzEyNjQsMjYgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6dG9nZ2xlU3R5
bGVFbmFibGVkKGxvbmcgY2FsbElkLCBsb25nIHN0eWxlSWQsIGNvbnN0IFN0cmkKICAgICAgICAg
aWYgKCFlYykKICAgICAgICAgICAgIGRpc2FibGVkU3R5bGUtPnJlbW92ZShwcm9wZXJ0eU5hbWUp
OwogICAgIH0KLSAgICBpZiAoZWMpIHsKLSAgICAgICAgbV9mcm9udGVuZC0+ZGlkVG9nZ2xlU3R5
bGVFbmFibGVkKGNhbGxJZCwgSW5zcGVjdG9yVmFsdWU6Om51bGwoKSk7CisgICAgaWYgKGVjKQog
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1fZnJvbnRlbmQtPmRpZFRvZ2dsZVN0eWxlRW5h
YmxlZChjYWxsSWQsIGJ1aWxkT2JqZWN0Rm9yU3R5bGUoc3R5bGUsIHRydWUpKTsKKyAgICAqc3R5
bGVPYmplY3QgPSBidWlsZE9iamVjdEZvclN0eWxlKHN0eWxlLCB0cnVlKTsKIH0KIAotdm9pZCBJ
bnNwZWN0b3JET01BZ2VudDo6c2V0UnVsZVNlbGVjdG9yKGxvbmcgY2FsbElkLCBsb25nIHJ1bGVJ
ZCwgY29uc3QgU3RyaW5nJiBzZWxlY3RvciwgbG9uZyBzZWxlY3RlZE5vZGVJZCkKK3ZvaWQgSW5z
cGVjdG9yRE9NQWdlbnQ6OnNldFJ1bGVTZWxlY3Rvcihsb25nLCBsb25nIHJ1bGVJZCwgY29uc3Qg
U3RyaW5nJiBzZWxlY3RvciwgbG9uZyBzZWxlY3RlZE5vZGVJZCwgUmVmUHRyPEluc3BlY3RvclZh
bHVlPiogcnVsZU9iamVjdCwgYm9vbCogc2VsZWN0b3JBZmZlY3RzTm9kZSkKIHsKKyAgICAqc2Vs
ZWN0b3JBZmZlY3RzTm9kZSA9IGZhbHNlOworICAgICpydWxlT2JqZWN0ID0gSW5zcGVjdG9yVmFs
dWU6Om51bGwoKTsKICAgICBDU1NTdHlsZVJ1bGUqIHJ1bGUgPSBjc3NTdG9yZSgpLT5ydWxlRm9y
SWQocnVsZUlkKTsKLSAgICBpZiAoIXJ1bGUpIHsKLSAgICAgICAgbV9mcm9udGVuZC0+ZGlkU2V0
UnVsZVNlbGVjdG9yKGNhbGxJZCwgSW5zcGVjdG9yVmFsdWU6Om51bGwoKSwgZmFsc2UpOworICAg
IGlmICghcnVsZSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAogICAgIE5vZGUqIG5vZGUgPSBu
b2RlRm9ySWQoc2VsZWN0ZWROb2RlSWQpOwogCiAgICAgQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVl
dCA9IHJ1bGUtPnBhcmVudFN0eWxlU2hlZXQoKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
ICAgICBzdHlsZVNoZWV0LT5hZGRSdWxlKHNlbGVjdG9yLCBydWxlLT5zdHlsZSgpLT5jc3NUZXh0
KCksIGVjKTsKLSAgICBpZiAoZWMpIHsKLSAgICAgICAgbV9mcm9udGVuZC0+ZGlkU2V0UnVsZVNl
bGVjdG9yKGNhbGxJZCwgSW5zcGVjdG9yVmFsdWU6Om51bGwoKSwgZmFsc2UpOworICAgIGlmIChl
YykKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAogICAgIENTU1N0eWxlUnVsZSogbmV3UnVsZSA9
IHN0YXRpY19jYXN0PENTU1N0eWxlUnVsZSo+KHN0eWxlU2hlZXQtPml0ZW0oc3R5bGVTaGVldC0+
bGVuZ3RoKCkgLSAxKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0eWxlU2hlZXQt
Pmxlbmd0aCgpOyArK2kpIHsKQEAgLTEzNDEsMzUgKzEyOTMsMzQgQEAgdm9pZCBJbnNwZWN0b3JE
T01BZ2VudDo6c2V0UnVsZVNlbGVjdG9yKGxvbmcgY2FsbElkLCBsb25nIHJ1bGVJZCwgY29uc3Qg
U3RyaW5nJgogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKGVjKSB7Ci0gICAgICAgIG1fZnJv
bnRlbmQtPmRpZFNldFJ1bGVTZWxlY3RvcihjYWxsSWQsIEluc3BlY3RvclZhbHVlOjpudWxsKCks
IGZhbHNlKTsKKyAgICBpZiAoZWMpCiAgICAgICAgIHJldHVybjsKLSAgICB9CiAKLSAgICBtX2Zy
b250ZW5kLT5kaWRTZXRSdWxlU2VsZWN0b3IoY2FsbElkLCBidWlsZE9iamVjdEZvclJ1bGUobm9k
ZS0+b3duZXJEb2N1bWVudCgpLCBuZXdSdWxlKSwgcnVsZUFmZmVjdHNOb2RlKG5ld1J1bGUsIG5v
ZGUpKTsKKyAgICAqc2VsZWN0b3JBZmZlY3RzTm9kZSA9IHJ1bGVBZmZlY3RzTm9kZShuZXdSdWxl
LCBub2RlKTsKKyAgICAqcnVsZU9iamVjdCA9IGJ1aWxkT2JqZWN0Rm9yUnVsZShub2RlLT5vd25l
ckRvY3VtZW50KCksIG5ld1J1bGUpOwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjphZGRS
dWxlKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBsb25nIHNlbGVjdGVkTm9k
ZUlkKQordm9pZCBJbnNwZWN0b3JET01BZ2VudDo6YWRkUnVsZShsb25nLCBjb25zdCBTdHJpbmcm
IHNlbGVjdG9yLCBsb25nIHNlbGVjdGVkTm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiBy
dWxlT2JqZWN0LCBib29sKiBzZWxlY3RvckFmZmVjdHNOb2RlKQogeworICAgICpzZWxlY3RvckFm
ZmVjdHNOb2RlID0gZmFsc2U7CisgICAgKnJ1bGVPYmplY3QgPSBJbnNwZWN0b3JWYWx1ZTo6bnVs
bCgpOworCiAgICAgTm9kZSogbm9kZSA9IG5vZGVGb3JJZChzZWxlY3RlZE5vZGVJZCk7Ci0gICAg
aWYgKCFub2RlKSB7Ci0gICAgICAgIG1fZnJvbnRlbmQtPmRpZEFkZFJ1bGUoY2FsbElkLCBJbnNw
ZWN0b3JWYWx1ZTo6bnVsbCgpLCBmYWxzZSk7CisgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1
cm47Ci0gICAgfQogCi0gICAgQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCA9IGNzc1N0b3JlKCkt
Pmluc3BlY3RvclN0eWxlU2hlZXQobm9kZS0+b3duZXJEb2N1bWVudCgpLCB0cnVlLCBjYWxsSWQp
OworICAgIENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQgPSBjc3NTdG9yZSgpLT5pbnNwZWN0b3JT
dHlsZVNoZWV0KG5vZGUtPm93bmVyRG9jdW1lbnQoKSwgdHJ1ZSk7CiAgICAgaWYgKCFzdHlsZVNo
ZWV0KQogICAgICAgICByZXR1cm47IC8vIGNvdWxkIG5vdCBhZGQgYSBzdHlsZXNoZWV0IHRvIHRo
ZSBvd25lckRvY3VtZW50CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBzdHlsZVNo
ZWV0LT5hZGRSdWxlKHNlbGVjdG9yLCAiIiwgZWMpOwotICAgIGlmIChlYykgewotICAgICAgICBt
X2Zyb250ZW5kLT5kaWRBZGRSdWxlKGNhbGxJZCwgSW5zcGVjdG9yVmFsdWU6Om51bGwoKSwgZmFs
c2UpOworICAgIGlmIChlYykKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAogICAgIENTU1N0eWxl
UnVsZSogbmV3UnVsZSA9IHN0YXRpY19jYXN0PENTU1N0eWxlUnVsZSo+KHN0eWxlU2hlZXQtPml0
ZW0oc3R5bGVTaGVldC0+bGVuZ3RoKCkgLSAxKSk7Ci0gICAgbV9mcm9udGVuZC0+ZGlkQWRkUnVs
ZShjYWxsSWQsIGJ1aWxkT2JqZWN0Rm9yUnVsZShub2RlLT5vd25lckRvY3VtZW50KCksIG5ld1J1
bGUpLCBydWxlQWZmZWN0c05vZGUobmV3UnVsZSwgbm9kZSkpOworICAgICpzZWxlY3RvckFmZmVj
dHNOb2RlID0gcnVsZUFmZmVjdHNOb2RlKG5ld1J1bGUsIG5vZGUpOworICAgICpydWxlT2JqZWN0
ID0gYnVpbGRPYmplY3RGb3JSdWxlKG5vZGUtPm93bmVyRG9jdW1lbnQoKSwgbmV3UnVsZSk7CiB9
CiAKIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRP
YmplY3RGb3JTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgYm9vbCBiaW5kKQpAQCAt
MTQ3MSw3ICsxNDIyLDcgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3RvckRP
TUFnZW50OjpidWlsZE9iamVjdEZvclJ1bGUoRG9jdW1lbnQqIG93bmUKICAgICBib29sIGlzVXNl
ciA9IHBhcmVudFN0eWxlU2hlZXQgJiYgcGFyZW50U3R5bGVTaGVldC0+b3duZXJOb2RlKCkgJiYg
cGFyZW50U3R5bGVTaGVldC0+b3duZXJOb2RlKCktPm5vZGVOYW1lKCkgPT0gIiNkb2N1bWVudCI7
CiAgICAgcmVzdWx0LT5zZXRCb29sKCJpc1VzZXJBZ2VudCIsIGlzVXNlckFnZW50KTsKICAgICBy
ZXN1bHQtPnNldEJvb2woImlzVXNlciIsIGlzVXNlcik7Ci0gICAgcmVzdWx0LT5zZXRCb29sKCJp
c1ZpYUluc3BlY3RvciIsIHJ1bGUtPnBhcmVudFN0eWxlU2hlZXQoKSA9PSBjc3NTdG9yZSgpLT5p
bnNwZWN0b3JTdHlsZVNoZWV0KG93bmVyRG9jdW1lbnQsIGZhbHNlLCAtMSkpOworICAgIHJlc3Vs
dC0+c2V0Qm9vbCgiaXNWaWFJbnNwZWN0b3IiLCBydWxlLT5wYXJlbnRTdHlsZVNoZWV0KCkgPT0g
Y3NzU3RvcmUoKS0+aW5zcGVjdG9yU3R5bGVTaGVldChvd25lckRvY3VtZW50LCBmYWxzZSkpOwog
CiAgICAgLy8gQmluZCBlZGl0YWJsZSBzY3JpcHRzIG9ubHkuCiAgICAgYm9vbCBiaW5kID0gIWlz
VXNlckFnZW50ICYmICFpc1VzZXI7CkBAIC0xNjQyLDE3ICsxNTkzLDEyIEBAIHZvaWQgSW5zcGVj
dG9yRE9NQWdlbnQ6OmNvcHlOb2RlKGxvbmcgbm9kZUlkKQogICAgIFBhc3RlYm9hcmQ6OmdlbmVy
YWxQYXN0ZWJvYXJkKCktPndyaXRlUGxhaW5UZXh0KG1hcmt1cCk7CiB9CiAKLXZvaWQgSW5zcGVj
dG9yRE9NQWdlbnQ6OnB1c2hOb2RlQnlQYXRoVG9Gcm9udGVuZChsb25nIGNhbGxJZCwgY29uc3Qg
U3RyaW5nJiBwYXRoKQordm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cHVzaE5vZGVCeVBhdGhUb0Zy
b250ZW5kKGxvbmcsIGNvbnN0IFN0cmluZyYgcGF0aCwgbG9uZyogbm9kZUlkKQogewotICAgIGlm
ICghbV9mcm9udGVuZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbG9uZyBpZCA9IDA7CisgICAg
Km5vZGVJZCA9IDA7CiAgICAgTm9kZSogbm9kZSA9IG5vZGVGb3JQYXRoKHBhdGgpOwogICAgIGlm
IChub2RlKQotICAgICAgICBpZCA9IHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQobm9kZSk7Ci0KLSAg
ICBtX2Zyb250ZW5kLT5kaWRQdXNoTm9kZUJ5UGF0aFRvRnJvbnRlbmQoY2FsbElkLCBpZCk7Cisg
ICAgICAgICpub2RlSWQgPSBwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKG5vZGUpOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JET01BZ2VudC5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaAppbmRl
eCAzOGI3MDM0Li41M2VhMjRjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JET01BZ2VudC5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmgK
QEAgLTEwMSwzMSArMTAxLDMxIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICAvLyBN
ZXRob2RzIGNhbGxlZCBmcm9tIHRoZSBmcm9udGVuZCBmb3IgRE9NIG5vZGVzIGluc3BlY3Rpb24u
CiAgICAgICAgIHZvaWQgZ2V0Q2hpbGROb2Rlcyhsb25nIGNhbGxJZCwgbG9uZyBub2RlSWQpOwot
ICAgICAgICB2b2lkIHNldEF0dHJpYnV0ZShsb25nIGNhbGxJZCwgbG9uZyBlbGVtZW50SWQsIGNv
bnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0gICAgICAgIHZvaWQgcmVt
b3ZlQXR0cmlidXRlKGxvbmcgY2FsbElkLCBsb25nIGVsZW1lbnRJZCwgY29uc3QgU3RyaW5nJiBu
YW1lKTsKLSAgICAgICAgdm9pZCByZW1vdmVOb2RlKGxvbmcgY2FsbElkLCBsb25nIG5vZGVJZCk7
Ci0gICAgICAgIHZvaWQgY2hhbmdlVGFnTmFtZShsb25nIGNhbGxJZCwgbG9uZyBub2RlSWQsIGNv
bnN0IFN0cmluZyYgdGFnTmFtZSk7Ci0gICAgICAgIHZvaWQgZ2V0T3V0ZXJIVE1MKGxvbmcgY2Fs
bElkLCBsb25nIG5vZGVJZCk7Ci0gICAgICAgIHZvaWQgc2V0T3V0ZXJIVE1MKGxvbmcgY2FsbElk
LCBsb25nIG5vZGVJZCwgY29uc3QgU3RyaW5nJiBvdXRlckhUTUwpOwotICAgICAgICB2b2lkIHNl
dFRleHROb2RlVmFsdWUobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkLCBjb25zdCBTdHJpbmcmIHZh
bHVlKTsKLSAgICAgICAgdm9pZCBnZXRFdmVudExpc3RlbmVyc0Zvck5vZGUobG9uZyBjYWxsSWQs
IGxvbmcgbm9kZUlkKTsKKyAgICAgICAgdm9pZCBzZXRBdHRyaWJ1dGUobG9uZyBjYWxsSWQsIGxv
bmcgZWxlbWVudElkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJv
b2wqIHN1Y2Nlc3MpOworICAgICAgICB2b2lkIHJlbW92ZUF0dHJpYnV0ZShsb25nIGNhbGxJZCwg
bG9uZyBlbGVtZW50SWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogc3VjY2Vzcyk7CisgICAg
ICAgIHZvaWQgcmVtb3ZlTm9kZShsb25nIGNhbGxJZCwgbG9uZyBub2RlSWQsIGxvbmcqIG91dE5v
ZGVJZCk7CisgICAgICAgIHZvaWQgY2hhbmdlVGFnTmFtZShsb25nIGNhbGxJZCwgbG9uZyBub2Rl
SWQsIGNvbnN0IFN0cmluZyYgdGFnTmFtZSwgbG9uZyogbmV3SWQpOworICAgICAgICB2b2lkIGdl
dE91dGVySFRNTChsb25nIGNhbGxJZCwgbG9uZyBub2RlSWQsIFdlYkNvcmU6OlN0cmluZyogb3V0
ZXJIVE1MKTsKKyAgICAgICAgdm9pZCBzZXRPdXRlckhUTUwobG9uZyBjYWxsSWQsIGxvbmcgbm9k
ZUlkLCBjb25zdCBTdHJpbmcmIG91dGVySFRNTCwgbG9uZyogbmV3SWQpOworICAgICAgICB2b2lk
IHNldFRleHROb2RlVmFsdWUobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkLCBjb25zdCBTdHJpbmcm
IHZhbHVlLCBib29sKiBzdWNjZXNzKTsKKyAgICAgICAgdm9pZCBnZXRFdmVudExpc3RlbmVyc0Zv
ck5vZGUobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkLCBsb25nKiBvdXROb2RlSWQsIFJlZlB0cjxJ
bnNwZWN0b3JBcnJheT4qIGxpc3RlbmVyc0FycmF5KTsKICAgICAgICAgdm9pZCBhZGRJbnNwZWN0
ZWROb2RlKGxvbmcgbm9kZUlkKTsKICAgICAgICAgdm9pZCBwZXJmb3JtU2VhcmNoKGNvbnN0IFN0
cmluZyYgd2hpdGVzcGFjZVRyaW1tZWRRdWVyeSwgYm9vbCBydW5TeW5jaHJvbm91c2x5KTsKICAg
ICAgICAgdm9pZCBzZWFyY2hDYW5jZWxlZCgpOwogCiAgICAgICAgIC8vIE1ldGhvZHMgY2FsbGVk
IGZyb20gdGhlIGZyb250ZW5kIGZvciBDU1Mgc3R5bGVzIGluc3BlY3Rpb24uCi0gICAgICAgIHZv
aWQgZ2V0U3R5bGVzKGxvbmcgY2FsbElkLCBsb25nIG5vZGVJZCwgYm9vbCBhdXRob3JPbmx5KTsK
LSAgICAgICAgdm9pZCBnZXRBbGxTdHlsZXMobG9uZyBjYWxsSWQpOwotICAgICAgICB2b2lkIGdl
dElubGluZVN0eWxlKGxvbmcgY2FsbElkLCBsb25nIG5vZGVJZCk7Ci0gICAgICAgIHZvaWQgZ2V0
Q29tcHV0ZWRTdHlsZShsb25nIGNhbGxJZCwgbG9uZyBub2RlSWQpOwotICAgICAgICB2b2lkIGdl
dFN0eWxlU2hlZXQobG9uZyBjYWxsSWQsIGxvbmcgc3R5bGVTaGVldElkKTsKLSAgICAgICAgdm9p
ZCBnZXRSdWxlUmFuZ2VzKGxvbmcgY2FsbElkLCBsb25nIHN0eWxlU2hlZXRJZCk7Ci0gICAgICAg
IHZvaWQgYXBwbHlTdHlsZVRleHQobG9uZyBjYWxsSWQsIGxvbmcgc3R5bGVJZCwgY29uc3QgU3Ry
aW5nJiBzdHlsZVRleHQsIGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKTsKLSAgICAgICAgdm9p
ZCBzZXRTdHlsZVRleHQobG9uZyBjYWxsSWQsIGxvbmcgc3R5bGVJZCwgY29uc3QgU3RyaW5nJiBj
c3NUZXh0KTsKLSAgICAgICAgdm9pZCBzZXRTdHlsZVByb3BlcnR5KGxvbmcgY2FsbElkLCBsb25n
IHN0eWxlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0gICAg
ICAgIHZvaWQgdG9nZ2xlU3R5bGVFbmFibGVkKGxvbmcgY2FsbElkLCBsb25nIHN0eWxlSWQsIGNv
bnN0IFN0cmluZyYgcHJvcGVydHlOYW1lLCBib29sIGRpc2FibGVkKTsKLSAgICAgICAgdm9pZCBz
ZXRSdWxlU2VsZWN0b3IobG9uZyBjYWxsSWQsIGxvbmcgcnVsZUlkLCBjb25zdCBTdHJpbmcmIHNl
bGVjdG9yLCBsb25nIHNlbGVjdGVkTm9kZUlkKTsKLSAgICAgICAgdm9pZCBhZGRSdWxlKGxvbmcg
Y2FsbElkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBsb25nIHNlbGVjdGVkTm9kZUlkKTsKKyAg
ICAgICAgdm9pZCBnZXRTdHlsZXMobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkLCBib29sIGF1dGhv
ck9ubHksIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHN0eWxlcyk7CisgICAgICAgIHZvaWQgZ2V0
QWxsU3R5bGVzKGxvbmcgY2FsbElkLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBzdHlsZXMpOwor
ICAgICAgICB2b2lkIGdldElubGluZVN0eWxlKGxvbmcgY2FsbElkLCBsb25nIG5vZGVJZCwgUmVm
UHRyPEluc3BlY3RvclZhbHVlPiogc3R5bGVzKTsKKyAgICAgICAgdm9pZCBnZXRDb21wdXRlZFN0
eWxlKGxvbmcgY2FsbElkLCBsb25nIG5vZGVJZCwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogc3R5
bGVzKTsKKyAgICAgICAgdm9pZCBnZXRTdHlsZVNoZWV0KGxvbmcgY2FsbElkLCBsb25nIHN0eWxl
U2hlZXRJZCwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogc3R5bGVTaGVldE9iamVjdCk7CisgICAg
ICAgIHZvaWQgZ2V0UnVsZVJhbmdlcyhsb25nIGNhbGxJZCwgbG9uZyBzdHlsZVNoZWV0SWQsIFJl
ZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHJ1bGVSYW5nZSk7CisgICAgICAgIHZvaWQgYXBwbHlTdHls
ZVRleHQobG9uZyBjYWxsSWQsIGxvbmcgc3R5bGVJZCwgY29uc3QgU3RyaW5nJiBzdHlsZVRleHQs
IGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lLCBib29sKiBzdWNjZXNzLCBSZWZQdHI8SW5zcGVj
dG9yVmFsdWU+KiBzdHlsZU9iamVjdCwgUmVmUHRyPEluc3BlY3RvckFycmF5PiogY2hhbmdlZFBy
b3BlcnRpZXMpOworICAgICAgICB2b2lkIHNldFN0eWxlVGV4dChsb25nIGNhbGxJZCwgbG9uZyBz
dHlsZUlkLCBjb25zdCBTdHJpbmcmIGNzc1RleHQsIGJvb2wqIHN1Y2Nlc3MpOworICAgICAgICB2
b2lkIHNldFN0eWxlUHJvcGVydHkobG9uZyBjYWxsSWQsIGxvbmcgc3R5bGVJZCwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sKiBzdWNjZXNzKTsKKyAgICAgICAg
dm9pZCB0b2dnbGVTdHlsZUVuYWJsZWQobG9uZyBjYWxsSWQsIGxvbmcgc3R5bGVJZCwgY29uc3Qg
U3RyaW5nJiBwcm9wZXJ0eU5hbWUsIGJvb2wgZGlzYWJsZWQsIFJlZlB0cjxJbnNwZWN0b3JWYWx1
ZT4qIHN0eWxlT2JqZWN0KTsKKyAgICAgICAgdm9pZCBzZXRSdWxlU2VsZWN0b3IobG9uZyBjYWxs
SWQsIGxvbmcgcnVsZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBsb25nIHNlbGVjdGVkTm9k
ZUlkLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiBydWxlT2JqZWN0LCBib29sKiBzZWxlY3RvckFm
ZmVjdHNOb2RlKTsKKyAgICAgICAgdm9pZCBhZGRSdWxlKGxvbmcgY2FsbElkLCBjb25zdCBTdHJp
bmcmIHNlbGVjdG9yLCBsb25nIHNlbGVjdGVkTm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+
KiBydWxlT2JqZWN0LCBib29sKiBzZWxlY3RvckFmZmVjdHNOb2RlKTsKIAogICAgICAgICAvLyBN
ZXRob2RzIGNhbGxlZCBmcm9tIHRoZSBJbnNwZWN0b3JDb250cm9sbGVyLgogICAgICAgICB2b2lk
IHNldERvY3VtZW50KERvY3VtZW50KiBkb2N1bWVudCk7CkBAIC0xMzgsNyArMTM4LDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBOb2RlKiBub2RlRm9ySWQobG9uZyBub2RlSWQpOwog
ICAgICAgICBsb25nIHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoTm9kZSogbm9kZSk7CiAgICAgICAg
IHZvaWQgcHVzaENoaWxkTm9kZXNUb0Zyb250ZW5kKGxvbmcgbm9kZUlkKTsKLSAgICAgICAgdm9p
ZCBwdXNoTm9kZUJ5UGF0aFRvRnJvbnRlbmQobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgcGF0
aCk7CisgICAgICAgIHZvaWQgcHVzaE5vZGVCeVBhdGhUb0Zyb250ZW5kKGxvbmcgY2FsbElkLCBj
b25zdCBTdHJpbmcmIHBhdGgsIGxvbmcqIG5vZGVJZCk7CiAgICAgICAgIGxvbmcgaW5zcGVjdGVk
Tm9kZSh1bnNpZ25lZCBsb25nIG51bSk7CiAgICAgICAgIHZvaWQgY29weU5vZGUobG9uZyBub2Rl
SWQpOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3Bw
IGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcAppbmRleCBkNDg4YjUwLi5k
YWQ4NGFjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3Bw
CisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHAKQEAgLTQ5NCw2ICs0
OTQsMTEgQEAgYm9vbCBJbnNwZWN0b3JWYWx1ZTo6YXNOdW1iZXIodW5zaWduZWQgbG9uZyopIGNv
bnN0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitib29sIEluc3BlY3RvclZhbHVlOjphc051bWJl
cih1bnNpZ25lZCBpbnQqKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKwogYm9vbCBJ
bnNwZWN0b3JWYWx1ZTo6YXNTdHJpbmcoU3RyaW5nKikgY29uc3QKIHsKICAgICByZXR1cm4gZmFs
c2U7CkBAIC01NjYsNiArNTcxLDEzIEBAIGJvb2wgSW5zcGVjdG9yQmFzaWNWYWx1ZTo6YXNOdW1i
ZXIodW5zaWduZWQgbG9uZyogb3V0cHV0KSBjb25zdAogICAgIHJldHVybiB0cnVlOwogfQogCiti
b29sIEluc3BlY3RvckJhc2ljVmFsdWU6OmFzTnVtYmVyKHVuc2lnbmVkIGludCogb3V0cHV0KSBj
b25zdAoreworICAgIGlmICh0eXBlKCkgIT0gVHlwZURvdWJsZSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICpvdXRwdXQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KG1fZG91YmxlVmFs
dWUpOworICAgIHJldHVybiB0cnVlOworfQogCiB2b2lkIEluc3BlY3RvckJhc2ljVmFsdWU6Ondy
aXRlSlNPTihWZWN0b3I8VUNoYXI+KiBvdXRwdXQpIGNvbnN0CiB7CmRpZmYgLS1naXQgYS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvclZhbHVlcy5oCmluZGV4IDk0MGJhYjkuLjY0MmYwOTMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvclZhbHVlcy5oCkBAIC03MSw2ICs3MSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wg
YXNOdW1iZXIoZG91YmxlKiBvdXRwdXQpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBhc051bWJl
cihsb25nKiBvdXRwdXQpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBhc051bWJlcih1bnNpZ25l
ZCBsb25nKiBvdXRwdXQpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBhc051bWJlcih1bnNpZ25l
ZCBpbnQqIG91dHB1dCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGFzU3RyaW5nKFN0cmluZyog
b3V0cHV0KSBjb25zdDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBh
c09iamVjdCgpOwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXNBcnJh
eSgpOwpAQCAtMTA5LDYgKzExMCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgYXNOdW1i
ZXIoZG91YmxlKiBvdXRwdXQpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBhc051bWJlcihsb25n
KiBvdXRwdXQpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBhc051bWJlcih1bnNpZ25lZCBsb25n
KiBvdXRwdXQpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBhc051bWJlcih1bnNpZ25lZCBpbnQq
IG91dHB1dCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgd3JpdGVKU09OKFZlY3RvcjxVQ2hh
cj4qIG91dHB1dCkgY29uc3Q7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>63454</attachid>
            <date>2010-08-04 08:52:12 -0700</date>
            <delta_ts>2010-08-05 03:34:44 -0700</delta_ts>
            <desc>InspectorBackendDispatcher.cpp - sample of generated file.</desc>
            <filename>InspectorBackendDispatcher.cpp</filename>
            <type>application/octet-stream</type>
            <size>100059</size>
            <attacher name="Ilya Tikhonovsky">loislo</attacher>
            
              <data encoding="base64">Ly8gQ29weXJpZ2h0IChjKSAyMDEwIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgovLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgoK
I2luY2x1ZGUgImNvbmZpZy5oIgojaW5jbHVkZSAiSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIu
aCIKCiNpZiBFTkFCTEUoSU5TUEVDVE9SKQoKI2luY2x1ZGUgIkluc3BlY3RvckFwcGxpY2F0aW9u
Q2FjaGVBZ2VudC5oIgojaW5jbHVkZSAiSW5zcGVjdG9yQmFja2VuZC5oIgojaW5jbHVkZSAiSW5z
cGVjdG9yQ2xpZW50LmgiCiNpbmNsdWRlICJJbnNwZWN0b3JET01BZ2VudC5oIgojaW5jbHVkZSAi
SW5zcGVjdG9yVmFsdWVzLmgiCiNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgojaW5jbHVkZSAi
U2NyaXB0RGVidWdTZXJ2ZXIuaCIKCm5hbWVzcGFjZSBXZWJDb3JlIHsKCnN0YXRpYyBTdHJpbmcg
Zm9ybWF0V3JvbmdBcmd1bWVudHNDb3VudE1lc3NhZ2UodW5zaWduZWQgZXhwZWN0ZWQsIHVuc2ln
bmVkIGFjdHVhbCkKewogICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCJXcm9uZyBudW1iZXIgb2Yg
cGFyYW1ldGVyczogJWQgKGV4cGVjdGVkOiAlZCkiLCBhY3R1YWwsIGV4cGVjdGVkKTsKfQoKc3Rh
dGljIFN0cmluZyBmb3JtYXRXcm9uZ0FyZ3VtZW50VHlwZU1lc3NhZ2UodW5zaWduZWQgcG9zaXRp
b24sIGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IGNoYXIqIGV4cGVjdGVkVHlwZSkKewogICAgcmV0
dXJuIFN0cmluZzo6Zm9ybWF0KCJGYWlsZWQgdG8gY29udmVydCBwYXJhbWV0ZXIgJWQgKCVzKSB0
byAlcyIsIHBvc2l0aW9uLCBuYW1lLCBleHBlY3RlZFR5cGUpOwp9Cgpib29sIEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyOjpzdG9yZUxhc3RBY3RpdmVQYW5lbChQYXNzUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiBhcmdzKQp7CiAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgYmFja2VuZEZ1
bmN0aW9uTmFtZSwgKCJzdG9yZUxhc3RBY3RpdmVQYW5lbCIpKTsKICAgIGxvbmcgY2FsbElkID0g
MDsKCiAgICBpZiAoYXJncy0+bGVuZ3RoKCkgIT0gMikgewogICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgIHByb3RvY29sRXJyb3IoMCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9y
bWF0V3JvbmdBcmd1bWVudHNDb3VudE1lc3NhZ2UoYXJncy0+bGVuZ3RoKCkgLSAxLCAxKSk7CiAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIFN0cmluZyBwYW5lbE5hbWU7CiAgICBpZiAo
IWFyZ3MtPmdldCgxKS0+YXNTdHJpbmcoJnBhbmVsTmFtZSkpIHsKICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9u
TmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudFR5cGVNZXNzYWdlKDEsICJwYW5lbE5hbWUiLCAiU3Ry
aW5nIikpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBpZiAobV9pbnNwZWN0b3JD
b250cm9sbGVyID09IDApIHsKICAgICAgICBwcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1
bmN0aW9uTmFtZSwgIkVycm9yOiBDb250cm9sbGVyIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4i
KTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgbV9pbnNwZWN0b3JDb250cm9sbGVy
LT5zdG9yZUxhc3RBY3RpdmVQYW5lbChwYW5lbE5hbWUpOwoKICAgIHJldHVybiB0cnVlOwp9Cgpi
b29sIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpzYXZlQXBwbGljYXRpb25TZXR0aW5ncyhQ
YXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcmdzKQp7CiAgICBERUZJTkVfU1RBVElDX0xPQ0FM
KFN0cmluZywgYmFja2VuZEZ1bmN0aW9uTmFtZSwgKCJzYXZlQXBwbGljYXRpb25TZXR0aW5ncyIp
KTsKICAgIGxvbmcgY2FsbElkID0gMDsKCiAgICBpZiAoYXJncy0+bGVuZ3RoKCkgIT0gMikgewog
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29sRXJyb3IoMCwgYmFj
a2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudHNDb3VudE1lc3NhZ2UoYXJncy0+
bGVuZ3RoKCkgLSAxLCAxKSk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIFN0cmlu
ZyBzZXR0aW5nczsKICAgIGlmICghYXJncy0+Z2V0KDEpLT5hc1N0cmluZygmc2V0dGluZ3MpKSB7
CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcihjYWxs
SWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRUeXBlTWVzc2FnZSgx
LCAic2V0dGluZ3MiLCAiU3RyaW5nIikpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAg
ICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyID09IDApIHsKICAgICAgICBwcm90b2NvbEVycm9y
KGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgIkVycm9yOiBDb250cm9sbGVyIGhhbmRsZXIg
aXMgbm90IGF2YWlsYWJsZS4iKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgbV9p
bnNwZWN0b3JDb250cm9sbGVyLT5zYXZlQXBwbGljYXRpb25TZXR0aW5ncyhzZXR0aW5ncyk7Cgog
ICAgcmV0dXJuIHRydWU7Cn0KCmJvb2wgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnNhdmVT
ZXNzaW9uU2V0dGluZ3MoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJncykKewogICAgREVG
SU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICgic2F2ZVNlc3Np
b25TZXR0aW5ncyIpKTsKICAgIGxvbmcgY2FsbElkID0gMDsKCiAgICBpZiAoYXJncy0+bGVuZ3Ro
KCkgIT0gMikgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29s
RXJyb3IoMCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudHNDb3VudE1l
c3NhZ2UoYXJncy0+bGVuZ3RoKCkgLSAxLCAxKSk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
fQoKICAgIFN0cmluZyBzZXR0aW5nczsKICAgIGlmICghYXJncy0+Z2V0KDEpLT5hc1N0cmluZygm
c2V0dGluZ3MpKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9j
b2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRU
eXBlTWVzc2FnZSgxLCAic2V0dGluZ3MiLCAiU3RyaW5nIikpOwogICAgICAgIHJldHVybiBmYWxz
ZTsKICAgIH0KCiAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyID09IDApIHsKICAgICAgICBw
cm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgIkVycm9yOiBDb250cm9s
bGVyIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICB9CgogICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5zYXZlU2Vzc2lvblNldHRpbmdzKHNldHRp
bmdzKTsKCiAgICByZXR1cm4gdHJ1ZTsKfQoKYm9vbCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cjo6ZW5hYmxlU2VhcmNoaW5nRm9yTm9kZShQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcmdz
KQp7CiAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgYmFja2VuZEZ1bmN0aW9uTmFtZSwg
KCJlbmFibGVTZWFyY2hpbmdGb3JOb2RlIikpOwogICAgbG9uZyBjYWxsSWQgPSAwOwoKICAgIGlm
IChhcmdzLT5sZW5ndGgoKSAhPSAxKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgICAgcHJvdG9jb2xFcnJvcigwLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0Fy
Z3VtZW50c0NvdW50TWVzc2FnZShhcmdzLT5sZW5ndGgoKSAtIDEsIDApKTsKICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICB9CgogICAgaWYgKG1faW5zcGVjdG9yQ29udHJvbGxlciA9PSAwKSB7CiAg
ICAgICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICJFcnJvcjog
Q29udHJvbGxlciBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CiAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgfQoKICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+ZW5hYmxlU2VhcmNoaW5nRm9y
Tm9kZSgpOwoKICAgIHJldHVybiB0cnVlOwp9Cgpib29sIEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyOjpkaXNhYmxlU2VhcmNoaW5nRm9yTm9kZShQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBh
cmdzKQp7CiAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgYmFja2VuZEZ1bmN0aW9uTmFt
ZSwgKCJkaXNhYmxlU2VhcmNoaW5nRm9yTm9kZSIpKTsKICAgIGxvbmcgY2FsbElkID0gMDsKCiAg
ICBpZiAoYXJncy0+bGVuZ3RoKCkgIT0gMSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgIHByb3RvY29sRXJyb3IoMCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3Jv
bmdBcmd1bWVudHNDb3VudE1lc3NhZ2UoYXJncy0+bGVuZ3RoKCkgLSAxLCAwKSk7CiAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgfQoKICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXIgPT0gMCkg
ewogICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAiRXJy
b3I6IENvbnRyb2xsZXIgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwogICAgICAgIHJldHVy
biBmYWxzZTsKICAgIH0KCiAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmRpc2FibGVTZWFyY2hp
bmdGb3JOb2RlKCk7CgogICAgcmV0dXJuIHRydWU7Cn0KCmJvb2wgSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXI6OmVuYWJsZU1vbml0b3JpbmdYSFIoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4g
YXJncykKewogICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGJhY2tlbmRGdW5jdGlvbk5h
bWUsICgiZW5hYmxlTW9uaXRvcmluZ1hIUiIpKTsKICAgIGxvbmcgY2FsbElkID0gMDsKCiAgICBp
ZiAoYXJncy0+bGVuZ3RoKCkgIT0gMSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgICAgIHByb3RvY29sRXJyb3IoMCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdB
cmd1bWVudHNDb3VudE1lc3NhZ2UoYXJncy0+bGVuZ3RoKCkgLSAxLCAwKSk7CiAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgfQoKICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXIgPT0gMCkgewog
ICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAiRXJyb3I6
IENvbnRyb2xsZXIgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwogICAgICAgIHJldHVybiBm
YWxzZTsKICAgIH0KCiAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmVuYWJsZU1vbml0b3JpbmdY
SFIoKTsKCiAgICByZXR1cm4gdHJ1ZTsKfQoKYm9vbCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cjo6ZGlzYWJsZU1vbml0b3JpbmdYSFIoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJncykK
ewogICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICgi
ZGlzYWJsZU1vbml0b3JpbmdYSFIiKSk7CiAgICBsb25nIGNhbGxJZCA9IDA7CgogICAgaWYgKGFy
Z3MtPmxlbmd0aCgpICE9IDEpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICBwcm90b2NvbEVycm9yKDAsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1l
bnRzQ291bnRNZXNzYWdlKGFyZ3MtPmxlbmd0aCgpIC0gMSwgMCkpOwogICAgICAgIHJldHVybiBm
YWxzZTsKICAgIH0KCiAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyID09IDApIHsKICAgICAg
ICBwcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgIkVycm9yOiBDb250
cm9sbGVyIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICB9CgogICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5kaXNhYmxlTW9uaXRvcmluZ1hIUigp
OwoKICAgIHJldHVybiB0cnVlOwp9Cgpib29sIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpl
bmFibGVSZXNvdXJjZVRyYWNraW5nKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3MpCnsK
ICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAoImVu
YWJsZVJlc291cmNlVHJhY2tpbmciKSk7CiAgICBsb25nIGNhbGxJZCA9IDA7CgogICAgaWYgKGFy
Z3MtPmxlbmd0aCgpICE9IDIpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICBwcm90b2NvbEVycm9yKDAsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1l
bnRzQ291bnRNZXNzYWdlKGFyZ3MtPmxlbmd0aCgpIC0gMSwgMSkpOwogICAgICAgIHJldHVybiBm
YWxzZTsKICAgIH0KCiAgICBib29sIGFsd2F5czsKICAgIGlmICghYXJncy0+Z2V0KDEpLT5hc0Jv
b2woJmFsd2F5cykpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBwcm90
b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVu
dFR5cGVNZXNzYWdlKDEsICJhbHdheXMiLCAiYm9vbGVhbiIpKTsKICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICB9CgogICAgaWYgKG1faW5zcGVjdG9yQ29udHJvbGxlciA9PSAwKSB7CiAgICAgICAg
cHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICJFcnJvcjogQ29udHJv
bGxlciBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CiAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgfQoKICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+ZW5hYmxlUmVzb3VyY2VUcmFja2luZyhh
bHdheXMpOwoKICAgIHJldHVybiB0cnVlOwp9Cgpib29sIEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyOjpkaXNhYmxlUmVzb3VyY2VUcmFja2luZyhQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBh
cmdzKQp7CiAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgYmFja2VuZEZ1bmN0aW9uTmFt
ZSwgKCJkaXNhYmxlUmVzb3VyY2VUcmFja2luZyIpKTsKICAgIGxvbmcgY2FsbElkID0gMDsKCiAg
ICBpZiAoYXJncy0+bGVuZ3RoKCkgIT0gMikgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgIHByb3RvY29sRXJyb3IoMCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3Jv
bmdBcmd1bWVudHNDb3VudE1lc3NhZ2UoYXJncy0+bGVuZ3RoKCkgLSAxLCAxKSk7CiAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgfQoKICAgIGJvb2wgYWx3YXlzOwogICAgaWYgKCFhcmdzLT5nZXQo
MSktPmFzQm9vbCgmYWx3YXlzKSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
ICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9u
Z0FyZ3VtZW50VHlwZU1lc3NhZ2UoMSwgImFsd2F5cyIsICJib29sZWFuIikpOwogICAgICAgIHJl
dHVybiBmYWxzZTsKICAgIH0KCiAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyID09IDApIHsK
ICAgICAgICBwcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgIkVycm9y
OiBDb250cm9sbGVyIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICB9CgogICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5kaXNhYmxlUmVzb3VyY2VU
cmFja2luZyhhbHdheXMpOwoKICAgIHJldHVybiB0cnVlOwp9Cgpib29sIEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyOjpnZXRSZXNvdXJjZUNvbnRlbnQoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJh
eT4gYXJncykKewogICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGJhY2tlbmRGdW5jdGlv
bk5hbWUsICgiZ2V0UmVzb3VyY2VDb250ZW50IikpOwogICAgbG9uZyBjYWxsSWQgPSAwOwoKICAg
IGlmIChhcmdzLT5sZW5ndGgoKSAhPSAzKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgICAgcHJvdG9jb2xFcnJvcigwLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9u
Z0FyZ3VtZW50c0NvdW50TWVzc2FnZShhcmdzLT5sZW5ndGgoKSAtIDEsIDIpKTsKICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICB9CgogICAgaWYgKCFhcmdzLT5nZXQoMSktPmFzTnVtYmVyKCZjYWxs
SWQpKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJv
cihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRUeXBlTWVz
c2FnZSgxLCAiY2FsbElkIiwgImxvbmciKSk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoK
ICAgIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcjsKICAgIGlmICghYXJncy0+Z2V0KDIpLT5hc051
bWJlcigmaWRlbnRpZmllcikpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICBwcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdB
cmd1bWVudFR5cGVNZXNzYWdlKDIsICJpZGVudGlmaWVyIiwgInVuc2lnbmVkIGxvbmciKSk7CiAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXIg
PT0gMCkgewogICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1l
LCAiRXJyb3I6IENvbnRyb2xsZXIgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwogICAgICAg
IHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBTdHJpbmcgY29udGVudDsKICAgIG1faW5zcGVjdG9y
Q29udHJvbGxlci0+Z2V0UmVzb3VyY2VDb250ZW50KGNhbGxJZCwgaWRlbnRpZmllciwgJmNvbnRl
bnQpOwoKICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RvckNsaWVudCgpKSB7
CiAgICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcmd1bWVudHMgPSBJbnNwZWN0b3JBcnJh
eTo6Y3JlYXRlKCk7CiAgICAgICAgYXJndW1lbnRzLT5wdXNoU3RyaW5nKCJkaWRHZXRSZXNvdXJj
ZUNvbnRlbnQiKTsKICAgICAgICBhcmd1bWVudHMtPnB1c2hOdW1iZXIoY2FsbElkKTsKICAgICAg
ICBhcmd1bWVudHMtPnB1c2hTdHJpbmcoY29udGVudCk7CiAgICAgICAgbV9pbnNwZWN0b3JDb250
cm9sbGVyLT5pbnNwZWN0b3JDbGllbnQoKS0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGFyZ3VtZW50
cy0+dG9KU09OU3RyaW5nKCkpOwogICAgfQogICAgcmV0dXJuIHRydWU7Cn0KCmJvb2wgSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXI6OnJlbG9hZFBhZ2UoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJh
eT4gYXJncykKewogICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGJhY2tlbmRGdW5jdGlv
bk5hbWUsICgicmVsb2FkUGFnZSIpKTsKICAgIGxvbmcgY2FsbElkID0gMDsKCiAgICBpZiAoYXJn
cy0+bGVuZ3RoKCkgIT0gMSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAg
IHByb3RvY29sRXJyb3IoMCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVu
dHNDb3VudE1lc3NhZ2UoYXJncy0+bGVuZ3RoKCkgLSAxLCAwKSk7CiAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgfQoKICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXIgPT0gMCkgewogICAgICAg
IHByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAiRXJyb3I6IENvbnRy
b2xsZXIgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwogICAgICAgIHJldHVybiBmYWxzZTsK
ICAgIH0KCiAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPnJlbG9hZFBhZ2UoKTsKCiAgICByZXR1
cm4gdHJ1ZTsKfQoKYm9vbCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6c3RhcnRUaW1lbGlu
ZVByb2ZpbGVyKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3MpCnsKICAgIERFRklORV9T
VEFUSUNfTE9DQUwoU3RyaW5nLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAoInN0YXJ0VGltZWxpbmVQ
cm9maWxlciIpKTsKICAgIGxvbmcgY2FsbElkID0gMDsKCiAgICBpZiAoYXJncy0+bGVuZ3RoKCkg
IT0gMSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29sRXJy
b3IoMCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudHNDb3VudE1lc3Nh
Z2UoYXJncy0+bGVuZ3RoKCkgLSAxLCAwKSk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoK
ICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXIgPT0gMCkgewogICAgICAgIHByb3RvY29sRXJy
b3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAiRXJyb3I6IENvbnRyb2xsZXIgaGFuZGxl
ciBpcyBub3QgYXZhaWxhYmxlLiIpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBt
X2luc3BlY3RvckNvbnRyb2xsZXItPnN0YXJ0VGltZWxpbmVQcm9maWxlcigpOwoKICAgIHJldHVy
biB0cnVlOwp9Cgpib29sIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpzdG9wVGltZWxpbmVQ
cm9maWxlcihQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcmdzKQp7CiAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKFN0cmluZywgYmFja2VuZEZ1bmN0aW9uTmFtZSwgKCJzdG9wVGltZWxpbmVQcm9m
aWxlciIpKTsKICAgIGxvbmcgY2FsbElkID0gMDsKCiAgICBpZiAoYXJncy0+bGVuZ3RoKCkgIT0g
MSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29sRXJyb3Io
MCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudHNDb3VudE1lc3NhZ2Uo
YXJncy0+bGVuZ3RoKCkgLSAxLCAwKSk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAg
IGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXIgPT0gMCkgewogICAgICAgIHByb3RvY29sRXJyb3Io
Y2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAiRXJyb3I6IENvbnRyb2xsZXIgaGFuZGxlciBp
cyBub3QgYXZhaWxhYmxlLiIpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBtX2lu
c3BlY3RvckNvbnRyb2xsZXItPnN0b3BUaW1lbGluZVByb2ZpbGVyKCk7CgogICAgcmV0dXJuIHRy
dWU7Cn0KCmJvb2wgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmVuYWJsZURlYnVnZ2VyKFBh
c3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3MpCnsKICAgIERFRklORV9TVEFUSUNfTE9DQUwo
U3RyaW5nLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAoImVuYWJsZURlYnVnZ2VyIikpOwogICAgbG9u
ZyBjYWxsSWQgPSAwOwoKICAgIGlmIChhcmdzLT5sZW5ndGgoKSAhPSAyKSB7CiAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcigwLCBiYWNrZW5kRnVuY3Rp
b25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50c0NvdW50TWVzc2FnZShhcmdzLT5sZW5ndGgoKSAt
IDEsIDEpKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgYm9vbCBhbHdheXM7CiAg
ICBpZiAoIWFyZ3MtPmdldCgxKS0+YXNCb29sKCZhbHdheXMpKSB7CiAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlv
bk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRUeXBlTWVzc2FnZSgxLCAiYWx3YXlzIiwgImJvb2xl
YW4iKSk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIGlmIChtX2luc3BlY3RvckNv
bnRyb2xsZXItPmluc3BlY3RvckJhY2tlbmQoKSA9PSAwKSB7CiAgICAgICAgcHJvdG9jb2xFcnJv
cihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICJFcnJvcjogQmFja2VuZCBoYW5kbGVyIGlz
IG5vdCBhdmFpbGFibGUuIik7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIG1faW5z
cGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdG9yQmFja2VuZCgpLT5lbmFibGVEZWJ1Z2dlcihhbHdh
eXMpOwoKICAgIHJldHVybiB0cnVlOwp9Cgpib29sIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
OjpkaXNhYmxlRGVidWdnZXIoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJncykKewogICAg
REVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICgiZGlzYWJs
ZURlYnVnZ2VyIikpOwogICAgbG9uZyBjYWxsSWQgPSAwOwoKICAgIGlmIChhcmdzLT5sZW5ndGgo
KSAhPSAyKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xF
cnJvcigwLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50c0NvdW50TWVz
c2FnZShhcmdzLT5sZW5ndGgoKSAtIDEsIDEpKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9
CgogICAgYm9vbCBhbHdheXM7CiAgICBpZiAoIWFyZ3MtPmdldCgxKS0+YXNCb29sKCZhbHdheXMp
KSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcihj
YWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRUeXBlTWVzc2Fn
ZSgxLCAiYWx3YXlzIiwgImJvb2xlYW4iKSk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoK
ICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXIgPT0gMCkgewogICAgICAgIHByb3RvY29sRXJy
b3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAiRXJyb3I6IENvbnRyb2xsZXIgaGFuZGxl
ciBpcyBub3QgYXZhaWxhYmxlLiIpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBt
X2luc3BlY3RvckNvbnRyb2xsZXItPmRpc2FibGVEZWJ1Z2dlcihhbHdheXMpOwoKICAgIHJldHVy
biB0cnVlOwp9Cgpib29sIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpzZXRCcmVha3BvaW50
KFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3MpCnsKICAgIERFRklORV9TVEFUSUNfTE9D
QUwoU3RyaW5nLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAoInNldEJyZWFrcG9pbnQiKSk7CiAgICBs
b25nIGNhbGxJZCA9IDA7CgogICAgaWYgKGFyZ3MtPmxlbmd0aCgpICE9IDYpIHsKICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVycm9yKDAsIGJhY2tlbmRGdW5j
dGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRzQ291bnRNZXNzYWdlKGFyZ3MtPmxlbmd0aCgp
IC0gMSwgNSkpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBpZiAoIWFyZ3MtPmdl
dCgxKS0+YXNOdW1iZXIoJmNhbGxJZCkpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICAgICBwcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0
V3JvbmdBcmd1bWVudFR5cGVNZXNzYWdlKDEsICJjYWxsSWQiLCAibG9uZyIpKTsKICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICB9CgogICAgU3RyaW5nIHNvdXJjZUlEOwogICAgaWYgKCFhcmdzLT5n
ZXQoMiktPmFzU3RyaW5nKCZzb3VyY2VJRCkpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICAgICBwcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9y
bWF0V3JvbmdBcmd1bWVudFR5cGVNZXNzYWdlKDIsICJzb3VyY2VJRCIsICJTdHJpbmciKSk7CiAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIHVuc2lnbmVkIGludCBsaW5lTnVtYmVyOwog
ICAgaWYgKCFhcmdzLT5nZXQoMyktPmFzTnVtYmVyKCZsaW5lTnVtYmVyKSkgewogICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5k
RnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50VHlwZU1lc3NhZ2UoMywgImxpbmVOdW1i
ZXIiLCAidW5zaWduZWQgaW50IikpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBi
b29sIGVuYWJsZWQ7CiAgICBpZiAoIWFyZ3MtPmdldCg0KS0+YXNCb29sKCZlbmFibGVkKSkgewog
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElk
LCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50VHlwZU1lc3NhZ2UoNCwg
ImVuYWJsZWQiLCAiYm9vbGVhbiIpKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAg
U3RyaW5nIGNvbmRpdGlvbjsKICAgIGlmICghYXJncy0+Z2V0KDUpLT5hc1N0cmluZygmY29uZGl0
aW9uKSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29sRXJy
b3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50VHlwZU1l
c3NhZ2UoNSwgImNvbmRpdGlvbiIsICJTdHJpbmciKSk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgfQoKICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXIgPT0gMCkgewogICAgICAgIHByb3Rv
Y29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAiRXJyb3I6IENvbnRyb2xsZXIg
aGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0K
CiAgICBib29sIHN1Y2Nlc3M7CiAgICB1bnNpZ25lZCBpbnQgYWN0dWFsTGluZU51bWJlcjsKICAg
IG1faW5zcGVjdG9yQ29udHJvbGxlci0+c2V0QnJlYWtwb2ludChjYWxsSWQsIHNvdXJjZUlELCBs
aW5lTnVtYmVyLCBlbmFibGVkLCBjb25kaXRpb24sICZzdWNjZXNzLCAmYWN0dWFsTGluZU51bWJl
cik7CgogICAgaWYgKG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdG9yQ2xpZW50KCkpIHsK
ICAgICAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3VtZW50cyA9IEluc3BlY3RvckFycmF5
OjpjcmVhdGUoKTsKICAgICAgICBhcmd1bWVudHMtPnB1c2hTdHJpbmcoImRpZFNldEJyZWFrcG9p
bnQiKTsKICAgICAgICBhcmd1bWVudHMtPnB1c2hOdW1iZXIoY2FsbElkKTsKICAgICAgICBhcmd1
bWVudHMtPnB1c2hCb29sKHN1Y2Nlc3MpOwogICAgICAgIGFyZ3VtZW50cy0+cHVzaE51bWJlcihh
Y3R1YWxMaW5lTnVtYmVyKTsKICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3Rv
ckNsaWVudCgpLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoYXJndW1lbnRzLT50b0pTT05TdHJpbmco
KSk7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKfQoKYm9vbCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcjo6cmVtb3ZlQnJlYWtwb2ludChQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcmdzKQp7
CiAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgYmFja2VuZEZ1bmN0aW9uTmFtZSwgKCJy
ZW1vdmVCcmVha3BvaW50IikpOwogICAgbG9uZyBjYWxsSWQgPSAwOwoKICAgIGlmIChhcmdzLT5s
ZW5ndGgoKSAhPSAzKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcHJv
dG9jb2xFcnJvcigwLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50c0Nv
dW50TWVzc2FnZShhcmdzLT5sZW5ndGgoKSAtIDEsIDIpKTsKICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICB9CgogICAgU3RyaW5nIHNvdXJjZUlEOwogICAgaWYgKCFhcmdzLT5nZXQoMSktPmFzU3Ry
aW5nKCZzb3VyY2VJRCkpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBw
cm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1
bWVudFR5cGVNZXNzYWdlKDEsICJzb3VyY2VJRCIsICJTdHJpbmciKSk7CiAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgfQoKICAgIHVuc2lnbmVkIGxvbmcgbGluZU51bWJlcjsKICAgIGlmICghYXJn
cy0+Z2V0KDIpLT5hc051bWJlcigmbGluZU51bWJlcikpIHsKICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFt
ZSwgZm9ybWF0V3JvbmdBcmd1bWVudFR5cGVNZXNzYWdlKDIsICJsaW5lTnVtYmVyIiwgInVuc2ln
bmVkIGxvbmciKSk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIGlmIChtX2luc3Bl
Y3RvckNvbnRyb2xsZXIgPT0gMCkgewogICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNr
ZW5kRnVuY3Rpb25OYW1lLCAiRXJyb3I6IENvbnRyb2xsZXIgaGFuZGxlciBpcyBub3QgYXZhaWxh
YmxlLiIpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBtX2luc3BlY3RvckNvbnRy
b2xsZXItPnJlbW92ZUJyZWFrcG9pbnQoc291cmNlSUQsIGxpbmVOdW1iZXIpOwoKICAgIHJldHVy
biB0cnVlOwp9Cgpib29sIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjphY3RpdmF0ZUJyZWFr
cG9pbnRzKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3MpCnsKICAgIERFRklORV9TVEFU
SUNfTE9DQUwoU3RyaW5nLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAoImFjdGl2YXRlQnJlYWtwb2lu
dHMiKSk7CiAgICBsb25nIGNhbGxJZCA9IDA7CgogICAgaWYgKGFyZ3MtPmxlbmd0aCgpICE9IDEp
IHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVycm9yKDAs
IGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRzQ291bnRNZXNzYWdlKGFy
Z3MtPmxlbmd0aCgpIC0gMSwgMCkpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBp
ZiAoKCZTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkpID09IDApIHsKICAgICAgICBwcm90b2Nv
bEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgIkVycm9yOiBEZWJ1ZyBoYW5kbGVy
IGlzIG5vdCBhdmFpbGFibGUuIik7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgICgm
U2NyaXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgpKS0+YWN0aXZhdGVCcmVha3BvaW50cygpOwoKICAg
IHJldHVybiB0cnVlOwp9Cgpib29sIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpkZWFjdGl2
YXRlQnJlYWtwb2ludHMoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJncykKewogICAgREVG
SU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICgiZGVhY3RpdmF0
ZUJyZWFrcG9pbnRzIikpOwogICAgbG9uZyBjYWxsSWQgPSAwOwoKICAgIGlmIChhcmdzLT5sZW5n
dGgoKSAhPSAxKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9j
b2xFcnJvcigwLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50c0NvdW50
TWVzc2FnZShhcmdzLT5sZW5ndGgoKSAtIDEsIDApKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICB9CgogICAgaWYgKCgmU2NyaXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgpKSA9PSAwKSB7CiAgICAg
ICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICJFcnJvcjogRGVi
dWcgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAg
IH0KCiAgICAoJlNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKSktPmRlYWN0aXZhdGVCcmVha3Bv
aW50cygpOwoKICAgIHJldHVybiB0cnVlOwp9Cgpib29sIEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyOjpwYXVzZShQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcmdzKQp7CiAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKFN0cmluZywgYmFja2VuZEZ1bmN0aW9uTmFtZSwgKCJwYXVzZSIpKTsKICAg
IGxvbmcgY2FsbElkID0gMDsKCiAgICBpZiAoYXJncy0+bGVuZ3RoKCkgIT0gMSkgewogICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29sRXJyb3IoMCwgYmFja2VuZEZ1
bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudHNDb3VudE1lc3NhZ2UoYXJncy0+bGVuZ3Ro
KCkgLSAxLCAwKSk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIGlmICgoJlNjcmlw
dERlYnVnU2VydmVyOjpzaGFyZWQoKSkgPT0gMCkgewogICAgICAgIHByb3RvY29sRXJyb3IoY2Fs
bElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAiRXJyb3I6IERlYnVnIGhhbmRsZXIgaXMgbm90IGF2
YWlsYWJsZS4iKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgKCZTY3JpcHREZWJ1
Z1NlcnZlcjo6c2hhcmVkKCkpLT5wYXVzZSgpOwoKICAgIHJldHVybiB0cnVlOwp9Cgpib29sIElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpyZXN1bWUoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJh
eT4gYXJncykKewogICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGJhY2tlbmRGdW5jdGlv
bk5hbWUsICgicmVzdW1lIikpOwogICAgbG9uZyBjYWxsSWQgPSAwOwoKICAgIGlmIChhcmdzLT5s
ZW5ndGgoKSAhPSAxKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcHJv
dG9jb2xFcnJvcigwLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50c0Nv
dW50TWVzc2FnZShhcmdzLT5sZW5ndGgoKSAtIDEsIDApKTsKICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICB9CgogICAgaWYgKG1faW5zcGVjdG9yQ29udHJvbGxlciA9PSAwKSB7CiAgICAgICAgcHJv
dG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICJFcnJvcjogQ29udHJvbGxl
ciBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
fQoKICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+cmVzdW1lKCk7CgogICAgcmV0dXJuIHRydWU7
Cn0KCmJvb2wgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnN0ZXBPdmVyU3RhdGVtZW50KFBh
c3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3MpCnsKICAgIERFRklORV9TVEFUSUNfTE9DQUwo
U3RyaW5nLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAoInN0ZXBPdmVyU3RhdGVtZW50IikpOwogICAg
bG9uZyBjYWxsSWQgPSAwOwoKICAgIGlmIChhcmdzLT5sZW5ndGgoKSAhPSAxKSB7CiAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcigwLCBiYWNrZW5kRnVu
Y3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50c0NvdW50TWVzc2FnZShhcmdzLT5sZW5ndGgo
KSAtIDEsIDApKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgaWYgKCgmU2NyaXB0
RGVidWdTZXJ2ZXI6OnNoYXJlZCgpKSA9PSAwKSB7CiAgICAgICAgcHJvdG9jb2xFcnJvcihjYWxs
SWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICJFcnJvcjogRGVidWcgaGFuZGxlciBpcyBub3QgYXZh
aWxhYmxlLiIpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICAoJlNjcmlwdERlYnVn
U2VydmVyOjpzaGFyZWQoKSktPnN0ZXBPdmVyU3RhdGVtZW50KCk7CgogICAgcmV0dXJuIHRydWU7
Cn0KCmJvb2wgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnN0ZXBJbnRvU3RhdGVtZW50KFBh
c3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3MpCnsKICAgIERFRklORV9TVEFUSUNfTE9DQUwo
U3RyaW5nLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAoInN0ZXBJbnRvU3RhdGVtZW50IikpOwogICAg
bG9uZyBjYWxsSWQgPSAwOwoKICAgIGlmIChhcmdzLT5sZW5ndGgoKSAhPSAxKSB7CiAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcigwLCBiYWNrZW5kRnVu
Y3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50c0NvdW50TWVzc2FnZShhcmdzLT5sZW5ndGgo
KSAtIDEsIDApKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgaWYgKCgmU2NyaXB0
RGVidWdTZXJ2ZXI6OnNoYXJlZCgpKSA9PSAwKSB7CiAgICAgICAgcHJvdG9jb2xFcnJvcihjYWxs
SWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICJFcnJvcjogRGVidWcgaGFuZGxlciBpcyBub3QgYXZh
aWxhYmxlLiIpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICAoJlNjcmlwdERlYnVn
U2VydmVyOjpzaGFyZWQoKSktPnN0ZXBJbnRvU3RhdGVtZW50KCk7CgogICAgcmV0dXJuIHRydWU7
Cn0KCmJvb2wgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnN0ZXBPdXRPZkZ1bmN0aW9uKFBh
c3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3MpCnsKICAgIERFRklORV9TVEFUSUNfTE9DQUwo
U3RyaW5nLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAoInN0ZXBPdXRPZkZ1bmN0aW9uIikpOwogICAg
bG9uZyBjYWxsSWQgPSAwOwoKICAgIGlmIChhcmdzLT5sZW5ndGgoKSAhPSAxKSB7CiAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcigwLCBiYWNrZW5kRnVu
Y3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50c0NvdW50TWVzc2FnZShhcmdzLT5sZW5ndGgo
KSAtIDEsIDApKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgaWYgKCgmU2NyaXB0
RGVidWdTZXJ2ZXI6OnNoYXJlZCgpKSA9PSAwKSB7CiAgICAgICAgcHJvdG9jb2xFcnJvcihjYWxs
SWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICJFcnJvcjogRGVidWcgaGFuZGxlciBpcyBub3QgYXZh
aWxhYmxlLiIpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICAoJlNjcmlwdERlYnVn
U2VydmVyOjpzaGFyZWQoKSktPnN0ZXBPdXRPZkZ1bmN0aW9uKCk7CgogICAgcmV0dXJuIHRydWU7
Cn0KCmJvb2wgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnNldFBhdXNlT25FeGNlcHRpb25z
U3RhdGUoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJncykKewogICAgREVGSU5FX1NUQVRJ
Q19MT0NBTChTdHJpbmcsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICgic2V0UGF1c2VPbkV4Y2VwdGlv
bnNTdGF0ZSIpKTsKICAgIGxvbmcgY2FsbElkID0gMDsKCiAgICBpZiAoYXJncy0+bGVuZ3RoKCkg
IT0gMikgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29sRXJy
b3IoMCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudHNDb3VudE1lc3Nh
Z2UoYXJncy0+bGVuZ3RoKCkgLSAxLCAxKSk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoK
ICAgIGxvbmcgcGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZTsKICAgIGlmICghYXJncy0+Z2V0KDEpLT5h
c051bWJlcigmcGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSkpIHsKICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFt
ZSwgZm9ybWF0V3JvbmdBcmd1bWVudFR5cGVNZXNzYWdlKDEsICJwYXVzZU9uRXhjZXB0aW9uc1N0
YXRlIiwgImxvbmciKSk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIGlmIChtX2lu
c3BlY3RvckNvbnRyb2xsZXIgPT0gMCkgewogICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBi
YWNrZW5kRnVuY3Rpb25OYW1lLCAiRXJyb3I6IENvbnRyb2xsZXIgaGFuZGxlciBpcyBub3QgYXZh
aWxhYmxlLiIpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBtX2luc3BlY3RvckNv
bnRyb2xsZXItPnNldFBhdXNlT25FeGNlcHRpb25zU3RhdGUocGF1c2VPbkV4Y2VwdGlvbnNTdGF0
ZSk7CgogICAgcmV0dXJuIHRydWU7Cn0KCmJvb2wgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6
OmVkaXRTY3JpcHRTb3VyY2UoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJncykKewogICAg
REVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICgiZWRpdFNj
cmlwdFNvdXJjZSIpKTsKICAgIGxvbmcgY2FsbElkID0gMDsKCiAgICBpZiAoYXJncy0+bGVuZ3Ro
KCkgIT0gNCkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29s
RXJyb3IoMCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudHNDb3VudE1l
c3NhZ2UoYXJncy0+bGVuZ3RoKCkgLSAxLCAzKSk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
fQoKICAgIGlmICghYXJncy0+Z2V0KDEpLT5hc051bWJlcigmY2FsbElkKSkgewogICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5k
RnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50VHlwZU1lc3NhZ2UoMSwgImNhbGxJZCIs
ICJsb25nIikpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBTdHJpbmcgc291cmNl
SUQ7CiAgICBpZiAoIWFyZ3MtPmdldCgyKS0+YXNTdHJpbmcoJnNvdXJjZUlEKSkgewogICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNr
ZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50VHlwZU1lc3NhZ2UoMiwgInNvdXJj
ZUlEIiwgIlN0cmluZyIpKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgU3RyaW5n
IG5ld0NvbnRlbnQ7CiAgICBpZiAoIWFyZ3MtPmdldCgzKS0+YXNTdHJpbmcoJm5ld0NvbnRlbnQp
KSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcihj
YWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRUeXBlTWVzc2Fn
ZSgzLCAibmV3Q29udGVudCIsICJTdHJpbmciKSk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
fQoKICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXIgPT0gMCkgewogICAgICAgIHByb3RvY29s
RXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAiRXJyb3I6IENvbnRyb2xsZXIgaGFu
ZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAg
ICBib29sIHN1Y2Nlc3M7CiAgICBTdHJpbmcgcmVzdWx0OwogICAgUmVmUHRyPEluc3BlY3RvclZh
bHVlPiBuZXdDYWxsRnJhbWVzOwogICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5lZGl0U2NyaXB0
U291cmNlKGNhbGxJZCwgc291cmNlSUQsIG5ld0NvbnRlbnQsICZzdWNjZXNzLCAmcmVzdWx0LCAm
bmV3Q2FsbEZyYW1lcyk7CgogICAgaWYgKG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdG9y
Q2xpZW50KCkpIHsKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3VtZW50cyA9IElu
c3BlY3RvckFycmF5OjpjcmVhdGUoKTsKICAgICAgICBhcmd1bWVudHMtPnB1c2hTdHJpbmcoImRp
ZEVkaXRTY3JpcHRTb3VyY2UiKTsKICAgICAgICBhcmd1bWVudHMtPnB1c2hOdW1iZXIoY2FsbElk
KTsKICAgICAgICBhcmd1bWVudHMtPnB1c2hCb29sKHN1Y2Nlc3MpOwogICAgICAgIGFyZ3VtZW50
cy0+cHVzaFN0cmluZyhyZXN1bHQpOwogICAgICAgIGFyZ3VtZW50cy0+cHVzaChuZXdDYWxsRnJh
bWVzKTsKICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RvckNsaWVudCgpLT5z
ZW5kTWVzc2FnZVRvRnJvbnRlbmQoYXJndW1lbnRzLT50b0pTT05TdHJpbmcoKSk7CiAgICB9CiAg
ICByZXR1cm4gdHJ1ZTsKfQoKYm9vbCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U2Ny
aXB0U291cmNlKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3MpCnsKICAgIERFRklORV9T
VEFUSUNfTE9DQUwoU3RyaW5nLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAoImdldFNjcmlwdFNvdXJj
ZSIpKTsKICAgIGxvbmcgY2FsbElkID0gMDsKCiAgICBpZiAoYXJncy0+bGVuZ3RoKCkgIT0gMykg
ewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29sRXJyb3IoMCwg
YmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudHNDb3VudE1lc3NhZ2UoYXJn
cy0+bGVuZ3RoKCkgLSAxLCAyKSk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIGlm
ICghYXJncy0+Z2V0KDEpLT5hc051bWJlcigmY2FsbElkKSkgewogICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25O
YW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50VHlwZU1lc3NhZ2UoMSwgImNhbGxJZCIsICJsb25nIikp
OwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBTdHJpbmcgc291cmNlSUQ7CiAgICBp
ZiAoIWFyZ3MtPmdldCgyKS0+YXNTdHJpbmcoJnNvdXJjZUlEKSkgewogICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rp
b25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50VHlwZU1lc3NhZ2UoMiwgInNvdXJjZUlEIiwgIlN0
cmluZyIpKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgaWYgKG1faW5zcGVjdG9y
Q29udHJvbGxlciA9PSAwKSB7CiAgICAgICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRG
dW5jdGlvbk5hbWUsICJFcnJvcjogQ29udHJvbGxlciBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUu
Iik7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIFN0cmluZyBzY3JpcHRTb3VyY2U7
CiAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmdldFNjcmlwdFNvdXJjZShjYWxsSWQsIHNvdXJj
ZUlELCAmc2NyaXB0U291cmNlKTsKCiAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNw
ZWN0b3JDbGllbnQoKSkgewogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJndW1lbnRz
ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwogICAgICAgIGFyZ3VtZW50cy0+cHVzaFN0cmlu
ZygiZGlkR2V0U2NyaXB0U291cmNlIik7CiAgICAgICAgYXJndW1lbnRzLT5wdXNoTnVtYmVyKGNh
bGxJZCk7CiAgICAgICAgYXJndW1lbnRzLT5wdXNoU3RyaW5nKHNjcmlwdFNvdXJjZSk7CiAgICAg
ICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0b3JDbGllbnQoKS0+c2VuZE1lc3NhZ2VU
b0Zyb250ZW5kKGFyZ3VtZW50cy0+dG9KU09OU3RyaW5nKCkpOwogICAgfQogICAgcmV0dXJuIHRy
dWU7Cn0KCmJvb2wgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmVuYWJsZVByb2ZpbGVyKFBh
c3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3MpCnsKICAgIERFRklORV9TVEFUSUNfTE9DQUwo
U3RyaW5nLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAoImVuYWJsZVByb2ZpbGVyIikpOwogICAgbG9u
ZyBjYWxsSWQgPSAwOwoKICAgIGlmIChhcmdzLT5sZW5ndGgoKSAhPSAyKSB7CiAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcigwLCBiYWNrZW5kRnVuY3Rp
b25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50c0NvdW50TWVzc2FnZShhcmdzLT5sZW5ndGgoKSAt
IDEsIDEpKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgYm9vbCBhbHdheXM7CiAg
ICBpZiAoIWFyZ3MtPmdldCgxKS0+YXNCb29sKCZhbHdheXMpKSB7CiAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlv
bk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRUeXBlTWVzc2FnZSgxLCAiYWx3YXlzIiwgImJvb2xl
YW4iKSk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIGlmIChtX2luc3BlY3RvckNv
bnRyb2xsZXIgPT0gMCkgewogICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVu
Y3Rpb25OYW1lLCAiRXJyb3I6IENvbnRyb2xsZXIgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIp
OwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBtX2luc3BlY3RvckNvbnRyb2xsZXIt
PmVuYWJsZVByb2ZpbGVyKGFsd2F5cyk7CgogICAgcmV0dXJuIHRydWU7Cn0KCmJvb2wgSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXI6OmRpc2FibGVQcm9maWxlcihQYXNzUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiBhcmdzKQp7CiAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgYmFja2VuZEZ1
bmN0aW9uTmFtZSwgKCJkaXNhYmxlUHJvZmlsZXIiKSk7CiAgICBsb25nIGNhbGxJZCA9IDA7Cgog
ICAgaWYgKGFyZ3MtPmxlbmd0aCgpICE9IDIpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICAgICBwcm90b2NvbEVycm9yKDAsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdy
b25nQXJndW1lbnRzQ291bnRNZXNzYWdlKGFyZ3MtPmxlbmd0aCgpIC0gMSwgMSkpOwogICAgICAg
IHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBib29sIGFsd2F5czsKICAgIGlmICghYXJncy0+Z2V0
KDEpLT5hc0Jvb2woJmFsd2F5cykpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICAgICBwcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3Jv
bmdBcmd1bWVudFR5cGVNZXNzYWdlKDEsICJhbHdheXMiLCAiYm9vbGVhbiIpKTsKICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICB9CgogICAgaWYgKG1faW5zcGVjdG9yQ29udHJvbGxlciA9PSAwKSB7
CiAgICAgICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICJFcnJv
cjogQ29udHJvbGxlciBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CiAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgfQoKICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+ZGlzYWJsZVByb2ZpbGVy
KGFsd2F5cyk7CgogICAgcmV0dXJuIHRydWU7Cn0KCmJvb2wgSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXI6OnN0YXJ0UHJvZmlsaW5nKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3MpCnsK
ICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAoInN0
YXJ0UHJvZmlsaW5nIikpOwogICAgbG9uZyBjYWxsSWQgPSAwOwoKICAgIGlmIChhcmdzLT5sZW5n
dGgoKSAhPSAxKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9j
b2xFcnJvcigwLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50c0NvdW50
TWVzc2FnZShhcmdzLT5sZW5ndGgoKSAtIDEsIDApKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICB9CgogICAgaWYgKG1faW5zcGVjdG9yQ29udHJvbGxlciA9PSAwKSB7CiAgICAgICAgcHJvdG9j
b2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICJFcnJvcjogQ29udHJvbGxlciBo
YW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoK
ICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+c3RhcnRQcm9maWxpbmcoKTsKCiAgICByZXR1cm4g
dHJ1ZTsKfQoKYm9vbCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6c3RvcFByb2ZpbGluZyhQ
YXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcmdzKQp7CiAgICBERUZJTkVfU1RBVElDX0xPQ0FM
KFN0cmluZywgYmFja2VuZEZ1bmN0aW9uTmFtZSwgKCJzdG9wUHJvZmlsaW5nIikpOwogICAgbG9u
ZyBjYWxsSWQgPSAwOwoKICAgIGlmIChhcmdzLT5sZW5ndGgoKSAhPSAxKSB7CiAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcigwLCBiYWNrZW5kRnVuY3Rp
b25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50c0NvdW50TWVzc2FnZShhcmdzLT5sZW5ndGgoKSAt
IDEsIDApKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgaWYgKG1faW5zcGVjdG9y
Q29udHJvbGxlciA9PSAwKSB7CiAgICAgICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRG
dW5jdGlvbk5hbWUsICJFcnJvcjogQ29udHJvbGxlciBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUu
Iik7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIG1faW5zcGVjdG9yQ29udHJvbGxl
ci0+c3RvcFByb2ZpbGluZygpOwoKICAgIHJldHVybiB0cnVlOwp9Cgpib29sIEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyOjpnZXRQcm9maWxlSGVhZGVycyhQYXNzUmVmUHRyPEluc3BlY3RvckFy
cmF5PiBhcmdzKQp7CiAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgYmFja2VuZEZ1bmN0
aW9uTmFtZSwgKCJnZXRQcm9maWxlSGVhZGVycyIpKTsKICAgIGxvbmcgY2FsbElkID0gMDsKCiAg
ICBpZiAoYXJncy0+bGVuZ3RoKCkgIT0gMikgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgIHByb3RvY29sRXJyb3IoMCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3Jv
bmdBcmd1bWVudHNDb3VudE1lc3NhZ2UoYXJncy0+bGVuZ3RoKCkgLSAxLCAxKSk7CiAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgfQoKICAgIGlmICghYXJncy0+Z2V0KDEpLT5hc051bWJlcigmY2Fs
bElkKSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29sRXJy
b3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50VHlwZU1l
c3NhZ2UoMSwgImNhbGxJZCIsICJsb25nIikpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0K
CiAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyID09IDApIHsKICAgICAgICBwcm90b2NvbEVy
cm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgIkVycm9yOiBDb250cm9sbGVyIGhhbmRs
ZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAg
UmVmUHRyPEluc3BlY3RvckFycmF5PiBoZWFkZXJzOwogICAgbV9pbnNwZWN0b3JDb250cm9sbGVy
LT5nZXRQcm9maWxlSGVhZGVycyhjYWxsSWQsICZoZWFkZXJzKTsKCiAgICBpZiAobV9pbnNwZWN0
b3JDb250cm9sbGVyLT5pbnNwZWN0b3JDbGllbnQoKSkgewogICAgICAgIFJlZlB0cjxJbnNwZWN0
b3JBcnJheT4gYXJndW1lbnRzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwogICAgICAgIGFy
Z3VtZW50cy0+cHVzaFN0cmluZygiZGlkR2V0UHJvZmlsZUhlYWRlcnMiKTsKICAgICAgICBhcmd1
bWVudHMtPnB1c2hOdW1iZXIoY2FsbElkKTsKICAgICAgICBhcmd1bWVudHMtPnB1c2goaGVhZGVy
cyk7CiAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0b3JDbGllbnQoKS0+c2Vu
ZE1lc3NhZ2VUb0Zyb250ZW5kKGFyZ3VtZW50cy0+dG9KU09OU3RyaW5nKCkpOwogICAgfQogICAg
cmV0dXJuIHRydWU7Cn0KCmJvb2wgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFByb2Zp
bGUoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJncykKewogICAgREVGSU5FX1NUQVRJQ19M
T0NBTChTdHJpbmcsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICgiZ2V0UHJvZmlsZSIpKTsKICAgIGxv
bmcgY2FsbElkID0gMDsKCiAgICBpZiAoYXJncy0+bGVuZ3RoKCkgIT0gMykgewogICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29sRXJyb3IoMCwgYmFja2VuZEZ1bmN0
aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudHNDb3VudE1lc3NhZ2UoYXJncy0+bGVuZ3RoKCkg
LSAxLCAyKSk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIGlmICghYXJncy0+Z2V0
KDEpLT5hc051bWJlcigmY2FsbElkKSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRX
cm9uZ0FyZ3VtZW50VHlwZU1lc3NhZ2UoMSwgImNhbGxJZCIsICJsb25nIikpOwogICAgICAgIHJl
dHVybiBmYWxzZTsKICAgIH0KCiAgICB1bnNpZ25lZCBsb25nIHVpZDsKICAgIGlmICghYXJncy0+
Z2V0KDIpLT5hc051bWJlcigmdWlkKSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRX
cm9uZ0FyZ3VtZW50VHlwZU1lc3NhZ2UoMiwgInVpZCIsICJ1bnNpZ25lZCBsb25nIikpOwogICAg
ICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyID09
IDApIHsKICAgICAgICBwcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwg
IkVycm9yOiBDb250cm9sbGVyIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICB9CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcHJvZmlsZTsK
ICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+Z2V0UHJvZmlsZShjYWxsSWQsIHVpZCwgJnByb2Zp
bGUpOwoKICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RvckNsaWVudCgpKSB7
CiAgICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcmd1bWVudHMgPSBJbnNwZWN0b3JBcnJh
eTo6Y3JlYXRlKCk7CiAgICAgICAgYXJndW1lbnRzLT5wdXNoU3RyaW5nKCJkaWRHZXRQcm9maWxl
Iik7CiAgICAgICAgYXJndW1lbnRzLT5wdXNoTnVtYmVyKGNhbGxJZCk7CiAgICAgICAgYXJndW1l
bnRzLT5wdXNoKHByb2ZpbGUpOwogICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVj
dG9yQ2xpZW50KCktPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChhcmd1bWVudHMtPnRvSlNPTlN0cmlu
ZygpKTsKICAgIH0KICAgIHJldHVybiB0cnVlOwp9Cgpib29sIEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyOjpyZW1vdmVQcm9maWxlKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3MpCnsK
ICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAoInJl
bW92ZVByb2ZpbGUiKSk7CiAgICBsb25nIGNhbGxJZCA9IDA7CgogICAgaWYgKGFyZ3MtPmxlbmd0
aCgpICE9IDIpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBwcm90b2Nv
bEVycm9yKDAsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRzQ291bnRN
ZXNzYWdlKGFyZ3MtPmxlbmd0aCgpIC0gMSwgMSkpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAg
IH0KCiAgICB1bnNpZ25lZCBsb25nIHVpZDsKICAgIGlmICghYXJncy0+Z2V0KDEpLT5hc051bWJl
cigmdWlkKSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29s
RXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50VHlw
ZU1lc3NhZ2UoMSwgInVpZCIsICJ1bnNpZ25lZCBsb25nIikpOwogICAgICAgIHJldHVybiBmYWxz
ZTsKICAgIH0KCiAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyID09IDApIHsKICAgICAgICBw
cm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgIkVycm9yOiBDb250cm9s
bGVyIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICB9CgogICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5yZW1vdmVQcm9maWxlKHVpZCk7CgogICAg
cmV0dXJuIHRydWU7Cn0KCmJvb2wgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmNsZWFyUHJv
ZmlsZXMoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJncykKewogICAgREVGSU5FX1NUQVRJ
Q19MT0NBTChTdHJpbmcsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICgiY2xlYXJQcm9maWxlcyIpKTsK
ICAgIGxvbmcgY2FsbElkID0gMDsKCiAgICBpZiAoYXJncy0+bGVuZ3RoKCkgIT0gMSkgewogICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29sRXJyb3IoMCwgYmFja2Vu
ZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudHNDb3VudE1lc3NhZ2UoYXJncy0+bGVu
Z3RoKCkgLSAxLCAwKSk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIGlmIChtX2lu
c3BlY3RvckNvbnRyb2xsZXIgPT0gMCkgewogICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBi
YWNrZW5kRnVuY3Rpb25OYW1lLCAiRXJyb3I6IENvbnRyb2xsZXIgaGFuZGxlciBpcyBub3QgYXZh
aWxhYmxlLiIpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBtX2luc3BlY3RvckNv
bnRyb2xsZXItPmNsZWFyUHJvZmlsZXMoKTsKCiAgICByZXR1cm4gdHJ1ZTsKfQoKYm9vbCBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6dGFrZUhlYXBTbmFwc2hvdChQYXNzUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiBhcmdzKQp7CiAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgYmFja2Vu
ZEZ1bmN0aW9uTmFtZSwgKCJ0YWtlSGVhcFNuYXBzaG90IikpOwogICAgbG9uZyBjYWxsSWQgPSAw
OwoKICAgIGlmIChhcmdzLT5sZW5ndGgoKSAhPSAxKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcigwLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3Jt
YXRXcm9uZ0FyZ3VtZW50c0NvdW50TWVzc2FnZShhcmdzLT5sZW5ndGgoKSAtIDEsIDApKTsKICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgaWYgKG1faW5zcGVjdG9yQ29udHJvbGxlci0+
aW5zcGVjdG9yQmFja2VuZCgpID09IDApIHsKICAgICAgICBwcm90b2NvbEVycm9yKGNhbGxJZCwg
YmFja2VuZEZ1bmN0aW9uTmFtZSwgIkVycm9yOiBCYWNrZW5kIGhhbmRsZXIgaXMgbm90IGF2YWls
YWJsZS4iKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgbV9pbnNwZWN0b3JDb250
cm9sbGVyLT5pbnNwZWN0b3JCYWNrZW5kKCktPnRha2VIZWFwU25hcHNob3QoKTsKCiAgICByZXR1
cm4gdHJ1ZTsKfQoKYm9vbCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0UHJvZmlsZXJM
b2dMaW5lcyhQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcmdzKQp7CiAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKFN0cmluZywgYmFja2VuZEZ1bmN0aW9uTmFtZSwgKCJnZXRQcm9maWxlckxvZ0xp
bmVzIikpOwogICAgbG9uZyBjYWxsSWQgPSAwOwoKICAgIGlmIChhcmdzLT5sZW5ndGgoKSAhPSAz
KSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcigw
LCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50c0NvdW50TWVzc2FnZShh
cmdzLT5sZW5ndGgoKSAtIDEsIDIpKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAg
aWYgKCFhcmdzLT5nZXQoMSktPmFzTnVtYmVyKCZjYWxsSWQpKSB7CiAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlv
bk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRUeXBlTWVzc2FnZSgxLCAiY2FsbElkIiwgImxvbmci
KSk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIGxvbmcgaW5Qb3NpdGlvbjsKICAg
IGlmICghYXJncy0+Z2V0KDIpLT5hc051bWJlcigmaW5Qb3NpdGlvbikpIHsKICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1
bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudFR5cGVNZXNzYWdlKDIsICJpblBvc2l0aW9u
IiwgImxvbmciKSk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIGlmIChtX2luc3Bl
Y3RvckNvbnRyb2xsZXItPmluc3BlY3RvckJhY2tlbmQoKSA9PSAwKSB7CiAgICAgICAgcHJvdG9j
b2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICJFcnJvcjogQmFja2VuZCBoYW5k
bGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAg
IGxvbmcgb3V0UG9zaXRpb247CiAgICBTdHJpbmcgbG9nOwogICAgbV9pbnNwZWN0b3JDb250cm9s
bGVyLT5pbnNwZWN0b3JCYWNrZW5kKCktPmdldFByb2ZpbGVyTG9nTGluZXMoY2FsbElkLCBpblBv
c2l0aW9uLCAmb3V0UG9zaXRpb24sICZsb2cpOwoKICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xs
ZXItPmluc3BlY3RvckNsaWVudCgpKSB7CiAgICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBh
cmd1bWVudHMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CiAgICAgICAgYXJndW1lbnRzLT5w
dXNoU3RyaW5nKCJkaWRHZXRQcm9maWxlckxvZ0xpbmVzIik7CiAgICAgICAgYXJndW1lbnRzLT5w
dXNoTnVtYmVyKGNhbGxJZCk7CiAgICAgICAgYXJndW1lbnRzLT5wdXNoTnVtYmVyKG91dFBvc2l0
aW9uKTsKICAgICAgICBhcmd1bWVudHMtPnB1c2hTdHJpbmcobG9nKTsKICAgICAgICBtX2luc3Bl
Y3RvckNvbnRyb2xsZXItPmluc3BlY3RvckNsaWVudCgpLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQo
YXJndW1lbnRzLT50b0pTT05TdHJpbmcoKSk7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKfQoKYm9v
bCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6c2V0SW5qZWN0ZWRTY3JpcHRTb3VyY2UoUGFz
c1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJncykKewogICAgREVGSU5FX1NUQVRJQ19MT0NBTChT
dHJpbmcsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICgic2V0SW5qZWN0ZWRTY3JpcHRTb3VyY2UiKSk7
CiAgICBsb25nIGNhbGxJZCA9IDA7CgogICAgaWYgKGFyZ3MtPmxlbmd0aCgpICE9IDIpIHsKICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVycm9yKDAsIGJhY2tl
bmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRzQ291bnRNZXNzYWdlKGFyZ3MtPmxl
bmd0aCgpIC0gMSwgMSkpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBTdHJpbmcg
c2NyaXB0U291cmNlOwogICAgaWYgKCFhcmdzLT5nZXQoMSktPmFzU3RyaW5nKCZzY3JpcHRTb3Vy
Y2UpKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJv
cihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRUeXBlTWVz
c2FnZSgxLCAic2NyaXB0U291cmNlIiwgIlN0cmluZyIpKTsKICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICB9CgogICAgaWYgKG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdG9yQmFja2VuZCgp
ID09IDApIHsKICAgICAgICBwcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFt
ZSwgIkVycm9yOiBCYWNrZW5kIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICB9CgogICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0b3JC
YWNrZW5kKCktPnNldEluamVjdGVkU2NyaXB0U291cmNlKHNjcmlwdFNvdXJjZSk7CgogICAgcmV0
dXJuIHRydWU7Cn0KCmJvb2wgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoT25J
bmplY3RlZFNjcmlwdChQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcmdzKQp7CiAgICBERUZJ
TkVfU1RBVElDX0xPQ0FMKFN0cmluZywgYmFja2VuZEZ1bmN0aW9uTmFtZSwgKCJkaXNwYXRjaE9u
SW5qZWN0ZWRTY3JpcHQiKSk7CiAgICBsb25nIGNhbGxJZCA9IDA7CgogICAgaWYgKGFyZ3MtPmxl
bmd0aCgpICE9IDYpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBwcm90
b2NvbEVycm9yKDAsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRzQ291
bnRNZXNzYWdlKGFyZ3MtPmxlbmd0aCgpIC0gMSwgNSkpOwogICAgICAgIHJldHVybiBmYWxzZTsK
ICAgIH0KCiAgICBpZiAoIWFyZ3MtPmdldCgxKS0+YXNOdW1iZXIoJmNhbGxJZCkpIHsKICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVycm9yKGNhbGxJZCwgYmFj
a2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudFR5cGVNZXNzYWdlKDEsICJjYWxs
SWQiLCAibG9uZyIpKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgbG9uZyBpbmpl
Y3RlZFNjcmlwdElkOwogICAgaWYgKCFhcmdzLT5nZXQoMiktPmFzTnVtYmVyKCZpbmplY3RlZFNj
cmlwdElkKSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29s
RXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50VHlw
ZU1lc3NhZ2UoMiwgImluamVjdGVkU2NyaXB0SWQiLCAibG9uZyIpKTsKICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICB9CgogICAgU3RyaW5nIG1ldGhvZE5hbWU7CiAgICBpZiAoIWFyZ3MtPmdldCgz
KS0+YXNTdHJpbmcoJm1ldGhvZE5hbWUpKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1h
dFdyb25nQXJndW1lbnRUeXBlTWVzc2FnZSgzLCAibWV0aG9kTmFtZSIsICJTdHJpbmciKSk7CiAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIFN0cmluZyBhcmd1bWVudHM7CiAgICBpZiAo
IWFyZ3MtPmdldCg0KS0+YXNTdHJpbmcoJmFyZ3VtZW50cykpIHsKICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9u
TmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudFR5cGVNZXNzYWdlKDQsICJhcmd1bWVudHMiLCAiU3Ry
aW5nIikpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBib29sIGFzeW5jOwogICAg
aWYgKCFhcmdzLT5nZXQoNSktPmFzQm9vbCgmYXN5bmMpKSB7CiAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5h
bWUsIGZvcm1hdFdyb25nQXJndW1lbnRUeXBlTWVzc2FnZSg1LCAiYXN5bmMiLCAiYm9vbGVhbiIp
KTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgaWYgKG1faW5zcGVjdG9yQ29udHJv
bGxlci0+aW5zcGVjdG9yQmFja2VuZCgpID09IDApIHsKICAgICAgICBwcm90b2NvbEVycm9yKGNh
bGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgIkVycm9yOiBCYWNrZW5kIGhhbmRsZXIgaXMgbm90
IGF2YWlsYWJsZS4iKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgbV9pbnNwZWN0
b3JDb250cm9sbGVyLT5pbnNwZWN0b3JCYWNrZW5kKCktPmRpc3BhdGNoT25JbmplY3RlZFNjcmlw
dChjYWxsSWQsIGluamVjdGVkU2NyaXB0SWQsIG1ldGhvZE5hbWUsIGFyZ3VtZW50cywgYXN5bmMp
OwoKICAgIHJldHVybiB0cnVlOwp9Cgpib29sIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjph
ZGRTY3JpcHRUb0V2YWx1YXRlT25Mb2FkKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3Mp
CnsKICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAo
ImFkZFNjcmlwdFRvRXZhbHVhdGVPbkxvYWQiKSk7CiAgICBsb25nIGNhbGxJZCA9IDA7CgogICAg
aWYgKGFyZ3MtPmxlbmd0aCgpICE9IDIpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICAgICBwcm90b2NvbEVycm9yKDAsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25n
QXJndW1lbnRzQ291bnRNZXNzYWdlKGFyZ3MtPmxlbmd0aCgpIC0gMSwgMSkpOwogICAgICAgIHJl
dHVybiBmYWxzZTsKICAgIH0KCiAgICBTdHJpbmcgc2NyaXB0U291cmNlOwogICAgaWYgKCFhcmdz
LT5nZXQoMSktPmFzU3RyaW5nKCZzY3JpcHRTb3VyY2UpKSB7CiAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5h
bWUsIGZvcm1hdFdyb25nQXJndW1lbnRUeXBlTWVzc2FnZSgxLCAic2NyaXB0U291cmNlIiwgIlN0
cmluZyIpKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgaWYgKG1faW5zcGVjdG9y
Q29udHJvbGxlciA9PSAwKSB7CiAgICAgICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRG
dW5jdGlvbk5hbWUsICJFcnJvcjogQ29udHJvbGxlciBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUu
Iik7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIG1faW5zcGVjdG9yQ29udHJvbGxl
ci0+YWRkU2NyaXB0VG9FdmFsdWF0ZU9uTG9hZChzY3JpcHRTb3VyY2UpOwoKICAgIHJldHVybiB0
cnVlOwp9Cgpib29sIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpyZW1vdmVBbGxTY3JpcHRz
VG9FdmFsdWF0ZU9uTG9hZChQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcmdzKQp7CiAgICBE
RUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgYmFja2VuZEZ1bmN0aW9uTmFtZSwgKCJyZW1vdmVB
bGxTY3JpcHRzVG9FdmFsdWF0ZU9uTG9hZCIpKTsKICAgIGxvbmcgY2FsbElkID0gMDsKCiAgICBp
ZiAoYXJncy0+bGVuZ3RoKCkgIT0gMSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgICAgIHByb3RvY29sRXJyb3IoMCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdB
cmd1bWVudHNDb3VudE1lc3NhZ2UoYXJncy0+bGVuZ3RoKCkgLSAxLCAwKSk7CiAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgfQoKICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXIgPT0gMCkgewog
ICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAiRXJyb3I6
IENvbnRyb2xsZXIgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwogICAgICAgIHJldHVybiBm
YWxzZTsKICAgIH0KCiAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPnJlbW92ZUFsbFNjcmlwdHNU
b0V2YWx1YXRlT25Mb2FkKCk7CgogICAgcmV0dXJuIHRydWU7Cn0KCmJvb2wgSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI6OmdldENoaWxkTm9kZXMoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4g
YXJncykKewogICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGJhY2tlbmRGdW5jdGlvbk5h
bWUsICgiZ2V0Q2hpbGROb2RlcyIpKTsKICAgIGxvbmcgY2FsbElkID0gMDsKCiAgICBpZiAoYXJn
cy0+bGVuZ3RoKCkgIT0gMykgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAg
IHByb3RvY29sRXJyb3IoMCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVu
dHNDb3VudE1lc3NhZ2UoYXJncy0+bGVuZ3RoKCkgLSAxLCAyKSk7CiAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgfQoKICAgIGlmICghYXJncy0+Z2V0KDEpLT5hc051bWJlcigmY2FsbElkKSkgewog
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElk
LCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50VHlwZU1lc3NhZ2UoMSwg
ImNhbGxJZCIsICJsb25nIikpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBsb25n
IG5vZGVJZDsKICAgIGlmICghYXJncy0+Z2V0KDIpLT5hc051bWJlcigmbm9kZUlkKSkgewogICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBi
YWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50VHlwZU1lc3NhZ2UoMiwgIm5v
ZGVJZCIsICJsb25nIikpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBpZiAobV9p
bnNwZWN0b3JDb250cm9sbGVyLT5kb21BZ2VudCgpID09IDApIHsKICAgICAgICBwcm90b2NvbEVy
cm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgIkVycm9yOiBET00gaGFuZGxlciBpcyBu
b3QgYXZhaWxhYmxlLiIpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBtX2luc3Bl
Y3RvckNvbnRyb2xsZXItPmRvbUFnZW50KCktPmdldENoaWxkTm9kZXMoY2FsbElkLCBub2RlSWQp
OwoKICAgIHJldHVybiB0cnVlOwp9Cgpib29sIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpz
ZXRBdHRyaWJ1dGUoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJncykKewogICAgREVGSU5F
X1NUQVRJQ19MT0NBTChTdHJpbmcsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICgic2V0QXR0cmlidXRl
IikpOwogICAgbG9uZyBjYWxsSWQgPSAwOwoKICAgIGlmIChhcmdzLT5sZW5ndGgoKSAhPSA1KSB7
CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcigwLCBi
YWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50c0NvdW50TWVzc2FnZShhcmdz
LT5sZW5ndGgoKSAtIDEsIDQpKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgaWYg
KCFhcmdzLT5nZXQoMSktPmFzTnVtYmVyKCZjYWxsSWQpKSB7CiAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5h
bWUsIGZvcm1hdFdyb25nQXJndW1lbnRUeXBlTWVzc2FnZSgxLCAiY2FsbElkIiwgImxvbmciKSk7
CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIGxvbmcgZWxlbWVudElkOwogICAgaWYg
KCFhcmdzLT5nZXQoMiktPmFzTnVtYmVyKCZlbGVtZW50SWQpKSB7CiAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlv
bk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRUeXBlTWVzc2FnZSgyLCAiZWxlbWVudElkIiwgImxv
bmciKSk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIFN0cmluZyBuYW1lOwogICAg
aWYgKCFhcmdzLT5nZXQoMyktPmFzU3RyaW5nKCZuYW1lKSkgewogICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25O
YW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50VHlwZU1lc3NhZ2UoMywgIm5hbWUiLCAiU3RyaW5nIikp
OwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBTdHJpbmcgdmFsdWU7CiAgICBpZiAo
IWFyZ3MtPmdldCg0KS0+YXNTdHJpbmcoJnZhbHVlKSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1l
LCBmb3JtYXRXcm9uZ0FyZ3VtZW50VHlwZU1lc3NhZ2UoNCwgInZhbHVlIiwgIlN0cmluZyIpKTsK
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgaWYgKG1faW5zcGVjdG9yQ29udHJvbGxl
ci0+ZG9tQWdlbnQoKSA9PSAwKSB7CiAgICAgICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tl
bmRGdW5jdGlvbk5hbWUsICJFcnJvcjogRE9NIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsK
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgYm9vbCBzdWNjZXNzOwogICAgbV9pbnNw
ZWN0b3JDb250cm9sbGVyLT5kb21BZ2VudCgpLT5zZXRBdHRyaWJ1dGUoY2FsbElkLCBlbGVtZW50
SWQsIG5hbWUsIHZhbHVlLCAmc3VjY2Vzcyk7CgogICAgaWYgKG1faW5zcGVjdG9yQ29udHJvbGxl
ci0+aW5zcGVjdG9yQ2xpZW50KCkpIHsKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFy
Z3VtZW50cyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKICAgICAgICBhcmd1bWVudHMtPnB1
c2hTdHJpbmcoImRpZEFwcGx5RG9tQ2hhbmdlIik7CiAgICAgICAgYXJndW1lbnRzLT5wdXNoTnVt
YmVyKGNhbGxJZCk7CiAgICAgICAgYXJndW1lbnRzLT5wdXNoQm9vbChzdWNjZXNzKTsKICAgICAg
ICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RvckNsaWVudCgpLT5zZW5kTWVzc2FnZVRv
RnJvbnRlbmQoYXJndW1lbnRzLT50b0pTT05TdHJpbmcoKSk7CiAgICB9CiAgICByZXR1cm4gdHJ1
ZTsKfQoKYm9vbCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6cmVtb3ZlQXR0cmlidXRlKFBh
c3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3MpCnsKICAgIERFRklORV9TVEFUSUNfTE9DQUwo
U3RyaW5nLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAoInJlbW92ZUF0dHJpYnV0ZSIpKTsKICAgIGxv
bmcgY2FsbElkID0gMDsKCiAgICBpZiAoYXJncy0+bGVuZ3RoKCkgIT0gNCkgewogICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29sRXJyb3IoMCwgYmFja2VuZEZ1bmN0
aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudHNDb3VudE1lc3NhZ2UoYXJncy0+bGVuZ3RoKCkg
LSAxLCAzKSk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIGlmICghYXJncy0+Z2V0
KDEpLT5hc051bWJlcigmY2FsbElkKSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRX
cm9uZ0FyZ3VtZW50VHlwZU1lc3NhZ2UoMSwgImNhbGxJZCIsICJsb25nIikpOwogICAgICAgIHJl
dHVybiBmYWxzZTsKICAgIH0KCiAgICBsb25nIGVsZW1lbnRJZDsKICAgIGlmICghYXJncy0+Z2V0
KDIpLT5hc051bWJlcigmZWxlbWVudElkKSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3Jt
YXRXcm9uZ0FyZ3VtZW50VHlwZU1lc3NhZ2UoMiwgImVsZW1lbnRJZCIsICJsb25nIikpOwogICAg
ICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBTdHJpbmcgbmFtZTsKICAgIGlmICghYXJncy0+
Z2V0KDMpLT5hc1N0cmluZygmbmFtZSkpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICAgICBwcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0
V3JvbmdBcmd1bWVudFR5cGVNZXNzYWdlKDMsICJuYW1lIiwgIlN0cmluZyIpKTsKICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICB9CgogICAgaWYgKG1faW5zcGVjdG9yQ29udHJvbGxlci0+ZG9tQWdl
bnQoKSA9PSAwKSB7CiAgICAgICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlv
bk5hbWUsICJFcnJvcjogRE9NIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICB9CgogICAgYm9vbCBzdWNjZXNzOwogICAgbV9pbnNwZWN0b3JDb250
cm9sbGVyLT5kb21BZ2VudCgpLT5yZW1vdmVBdHRyaWJ1dGUoY2FsbElkLCBlbGVtZW50SWQsIG5h
bWUsICZzdWNjZXNzKTsKCiAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0b3JD
bGllbnQoKSkgewogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJndW1lbnRzID0gSW5z
cGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwogICAgICAgIGFyZ3VtZW50cy0+cHVzaFN0cmluZygiZGlk
QXBwbHlEb21DaGFuZ2UiKTsKICAgICAgICBhcmd1bWVudHMtPnB1c2hOdW1iZXIoY2FsbElkKTsK
ICAgICAgICBhcmd1bWVudHMtPnB1c2hCb29sKHN1Y2Nlc3MpOwogICAgICAgIG1faW5zcGVjdG9y
Q29udHJvbGxlci0+aW5zcGVjdG9yQ2xpZW50KCktPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChhcmd1
bWVudHMtPnRvSlNPTlN0cmluZygpKTsKICAgIH0KICAgIHJldHVybiB0cnVlOwp9Cgpib29sIElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpzZXRUZXh0Tm9kZVZhbHVlKFBhc3NSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+IGFyZ3MpCnsKICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBiYWNr
ZW5kRnVuY3Rpb25OYW1lLCAoInNldFRleHROb2RlVmFsdWUiKSk7CiAgICBsb25nIGNhbGxJZCA9
IDA7CgogICAgaWYgKGFyZ3MtPmxlbmd0aCgpICE9IDQpIHsKICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVycm9yKDAsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZv
cm1hdFdyb25nQXJndW1lbnRzQ291bnRNZXNzYWdlKGFyZ3MtPmxlbmd0aCgpIC0gMSwgMykpOwog
ICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBpZiAoIWFyZ3MtPmdldCgxKS0+YXNOdW1i
ZXIoJmNhbGxJZCkpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBwcm90
b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVu
dFR5cGVNZXNzYWdlKDEsICJjYWxsSWQiLCAibG9uZyIpKTsKICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICB9CgogICAgbG9uZyBub2RlSWQ7CiAgICBpZiAoIWFyZ3MtPmdldCgyKS0+YXNOdW1iZXIo
Jm5vZGVJZCkpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBwcm90b2Nv
bEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudFR5
cGVNZXNzYWdlKDIsICJub2RlSWQiLCAibG9uZyIpKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICB9CgogICAgU3RyaW5nIHZhbHVlOwogICAgaWYgKCFhcmdzLT5nZXQoMyktPmFzU3RyaW5nKCZ2
YWx1ZSkpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVy
cm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudFR5cGVN
ZXNzYWdlKDMsICJ2YWx1ZSIsICJTdHJpbmciKSk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
fQoKICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXItPmRvbUFnZW50KCkgPT0gMCkgewogICAg
ICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAiRXJyb3I6IERP
TSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
fQoKICAgIGJvb2wgc3VjY2VzczsKICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+ZG9tQWdlbnQo
KS0+c2V0VGV4dE5vZGVWYWx1ZShjYWxsSWQsIG5vZGVJZCwgdmFsdWUsICZzdWNjZXNzKTsKCiAg
ICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0b3JDbGllbnQoKSkgewogICAgICAg
IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJndW1lbnRzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0
ZSgpOwogICAgICAgIGFyZ3VtZW50cy0+cHVzaFN0cmluZygiZGlkQXBwbHlEb21DaGFuZ2UiKTsK
ICAgICAgICBhcmd1bWVudHMtPnB1c2hOdW1iZXIoY2FsbElkKTsKICAgICAgICBhcmd1bWVudHMt
PnB1c2hCb29sKHN1Y2Nlc3MpOwogICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVj
dG9yQ2xpZW50KCktPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChhcmd1bWVudHMtPnRvSlNPTlN0cmlu
ZygpKTsKICAgIH0KICAgIHJldHVybiB0cnVlOwp9Cgpib29sIEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyOjpnZXRFdmVudExpc3RlbmVyc0Zvck5vZGUoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJh
eT4gYXJncykKewogICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGJhY2tlbmRGdW5jdGlv
bk5hbWUsICgiZ2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2RlIikpOwogICAgbG9uZyBjYWxsSWQgPSAw
OwoKICAgIGlmIChhcmdzLT5sZW5ndGgoKSAhPSAzKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcigwLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3Jt
YXRXcm9uZ0FyZ3VtZW50c0NvdW50TWVzc2FnZShhcmdzLT5sZW5ndGgoKSAtIDEsIDIpKTsKICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgaWYgKCFhcmdzLT5nZXQoMSktPmFzTnVtYmVy
KCZjYWxsSWQpKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9j
b2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRU
eXBlTWVzc2FnZSgxLCAiY2FsbElkIiwgImxvbmciKSk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgfQoKICAgIGxvbmcgbm9kZUlkOwogICAgaWYgKCFhcmdzLT5nZXQoMiktPmFzTnVtYmVyKCZu
b2RlSWQpKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xF
cnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRUeXBl
TWVzc2FnZSgyLCAibm9kZUlkIiwgImxvbmciKSk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
fQoKICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXItPmRvbUFnZW50KCkgPT0gMCkgewogICAg
ICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAiRXJyb3I6IERP
TSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
fQoKICAgIGxvbmcgb3V0Tm9kZUlkOwogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBsaXN0ZW5l
cnNBcnJheTsKICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+ZG9tQWdlbnQoKS0+Z2V0RXZlbnRM
aXN0ZW5lcnNGb3JOb2RlKGNhbGxJZCwgbm9kZUlkLCAmb3V0Tm9kZUlkLCAmbGlzdGVuZXJzQXJy
YXkpOwoKICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RvckNsaWVudCgpKSB7
CiAgICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcmd1bWVudHMgPSBJbnNwZWN0b3JBcnJh
eTo6Y3JlYXRlKCk7CiAgICAgICAgYXJndW1lbnRzLT5wdXNoU3RyaW5nKCJkaWRHZXRFdmVudExp
c3RlbmVyc0Zvck5vZGUiKTsKICAgICAgICBhcmd1bWVudHMtPnB1c2hOdW1iZXIoY2FsbElkKTsK
ICAgICAgICBhcmd1bWVudHMtPnB1c2hOdW1iZXIob3V0Tm9kZUlkKTsKICAgICAgICBhcmd1bWVu
dHMtPnB1c2gobGlzdGVuZXJzQXJyYXkpOwogICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+
aW5zcGVjdG9yQ2xpZW50KCktPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChhcmd1bWVudHMtPnRvSlNP
TlN0cmluZygpKTsKICAgIH0KICAgIHJldHVybiB0cnVlOwp9Cgpib29sIEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyOjpjb3B5Tm9kZShQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcmdzKQp7
CiAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgYmFja2VuZEZ1bmN0aW9uTmFtZSwgKCJj
b3B5Tm9kZSIpKTsKICAgIGxvbmcgY2FsbElkID0gMDsKCiAgICBpZiAoYXJncy0+bGVuZ3RoKCkg
IT0gMikgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29sRXJy
b3IoMCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudHNDb3VudE1lc3Nh
Z2UoYXJncy0+bGVuZ3RoKCkgLSAxLCAxKSk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoK
ICAgIGxvbmcgbm9kZUlkOwogICAgaWYgKCFhcmdzLT5nZXQoMSktPmFzTnVtYmVyKCZub2RlSWQp
KSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcihj
YWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRUeXBlTWVzc2Fn
ZSgxLCAibm9kZUlkIiwgImxvbmciKSk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAg
IGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXItPmRvbUFnZW50KCkgPT0gMCkgewogICAgICAgIHBy
b3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAiRXJyb3I6IERPTSBoYW5k
bGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAg
IG1faW5zcGVjdG9yQ29udHJvbGxlci0+ZG9tQWdlbnQoKS0+Y29weU5vZGUobm9kZUlkKTsKCiAg
ICByZXR1cm4gdHJ1ZTsKfQoKYm9vbCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6cmVtb3Zl
Tm9kZShQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcmdzKQp7CiAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKFN0cmluZywgYmFja2VuZEZ1bmN0aW9uTmFtZSwgKCJyZW1vdmVOb2RlIikpOwogICAg
bG9uZyBjYWxsSWQgPSAwOwoKICAgIGlmIChhcmdzLT5sZW5ndGgoKSAhPSAzKSB7CiAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcigwLCBiYWNrZW5kRnVu
Y3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50c0NvdW50TWVzc2FnZShhcmdzLT5sZW5ndGgo
KSAtIDEsIDIpKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgaWYgKCFhcmdzLT5n
ZXQoMSktPmFzTnVtYmVyKCZjYWxsSWQpKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1h
dFdyb25nQXJndW1lbnRUeXBlTWVzc2FnZSgxLCAiY2FsbElkIiwgImxvbmciKSk7CiAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgfQoKICAgIGxvbmcgbm9kZUlkOwogICAgaWYgKCFhcmdzLT5nZXQo
MiktPmFzTnVtYmVyKCZub2RlSWQpKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdy
b25nQXJndW1lbnRUeXBlTWVzc2FnZSgyLCAibm9kZUlkIiwgImxvbmciKSk7CiAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgfQoKICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXItPmRvbUFnZW50
KCkgPT0gMCkgewogICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25O
YW1lLCAiRXJyb3I6IERPTSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CiAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgfQoKICAgIGxvbmcgb3V0Tm9kZUlkOwogICAgbV9pbnNwZWN0b3JDb250
cm9sbGVyLT5kb21BZ2VudCgpLT5yZW1vdmVOb2RlKGNhbGxJZCwgbm9kZUlkLCAmb3V0Tm9kZUlk
KTsKCiAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0b3JDbGllbnQoKSkgewog
ICAgICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJndW1lbnRzID0gSW5zcGVjdG9yQXJyYXk6
OmNyZWF0ZSgpOwogICAgICAgIGFyZ3VtZW50cy0+cHVzaFN0cmluZygiZGlkUmVtb3ZlTm9kZSIp
OwogICAgICAgIGFyZ3VtZW50cy0+cHVzaE51bWJlcihjYWxsSWQpOwogICAgICAgIGFyZ3VtZW50
cy0+cHVzaE51bWJlcihvdXROb2RlSWQpOwogICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+
aW5zcGVjdG9yQ2xpZW50KCktPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChhcmd1bWVudHMtPnRvSlNP
TlN0cmluZygpKTsKICAgIH0KICAgIHJldHVybiB0cnVlOwp9Cgpib29sIEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyOjpjaGFuZ2VUYWdOYW1lKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFy
Z3MpCnsKICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBiYWNrZW5kRnVuY3Rpb25OYW1l
LCAoImNoYW5nZVRhZ05hbWUiKSk7CiAgICBsb25nIGNhbGxJZCA9IDA7CgogICAgaWYgKGFyZ3Mt
Pmxlbmd0aCgpICE9IDQpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBw
cm90b2NvbEVycm9yKDAsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRz
Q291bnRNZXNzYWdlKGFyZ3MtPmxlbmd0aCgpIC0gMSwgMykpOwogICAgICAgIHJldHVybiBmYWxz
ZTsKICAgIH0KCiAgICBpZiAoIWFyZ3MtPmdldCgxKS0+YXNOdW1iZXIoJmNhbGxJZCkpIHsKICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVycm9yKGNhbGxJZCwg
YmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudFR5cGVNZXNzYWdlKDEsICJj
YWxsSWQiLCAibG9uZyIpKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgbG9uZyBu
b2RlSWQ7CiAgICBpZiAoIWFyZ3MtPmdldCgyKS0+YXNOdW1iZXIoJm5vZGVJZCkpIHsKICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVycm9yKGNhbGxJZCwgYmFj
a2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudFR5cGVNZXNzYWdlKDIsICJub2Rl
SWQiLCAibG9uZyIpKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgU3RyaW5nIG5l
d1RhZ05hbWU7CiAgICBpZiAoIWFyZ3MtPmdldCgzKS0+YXNTdHJpbmcoJm5ld1RhZ05hbWUpKSB7
CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcihjYWxs
SWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRUeXBlTWVzc2FnZSgz
LCAibmV3VGFnTmFtZSIsICJTdHJpbmciKSk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoK
ICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXItPmRvbUFnZW50KCkgPT0gMCkgewogICAgICAg
IHByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAiRXJyb3I6IERPTSBo
YW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoK
ICAgIGxvbmcgb3V0Tm9kZUlkOwogICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5kb21BZ2VudCgp
LT5jaGFuZ2VUYWdOYW1lKGNhbGxJZCwgbm9kZUlkLCBuZXdUYWdOYW1lLCAmb3V0Tm9kZUlkKTsK
CiAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0b3JDbGllbnQoKSkgewogICAg
ICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJndW1lbnRzID0gSW5zcGVjdG9yQXJyYXk6OmNy
ZWF0ZSgpOwogICAgICAgIGFyZ3VtZW50cy0+cHVzaFN0cmluZygiZGlkQ2hhbmdlVGFnTmFtZSIp
OwogICAgICAgIGFyZ3VtZW50cy0+cHVzaE51bWJlcihjYWxsSWQpOwogICAgICAgIGFyZ3VtZW50
cy0+cHVzaE51bWJlcihvdXROb2RlSWQpOwogICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+
aW5zcGVjdG9yQ2xpZW50KCktPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChhcmd1bWVudHMtPnRvSlNP
TlN0cmluZygpKTsKICAgIH0KICAgIHJldHVybiB0cnVlOwp9Cgpib29sIEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyOjpnZXRPdXRlckhUTUwoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJn
cykKewogICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGJhY2tlbmRGdW5jdGlvbk5hbWUs
ICgiZ2V0T3V0ZXJIVE1MIikpOwogICAgbG9uZyBjYWxsSWQgPSAwOwoKICAgIGlmIChhcmdzLT5s
ZW5ndGgoKSAhPSAzKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcHJv
dG9jb2xFcnJvcigwLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50c0Nv
dW50TWVzc2FnZShhcmdzLT5sZW5ndGgoKSAtIDEsIDIpKTsKICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICB9CgogICAgaWYgKCFhcmdzLT5nZXQoMSktPmFzTnVtYmVyKCZjYWxsSWQpKSB7CiAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJh
Y2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRUeXBlTWVzc2FnZSgxLCAiY2Fs
bElkIiwgImxvbmciKSk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIGxvbmcgbm9k
ZUlkOwogICAgaWYgKCFhcmdzLT5nZXQoMiktPmFzTnVtYmVyKCZub2RlSWQpKSB7CiAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tl
bmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRUeXBlTWVzc2FnZSgyLCAibm9kZUlk
IiwgImxvbmciKSk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIGlmIChtX2luc3Bl
Y3RvckNvbnRyb2xsZXItPmRvbUFnZW50KCkgPT0gMCkgewogICAgICAgIHByb3RvY29sRXJyb3Io
Y2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAiRXJyb3I6IERPTSBoYW5kbGVyIGlzIG5vdCBh
dmFpbGFibGUuIik7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIFN0cmluZyBvdXRl
ckhUTUw7CiAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmRvbUFnZW50KCktPmdldE91dGVySFRN
TChjYWxsSWQsIG5vZGVJZCwgJm91dGVySFRNTCk7CgogICAgaWYgKG1faW5zcGVjdG9yQ29udHJv
bGxlci0+aW5zcGVjdG9yQ2xpZW50KCkpIHsKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
IGFyZ3VtZW50cyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKICAgICAgICBhcmd1bWVudHMt
PnB1c2hTdHJpbmcoImRpZEdldE91dGVySFRNTCIpOwogICAgICAgIGFyZ3VtZW50cy0+cHVzaE51
bWJlcihjYWxsSWQpOwogICAgICAgIGFyZ3VtZW50cy0+cHVzaFN0cmluZyhvdXRlckhUTUwpOwog
ICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdG9yQ2xpZW50KCktPnNlbmRNZXNz
YWdlVG9Gcm9udGVuZChhcmd1bWVudHMtPnRvSlNPTlN0cmluZygpKTsKICAgIH0KICAgIHJldHVy
biB0cnVlOwp9Cgpib29sIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpzZXRPdXRlckhUTUwo
UGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJncykKewogICAgREVGSU5FX1NUQVRJQ19MT0NB
TChTdHJpbmcsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICgic2V0T3V0ZXJIVE1MIikpOwogICAgbG9u
ZyBjYWxsSWQgPSAwOwoKICAgIGlmIChhcmdzLT5sZW5ndGgoKSAhPSA0KSB7CiAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcigwLCBiYWNrZW5kRnVuY3Rp
b25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50c0NvdW50TWVzc2FnZShhcmdzLT5sZW5ndGgoKSAt
IDEsIDMpKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgaWYgKCFhcmdzLT5nZXQo
MSktPmFzTnVtYmVyKCZjYWxsSWQpKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdy
b25nQXJndW1lbnRUeXBlTWVzc2FnZSgxLCAiY2FsbElkIiwgImxvbmciKSk7CiAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgfQoKICAgIGxvbmcgbm9kZUlkOwogICAgaWYgKCFhcmdzLT5nZXQoMikt
PmFzTnVtYmVyKCZub2RlSWQpKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
ICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25n
QXJndW1lbnRUeXBlTWVzc2FnZSgyLCAibm9kZUlkIiwgImxvbmciKSk7CiAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgfQoKICAgIFN0cmluZyBvdXRlckhUTUw7CiAgICBpZiAoIWFyZ3MtPmdldCgz
KS0+YXNTdHJpbmcoJm91dGVySFRNTCkpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICAgICBwcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0
V3JvbmdBcmd1bWVudFR5cGVNZXNzYWdlKDMsICJvdXRlckhUTUwiLCAiU3RyaW5nIikpOwogICAg
ICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyLT5k
b21BZ2VudCgpID09IDApIHsKICAgICAgICBwcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1
bmN0aW9uTmFtZSwgIkVycm9yOiBET00gaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwogICAg
ICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBsb25nIG91dE5vZGVJZDsKICAgIG1faW5zcGVj
dG9yQ29udHJvbGxlci0+ZG9tQWdlbnQoKS0+c2V0T3V0ZXJIVE1MKGNhbGxJZCwgbm9kZUlkLCBv
dXRlckhUTUwsICZvdXROb2RlSWQpOwoKICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXItPmlu
c3BlY3RvckNsaWVudCgpKSB7CiAgICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcmd1bWVu
dHMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CiAgICAgICAgYXJndW1lbnRzLT5wdXNoU3Ry
aW5nKCJkaWRTZXRPdXRlckhUTUwiKTsKICAgICAgICBhcmd1bWVudHMtPnB1c2hOdW1iZXIoY2Fs
bElkKTsKICAgICAgICBhcmd1bWVudHMtPnB1c2hOdW1iZXIob3V0Tm9kZUlkKTsKICAgICAgICBt
X2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RvckNsaWVudCgpLT5zZW5kTWVzc2FnZVRvRnJv
bnRlbmQoYXJndW1lbnRzLT50b0pTT05TdHJpbmcoKSk7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsK
fQoKYm9vbCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6YWRkSW5zcGVjdGVkTm9kZShQYXNz
UmVmUHRyPEluc3BlY3RvckFycmF5PiBhcmdzKQp7CiAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0
cmluZywgYmFja2VuZEZ1bmN0aW9uTmFtZSwgKCJhZGRJbnNwZWN0ZWROb2RlIikpOwogICAgbG9u
ZyBjYWxsSWQgPSAwOwoKICAgIGlmIChhcmdzLT5sZW5ndGgoKSAhPSAyKSB7CiAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcigwLCBiYWNrZW5kRnVuY3Rp
b25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50c0NvdW50TWVzc2FnZShhcmdzLT5sZW5ndGgoKSAt
IDEsIDEpKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgbG9uZyBub2RlSWQ7CiAg
ICBpZiAoIWFyZ3MtPmdldCgxKS0+YXNOdW1iZXIoJm5vZGVJZCkpIHsKICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0
aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudFR5cGVNZXNzYWdlKDEsICJub2RlSWQiLCAibG9u
ZyIpKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgaWYgKG1faW5zcGVjdG9yQ29u
dHJvbGxlci0+ZG9tQWdlbnQoKSA9PSAwKSB7CiAgICAgICAgcHJvdG9jb2xFcnJvcihjYWxsSWQs
IGJhY2tlbmRGdW5jdGlvbk5hbWUsICJFcnJvcjogRE9NIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJs
ZS4iKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgbV9pbnNwZWN0b3JDb250cm9s
bGVyLT5kb21BZ2VudCgpLT5hZGRJbnNwZWN0ZWROb2RlKG5vZGVJZCk7CgogICAgcmV0dXJuIHRy
dWU7Cn0KCmJvb2wgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnBlcmZvcm1TZWFyY2goUGFz
c1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJncykKewogICAgREVGSU5FX1NUQVRJQ19MT0NBTChT
dHJpbmcsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICgicGVyZm9ybVNlYXJjaCIpKTsKICAgIGxvbmcg
Y2FsbElkID0gMDsKCiAgICBpZiAoYXJncy0+bGVuZ3RoKCkgIT0gMykgewogICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29sRXJyb3IoMCwgYmFja2VuZEZ1bmN0aW9u
TmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudHNDb3VudE1lc3NhZ2UoYXJncy0+bGVuZ3RoKCkgLSAx
LCAyKSk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIFN0cmluZyBxdWVyeTsKICAg
IGlmICghYXJncy0+Z2V0KDEpLT5hc1N0cmluZygmcXVlcnkpKSB7CiAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlv
bk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRUeXBlTWVzc2FnZSgxLCAicXVlcnkiLCAiU3RyaW5n
IikpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBib29sIHJ1blN5bmNocm9ub3Vz
bHk7CiAgICBpZiAoIWFyZ3MtPmdldCgyKS0+YXNCb29sKCZydW5TeW5jaHJvbm91c2x5KSkgewog
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElk
LCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50VHlwZU1lc3NhZ2UoMiwg
InJ1blN5bmNocm9ub3VzbHkiLCAiYm9vbGVhbiIpKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICB9CgogICAgaWYgKG1faW5zcGVjdG9yQ29udHJvbGxlci0+ZG9tQWdlbnQoKSA9PSAwKSB7CiAg
ICAgICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICJFcnJvcjog
RE9NIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICB9CgogICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5kb21BZ2VudCgpLT5wZXJmb3JtU2VhcmNo
KHF1ZXJ5LCBydW5TeW5jaHJvbm91c2x5KTsKCiAgICByZXR1cm4gdHJ1ZTsKfQoKYm9vbCBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6c2VhcmNoQ2FuY2VsZWQoUGFzc1JlZlB0cjxJbnNwZWN0
b3JBcnJheT4gYXJncykKewogICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGJhY2tlbmRG
dW5jdGlvbk5hbWUsICgic2VhcmNoQ2FuY2VsZWQiKSk7CiAgICBsb25nIGNhbGxJZCA9IDA7Cgog
ICAgaWYgKGFyZ3MtPmxlbmd0aCgpICE9IDEpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICAgICBwcm90b2NvbEVycm9yKDAsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdy
b25nQXJndW1lbnRzQ291bnRNZXNzYWdlKGFyZ3MtPmxlbmd0aCgpIC0gMSwgMCkpOwogICAgICAg
IHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyLT5kb21B
Z2VudCgpID09IDApIHsKICAgICAgICBwcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0
aW9uTmFtZSwgIkVycm9yOiBET00gaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwogICAgICAg
IHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmRvbUFnZW50
KCktPnNlYXJjaENhbmNlbGVkKCk7CgogICAgcmV0dXJuIHRydWU7Cn0KCmJvb2wgSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXI6OnB1c2hOb2RlQnlQYXRoVG9Gcm9udGVuZChQYXNzUmVmUHRyPElu
c3BlY3RvckFycmF5PiBhcmdzKQp7CiAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgYmFj
a2VuZEZ1bmN0aW9uTmFtZSwgKCJwdXNoTm9kZUJ5UGF0aFRvRnJvbnRlbmQiKSk7CiAgICBsb25n
IGNhbGxJZCA9IDA7CgogICAgaWYgKGFyZ3MtPmxlbmd0aCgpICE9IDMpIHsKICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVycm9yKDAsIGJhY2tlbmRGdW5jdGlv
bk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRzQ291bnRNZXNzYWdlKGFyZ3MtPmxlbmd0aCgpIC0g
MSwgMikpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBpZiAoIWFyZ3MtPmdldCgx
KS0+YXNOdW1iZXIoJmNhbGxJZCkpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICAgICBwcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3Jv
bmdBcmd1bWVudFR5cGVNZXNzYWdlKDEsICJjYWxsSWQiLCAibG9uZyIpKTsKICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICB9CgogICAgU3RyaW5nIHBhdGg7CiAgICBpZiAoIWFyZ3MtPmdldCgyKS0+
YXNTdHJpbmcoJnBhdGgpKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAg
cHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJn
dW1lbnRUeXBlTWVzc2FnZSgyLCAicGF0aCIsICJTdHJpbmciKSk7CiAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgfQoKICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXItPmRvbUFnZW50KCkgPT0g
MCkgewogICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAi
RXJyb3I6IERPTSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CiAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgfQoKICAgIGxvbmcgbm9kZUlkOwogICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5k
b21BZ2VudCgpLT5wdXNoTm9kZUJ5UGF0aFRvRnJvbnRlbmQoY2FsbElkLCBwYXRoLCAmbm9kZUlk
KTsKCiAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0b3JDbGllbnQoKSkgewog
ICAgICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJndW1lbnRzID0gSW5zcGVjdG9yQXJyYXk6
OmNyZWF0ZSgpOwogICAgICAgIGFyZ3VtZW50cy0+cHVzaFN0cmluZygiZGlkUHVzaE5vZGVCeVBh
dGhUb0Zyb250ZW5kIik7CiAgICAgICAgYXJndW1lbnRzLT5wdXNoTnVtYmVyKGNhbGxJZCk7CiAg
ICAgICAgYXJndW1lbnRzLT5wdXNoTnVtYmVyKG5vZGVJZCk7CiAgICAgICAgbV9pbnNwZWN0b3JD
b250cm9sbGVyLT5pbnNwZWN0b3JDbGllbnQoKS0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGFyZ3Vt
ZW50cy0+dG9KU09OU3RyaW5nKCkpOwogICAgfQogICAgcmV0dXJuIHRydWU7Cn0KCmJvb2wgSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmNsZWFyQ29uc29sZU1lc3NhZ2VzKFBhc3NSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+IGFyZ3MpCnsKICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBi
YWNrZW5kRnVuY3Rpb25OYW1lLCAoImNsZWFyQ29uc29sZU1lc3NhZ2VzIikpOwogICAgbG9uZyBj
YWxsSWQgPSAwOwoKICAgIGlmIChhcmdzLT5sZW5ndGgoKSAhPSAyKSB7CiAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcigwLCBiYWNrZW5kRnVuY3Rpb25O
YW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50c0NvdW50TWVzc2FnZShhcmdzLT5sZW5ndGgoKSAtIDEs
IDEpKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgaWYgKCFhcmdzLT5nZXQoMSkt
PmFzTnVtYmVyKCZjYWxsSWQpKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
ICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25n
QXJndW1lbnRUeXBlTWVzc2FnZSgxLCAiY2FsbElkIiwgImxvbmciKSk7CiAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgfQoKICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RvckJh
Y2tlbmQoKSA9PSAwKSB7CiAgICAgICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5j
dGlvbk5hbWUsICJFcnJvcjogQmFja2VuZCBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CiAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5z
cGVjdG9yQmFja2VuZCgpLT5jbGVhckNvbnNvbGVNZXNzYWdlcyhjYWxsSWQpOwoKICAgIHJldHVy
biB0cnVlOwp9Cgpib29sIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpoaWdobGlnaHRET01O
b2RlKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3MpCnsKICAgIERFRklORV9TVEFUSUNf
TE9DQUwoU3RyaW5nLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAoImhpZ2hsaWdodERPTU5vZGUiKSk7
CiAgICBsb25nIGNhbGxJZCA9IDA7CgogICAgaWYgKGFyZ3MtPmxlbmd0aCgpICE9IDIpIHsKICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVycm9yKDAsIGJhY2tl
bmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRzQ291bnRNZXNzYWdlKGFyZ3MtPmxl
bmd0aCgpIC0gMSwgMSkpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBsb25nIG5v
ZGVJZDsKICAgIGlmICghYXJncy0+Z2V0KDEpLT5hc051bWJlcigmbm9kZUlkKSkgewogICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNr
ZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50VHlwZU1lc3NhZ2UoMSwgIm5vZGVJ
ZCIsICJsb25nIikpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBpZiAobV9pbnNw
ZWN0b3JDb250cm9sbGVyID09IDApIHsKICAgICAgICBwcm90b2NvbEVycm9yKGNhbGxJZCwgYmFj
a2VuZEZ1bmN0aW9uTmFtZSwgIkVycm9yOiBDb250cm9sbGVyIGhhbmRsZXIgaXMgbm90IGF2YWls
YWJsZS4iKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgbV9pbnNwZWN0b3JDb250
cm9sbGVyLT5oaWdobGlnaHRET01Ob2RlKG5vZGVJZCk7CgogICAgcmV0dXJuIHRydWU7Cn0KCmJv
b2wgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmhpZGVET01Ob2RlSGlnaGxpZ2h0KFBhc3NS
ZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3MpCnsKICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3Ry
aW5nLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAoImhpZGVET01Ob2RlSGlnaGxpZ2h0IikpOwogICAg
bG9uZyBjYWxsSWQgPSAwOwoKICAgIGlmIChhcmdzLT5sZW5ndGgoKSAhPSAxKSB7CiAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcigwLCBiYWNrZW5kRnVu
Y3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50c0NvdW50TWVzc2FnZShhcmdzLT5sZW5ndGgo
KSAtIDEsIDApKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgaWYgKG1faW5zcGVj
dG9yQ29udHJvbGxlciA9PSAwKSB7CiAgICAgICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tl
bmRGdW5jdGlvbk5hbWUsICJFcnJvcjogQ29udHJvbGxlciBoYW5kbGVyIGlzIG5vdCBhdmFpbGFi
bGUuIik7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIG1faW5zcGVjdG9yQ29udHJv
bGxlci0+aGlkZURPTU5vZGVIaWdobGlnaHQoKTsKCiAgICByZXR1cm4gdHJ1ZTsKfQoKYm9vbCBJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3R5bGVzKFBhc3NSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+IGFyZ3MpCnsKICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBiYWNrZW5kRnVu
Y3Rpb25OYW1lLCAoImdldFN0eWxlcyIpKTsKICAgIGxvbmcgY2FsbElkID0gMDsKCiAgICBpZiAo
YXJncy0+bGVuZ3RoKCkgIT0gNCkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
ICAgIHByb3RvY29sRXJyb3IoMCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1
bWVudHNDb3VudE1lc3NhZ2UoYXJncy0+bGVuZ3RoKCkgLSAxLCAzKSk7CiAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgfQoKICAgIGlmICghYXJncy0+Z2V0KDEpLT5hc051bWJlcigmY2FsbElkKSkg
ewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29sRXJyb3IoY2Fs
bElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50VHlwZU1lc3NhZ2Uo
MSwgImNhbGxJZCIsICJsb25nIikpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBs
b25nIG5vZGVJZDsKICAgIGlmICghYXJncy0+Z2V0KDIpLT5hc051bWJlcigmbm9kZUlkKSkgewog
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElk
LCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50VHlwZU1lc3NhZ2UoMiwg
Im5vZGVJZCIsICJsb25nIikpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBib29s
IGF1dGhPbmx5OwogICAgaWYgKCFhcmdzLT5nZXQoMyktPmFzQm9vbCgmYXV0aE9ubHkpKSB7CiAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcihjYWxsSWQs
IGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRUeXBlTWVzc2FnZSgzLCAi
YXV0aE9ubHkiLCAiYm9vbGVhbiIpKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAg
aWYgKG1faW5zcGVjdG9yQ29udHJvbGxlci0+ZG9tQWdlbnQoKSA9PSAwKSB7CiAgICAgICAgcHJv
dG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICJFcnJvcjogRE9NIGhhbmRs
ZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAg
UmVmUHRyPEluc3BlY3RvclZhbHVlPiBzdHlsZXM7CiAgICBtX2luc3BlY3RvckNvbnRyb2xsZXIt
PmRvbUFnZW50KCktPmdldFN0eWxlcyhjYWxsSWQsIG5vZGVJZCwgYXV0aE9ubHksICZzdHlsZXMp
OwoKICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RvckNsaWVudCgpKSB7CiAg
ICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcmd1bWVudHMgPSBJbnNwZWN0b3JBcnJheTo6
Y3JlYXRlKCk7CiAgICAgICAgYXJndW1lbnRzLT5wdXNoU3RyaW5nKCJkaWRHZXRTdHlsZXMiKTsK
ICAgICAgICBhcmd1bWVudHMtPnB1c2hOdW1iZXIoY2FsbElkKTsKICAgICAgICBhcmd1bWVudHMt
PnB1c2goc3R5bGVzKTsKICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RvckNs
aWVudCgpLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoYXJndW1lbnRzLT50b0pTT05TdHJpbmcoKSk7
CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKfQoKYm9vbCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cjo6Z2V0QWxsU3R5bGVzKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3MpCnsKICAgIERF
RklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAoImdldEFsbFN0
eWxlcyIpKTsKICAgIGxvbmcgY2FsbElkID0gMDsKCiAgICBpZiAoYXJncy0+bGVuZ3RoKCkgIT0g
MikgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29sRXJyb3Io
MCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudHNDb3VudE1lc3NhZ2Uo
YXJncy0+bGVuZ3RoKCkgLSAxLCAxKSk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAg
IGlmICghYXJncy0+Z2V0KDEpLT5hc051bWJlcigmY2FsbElkKSkgewogICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rp
b25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50VHlwZU1lc3NhZ2UoMSwgImNhbGxJZCIsICJsb25n
IikpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBpZiAobV9pbnNwZWN0b3JDb250
cm9sbGVyLT5kb21BZ2VudCgpID09IDApIHsKICAgICAgICBwcm90b2NvbEVycm9yKGNhbGxJZCwg
YmFja2VuZEZ1bmN0aW9uTmFtZSwgIkVycm9yOiBET00gaGFuZGxlciBpcyBub3QgYXZhaWxhYmxl
LiIpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBSZWZQdHI8SW5zcGVjdG9yQXJy
YXk+IHN0eWxlczsKICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+ZG9tQWdlbnQoKS0+Z2V0QWxs
U3R5bGVzKGNhbGxJZCwgJnN0eWxlcyk7CgogICAgaWYgKG1faW5zcGVjdG9yQ29udHJvbGxlci0+
aW5zcGVjdG9yQ2xpZW50KCkpIHsKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3Vt
ZW50cyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKICAgICAgICBhcmd1bWVudHMtPnB1c2hT
dHJpbmcoImRpZEdldEFsbFN0eWxlcyIpOwogICAgICAgIGFyZ3VtZW50cy0+cHVzaE51bWJlcihj
YWxsSWQpOwogICAgICAgIGFyZ3VtZW50cy0+cHVzaChzdHlsZXMpOwogICAgICAgIG1faW5zcGVj
dG9yQ29udHJvbGxlci0+aW5zcGVjdG9yQ2xpZW50KCktPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChh
cmd1bWVudHMtPnRvSlNPTlN0cmluZygpKTsKICAgIH0KICAgIHJldHVybiB0cnVlOwp9Cgpib29s
IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRJbmxpbmVTdHlsZShQYXNzUmVmUHRyPElu
c3BlY3RvckFycmF5PiBhcmdzKQp7CiAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgYmFj
a2VuZEZ1bmN0aW9uTmFtZSwgKCJnZXRJbmxpbmVTdHlsZSIpKTsKICAgIGxvbmcgY2FsbElkID0g
MDsKCiAgICBpZiAoYXJncy0+bGVuZ3RoKCkgIT0gMykgewogICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgIHByb3RvY29sRXJyb3IoMCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9y
bWF0V3JvbmdBcmd1bWVudHNDb3VudE1lc3NhZ2UoYXJncy0+bGVuZ3RoKCkgLSAxLCAyKSk7CiAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIGlmICghYXJncy0+Z2V0KDEpLT5hc051bWJl
cigmY2FsbElkKSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3Rv
Y29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50
VHlwZU1lc3NhZ2UoMSwgImNhbGxJZCIsICJsb25nIikpOwogICAgICAgIHJldHVybiBmYWxzZTsK
ICAgIH0KCiAgICBsb25nIG5vZGVJZDsKICAgIGlmICghYXJncy0+Z2V0KDIpLT5hc051bWJlcigm
bm9kZUlkKSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29s
RXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50VHlw
ZU1lc3NhZ2UoMiwgIm5vZGVJZCIsICJsb25nIikpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAg
IH0KCiAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyLT5kb21BZ2VudCgpID09IDApIHsKICAg
ICAgICBwcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgIkVycm9yOiBE
T00gaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAg
IH0KCiAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHN0eWxlOwogICAgbV9pbnNwZWN0b3JDb250
cm9sbGVyLT5kb21BZ2VudCgpLT5nZXRJbmxpbmVTdHlsZShjYWxsSWQsIG5vZGVJZCwgJnN0eWxl
KTsKCiAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0b3JDbGllbnQoKSkgewog
ICAgICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJndW1lbnRzID0gSW5zcGVjdG9yQXJyYXk6
OmNyZWF0ZSgpOwogICAgICAgIGFyZ3VtZW50cy0+cHVzaFN0cmluZygiZGlkR2V0SW5saW5lU3R5
bGUiKTsKICAgICAgICBhcmd1bWVudHMtPnB1c2hOdW1iZXIoY2FsbElkKTsKICAgICAgICBhcmd1
bWVudHMtPnB1c2goc3R5bGUpOwogICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVj
dG9yQ2xpZW50KCktPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChhcmd1bWVudHMtPnRvSlNPTlN0cmlu
ZygpKTsKICAgIH0KICAgIHJldHVybiB0cnVlOwp9Cgpib29sIEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyOjpnZXRDb21wdXRlZFN0eWxlKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3Mp
CnsKICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAo
ImdldENvbXB1dGVkU3R5bGUiKSk7CiAgICBsb25nIGNhbGxJZCA9IDA7CgogICAgaWYgKGFyZ3Mt
Pmxlbmd0aCgpICE9IDMpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBw
cm90b2NvbEVycm9yKDAsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRz
Q291bnRNZXNzYWdlKGFyZ3MtPmxlbmd0aCgpIC0gMSwgMikpOwogICAgICAgIHJldHVybiBmYWxz
ZTsKICAgIH0KCiAgICBpZiAoIWFyZ3MtPmdldCgxKS0+YXNOdW1iZXIoJmNhbGxJZCkpIHsKICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVycm9yKGNhbGxJZCwg
YmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudFR5cGVNZXNzYWdlKDEsICJj
YWxsSWQiLCAibG9uZyIpKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgbG9uZyBu
b2RlSWQ7CiAgICBpZiAoIWFyZ3MtPmdldCgyKS0+YXNOdW1iZXIoJm5vZGVJZCkpIHsKICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVycm9yKGNhbGxJZCwgYmFj
a2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudFR5cGVNZXNzYWdlKDIsICJub2Rl
SWQiLCAibG9uZyIpKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgaWYgKG1faW5z
cGVjdG9yQ29udHJvbGxlci0+ZG9tQWdlbnQoKSA9PSAwKSB7CiAgICAgICAgcHJvdG9jb2xFcnJv
cihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICJFcnJvcjogRE9NIGhhbmRsZXIgaXMgbm90
IGF2YWlsYWJsZS4iKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgUmVmUHRyPElu
c3BlY3RvclZhbHVlPiBzdHlsZTsKICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+ZG9tQWdlbnQo
KS0+Z2V0Q29tcHV0ZWRTdHlsZShjYWxsSWQsIG5vZGVJZCwgJnN0eWxlKTsKCiAgICBpZiAobV9p
bnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0b3JDbGllbnQoKSkgewogICAgICAgIFJlZlB0cjxJ
bnNwZWN0b3JBcnJheT4gYXJndW1lbnRzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwogICAg
ICAgIGFyZ3VtZW50cy0+cHVzaFN0cmluZygiZGlkR2V0Q29tcHV0ZWRTdHlsZSIpOwogICAgICAg
IGFyZ3VtZW50cy0+cHVzaE51bWJlcihjYWxsSWQpOwogICAgICAgIGFyZ3VtZW50cy0+cHVzaChz
dHlsZSk7CiAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0b3JDbGllbnQoKS0+
c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGFyZ3VtZW50cy0+dG9KU09OU3RyaW5nKCkpOwogICAgfQog
ICAgcmV0dXJuIHRydWU7Cn0KCmJvb2wgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFN0
eWxlU2hlZXQoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJncykKewogICAgREVGSU5FX1NU
QVRJQ19MT0NBTChTdHJpbmcsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICgiZ2V0U3R5bGVTaGVldCIp
KTsKICAgIGxvbmcgY2FsbElkID0gMDsKCiAgICBpZiAoYXJncy0+bGVuZ3RoKCkgIT0gMykgewog
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29sRXJyb3IoMCwgYmFj
a2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudHNDb3VudE1lc3NhZ2UoYXJncy0+
bGVuZ3RoKCkgLSAxLCAyKSk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIGlmICgh
YXJncy0+Z2V0KDEpLT5hc051bWJlcigmY2FsbElkKSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1l
LCBmb3JtYXRXcm9uZ0FyZ3VtZW50VHlwZU1lc3NhZ2UoMSwgImNhbGxJZCIsICJsb25nIikpOwog
ICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBsb25nIHN0eWxlU2hlZXRJZDsKICAgIGlm
ICghYXJncy0+Z2V0KDIpLT5hc051bWJlcigmc3R5bGVTaGVldElkKSkgewogICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVu
Y3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50VHlwZU1lc3NhZ2UoMiwgInN0eWxlU2hlZXRJ
ZCIsICJsb25nIikpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBpZiAobV9pbnNw
ZWN0b3JDb250cm9sbGVyLT5kb21BZ2VudCgpID09IDApIHsKICAgICAgICBwcm90b2NvbEVycm9y
KGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgIkVycm9yOiBET00gaGFuZGxlciBpcyBub3Qg
YXZhaWxhYmxlLiIpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBSZWZQdHI8SW5z
cGVjdG9yVmFsdWU+IHN0eWxlU2hlZXQ7CiAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmRvbUFn
ZW50KCktPmdldFN0eWxlU2hlZXQoY2FsbElkLCBzdHlsZVNoZWV0SWQsICZzdHlsZVNoZWV0KTsK
CiAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0b3JDbGllbnQoKSkgewogICAg
ICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJndW1lbnRzID0gSW5zcGVjdG9yQXJyYXk6OmNy
ZWF0ZSgpOwogICAgICAgIGFyZ3VtZW50cy0+cHVzaFN0cmluZygiZGlkR2V0U3R5bGVTaGVldCIp
OwogICAgICAgIGFyZ3VtZW50cy0+cHVzaE51bWJlcihjYWxsSWQpOwogICAgICAgIGFyZ3VtZW50
cy0+cHVzaChzdHlsZVNoZWV0KTsKICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3Bl
Y3RvckNsaWVudCgpLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoYXJndW1lbnRzLT50b0pTT05TdHJp
bmcoKSk7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKfQoKYm9vbCBJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcjo6Z2V0UnVsZVJhbmdlcyhQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcmdzKQp7
CiAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgYmFja2VuZEZ1bmN0aW9uTmFtZSwgKCJn
ZXRSdWxlUmFuZ2VzIikpOwogICAgbG9uZyBjYWxsSWQgPSAwOwoKICAgIGlmIChhcmdzLT5sZW5n
dGgoKSAhPSAzKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9j
b2xFcnJvcigwLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50c0NvdW50
TWVzc2FnZShhcmdzLT5sZW5ndGgoKSAtIDEsIDIpKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICB9CgogICAgaWYgKCFhcmdzLT5nZXQoMSktPmFzTnVtYmVyKCZjYWxsSWQpKSB7CiAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tl
bmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRUeXBlTWVzc2FnZSgxLCAiY2FsbElk
IiwgImxvbmciKSk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIGxvbmcgc3R5bGVT
aGVldElkOwogICAgaWYgKCFhcmdzLT5nZXQoMiktPmFzTnVtYmVyKCZzdHlsZVNoZWV0SWQpKSB7
CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcihjYWxs
SWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRUeXBlTWVzc2FnZSgy
LCAic3R5bGVTaGVldElkIiwgImxvbmciKSk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoK
ICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXItPmRvbUFnZW50KCkgPT0gMCkgewogICAgICAg
IHByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAiRXJyb3I6IERPTSBo
YW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoK
ICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gcmFuZ2VzOwogICAgbV9pbnNwZWN0b3JDb250cm9s
bGVyLT5kb21BZ2VudCgpLT5nZXRSdWxlUmFuZ2VzKGNhbGxJZCwgc3R5bGVTaGVldElkLCAmcmFu
Z2VzKTsKCiAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0b3JDbGllbnQoKSkg
ewogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJndW1lbnRzID0gSW5zcGVjdG9yQXJy
YXk6OmNyZWF0ZSgpOwogICAgICAgIGFyZ3VtZW50cy0+cHVzaFN0cmluZygiZGlkR2V0UnVsZVJh
bmdlcyIpOwogICAgICAgIGFyZ3VtZW50cy0+cHVzaE51bWJlcihjYWxsSWQpOwogICAgICAgIGFy
Z3VtZW50cy0+cHVzaChyYW5nZXMpOwogICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5z
cGVjdG9yQ2xpZW50KCktPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChhcmd1bWVudHMtPnRvSlNPTlN0
cmluZygpKTsKICAgIH0KICAgIHJldHVybiB0cnVlOwp9Cgpib29sIEluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyOjphcHBseVN0eWxlVGV4dChQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcmdz
KQp7CiAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgYmFja2VuZEZ1bmN0aW9uTmFtZSwg
KCJhcHBseVN0eWxlVGV4dCIpKTsKICAgIGxvbmcgY2FsbElkID0gMDsKCiAgICBpZiAoYXJncy0+
bGVuZ3RoKCkgIT0gNSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHBy
b3RvY29sRXJyb3IoMCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudHND
b3VudE1lc3NhZ2UoYXJncy0+bGVuZ3RoKCkgLSAxLCA0KSk7CiAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgfQoKICAgIGlmICghYXJncy0+Z2V0KDEpLT5hc051bWJlcigmY2FsbElkKSkgewogICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBi
YWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50VHlwZU1lc3NhZ2UoMSwgImNh
bGxJZCIsICJsb25nIikpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBsb25nIHN0
eWxlSWQ7CiAgICBpZiAoIWFyZ3MtPmdldCgyKS0+YXNOdW1iZXIoJnN0eWxlSWQpKSB7CiAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJh
Y2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRUeXBlTWVzc2FnZSgyLCAic3R5
bGVJZCIsICJsb25nIikpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBTdHJpbmcg
c3R5bGVUZXh0OwogICAgaWYgKCFhcmdzLT5nZXQoMyktPmFzU3RyaW5nKCZzdHlsZVRleHQpKSB7
CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcihjYWxs
SWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRUeXBlTWVzc2FnZSgz
LCAic3R5bGVUZXh0IiwgIlN0cmluZyIpKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9Cgog
ICAgU3RyaW5nIHByb3BlcnR5TmFtZTsKICAgIGlmICghYXJncy0+Z2V0KDQpLT5hc1N0cmluZygm
cHJvcGVydHlOYW1lKSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHBy
b3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3Vt
ZW50VHlwZU1lc3NhZ2UoNCwgInByb3BlcnR5TmFtZSIsICJTdHJpbmciKSk7CiAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgfQoKICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXItPmRvbUFnZW50
KCkgPT0gMCkgewogICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25O
YW1lLCAiRXJyb3I6IERPTSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CiAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgfQoKICAgIGJvb2wgc3VjY2VzczsKICAgIFJlZlB0cjxJbnNwZWN0b3JW
YWx1ZT4gc3R5bGU7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGNoYW5nZWRQcm9wZXJ0aWVz
OwogICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5kb21BZ2VudCgpLT5hcHBseVN0eWxlVGV4dChj
YWxsSWQsIHN0eWxlSWQsIHN0eWxlVGV4dCwgcHJvcGVydHlOYW1lLCAmc3VjY2VzcywgJnN0eWxl
LCAmY2hhbmdlZFByb3BlcnRpZXMpOwoKICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXItPmlu
c3BlY3RvckNsaWVudCgpKSB7CiAgICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcmd1bWVu
dHMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CiAgICAgICAgYXJndW1lbnRzLT5wdXNoU3Ry
aW5nKCJkaWRBcHBseVN0eWxlVGV4dCIpOwogICAgICAgIGFyZ3VtZW50cy0+cHVzaE51bWJlcihj
YWxsSWQpOwogICAgICAgIGFyZ3VtZW50cy0+cHVzaEJvb2woc3VjY2Vzcyk7CiAgICAgICAgYXJn
dW1lbnRzLT5wdXNoKHN0eWxlKTsKICAgICAgICBhcmd1bWVudHMtPnB1c2goY2hhbmdlZFByb3Bl
cnRpZXMpOwogICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdG9yQ2xpZW50KCkt
PnNlbmRNZXNzYWdlVG9Gcm9udGVuZChhcmd1bWVudHMtPnRvSlNPTlN0cmluZygpKTsKICAgIH0K
ICAgIHJldHVybiB0cnVlOwp9Cgpib29sIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpzZXRT
dHlsZVRleHQoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJncykKewogICAgREVGSU5FX1NU
QVRJQ19MT0NBTChTdHJpbmcsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICgic2V0U3R5bGVUZXh0Iikp
OwogICAgbG9uZyBjYWxsSWQgPSAwOwoKICAgIGlmIChhcmdzLT5sZW5ndGgoKSAhPSA0KSB7CiAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcigwLCBiYWNr
ZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50c0NvdW50TWVzc2FnZShhcmdzLT5s
ZW5ndGgoKSAtIDEsIDMpKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgaWYgKCFh
cmdzLT5nZXQoMSktPmFzTnVtYmVyKCZjYWxsSWQpKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUs
IGZvcm1hdFdyb25nQXJndW1lbnRUeXBlTWVzc2FnZSgxLCAiY2FsbElkIiwgImxvbmciKSk7CiAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIGxvbmcgc3R5bGVJZDsKICAgIGlmICghYXJn
cy0+Z2V0KDIpLT5hc051bWJlcigmc3R5bGVJZCkpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICAgICBwcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwg
Zm9ybWF0V3JvbmdBcmd1bWVudFR5cGVNZXNzYWdlKDIsICJzdHlsZUlkIiwgImxvbmciKSk7CiAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIFN0cmluZyBzdHlsZVRleHQ7CiAgICBpZiAo
IWFyZ3MtPmdldCgzKS0+YXNTdHJpbmcoJnN0eWxlVGV4dCkpIHsKICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9u
TmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudFR5cGVNZXNzYWdlKDMsICJzdHlsZVRleHQiLCAiU3Ry
aW5nIikpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBpZiAobV9pbnNwZWN0b3JD
b250cm9sbGVyLT5kb21BZ2VudCgpID09IDApIHsKICAgICAgICBwcm90b2NvbEVycm9yKGNhbGxJ
ZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgIkVycm9yOiBET00gaGFuZGxlciBpcyBub3QgYXZhaWxh
YmxlLiIpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBib29sIHN1Y2Nlc3M7CiAg
ICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmRvbUFnZW50KCktPnNldFN0eWxlVGV4dChjYWxsSWQs
IHN0eWxlSWQsIHN0eWxlVGV4dCwgJnN1Y2Nlc3MpOwoKICAgIGlmIChtX2luc3BlY3RvckNvbnRy
b2xsZXItPmluc3BlY3RvckNsaWVudCgpKSB7CiAgICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5
PiBhcmd1bWVudHMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CiAgICAgICAgYXJndW1lbnRz
LT5wdXNoU3RyaW5nKCJkaWRTZXRTdHlsZVRleHQiKTsKICAgICAgICBhcmd1bWVudHMtPnB1c2hO
dW1iZXIoY2FsbElkKTsKICAgICAgICBhcmd1bWVudHMtPnB1c2hCb29sKHN1Y2Nlc3MpOwogICAg
ICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdG9yQ2xpZW50KCktPnNlbmRNZXNzYWdl
VG9Gcm9udGVuZChhcmd1bWVudHMtPnRvSlNPTlN0cmluZygpKTsKICAgIH0KICAgIHJldHVybiB0
cnVlOwp9Cgpib29sIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpzZXRTdHlsZVByb3BlcnR5
KFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3MpCnsKICAgIERFRklORV9TVEFUSUNfTE9D
QUwoU3RyaW5nLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAoInNldFN0eWxlUHJvcGVydHkiKSk7CiAg
ICBsb25nIGNhbGxJZCA9IDA7CgogICAgaWYgKGFyZ3MtPmxlbmd0aCgpICE9IDUpIHsKICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVycm9yKDAsIGJhY2tlbmRG
dW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRzQ291bnRNZXNzYWdlKGFyZ3MtPmxlbmd0
aCgpIC0gMSwgNCkpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBpZiAoIWFyZ3Mt
PmdldCgxKS0+YXNOdW1iZXIoJmNhbGxJZCkpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICAgICBwcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9y
bWF0V3JvbmdBcmd1bWVudFR5cGVNZXNzYWdlKDEsICJjYWxsSWQiLCAibG9uZyIpKTsKICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgbG9uZyBzdHlsZUlkOwogICAgaWYgKCFhcmdzLT5n
ZXQoMiktPmFzTnVtYmVyKCZzdHlsZUlkKSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3Jt
YXRXcm9uZ0FyZ3VtZW50VHlwZU1lc3NhZ2UoMiwgInN0eWxlSWQiLCAibG9uZyIpKTsKICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgU3RyaW5nIG5hbWU7CiAgICBpZiAoIWFyZ3MtPmdl
dCgzKS0+YXNTdHJpbmcoJm5hbWUpKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdy
b25nQXJndW1lbnRUeXBlTWVzc2FnZSgzLCAibmFtZSIsICJTdHJpbmciKSk7CiAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgfQoKICAgIFN0cmluZyB2YWx1ZTsKICAgIGlmICghYXJncy0+Z2V0KDQp
LT5hc1N0cmluZygmdmFsdWUpKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
ICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25n
QXJndW1lbnRUeXBlTWVzc2FnZSg0LCAidmFsdWUiLCAiU3RyaW5nIikpOwogICAgICAgIHJldHVy
biBmYWxzZTsKICAgIH0KCiAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyLT5kb21BZ2VudCgp
ID09IDApIHsKICAgICAgICBwcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFt
ZSwgIkVycm9yOiBET00gaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwogICAgICAgIHJldHVy
biBmYWxzZTsKICAgIH0KCiAgICBib29sIHN1Y2Nlc3M7CiAgICBtX2luc3BlY3RvckNvbnRyb2xs
ZXItPmRvbUFnZW50KCktPnNldFN0eWxlUHJvcGVydHkoY2FsbElkLCBzdHlsZUlkLCBuYW1lLCB2
YWx1ZSwgJnN1Y2Nlc3MpOwoKICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3Rv
ckNsaWVudCgpKSB7CiAgICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcmd1bWVudHMgPSBJ
bnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CiAgICAgICAgYXJndW1lbnRzLT5wdXNoU3RyaW5nKCJk
aWRTZXRTdHlsZVByb3BlcnR5Iik7CiAgICAgICAgYXJndW1lbnRzLT5wdXNoTnVtYmVyKGNhbGxJ
ZCk7CiAgICAgICAgYXJndW1lbnRzLT5wdXNoQm9vbChzdWNjZXNzKTsKICAgICAgICBtX2luc3Bl
Y3RvckNvbnRyb2xsZXItPmluc3BlY3RvckNsaWVudCgpLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQo
YXJndW1lbnRzLT50b0pTT05TdHJpbmcoKSk7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKfQoKYm9v
bCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6dG9nZ2xlU3R5bGVFbmFibGVkKFBhc3NSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3MpCnsKICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5n
LCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAoInRvZ2dsZVN0eWxlRW5hYmxlZCIpKTsKICAgIGxvbmcg
Y2FsbElkID0gMDsKCiAgICBpZiAoYXJncy0+bGVuZ3RoKCkgIT0gNSkgewogICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29sRXJyb3IoMCwgYmFja2VuZEZ1bmN0aW9u
TmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudHNDb3VudE1lc3NhZ2UoYXJncy0+bGVuZ3RoKCkgLSAx
LCA0KSk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIGlmICghYXJncy0+Z2V0KDEp
LT5hc051bWJlcigmY2FsbElkKSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
ICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9u
Z0FyZ3VtZW50VHlwZU1lc3NhZ2UoMSwgImNhbGxJZCIsICJsb25nIikpOwogICAgICAgIHJldHVy
biBmYWxzZTsKICAgIH0KCiAgICBsb25nIHN0eWxlSWQ7CiAgICBpZiAoIWFyZ3MtPmdldCgyKS0+
YXNOdW1iZXIoJnN0eWxlSWQpKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
ICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25n
QXJndW1lbnRUeXBlTWVzc2FnZSgyLCAic3R5bGVJZCIsICJsb25nIikpOwogICAgICAgIHJldHVy
biBmYWxzZTsKICAgIH0KCiAgICBTdHJpbmcgcHJvcGVydHlOYW1lOwogICAgaWYgKCFhcmdzLT5n
ZXQoMyktPmFzU3RyaW5nKCZwcm9wZXJ0eU5hbWUpKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUs
IGZvcm1hdFdyb25nQXJndW1lbnRUeXBlTWVzc2FnZSgzLCAicHJvcGVydHlOYW1lIiwgIlN0cmlu
ZyIpKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgYm9vbCBkaXNhYmxlZDsKICAg
IGlmICghYXJncy0+Z2V0KDQpLT5hc0Jvb2woJmRpc2FibGVkKSkgewogICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rp
b25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50VHlwZU1lc3NhZ2UoNCwgImRpc2FibGVkIiwgImJv
b2xlYW4iKSk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIGlmIChtX2luc3BlY3Rv
ckNvbnRyb2xsZXItPmRvbUFnZW50KCkgPT0gMCkgewogICAgICAgIHByb3RvY29sRXJyb3IoY2Fs
bElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAiRXJyb3I6IERPTSBoYW5kbGVyIGlzIG5vdCBhdmFp
bGFibGUuIik7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIFJlZlB0cjxJbnNwZWN0
b3JWYWx1ZT4gc3R5bGU7CiAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmRvbUFnZW50KCktPnRv
Z2dsZVN0eWxlRW5hYmxlZChjYWxsSWQsIHN0eWxlSWQsIHByb3BlcnR5TmFtZSwgZGlzYWJsZWQs
ICZzdHlsZSk7CgogICAgaWYgKG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdG9yQ2xpZW50
KCkpIHsKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3VtZW50cyA9IEluc3BlY3Rv
ckFycmF5OjpjcmVhdGUoKTsKICAgICAgICBhcmd1bWVudHMtPnB1c2hTdHJpbmcoImRpZFRvZ2ds
ZVN0eWxlRW5hYmxlZCIpOwogICAgICAgIGFyZ3VtZW50cy0+cHVzaE51bWJlcihjYWxsSWQpOwog
ICAgICAgIGFyZ3VtZW50cy0+cHVzaChzdHlsZSk7CiAgICAgICAgbV9pbnNwZWN0b3JDb250cm9s
bGVyLT5pbnNwZWN0b3JDbGllbnQoKS0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGFyZ3VtZW50cy0+
dG9KU09OU3RyaW5nKCkpOwogICAgfQogICAgcmV0dXJuIHRydWU7Cn0KCmJvb2wgSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXI6OnNldFJ1bGVTZWxlY3RvcihQYXNzUmVmUHRyPEluc3BlY3RvckFy
cmF5PiBhcmdzKQp7CiAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgYmFja2VuZEZ1bmN0
aW9uTmFtZSwgKCJzZXRSdWxlU2VsZWN0b3IiKSk7CiAgICBsb25nIGNhbGxJZCA9IDA7CgogICAg
aWYgKGFyZ3MtPmxlbmd0aCgpICE9IDUpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICAgICBwcm90b2NvbEVycm9yKDAsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25n
QXJndW1lbnRzQ291bnRNZXNzYWdlKGFyZ3MtPmxlbmd0aCgpIC0gMSwgNCkpOwogICAgICAgIHJl
dHVybiBmYWxzZTsKICAgIH0KCiAgICBpZiAoIWFyZ3MtPmdldCgxKS0+YXNOdW1iZXIoJmNhbGxJ
ZCkpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVycm9y
KGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudFR5cGVNZXNz
YWdlKDEsICJjYWxsSWQiLCAibG9uZyIpKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9Cgog
ICAgbG9uZyBydWxlSWQ7CiAgICBpZiAoIWFyZ3MtPmdldCgyKS0+YXNOdW1iZXIoJnJ1bGVJZCkp
IHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVycm9yKGNh
bGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudFR5cGVNZXNzYWdl
KDIsICJydWxlSWQiLCAibG9uZyIpKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAg
U3RyaW5nIHNlbGVjdG9yOwogICAgaWYgKCFhcmdzLT5nZXQoMyktPmFzU3RyaW5nKCZzZWxlY3Rv
cikpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVycm9y
KGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudFR5cGVNZXNz
YWdlKDMsICJzZWxlY3RvciIsICJTdHJpbmciKSk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
fQoKICAgIGxvbmcgc2VsZWN0ZWROb2RlSWQ7CiAgICBpZiAoIWFyZ3MtPmdldCg0KS0+YXNOdW1i
ZXIoJnNlbGVjdGVkTm9kZUlkKSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
ICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9u
Z0FyZ3VtZW50VHlwZU1lc3NhZ2UoNCwgInNlbGVjdGVkTm9kZUlkIiwgImxvbmciKSk7CiAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXItPmRv
bUFnZW50KCkgPT0gMCkgewogICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVu
Y3Rpb25OYW1lLCAiRXJyb3I6IERPTSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CiAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gcnVsZTsK
ICAgIGJvb2wgc2VsZWN0b3JBZmZlY3RzTm9kZTsKICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+
ZG9tQWdlbnQoKS0+c2V0UnVsZVNlbGVjdG9yKGNhbGxJZCwgcnVsZUlkLCBzZWxlY3Rvciwgc2Vs
ZWN0ZWROb2RlSWQsICZydWxlLCAmc2VsZWN0b3JBZmZlY3RzTm9kZSk7CgogICAgaWYgKG1faW5z
cGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdG9yQ2xpZW50KCkpIHsKICAgICAgICBSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+IGFyZ3VtZW50cyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKICAgICAg
ICBhcmd1bWVudHMtPnB1c2hTdHJpbmcoImRpZFNldFJ1bGVTZWxlY3RvciIpOwogICAgICAgIGFy
Z3VtZW50cy0+cHVzaE51bWJlcihjYWxsSWQpOwogICAgICAgIGFyZ3VtZW50cy0+cHVzaChydWxl
KTsKICAgICAgICBhcmd1bWVudHMtPnB1c2hCb29sKHNlbGVjdG9yQWZmZWN0c05vZGUpOwogICAg
ICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdG9yQ2xpZW50KCktPnNlbmRNZXNzYWdl
VG9Gcm9udGVuZChhcmd1bWVudHMtPnRvSlNPTlN0cmluZygpKTsKICAgIH0KICAgIHJldHVybiB0
cnVlOwp9Cgpib29sIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjphZGRSdWxlKFBhc3NSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3MpCnsKICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5n
LCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAoImFkZFJ1bGUiKSk7CiAgICBsb25nIGNhbGxJZCA9IDA7
CgogICAgaWYgKGFyZ3MtPmxlbmd0aCgpICE9IDQpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICAgICBwcm90b2NvbEVycm9yKDAsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1h
dFdyb25nQXJndW1lbnRzQ291bnRNZXNzYWdlKGFyZ3MtPmxlbmd0aCgpIC0gMSwgMykpOwogICAg
ICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBpZiAoIWFyZ3MtPmdldCgxKS0+YXNOdW1iZXIo
JmNhbGxJZCkpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBwcm90b2Nv
bEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudFR5
cGVNZXNzYWdlKDEsICJjYWxsSWQiLCAibG9uZyIpKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICB9CgogICAgU3RyaW5nIHNlbGVjdG9yOwogICAgaWYgKCFhcmdzLT5nZXQoMiktPmFzU3RyaW5n
KCZzZWxlY3RvcikpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBwcm90
b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVu
dFR5cGVNZXNzYWdlKDIsICJzZWxlY3RvciIsICJTdHJpbmciKSk7CiAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgfQoKICAgIGxvbmcgc2VsZWN0ZWROb2RlSWQ7CiAgICBpZiAoIWFyZ3MtPmdldCgz
KS0+YXNOdW1iZXIoJnNlbGVjdGVkTm9kZUlkKSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBm
b3JtYXRXcm9uZ0FyZ3VtZW50VHlwZU1lc3NhZ2UoMywgInNlbGVjdGVkTm9kZUlkIiwgImxvbmci
KSk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIGlmIChtX2luc3BlY3RvckNvbnRy
b2xsZXItPmRvbUFnZW50KCkgPT0gMCkgewogICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBi
YWNrZW5kRnVuY3Rpb25OYW1lLCAiRXJyb3I6IERPTSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUu
Iik7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1
ZT4gcnVsZTsKICAgIGJvb2wgc2VsZWN0b3JBZmZlY3RzTm9kZTsKICAgIG1faW5zcGVjdG9yQ29u
dHJvbGxlci0+ZG9tQWdlbnQoKS0+YWRkUnVsZShjYWxsSWQsIHNlbGVjdG9yLCBzZWxlY3RlZE5v
ZGVJZCwgJnJ1bGUsICZzZWxlY3RvckFmZmVjdHNOb2RlKTsKCiAgICBpZiAobV9pbnNwZWN0b3JD
b250cm9sbGVyLT5pbnNwZWN0b3JDbGllbnQoKSkgewogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JB
cnJheT4gYXJndW1lbnRzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwogICAgICAgIGFyZ3Vt
ZW50cy0+cHVzaFN0cmluZygiZGlkQWRkUnVsZSIpOwogICAgICAgIGFyZ3VtZW50cy0+cHVzaE51
bWJlcihjYWxsSWQpOwogICAgICAgIGFyZ3VtZW50cy0+cHVzaChydWxlKTsKICAgICAgICBhcmd1
bWVudHMtPnB1c2hCb29sKHNlbGVjdG9yQWZmZWN0c05vZGUpOwogICAgICAgIG1faW5zcGVjdG9y
Q29udHJvbGxlci0+aW5zcGVjdG9yQ2xpZW50KCktPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChhcmd1
bWVudHMtPnRvSlNPTlN0cmluZygpKTsKICAgIH0KICAgIHJldHVybiB0cnVlOwp9Cgpib29sIElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRDb29raWVzKFBhc3NSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+IGFyZ3MpCnsKICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBiYWNrZW5kRnVu
Y3Rpb25OYW1lLCAoImdldENvb2tpZXMiKSk7CiAgICBsb25nIGNhbGxJZCA9IDA7CgogICAgaWYg
KGFyZ3MtPmxlbmd0aCgpICE9IDIpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICAgICBwcm90b2NvbEVycm9yKDAsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJn
dW1lbnRzQ291bnRNZXNzYWdlKGFyZ3MtPmxlbmd0aCgpIC0gMSwgMSkpOwogICAgICAgIHJldHVy
biBmYWxzZTsKICAgIH0KCiAgICBpZiAoIWFyZ3MtPmdldCgxKS0+YXNOdW1iZXIoJmNhbGxJZCkp
IHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVycm9yKGNh
bGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudFR5cGVNZXNzYWdl
KDEsICJjYWxsSWQiLCAibG9uZyIpKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAg
aWYgKG1faW5zcGVjdG9yQ29udHJvbGxlciA9PSAwKSB7CiAgICAgICAgcHJvdG9jb2xFcnJvcihj
YWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICJFcnJvcjogQ29udHJvbGxlciBoYW5kbGVyIGlz
IG5vdCBhdmFpbGFibGUuIik7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIG1faW5z
cGVjdG9yQ29udHJvbGxlci0+Z2V0Q29va2llcyhjYWxsSWQpOwoKICAgIHJldHVybiB0cnVlOwp9
Cgpib29sIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpkZWxldGVDb29raWUoUGFzc1JlZlB0
cjxJbnNwZWN0b3JBcnJheT4gYXJncykKewogICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcs
IGJhY2tlbmRGdW5jdGlvbk5hbWUsICgiZGVsZXRlQ29va2llIikpOwogICAgbG9uZyBjYWxsSWQg
PSAwOwoKICAgIGlmIChhcmdzLT5sZW5ndGgoKSAhPSAzKSB7CiAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcigwLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBm
b3JtYXRXcm9uZ0FyZ3VtZW50c0NvdW50TWVzc2FnZShhcmdzLT5sZW5ndGgoKSAtIDEsIDIpKTsK
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgU3RyaW5nIGNvb2tpZU5hbWU7CiAgICBp
ZiAoIWFyZ3MtPmdldCgxKS0+YXNTdHJpbmcoJmNvb2tpZU5hbWUpKSB7CiAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5j
dGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRUeXBlTWVzc2FnZSgxLCAiY29va2llTmFtZSIs
ICJTdHJpbmciKSk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIFN0cmluZyBkb21h
aW47CiAgICBpZiAoIWFyZ3MtPmdldCgyKS0+YXNTdHJpbmcoJmRvbWFpbikpIHsKICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2Vu
ZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudFR5cGVNZXNzYWdlKDIsICJkb21haW4i
LCAiU3RyaW5nIikpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBpZiAobV9pbnNw
ZWN0b3JDb250cm9sbGVyID09IDApIHsKICAgICAgICBwcm90b2NvbEVycm9yKGNhbGxJZCwgYmFj
a2VuZEZ1bmN0aW9uTmFtZSwgIkVycm9yOiBDb250cm9sbGVyIGhhbmRsZXIgaXMgbm90IGF2YWls
YWJsZS4iKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgbV9pbnNwZWN0b3JDb250
cm9sbGVyLT5kZWxldGVDb29raWUoY29va2llTmFtZSwgZG9tYWluKTsKCiAgICByZXR1cm4gdHJ1
ZTsKfQoKYm9vbCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0QXBwbGljYXRpb25DYWNo
ZXMoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJncykKewogICAgREVGSU5FX1NUQVRJQ19M
T0NBTChTdHJpbmcsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICgiZ2V0QXBwbGljYXRpb25DYWNoZXMi
KSk7CiAgICBsb25nIGNhbGxJZCA9IDA7CgogICAgaWYgKGFyZ3MtPmxlbmd0aCgpICE9IDIpIHsK
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVycm9yKDAsIGJh
Y2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRzQ291bnRNZXNzYWdlKGFyZ3Mt
Pmxlbmd0aCgpIC0gMSwgMSkpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBpZiAo
IWFyZ3MtPmdldCgxKS0+YXNOdW1iZXIoJmNhbGxJZCkpIHsKICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFt
ZSwgZm9ybWF0V3JvbmdBcmd1bWVudFR5cGVNZXNzYWdlKDEsICJjYWxsSWQiLCAibG9uZyIpKTsK
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgaWYgKG1faW5zcGVjdG9yQ29udHJvbGxl
ci0+YXBwbGljYXRpb25DYWNoZUFnZW50KCkgPT0gMCkgewogICAgICAgIHByb3RvY29sRXJyb3Io
Y2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAiRXJyb3I6IEFwcGxpY2F0aW9uQ2FjaGUgaGFu
ZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAg
ICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmFwcGxpY2F0aW9uQ2FjaGVBZ2VudCgpLT5nZXRBcHBs
aWNhdGlvbkNhY2hlcyhjYWxsSWQpOwoKICAgIHJldHVybiB0cnVlOwp9Cgpib29sIEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyOjpyZWxlYXNlV3JhcHBlck9iamVjdEdyb3VwKFBhc3NSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+IGFyZ3MpCnsKICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBi
YWNrZW5kRnVuY3Rpb25OYW1lLCAoInJlbGVhc2VXcmFwcGVyT2JqZWN0R3JvdXAiKSk7CiAgICBs
b25nIGNhbGxJZCA9IDA7CgogICAgaWYgKGFyZ3MtPmxlbmd0aCgpICE9IDMpIHsKICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVycm9yKDAsIGJhY2tlbmRGdW5j
dGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRzQ291bnRNZXNzYWdlKGFyZ3MtPmxlbmd0aCgp
IC0gMSwgMikpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBsb25nIGluamVjdGVk
U2NyaXB0SWQ7CiAgICBpZiAoIWFyZ3MtPmdldCgxKS0+YXNOdW1iZXIoJmluamVjdGVkU2NyaXB0
SWQpKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJv
cihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRUeXBlTWVz
c2FnZSgxLCAiaW5qZWN0ZWRTY3JpcHRJZCIsICJsb25nIikpOwogICAgICAgIHJldHVybiBmYWxz
ZTsKICAgIH0KCiAgICBTdHJpbmcgb2JqZWN0R3JvdXA7CiAgICBpZiAoIWFyZ3MtPmdldCgyKS0+
YXNTdHJpbmcoJm9iamVjdEdyb3VwKSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRX
cm9uZ0FyZ3VtZW50VHlwZU1lc3NhZ2UoMiwgIm9iamVjdEdyb3VwIiwgIlN0cmluZyIpKTsKICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgaWYgKG1faW5zcGVjdG9yQ29udHJvbGxlci0+
aW5zcGVjdG9yQmFja2VuZCgpID09IDApIHsKICAgICAgICBwcm90b2NvbEVycm9yKGNhbGxJZCwg
YmFja2VuZEZ1bmN0aW9uTmFtZSwgIkVycm9yOiBCYWNrZW5kIGhhbmRsZXIgaXMgbm90IGF2YWls
YWJsZS4iKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgbV9pbnNwZWN0b3JDb250
cm9sbGVyLT5pbnNwZWN0b3JCYWNrZW5kKCktPnJlbGVhc2VXcmFwcGVyT2JqZWN0R3JvdXAoaW5q
ZWN0ZWRTY3JpcHRJZCwgb2JqZWN0R3JvdXApOwoKICAgIHJldHVybiB0cnVlOwp9Cgpib29sIElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpkaWRFdmFsdWF0ZUZvclRlc3RJbkZyb250ZW5kKFBh
c3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3MpCnsKICAgIERFRklORV9TVEFUSUNfTE9DQUwo
U3RyaW5nLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAoImRpZEV2YWx1YXRlRm9yVGVzdEluRnJvbnRl
bmQiKSk7CiAgICBsb25nIGNhbGxJZCA9IDA7CgogICAgaWYgKGFyZ3MtPmxlbmd0aCgpICE9IDMp
IHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVycm9yKDAs
IGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRzQ291bnRNZXNzYWdlKGFy
Z3MtPmxlbmd0aCgpIC0gMSwgMikpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBp
ZiAoIWFyZ3MtPmdldCgxKS0+YXNOdW1iZXIoJmNhbGxJZCkpIHsKICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9u
TmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudFR5cGVNZXNzYWdlKDEsICJjYWxsSWQiLCAibG9uZyIp
KTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgU3RyaW5nIGpzb25SZXN1bHQ7CiAg
ICBpZiAoIWFyZ3MtPmdldCgyKS0+YXNTdHJpbmcoJmpzb25SZXN1bHQpKSB7CiAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRG
dW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRUeXBlTWVzc2FnZSgyLCAianNvblJlc3Vs
dCIsICJTdHJpbmciKSk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIGlmIChtX2lu
c3BlY3RvckNvbnRyb2xsZXIgPT0gMCkgewogICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBi
YWNrZW5kRnVuY3Rpb25OYW1lLCAiRXJyb3I6IENvbnRyb2xsZXIgaGFuZGxlciBpcyBub3QgYXZh
aWxhYmxlLiIpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBtX2luc3BlY3RvckNv
bnRyb2xsZXItPmRpZEV2YWx1YXRlRm9yVGVzdEluRnJvbnRlbmQoY2FsbElkLCBqc29uUmVzdWx0
KTsKCiAgICByZXR1cm4gdHJ1ZTsKfQoKYm9vbCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6
Z2V0RGF0YWJhc2VUYWJsZU5hbWVzKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3MpCnsK
ICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAoImdl
dERhdGFiYXNlVGFibGVOYW1lcyIpKTsKICAgIGxvbmcgY2FsbElkID0gMDsKCiAgICBpZiAoYXJn
cy0+bGVuZ3RoKCkgIT0gMykgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAg
IHByb3RvY29sRXJyb3IoMCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVu
dHNDb3VudE1lc3NhZ2UoYXJncy0+bGVuZ3RoKCkgLSAxLCAyKSk7CiAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgfQoKICAgIGlmICghYXJncy0+Z2V0KDEpLT5hc051bWJlcigmY2FsbElkKSkgewog
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElk
LCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50VHlwZU1lc3NhZ2UoMSwg
ImNhbGxJZCIsICJsb25nIikpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBsb25n
IGRhdGFiYXNlSWQ7CiAgICBpZiAoIWFyZ3MtPmdldCgyKS0+YXNOdW1iZXIoJmRhdGFiYXNlSWQp
KSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcihj
YWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRUeXBlTWVzc2Fn
ZSgyLCAiZGF0YWJhc2VJZCIsICJsb25nIikpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0K
CiAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0b3JCYWNrZW5kKCkgPT0gMCkg
ewogICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAiRXJy
b3I6IEJhY2tlbmQgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwogICAgICAgIHJldHVybiBm
YWxzZTsKICAgIH0KCiAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RvckJhY2tlbmQo
KS0+Z2V0RGF0YWJhc2VUYWJsZU5hbWVzKGNhbGxJZCwgZGF0YWJhc2VJZCk7CgogICAgcmV0dXJu
IHRydWU7Cn0KCmJvb2wgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldERPTVN0b3JhZ2VF
bnRyaWVzKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3MpCnsKICAgIERFRklORV9TVEFU
SUNfTE9DQUwoU3RyaW5nLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAoImdldERPTVN0b3JhZ2VFbnRy
aWVzIikpOwogICAgbG9uZyBjYWxsSWQgPSAwOwoKICAgIGlmIChhcmdzLT5sZW5ndGgoKSAhPSAz
KSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcigw
LCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50c0NvdW50TWVzc2FnZShh
cmdzLT5sZW5ndGgoKSAtIDEsIDIpKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAg
aWYgKCFhcmdzLT5nZXQoMSktPmFzTnVtYmVyKCZjYWxsSWQpKSB7CiAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlv
bk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRUeXBlTWVzc2FnZSgxLCAiY2FsbElkIiwgImxvbmci
KSk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIGxvbmcgc3RvcmFnZUlkOwogICAg
aWYgKCFhcmdzLT5nZXQoMiktPmFzTnVtYmVyKCZzdG9yYWdlSWQpKSB7CiAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5j
dGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRUeXBlTWVzc2FnZSgyLCAic3RvcmFnZUlkIiwg
ImxvbmciKSk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIGlmIChtX2luc3BlY3Rv
ckNvbnRyb2xsZXIgPT0gMCkgewogICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5k
RnVuY3Rpb25OYW1lLCAiRXJyb3I6IENvbnRyb2xsZXIgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxl
LiIpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBtX2luc3BlY3RvckNvbnRyb2xs
ZXItPmdldERPTVN0b3JhZ2VFbnRyaWVzKGNhbGxJZCwgc3RvcmFnZUlkKTsKCiAgICByZXR1cm4g
dHJ1ZTsKfQoKYm9vbCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6c2V0RE9NU3RvcmFnZUl0
ZW0oUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJncykKewogICAgREVGSU5FX1NUQVRJQ19M
T0NBTChTdHJpbmcsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICgic2V0RE9NU3RvcmFnZUl0ZW0iKSk7
CiAgICBsb25nIGNhbGxJZCA9IDA7CgogICAgaWYgKGFyZ3MtPmxlbmd0aCgpICE9IDUpIHsKICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVycm9yKDAsIGJhY2tl
bmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRzQ291bnRNZXNzYWdlKGFyZ3MtPmxl
bmd0aCgpIC0gMSwgNCkpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBpZiAoIWFy
Z3MtPmdldCgxKS0+YXNOdW1iZXIoJmNhbGxJZCkpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICAgICBwcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwg
Zm9ybWF0V3JvbmdBcmd1bWVudFR5cGVNZXNzYWdlKDEsICJjYWxsSWQiLCAibG9uZyIpKTsKICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgbG9uZyBzdG9yYWdlSWQ7CiAgICBpZiAoIWFy
Z3MtPmdldCgyKS0+YXNOdW1iZXIoJnN0b3JhZ2VJZCkpIHsKICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFt
ZSwgZm9ybWF0V3JvbmdBcmd1bWVudFR5cGVNZXNzYWdlKDIsICJzdG9yYWdlSWQiLCAibG9uZyIp
KTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgU3RyaW5nIGtleTsKICAgIGlmICgh
YXJncy0+Z2V0KDMpLT5hc1N0cmluZygma2V5KSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBm
b3JtYXRXcm9uZ0FyZ3VtZW50VHlwZU1lc3NhZ2UoMywgImtleSIsICJTdHJpbmciKSk7CiAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIFN0cmluZyB2YWx1ZTsKICAgIGlmICghYXJncy0+
Z2V0KDQpLT5hc1N0cmluZygmdmFsdWUpKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1h
dFdyb25nQXJndW1lbnRUeXBlTWVzc2FnZSg0LCAidmFsdWUiLCAiU3RyaW5nIikpOwogICAgICAg
IHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyID09IDAp
IHsKICAgICAgICBwcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgIkVy
cm9yOiBDb250cm9sbGVyIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICB9CgogICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5zZXRET01TdG9yYWdl
SXRlbShjYWxsSWQsIHN0b3JhZ2VJZCwga2V5LCB2YWx1ZSk7CgogICAgcmV0dXJuIHRydWU7Cn0K
CmJvb2wgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnJlbW92ZURPTVN0b3JhZ2VJdGVtKFBh
c3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3MpCnsKICAgIERFRklORV9TVEFUSUNfTE9DQUwo
U3RyaW5nLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAoInJlbW92ZURPTVN0b3JhZ2VJdGVtIikpOwog
ICAgbG9uZyBjYWxsSWQgPSAwOwoKICAgIGlmIChhcmdzLT5sZW5ndGgoKSAhPSA0KSB7CiAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcigwLCBiYWNrZW5k
RnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50c0NvdW50TWVzc2FnZShhcmdzLT5sZW5n
dGgoKSAtIDEsIDMpKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgaWYgKCFhcmdz
LT5nZXQoMSktPmFzTnVtYmVyKCZjYWxsSWQpKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZv
cm1hdFdyb25nQXJndW1lbnRUeXBlTWVzc2FnZSgxLCAiY2FsbElkIiwgImxvbmciKSk7CiAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIGxvbmcgc3RvcmFnZUlkOwogICAgaWYgKCFhcmdz
LT5nZXQoMiktPmFzTnVtYmVyKCZzdG9yYWdlSWQpKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUs
IGZvcm1hdFdyb25nQXJndW1lbnRUeXBlTWVzc2FnZSgyLCAic3RvcmFnZUlkIiwgImxvbmciKSk7
CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIFN0cmluZyBrZXk7CiAgICBpZiAoIWFy
Z3MtPmdldCgzKS0+YXNTdHJpbmcoJmtleSkpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICAgICBwcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9y
bWF0V3JvbmdBcmd1bWVudFR5cGVNZXNzYWdlKDMsICJrZXkiLCAiU3RyaW5nIikpOwogICAgICAg
IHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyID09IDAp
IHsKICAgICAgICBwcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgIkVy
cm9yOiBDb250cm9sbGVyIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICB9CgogICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5yZW1vdmVET01TdG9y
YWdlSXRlbShjYWxsSWQsIHN0b3JhZ2VJZCwga2V5KTsKCiAgICByZXR1cm4gdHJ1ZTsKfQoKdm9p
ZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2goY29uc3QgU3RyaW5nJiBtZXNz
YWdlKQp7CiAgICB0eXBlZGVmIGJvb2wgKEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjoqQ2Fs
bEhhbmRsZXIpKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3MpOwogICAgdHlwZWRlZiBI
YXNoTWFwPFN0cmluZywgQ2FsbEhhbmRsZXI+IERpc3BhdGNoTWFwOwogICAgREVGSU5FX1NUQVRJ
Q19MT0NBTChEaXNwYXRjaE1hcCwgZGlzcGF0Y2hNYXAsICk7CiAgICBpZiAoZGlzcGF0Y2hNYXAu
aXNFbXB0eSgpKSB7CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKCJnZXRQcm9maWxlckxvZ0xpbmVz
IiwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRQcm9maWxlckxvZ0xpbmVzKTsKICAg
ICAgICBkaXNwYXRjaE1hcC5hZGQoImdldENvbXB1dGVkU3R5bGUiLCAmSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXI6OmdldENvbXB1dGVkU3R5bGUpOwogICAgICAgIGRpc3BhdGNoTWFwLmFkZCgi
Z2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2RlIiwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpn
ZXRFdmVudExpc3RlbmVyc0Zvck5vZGUpOwogICAgICAgIGRpc3BhdGNoTWFwLmFkZCgiZW5hYmxl
RGVidWdnZXIiLCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmVuYWJsZURlYnVnZ2VyKTsK
ICAgICAgICBkaXNwYXRjaE1hcC5hZGQoInJlbW92ZUJyZWFrcG9pbnQiLCAmSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI6OnJlbW92ZUJyZWFrcG9pbnQpOwogICAgICAgIGRpc3BhdGNoTWFwLmFk
ZCgic2V0UnVsZVNlbGVjdG9yIiwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpzZXRSdWxl
U2VsZWN0b3IpOwogICAgICAgIGRpc3BhdGNoTWFwLmFkZCgiYXBwbHlTdHlsZVRleHQiLCAmSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmFwcGx5U3R5bGVUZXh0KTsKICAgICAgICBkaXNwYXRj
aE1hcC5hZGQoImNoYW5nZVRhZ05hbWUiLCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmNo
YW5nZVRhZ05hbWUpOwogICAgICAgIGRpc3BhdGNoTWFwLmFkZCgiY29weU5vZGUiLCAmSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXI6OmNvcHlOb2RlKTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQo
ImFkZEluc3BlY3RlZE5vZGUiLCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmFkZEluc3Bl
Y3RlZE5vZGUpOwogICAgICAgIGRpc3BhdGNoTWFwLmFkZCgic3RlcE91dE9mRnVuY3Rpb24iLCAm
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnN0ZXBPdXRPZkZ1bmN0aW9uKTsKICAgICAgICBk
aXNwYXRjaE1hcC5hZGQoImRpc2FibGVNb25pdG9yaW5nWEhSIiwgJkluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyOjpkaXNhYmxlTW9uaXRvcmluZ1hIUik7CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRk
KCJzdGFydFByb2ZpbGluZyIsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6c3RhcnRQcm9m
aWxpbmcpOwogICAgICAgIGRpc3BhdGNoTWFwLmFkZCgidGFrZUhlYXBTbmFwc2hvdCIsICZJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6dGFrZUhlYXBTbmFwc2hvdCk7CiAgICAgICAgZGlzcGF0
Y2hNYXAuYWRkKCJhZGRTY3JpcHRUb0V2YWx1YXRlT25Mb2FkIiwgJkluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyOjphZGRTY3JpcHRUb0V2YWx1YXRlT25Mb2FkKTsKICAgICAgICBkaXNwYXRjaE1h
cC5hZGQoImVuYWJsZU1vbml0b3JpbmdYSFIiLCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6
OmVuYWJsZU1vbml0b3JpbmdYSFIpOwogICAgICAgIGRpc3BhdGNoTWFwLmFkZCgic2V0QnJlYWtw
b2ludCIsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6c2V0QnJlYWtwb2ludCk7CiAgICAg
ICAgZGlzcGF0Y2hNYXAuYWRkKCJhY3RpdmF0ZUJyZWFrcG9pbnRzIiwgJkluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyOjphY3RpdmF0ZUJyZWFrcG9pbnRzKTsKICAgICAgICBkaXNwYXRjaE1hcC5h
ZGQoInJlbW92ZUF0dHJpYnV0ZSIsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6cmVtb3Zl
QXR0cmlidXRlKTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoImNsZWFyQ29uc29sZU1lc3NhZ2Vz
IiwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpjbGVhckNvbnNvbGVNZXNzYWdlcyk7CiAg
ICAgICAgZGlzcGF0Y2hNYXAuYWRkKCJnZXRQcm9maWxlSGVhZGVycyIsICZJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcjo6Z2V0UHJvZmlsZUhlYWRlcnMpOwogICAgICAgIGRpc3BhdGNoTWFwLmFk
ZCgiZWRpdFNjcmlwdFNvdXJjZSIsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6ZWRpdFNj
cmlwdFNvdXJjZSk7CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKCJnZXRTY3JpcHRTb3VyY2UiLCAm
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFNjcmlwdFNvdXJjZSk7CiAgICAgICAgZGlz
cGF0Y2hNYXAuYWRkKCJhZGRSdWxlIiwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjphZGRS
dWxlKTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoImdldFByb2ZpbGUiLCAmSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI6OmdldFByb2ZpbGUpOwogICAgICAgIGRpc3BhdGNoTWFwLmFkZCgiZ2V0
RE9NU3RvcmFnZUVudHJpZXMiLCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldERPTVN0
b3JhZ2VFbnRyaWVzKTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoImdldEFwcGxpY2F0aW9uQ2Fj
aGVzIiwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRBcHBsaWNhdGlvbkNhY2hlcyk7
CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKCJlbmFibGVTZWFyY2hpbmdGb3JOb2RlIiwgJkluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyOjplbmFibGVTZWFyY2hpbmdGb3JOb2RlKTsKICAgICAgICBk
aXNwYXRjaE1hcC5hZGQoInJlbW92ZVByb2ZpbGUiLCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI6OnJlbW92ZVByb2ZpbGUpOwogICAgICAgIGRpc3BhdGNoTWFwLmFkZCgic3RvcFRpbWVsaW5l
UHJvZmlsZXIiLCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnN0b3BUaW1lbGluZVByb2Zp
bGVyKTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoInNlYXJjaENhbmNlbGVkIiwgJkluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyOjpzZWFyY2hDYW5jZWxlZCk7CiAgICAgICAgZGlzcGF0Y2hNYXAu
YWRkKCJnZXRPdXRlckhUTUwiLCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldE91dGVy
SFRNTCk7CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKCJzYXZlQXBwbGljYXRpb25TZXR0aW5ncyIs
ICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6c2F2ZUFwcGxpY2F0aW9uU2V0dGluZ3MpOwog
ICAgICAgIGRpc3BhdGNoTWFwLmFkZCgic3RhcnRUaW1lbGluZVByb2ZpbGVyIiwgJkluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyOjpzdGFydFRpbWVsaW5lUHJvZmlsZXIpOwogICAgICAgIGRpc3Bh
dGNoTWFwLmFkZCgicGVyZm9ybVNlYXJjaCIsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6
cGVyZm9ybVNlYXJjaCk7CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKCJnZXRBbGxTdHlsZXMiLCAm
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldEFsbFN0eWxlcyk7CiAgICAgICAgZGlzcGF0
Y2hNYXAuYWRkKCJzZXRPdXRlckhUTUwiLCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnNl
dE91dGVySFRNTCk7CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKCJkaXNwYXRjaE9uSW5qZWN0ZWRT
Y3JpcHQiLCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoT25JbmplY3RlZFNj
cmlwdCk7CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKCJnZXRJbmxpbmVTdHlsZSIsICZJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0SW5saW5lU3R5bGUpOwogICAgICAgIGRpc3BhdGNoTWFw
LmFkZCgiZGlzYWJsZVByb2ZpbGVyIiwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpkaXNh
YmxlUHJvZmlsZXIpOwogICAgICAgIGRpc3BhdGNoTWFwLmFkZCgidG9nZ2xlU3R5bGVFbmFibGVk
IiwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjp0b2dnbGVTdHlsZUVuYWJsZWQpOwogICAg
ICAgIGRpc3BhdGNoTWFwLmFkZCgic3RvcmVMYXN0QWN0aXZlUGFuZWwiLCAmSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI6OnN0b3JlTGFzdEFjdGl2ZVBhbmVsKTsKICAgICAgICBkaXNwYXRjaE1h
cC5hZGQoInNldEluamVjdGVkU2NyaXB0U291cmNlIiwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyOjpzZXRJbmplY3RlZFNjcmlwdFNvdXJjZSk7CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKCJn
ZXRTdHlsZXMiLCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFN0eWxlcyk7CiAgICAg
ICAgZGlzcGF0Y2hNYXAuYWRkKCJyZWxlYXNlV3JhcHBlck9iamVjdEdyb3VwIiwgJkluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyOjpyZWxlYXNlV3JhcHBlck9iamVjdEdyb3VwKTsKICAgICAgICBk
aXNwYXRjaE1hcC5hZGQoInN0ZXBPdmVyU3RhdGVtZW50IiwgJkluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyOjpzdGVwT3ZlclN0YXRlbWVudCk7CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKCJkZWxl
dGVDb29raWUiLCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmRlbGV0ZUNvb2tpZSk7CiAg
ICAgICAgZGlzcGF0Y2hNYXAuYWRkKCJlbmFibGVQcm9maWxlciIsICZJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlcjo6ZW5hYmxlUHJvZmlsZXIpOwogICAgICAgIGRpc3BhdGNoTWFwLmFkZCgiaGlk
ZURPTU5vZGVIaWdobGlnaHQiLCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmhpZGVET01O
b2RlSGlnaGxpZ2h0KTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoImNsZWFyUHJvZmlsZXMiLCAm
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmNsZWFyUHJvZmlsZXMpOwogICAgICAgIGRpc3Bh
dGNoTWFwLmFkZCgiZ2V0Q2hpbGROb2RlcyIsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6
Z2V0Q2hpbGROb2Rlcyk7CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKCJzYXZlU2Vzc2lvblNldHRp
bmdzIiwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpzYXZlU2Vzc2lvblNldHRpbmdzKTsK
ICAgICAgICBkaXNwYXRjaE1hcC5hZGQoImVuYWJsZVJlc291cmNlVHJhY2tpbmciLCAmSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXI6OmVuYWJsZVJlc291cmNlVHJhY2tpbmcpOwogICAgICAgIGRp
c3BhdGNoTWFwLmFkZCgiZGlzYWJsZVJlc291cmNlVHJhY2tpbmciLCAmSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXI6OmRpc2FibGVSZXNvdXJjZVRyYWNraW5nKTsKICAgICAgICBkaXNwYXRjaE1h
cC5hZGQoImRlYWN0aXZhdGVCcmVha3BvaW50cyIsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cjo6ZGVhY3RpdmF0ZUJyZWFrcG9pbnRzKTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoInJlbW92
ZUFsbFNjcmlwdHNUb0V2YWx1YXRlT25Mb2FkIiwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
OjpyZW1vdmVBbGxTY3JpcHRzVG9FdmFsdWF0ZU9uTG9hZCk7CiAgICAgICAgZGlzcGF0Y2hNYXAu
YWRkKCJyZW1vdmVOb2RlIiwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpyZW1vdmVOb2Rl
KTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoInNldFBhdXNlT25FeGNlcHRpb25zU3RhdGUiLCAm
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnNldFBhdXNlT25FeGNlcHRpb25zU3RhdGUpOwog
ICAgICAgIGRpc3BhdGNoTWFwLmFkZCgicmVtb3ZlRE9NU3RvcmFnZUl0ZW0iLCAmSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXI6OnJlbW92ZURPTVN0b3JhZ2VJdGVtKTsKICAgICAgICBkaXNwYXRj
aE1hcC5hZGQoInNldFRleHROb2RlVmFsdWUiLCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6
OnNldFRleHROb2RlVmFsdWUpOwogICAgICAgIGRpc3BhdGNoTWFwLmFkZCgicHVzaE5vZGVCeVBh
dGhUb0Zyb250ZW5kIiwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpwdXNoTm9kZUJ5UGF0
aFRvRnJvbnRlbmQpOwogICAgICAgIGRpc3BhdGNoTWFwLmFkZCgic2V0U3R5bGVUZXh0IiwgJklu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpzZXRTdHlsZVRleHQpOwogICAgICAgIGRpc3BhdGNo
TWFwLmFkZCgiZ2V0U3R5bGVTaGVldCIsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0
U3R5bGVTaGVldCk7CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKCJzdG9wUHJvZmlsaW5nIiwgJklu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpzdG9wUHJvZmlsaW5nKTsKICAgICAgICBkaXNwYXRj
aE1hcC5hZGQoImRpc2FibGVTZWFyY2hpbmdGb3JOb2RlIiwgJkluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyOjpkaXNhYmxlU2VhcmNoaW5nRm9yTm9kZSk7CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRk
KCJzZXRBdHRyaWJ1dGUiLCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnNldEF0dHJpYnV0
ZSk7CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKCJyZXN1bWUiLCAmSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXI6OnJlc3VtZSk7CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKCJnZXREYXRhYmFzZVRh
YmxlTmFtZXMiLCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldERhdGFiYXNlVGFibGVO
YW1lcyk7CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKCJnZXRDb29raWVzIiwgJkluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyOjpnZXRDb29raWVzKTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoImRp
c2FibGVEZWJ1Z2dlciIsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzYWJsZURlYnVn
Z2VyKTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoInNldFN0eWxlUHJvcGVydHkiLCAmSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXI6OnNldFN0eWxlUHJvcGVydHkpOwogICAgICAgIGRpc3BhdGNo
TWFwLmFkZCgiaGlnaGxpZ2h0RE9NTm9kZSIsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6
aGlnaGxpZ2h0RE9NTm9kZSk7CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKCJzdGVwSW50b1N0YXRl
bWVudCIsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6c3RlcEludG9TdGF0ZW1lbnQpOwog
ICAgICAgIGRpc3BhdGNoTWFwLmFkZCgicmVsb2FkUGFnZSIsICZJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcjo6cmVsb2FkUGFnZSk7CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKCJnZXRSdWxlUmFu
Z2VzIiwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRSdWxlUmFuZ2VzKTsKICAgICAg
ICBkaXNwYXRjaE1hcC5hZGQoImRpZEV2YWx1YXRlRm9yVGVzdEluRnJvbnRlbmQiLCAmSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXI6OmRpZEV2YWx1YXRlRm9yVGVzdEluRnJvbnRlbmQpOwogICAg
ICAgIGRpc3BhdGNoTWFwLmFkZCgic2V0RE9NU3RvcmFnZUl0ZW0iLCAmSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXI6OnNldERPTVN0b3JhZ2VJdGVtKTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQo
InBhdXNlIiwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpwYXVzZSk7CiAgICAgICAgZGlz
cGF0Y2hNYXAuYWRkKCJnZXRSZXNvdXJjZUNvbnRlbnQiLCAmSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXI6OmdldFJlc291cmNlQ29udGVudCk7CiAgICB9CgogICAgUmVmUHRyPEluc3BlY3RvclZh
bHVlPiBwYXJzZWRNZXNzYWdlID0gSW5zcGVjdG9yVmFsdWU6OnBhcnNlSlNPTihtZXNzYWdlKTsK
ICAgIGlmICghcGFyc2VkTWVzc2FnZSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgICAgIHByb3RvY29sRXJyb3IoMCwgImRpc3BhdGNoIiwgIkVycm9yOiBJbnZhbGlkIG1lc3Nh
Z2UgZm9ybWF0LiBNZXNzYWdlIHNob3VsZCBiZSBpbiBKU09OIGZvcm1hdC4iKTsKICAgICAgICBy
ZXR1cm47CiAgICB9CgogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBtZXNzYWdlQXJyYXkgPSBw
YXJzZWRNZXNzYWdlLT5hc0FycmF5KCk7CiAgICBpZiAoIW1lc3NhZ2VBcnJheSkgewogICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29sRXJyb3IoMCwgImRpc3BhdGNo
IiwgIkVycm9yOiBJbnZhbGlkIG1lc3NhZ2UgZm9ybWF0LiBUaGUgbWVzc2FnZSBzaG91bGQgYmUg
YSBKU09OaWZpZWQgYXJyYXkgb2YgYXJndW1lbnRzLiIpOwogICAgICAgIHJldHVybjsKICAgIH0K
CiAgICBpZiAoIW1lc3NhZ2VBcnJheS0+bGVuZ3RoKCkpIHsKICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVycm9yKDAsICJkaXNwYXRjaCIsICJFcnJvcjogSW52
YWxpZCBtZXNzYWdlIGZvcm1hdC4gRW1wdHkgbWVzc2FnZSB3YXMgcmVjZWl2ZWQuIik7CiAgICAg
ICAgcmV0dXJuOwogICAgfQoKICAgIFN0cmluZyBtZXRob2ROYW1lOwogICAgaWYgKCFtZXNzYWdl
QXJyYXktPmdldCgwKS0+YXNTdHJpbmcoJm1ldGhvZE5hbWUpKSB7CiAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcigwLCAiZGlzcGF0Y2giLCAiRXJyb3I6
IEludmFsaWQgbWVzc2FnZSBmb3JtYXQuIFRoZSBmaXJzdCBlbGVtZW50IG9mIHRoZSBtZXNzYWdl
IHNob3VsZCBiZSBtZXRob2QgbmFtZS4iKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgSGFz
aE1hcDxTdHJpbmcsIENhbGxIYW5kbGVyPjo6aXRlcmF0b3IgaXQgPSBkaXNwYXRjaE1hcC5maW5k
KG1ldGhvZE5hbWUpOwogICAgaWYgKGl0ID09IGRpc3BhdGNoTWFwLmVuZCgpKSB7CiAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcigwLCAiZGlzcGF0Y2gi
LCBTdHJpbmc6OmZvcm1hdCgiRXJyb3I6IEludmFsaWQgbWV0aG9kIG5hbWUuICclcycgd2Fzbid0
IGZvdW5kLiIsIG1ldGhvZE5hbWUudXRmOCgpLmRhdGEoKSkpOwogICAgICAgIHJldHVybjsKICAg
IH0KCiAgICAoKCp0aGlzKS4qaXQtPnNlY29uZCkobWVzc2FnZUFycmF5KTsKfQoKdm9pZCBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6cHJvdG9jb2xFcnJvcihjb25zdCBsb25nIGNhbGxJZCwg
Y29uc3QgU3RyaW5nJiBtZXRob2QsIGNvbnN0IFN0cmluZyYgZXJyb3JUZXh0KSBjb25zdAp7CiAg
ICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3VtZW50cyA9IEluc3BlY3RvckFycmF5OjpjcmVh
dGUoKTsKICAgIGFyZ3VtZW50cy0+cHVzaFN0cmluZygicHJvdG9jb2xFcnJvciIpOwogICAgYXJn
dW1lbnRzLT5wdXNoTnVtYmVyKGNhbGxJZCk7CiAgICBhcmd1bWVudHMtPnB1c2hTdHJpbmcobWV0
aG9kKTsKICAgIGFyZ3VtZW50cy0+cHVzaFN0cmluZyhlcnJvclRleHQpOwogICAgbV9pbnNwZWN0
b3JDb250cm9sbGVyLT5pbnNwZWN0b3JDbGllbnQoKS0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGFy
Z3VtZW50cy0+dG9KU09OU3RyaW5nKCkpOwp9Cgp9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCgojZW5k
aWYgLy8gRU5BQkxFKElOU1BFQ1RPUikK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63570</attachid>
            <date>2010-08-05 03:34:44 -0700</date>
            <delta_ts>2010-08-05 07:49:50 -0700</delta_ts>
            <desc>[patch] initial version.</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>82716</size>
            <attacher name="Ilya Tikhonovsky">loislo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YWQ5ZDUxNi4uM2FjMzA5MCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNTIgQEAKKzIwMTAtMDgtMDUgIElseWEgVGlraG9u
b3Zza3kgIDxsb2lzbG9AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFdlYkluc3BlY3RvcjogSW4gdGhlIGN1cnJlbnQgaW1wbGVt
ZW50YXRpb24gb2YgaW5zcGVjdG9yIGFnZW50J3Mgd2UncmUgY2FsbGluZworICAgICAgICBkaWQg
bWV0aG9kcyBtYW51YWxseS4gVGhhdCBpcyBlcnJvciBwcm9uZSBhbmQgaXMgYmFkIGZyb20gcHJv
dG9jb2wgcG9pbnQgb2Ygdmlldy4KKyAgICAgICAgSXQgd291bGQgYmUgYmV0dGVyIHRvIGNhbGwg
ZGlkIG1ldGhvZHMgYXV0b21hdGljYWxseSBmcm9tIHRoZSBjb3JyZXNwb25kaW5nIG1ldGhvZHMK
KyAgICAgICAgb2YgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIgYW5kIHJlcG9ydCB0aGUgcmVz
dWx0cy4gQXMgZmFyIGFzIG91ciBwcm90b2NvbCBpcworICAgICAgICBzdGF0ZWZ1bGwgdGhpcyB0
cmljayB3aWxsIGtlZXAgaXQgaW4gdGhlIGNvbnNpc3RlbnQgc3RhdGUuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MzQ4OQorCisgICAgICAgICogaW5z
cGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucG06CisgICAgICAgICogaW5zcGVjdG9yL0lu
c3BlY3Rvci5pZGw6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckFwcGxpY2F0aW9uQ2Fj
aGVBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hl
QWdlbnQ6OmdldEFwcGxpY2F0aW9uQ2FjaGVzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVj
dG9yQXBwbGljYXRpb25DYWNoZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rv
ckJhY2tlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQmFja2VuZDo6Z2V0UHJv
ZmlsZXJMb2dMaW5lcyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCYWNrZW5kOjpzZXRJ
bmplY3RlZFNjcmlwdFNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCYWNrZW5k
OjpkaXNwYXRjaE9uSW5qZWN0ZWRTY3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
QmFja2VuZDo6Z2V0RGF0YWJhc2VUYWJsZU5hbWVzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5z
cGVjdG9yQmFja2VuZC5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDU1NTdG9yZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NTdG9yZTo6aW5zcGVjdG9yU3R5bGVT
aGVldCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNTU1N0b3JlLmg6CisgICAgICAg
ICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yQ29udHJvbGxlcjo6SW5zcGVjdG9yQ29udHJvbGxlcik6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpnZXRDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckNvbnRyb2xsZXI6OmdldERPTVN0b3JhZ2VFbnRyaWVzKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnNldERPTVN0b3JhZ2VJdGVtKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnJlbW92ZURPTVN0b3JhZ2VJdGVtKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmdldFByb2ZpbGVIZWFkZXJzKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmdldFByb2ZpbGUpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZWRpdFNjcmlwdFNvdXJjZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpnZXRTY3JpcHRTb3VyY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0QnJlYWtwb2ludCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpnZXRSZXNvdXJjZUNvbnRlbnQp
OgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmg6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0b3JDbGllbnQpOgorICAgICAgICAq
IGluc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JET01BZ2VudDo6c2V0QXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckRPTUFnZW50OjpyZW1vdmVBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
RE9NQWdlbnQ6OnJlbW92ZU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdl
bnQ6OmNoYW5nZVRhZ05hbWUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6
OmdldE91dGVySFRNTCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6c2V0
T3V0ZXJIVE1MKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpzZXRUZXh0
Tm9kZVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpnZXRFdmVu
dExpc3RlbmVyc0Zvck5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6
OmdldFN0eWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6Z2V0QWxs
U3R5bGVzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpnZXRTdHlsZVNo
ZWV0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpnZXRSdWxlUmFuZ2Vz
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpnZXRJbmxpbmVTdHlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6Z2V0Q29tcHV0ZWRTdHlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6YXBwbHlTdHlsZVRleHQpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OnNldFN0eWxlVGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6c2V0U3R5bGVQcm9wZXJ0eSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6dG9nZ2xlU3R5bGVFbmFibGVkKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpzZXRSdWxlU2VsZWN0b3IpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmFkZFJ1bGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yUnVsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6cHVzaE5vZGVCeVBhdGhUb0Zyb250ZW5kKToKKyAg
ICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0
b3IvSW5zcGVjdG9yVmFsdWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclZhbHVl
Ojphc051bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCYXNpY1ZhbHVlOjphc051
bWJlcik6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oOgorICAgICAgICAq
IGluc3BlY3Rvci9mcm9udC1lbmQvQ2FsbGJhY2suanM6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
Q2FsbGJhY2sucHJvdG90eXBlLnByb2Nlc3NDYWxsYmFjayk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuQ2FsbGJhY2sucHJvdG90eXBlLnJlbW92ZUNhbGxiYWNrRW50cnkpOgorICAgICAgICAqIGlu
c3BlY3Rvci9mcm9udC1lbmQvRWxlbWVudHNQYW5lbC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5FbGVtZW50c1BhbmVsLnByb3RvdHlwZS5yZXNldCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zy
b250LWVuZC9pbnNwZWN0b3IuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IucHJvdG9jb2xFcnJv
cik6CisKKzIwMTAtMDgtMDUgIElseWEgVGlraG9ub3Zza3kgIDxsb2lzbG9AY2hyb21pdW0ub3Jn
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGNsZWFu
CisKKyAgICAgICAgTmVlZCBhIHNob3J0IGRlc2NyaXB0aW9uIGFuZCBidWcgVVJMIChPT1BTISkK
KworICAgICAgICBObyBuZXcgdGVzdHMuIChPT1BTISkKKworICAgICAgICAqIGluc3BlY3Rvci9D
b2RlR2VuZXJhdG9ySW5zcGVjdG9yLnBtOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3Iu
aWRsOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50Ojpn
ZXRBcHBsaWNhdGlvbkNhY2hlcyk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckFwcGxp
Y2F0aW9uQ2FjaGVBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5k
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckJhY2tlbmQ6OmdldFByb2ZpbGVyTG9n
TGluZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQmFja2VuZDo6c2V0SW5qZWN0ZWRT
Y3JpcHRTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQmFja2VuZDo6ZGlzcGF0
Y2hPbkluamVjdGVkU2NyaXB0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckJhY2tlbmQ6
OmdldERhdGFiYXNlVGFibGVOYW1lcyk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckJh
Y2tlbmQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ1NTU3RvcmUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTU3RvcmU6Omluc3BlY3RvclN0eWxlU2hlZXQpOgor
ICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDU1NTdG9yZS5oOgorICAgICAgICAqIGluc3Bl
Y3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckNvbnRyb2xsZXI6Okluc3BlY3RvckNvbnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yQ29udHJvbGxlcjo6Z2V0Q29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JDb250cm9sbGVyOjpnZXRET01TdG9yYWdlRW50cmllcyk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JDb250cm9sbGVyOjpzZXRET01TdG9yYWdlSXRlbSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JDb250cm9sbGVyOjpyZW1vdmVET01TdG9yYWdlSXRlbSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpnZXRQcm9maWxlSGVhZGVycyk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpnZXRQcm9maWxlKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmVkaXRTY3JpcHRTb3VyY2UpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6Z2V0U2NyaXB0U291cmNlKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnNldEJyZWFrcG9pbnQpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6Z2V0UmVzb3VyY2VDb250ZW50KToKKyAgICAg
ICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yQ29udHJvbGxlcjo6aW5zcGVjdG9yQ2xpZW50KToKKyAgICAgICAgKiBpbnNwZWN0
b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9N
QWdlbnQ6OnNldEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2Vu
dDo6cmVtb3ZlQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50
OjpyZW1vdmVOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpjaGFu
Z2VUYWdOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpnZXRPdXRl
ckhUTUwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OnNldE91dGVySFRN
TCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6c2V0VGV4dE5vZGVWYWx1
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6Z2V0RXZlbnRMaXN0ZW5l
cnNGb3JOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpnZXRTdHls
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmdldEFsbFN0eWxlcyk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6Z2V0U3R5bGVTaGVldCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6Z2V0UnVsZVJhbmdlcyk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6Z2V0SW5saW5lU3R5bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmdldENvbXB1dGVkU3R5bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmFwcGx5U3R5bGVUZXh0KToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpzZXRTdHlsZVRleHQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OnNldFN0eWxlUHJvcGVydHkpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OnRvZ2dsZVN0eWxlRW5hYmxlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6c2V0UnVsZVNlbGVjdG9yKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjphZGRSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVjdEZvclJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yRE9NQWdlbnQ6OnB1c2hOb2RlQnlQYXRoVG9Gcm9udGVuZCk6CisgICAgICAgICog
aW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3Bl
Y3RvclZhbHVlcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JWYWx1ZTo6YXNOdW1i
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQmFzaWNWYWx1ZTo6YXNOdW1iZXIpOgor
ICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaDoKKyAgICAgICAgKiBpbnNwZWN0
b3IvZnJvbnQtZW5kL0NhbGxiYWNrLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNhbGxiYWNr
LnByb3RvdHlwZS5wcm9jZXNzQ2FsbGJhY2spOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNhbGxi
YWNrLnByb3RvdHlwZS5yZW1vdmVDYWxsYmFja0VudHJ5KToKKyAgICAgICAgKiBpbnNwZWN0b3Iv
ZnJvbnQtZW5kL0VsZW1lbnRzUGFuZWwuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRWxlbWVu
dHNQYW5lbC5wcm90b3R5cGUucmVzZXQpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQv
aW5zcGVjdG9yLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLnByb3RvY29sRXJyb3IpOgorCiAy
MDEwLTA4LTA1ICBab2x0YW4gSG9ydmF0aCAgPHpvbHRhbkB3ZWJraXQub3JnPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IFNpbW9uIEhhdXNtYW5uLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0
b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5wbSBiL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5l
cmF0b3JJbnNwZWN0b3IucG0KaW5kZXggMGFlOWU4NS4uMzU1YWVhMSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5wbQorKysgYi9XZWJDb3JlL2lu
c3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnBtCkBAIC0xNywxMiArMTcsMTEgQEAgJHR5
cGVUcmFuc2Zvcm17Ikluc3BlY3RvckNsaWVudCJ9ID0gewogJHR5cGVUcmFuc2Zvcm17IkJhY2tl
bmQifSA9IHsKICAgICAiZm9yd2FyZCIgPT4gIkluc3BlY3RvckJhY2tlbmQiLAogICAgICJoZWFk
ZXIiID0+ICJJbnNwZWN0b3JCYWNrZW5kLmgiLAotICAgICJoYW5kbGVyQWNjZXNzb3IiID0+ICJt
X2luc3BlY3RvckJhY2tlbmQiLAorICAgICJoYW5kbGVyQWNjZXNzb3IiID0+ICJtX2luc3BlY3Rv
ckNvbnRyb2xsZXItPmluc3BlY3RvckJhY2tlbmQoKSIsCiB9OwogJHR5cGVUcmFuc2Zvcm17IkNv
bnRyb2xsZXIifSA9IHsKLSAgICAiZm9yd2FyZCIgPT4gIkluc3BlY3RvckNvbnRyb2xsZXIiLAot
ICAgICJoZWFkZXIiID0+ICJJbnNwZWN0b3JDb250cm9sbGVyLmgiLAotICAgICJoYW5kbGVyQWNj
ZXNzb3IiID0+ICJtX2luc3BlY3RvckJhY2tlbmQtPmluc3BlY3RvckNvbnRyb2xsZXIoKSIsCisg
ICAgImZvcndhcmRIZWFkZXIiID0+ICJJbnNwZWN0b3JDb250cm9sbGVyLmgiLAorICAgICJoYW5k
bGVyQWNjZXNzb3IiID0+ICJtX2luc3BlY3RvckNvbnRyb2xsZXIiLAogfTsKICR0eXBlVHJhbnNm
b3JteyJEZWJ1ZyJ9ID0gewogICAgICJmb3J3YXJkIiA9PiAiU2NyaXB0RGVidWdTZXJ2ZXIiLApA
QCAtMzIsMTIgKzMxLDE2IEBAICR0eXBlVHJhbnNmb3JteyJEZWJ1ZyJ9ID0gewogJHR5cGVUcmFu
c2Zvcm17IkRPTSJ9ID0gewogICAgICJmb3J3YXJkIiA9PiAiSW5zcGVjdG9yRE9NQWdlbnQiLAog
ICAgICJoZWFkZXIiID0+ICJJbnNwZWN0b3JET01BZ2VudC5oIiwKLSAgICAiaGFuZGxlckFjY2Vz
c29yIiA9PiAibV9pbnNwZWN0b3JCYWNrZW5kLT5pbnNwZWN0b3JET01BZ2VudCgpIiwKKyAgICAi
aGFuZGxlckFjY2Vzc29yIiA9PiAibV9pbnNwZWN0b3JDb250cm9sbGVyLT5kb21BZ2VudCgpIiwK
IH07CiAkdHlwZVRyYW5zZm9ybXsiQXBwbGljYXRpb25DYWNoZSJ9ID0gewogICAgICJmb3J3YXJk
IiA9PiAiSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50IiwKICAgICAiaGVhZGVyIiA9PiAi
SW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmgiLAotICAgICJoYW5kbGVyQWNjZXNzb3Ii
ID0+ICJtX2luc3BlY3RvckJhY2tlbmQtPmluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudCgp
IiwKKyAgICAiaGFuZGxlckFjY2Vzc29yIiA9PiAibV9pbnNwZWN0b3JDb250cm9sbGVyLT5hcHBs
aWNhdGlvbkNhY2hlQWdlbnQoKSIsCit9OworJHR5cGVUcmFuc2Zvcm17IkZyb250ZW5kIn0gPSB7
CisgICAgImZvcndhcmQiID0+ICJSZW1vdGVJbnNwZWN0b3JGcm9udGVuZCIsCisgICAgImhlYWRl
ciIgPT4gIlJlbW90ZUluc3BlY3RvckZyb250ZW5kLmgiLAogfTsKICR0eXBlVHJhbnNmb3JteyJQ
YXNzUmVmUHRyIn0gPSB7CiAgICAgImZvcndhcmRIZWFkZXIiID0+ICJ3dGYvUGFzc1JlZlB0ci5o
IiwKQEAgLTQ1LDYgKzQ4LDcgQEAgJHR5cGVUcmFuc2Zvcm17IlBhc3NSZWZQdHIifSA9IHsKICR0
eXBlVHJhbnNmb3JteyJPYmplY3QifSA9IHsKICAgICAicGFyYW0iID0+ICJQYXNzUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4iLAogICAgICJyZXRWYWwiID0+ICJQYXNzUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4iLAorICAgICJ2YXJpYWJsZSIgPT4gIlJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IiwKICAg
ICAiZm9yd2FyZCIgPT4gIkluc3BlY3Rvck9iamVjdCIsCiAgICAgImhlYWRlciIgPT4gIkluc3Bl
Y3RvclZhbHVlcy5oIiwKICAgICAiYWNjZXNzb3JTdWZmaXgiID0+ICIiCkBAIC01Miw2ICs1Niw3
IEBAICR0eXBlVHJhbnNmb3JteyJPYmplY3QifSA9IHsKICR0eXBlVHJhbnNmb3JteyJBcnJheSJ9
ID0gewogICAgICJwYXJhbSIgPT4gIlBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IiwKICAgICAi
cmV0VmFsIiA9PiAiUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4iLAorICAgICJ2YXJpYWJsZSIg
PT4gIlJlZlB0cjxJbnNwZWN0b3JBcnJheT4iLAogICAgICJmb3J3YXJkIiA9PiAiSW5zcGVjdG9y
QXJyYXkiLAogICAgICJoZWFkZXIiID0+ICJJbnNwZWN0b3JWYWx1ZXMuaCIsCiAgICAgImFjY2Vz
c29yU3VmZml4IiA9PiAiIgpAQCAtNTksNDEgKzY0LDQ5IEBAICR0eXBlVHJhbnNmb3JteyJBcnJh
eSJ9ID0gewogJHR5cGVUcmFuc2Zvcm17IlZhbHVlIn0gPSB7CiAgICAgInBhcmFtIiA9PiAiUGFz
c1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4iLAogICAgICJyZXRWYWwiID0+ICJQYXNzUmVmUHRyPElu
c3BlY3RvclZhbHVlPiIsCisgICAgInZhcmlhYmxlIiA9PiAiUmVmUHRyPEluc3BlY3RvclZhbHVl
PiIsCiAgICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JWYWx1ZSIsCiAgICAgImhlYWRlciIgPT4g
Ikluc3BlY3RvclZhbHVlcy5oIiwKICAgICAiYWNjZXNzb3JTdWZmaXgiID0+ICIiCiB9OwogJHR5
cGVUcmFuc2Zvcm17IlN0cmluZyJ9ID0gewogICAgICJwYXJhbSIgPT4gImNvbnN0IFN0cmluZyYi
LAotICAgICJyZXRWYWwiID0+ICJTdHJpbmciLAorICAgICJ2YXJpYWJsZSIgPT4gIlN0cmluZyIs
CiAgICAgImZvcndhcmQiID0+ICJTdHJpbmciLAogICAgICJoZWFkZXIiID0+ICJQbGF0Zm9ybVN0
cmluZy5oIiwKICAgICAiYWNjZXNzb3JTdWZmaXgiID0+ICJTdHJpbmciCiB9OwogJHR5cGVUcmFu
c2Zvcm17ImxvbmcifSA9IHsKICAgICAicGFyYW0iID0+ICJsb25nIiwKLSAgICAicmV0VmFsIiA9
PiAibG9uZyIsCisgICAgInZhcmlhYmxlIiA9PiAibG9uZyIsCiAgICAgImZvcndhcmQiID0+ICIi
LAogICAgICJoZWFkZXIiID0+ICIiLAogICAgICJhY2Nlc3NvclN1ZmZpeCIgPT4gIk51bWJlciIK
IH07CiAkdHlwZVRyYW5zZm9ybXsiaW50In0gPSB7CiAgICAgInBhcmFtIiA9PiAiaW50IiwKLSAg
ICAicmV0VmFsIiA9PiAiaW50IiwKKyAgICAidmFyaWFibGUiID0+ICJpbnQiLAogICAgICJmb3J3
YXJkIiA9PiAiIiwKICAgICAiaGVhZGVyIiA9PiAiIiwKICAgICAiYWNjZXNzb3JTdWZmaXgiID0+
ICJOdW1iZXIiLAogfTsKICR0eXBlVHJhbnNmb3JteyJ1bnNpZ25lZCBsb25nIn0gPSB7CiAgICAg
InBhcmFtIiA9PiAidW5zaWduZWQgbG9uZyIsCi0gICAgInJldFZhbCIgPT4gInVuc2lnbmVkIGxv
bmciLAorICAgICJ2YXJpYWJsZSIgPT4gInVuc2lnbmVkIGxvbmciLAorICAgICJmb3J3YXJkIiA9
PiAiIiwKKyAgICAiaGVhZGVyIiA9PiAiIiwKKyAgICAiYWNjZXNzb3JTdWZmaXgiID0+ICJOdW1i
ZXIiCit9OworJHR5cGVUcmFuc2Zvcm17InVuc2lnbmVkIGludCJ9ID0geworICAgICJwYXJhbSIg
PT4gInVuc2lnbmVkIGludCIsCisgICAgInZhcmlhYmxlIiA9PiAidW5zaWduZWQgaW50IiwKICAg
ICAiZm9yd2FyZCIgPT4gIiIsCiAgICAgImhlYWRlciIgPT4gIiIsCiAgICAgImFjY2Vzc29yU3Vm
Zml4IiA9PiAiTnVtYmVyIgogfTsKICR0eXBlVHJhbnNmb3JteyJib29sZWFuIn0gPSB7CiAgICAg
InBhcmFtIiA9PiAiYm9vbCIsCi0gICAgInJldFZhbCI9PiAiYm9vbCIsCisgICAgInZhcmlhYmxl
Ij0+ICJib29sIiwKICAgICAiZm9yd2FyZCIgPT4gIiIsCiAgICAgImhlYWRlciIgPT4gIiIsCiAg
ICAgImFjY2Vzc29yU3VmZml4IiA9PiAiQm9vbCIKQEAgLTE4NCwxMiArMTk3LDE1IEBAIHN1YiBH
ZW5lcmF0ZUludGVyZmFjZQogCiAgICAgJGJhY2tlbmRDbGFzc05hbWUgPSAkY2xhc3NOYW1lIC4g
IkJhY2tlbmREaXNwYXRjaGVyIjsKICAgICBteSBAYmFja2VuZEhlYWQ7Ci0gICAgcHVzaChAYmFj
a2VuZEhlYWQsICIgICAgJHtiYWNrZW5kQ2xhc3NOYW1lfShJbnNwZWN0b3JCYWNrZW5kKiBpbnNw
ZWN0b3JCYWNrZW5kKSA6IG1faW5zcGVjdG9yQmFja2VuZChpbnNwZWN0b3JCYWNrZW5kKSB7IH0i
KTsKKyAgICBwdXNoKEBiYWNrZW5kSGVhZCwgIiAgICAke2JhY2tlbmRDbGFzc05hbWV9KEluc3Bl
Y3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIpIDogbV9pbnNwZWN0b3JDb250cm9s
bGVyKGluc3BlY3RvckNvbnRyb2xsZXIpIHsgfSIpOworICAgIHB1c2goQGJhY2tlbmRIZWFkLCAi
ICAgIFJlbW90ZUluc3BlY3RvckZyb250ZW5kKiBpbnNwZWN0b3JGcm9udGVuZCgpIGNvbnN0IHsg
cmV0dXJuIG1faW5zcGVjdG9yQ29udHJvbGxlci0+cmVtb3RlSW5zcGVjdG9yRnJvbnRlbmQoKTsg
fSIpOworICAgIHB1c2goQGJhY2tlbmRIZWFkLCAiICAgIHZvaWQgcHJvdG9jb2xFcnJvcihjb25z
dCBsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIGNvbnN0IFN0cmluZyYgZXJyb3JU
ZXh0KSBjb25zdDsiKTsKICAgICBwdXNoKEBiYWNrZW5kSGVhZCwgIiAgICB2b2lkIGRpc3BhdGNo
KGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7Iik7CiAgICAgcHVzaChAYmFja2VuZEhlYWQsICJwcml2
YXRlOiIpOwogICAgICRiYWNrZW5kQ29uc3RydWN0b3IgPSBqb2luKCJcbiIsIEBiYWNrZW5kSGVh
ZCk7Ci0gICAgJGJhY2tlbmRGb290ZXIgPSAiICAgIEluc3BlY3RvckJhY2tlbmQqIG1faW5zcGVj
dG9yQmFja2VuZDsiOwotICAgICRiYWNrZW5kVHlwZXN7IkJhY2tlbmQifSA9IDE7CisgICAgJGJh
Y2tlbmRGb290ZXIgPSAiICAgIEluc3BlY3RvckNvbnRyb2xsZXIqIG1faW5zcGVjdG9yQ29udHJv
bGxlcjsiOworICAgICRiYWNrZW5kVHlwZXN7IkNvbnRyb2xsZXIifSA9IDE7CisgICAgJGJhY2tl
bmRUeXBlc3siSW5zcGVjdG9yQ2xpZW50In0gPSAxOwogICAgICRiYWNrZW5kVHlwZXN7IlBhc3NS
ZWZQdHIifSA9IDE7CiAgICAgJGJhY2tlbmRUeXBlc3siQXJyYXkifSA9IDE7CiAKQEAgLTIwNiw2
ICsyMjIsNyBAQCBzdWIgZ2VuZXJhdGVGdW5jdGlvbnMKICAgICAgICAgZ2VuZXJhdGVCYWNrZW5k
RnVuY3Rpb24oJGZ1bmN0aW9uKTsKICAgICB9CiAgICAgcHVzaChAYmFja2VuZE1ldGhvZHNJbXBs
LCBnZW5lcmF0ZUJhY2tlbmREaXNwYXRjaGVyKCkpOworICAgIHB1c2goQGJhY2tlbmRNZXRob2Rz
SW1wbCwgZ2VuZXJhdGVCYWNrZW5kUHJvdG9jb2xFcnJvcigpKTsKIH0KIAogc3ViIGdlbmVyYXRl
RnJvbnRlbmRGdW5jdGlvbgpAQCAtMjQ5LDEyICsyNjYsMTIgQEAgc3ViIGdlbmVyYXRlQmFja2Vu
ZFByaXZhdGVGdW5jdGlvbnMKICAgICBteSAkcHJpdmF0ZUZ1bmN0aW9ucyA9IDw8ICJFT0YiOwog
c3RhdGljIFN0cmluZyBmb3JtYXRXcm9uZ0FyZ3VtZW50c0NvdW50TWVzc2FnZSh1bnNpZ25lZCBl
eHBlY3RlZCwgdW5zaWduZWQgYWN0dWFsKQogewotICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdChc
Ildyb25nIG51bWJlciBvZiBwYXJhbWV0ZXJzOiAlZCAoZXhwZWN0ZWQ6ICVkKVwiLCBhY3R1YWws
IGV4cGVjdGVkKTsKKyAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIldyb25nIG51bWJlciBvZiBw
YXJhbWV0ZXJzOiAlZCAoZXhwZWN0ZWQ6ICVkKSIsIGFjdHVhbCwgZXhwZWN0ZWQpOwogfQogCiBz
dGF0aWMgU3RyaW5nIGZvcm1hdFdyb25nQXJndW1lbnRUeXBlTWVzc2FnZSh1bnNpZ25lZCBwb3Np
dGlvbiwgY29uc3QgY2hhciogbmFtZSwgY29uc3QgY2hhciogZXhwZWN0ZWRUeXBlKQogewotICAg
IHJldHVybiBTdHJpbmc6OmZvcm1hdChcIkZhaWxlZCB0byBjb252ZXJ0IHBhcmFtZXRlciAlZCAo
JXMpIHRvICVzXCIsIHBvc2l0aW9uLCBuYW1lLCBleHBlY3RlZFR5cGUpOworICAgIHJldHVybiBT
dHJpbmc6OmZvcm1hdCgiRmFpbGVkIHRvIGNvbnZlcnQgcGFyYW1ldGVyICVkICglcykgdG8gJXMi
LCBwb3NpdGlvbiwgbmFtZSwgZXhwZWN0ZWRUeXBlKTsKIH0KIEVPRgogICAgIHB1c2goQGJhY2tl
bmRNZXRob2RzSW1wbCwgJHByaXZhdGVGdW5jdGlvbnMpOwpAQCAtMjY3LDQ2ICsyODQsOTUgQEAg
c3ViIGdlbmVyYXRlQmFja2VuZEZ1bmN0aW9uCiAKICAgICBteSAkZnVuY3Rpb25OYW1lID0gJGZ1
bmN0aW9uLT5zaWduYXR1cmUtPm5hbWU7CiAKLSAgICBteSBAYXJnc0ZpbHRlcmVkID0gZ3JlcCgk
Xy0+ZGlyZWN0aW9uIGVxICJpbiIsIEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfSk7Ci0gICAgbWFw
KCRiYWNrZW5kVHlwZXN7JF8tPnR5cGV9ID0gMSwgQGFyZ3NGaWx0ZXJlZCk7ICMgcmVnaXN0ZXIg
cmVxdWlyZWQgdHlwZXMKLSAgICBteSAkYXJndW1lbnRzID0gam9pbigiLCAiLCBtYXAoJHR5cGVU
cmFuc2Zvcm17JF8tPnR5cGV9LT57InBhcmFtIn0gLiAiICIgLiAkXy0+bmFtZSwgQGFyZ3NGaWx0
ZXJlZCkpOworICAgIG1hcCgkYmFja2VuZFR5cGVzeyRfLT50eXBlfSA9IDEsIEB7JGZ1bmN0aW9u
LT5wYXJhbWV0ZXJzfSk7ICMgcmVnaXN0ZXIgcmVxdWlyZWQgdHlwZXMKKyAgICBteSBAaW5Bcmdz
ID0gZ3JlcCgkXy0+ZGlyZWN0aW9uIGVxICJpbiIsIEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfSk7
CisgICAgbXkgQG91dEFyZ3MgPSBncmVwKCRfLT5kaXJlY3Rpb24gZXEgIm91dCIsIEB7JGZ1bmN0
aW9uLT5wYXJhbWV0ZXJzfSk7CiAKLSAgICBteSAkc2lnbmF0dXJlID0gIiAgICB2b2lkICR7ZnVu
Y3Rpb25OYW1lfShQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcmdzLCBTdHJpbmcqIGV4Y2Vw
dGlvbik7IjsKKyAgICBteSAkc2lnbmF0dXJlID0gIiAgICB2b2lkICR7ZnVuY3Rpb25OYW1lfShQ
YXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcmdzKTsiOwogICAgICEkYmFja2VuZE1ldGhvZHN7
JHtzaWduYXR1cmV9fSB8fCBkaWUgIkR1cGxpY2F0ZSBmdW5jdGlvbiB3YXMgZGV0ZWN0ZWQgZm9y
IHNpZ25hdHVyZSAnJHNpZ25hdHVyZScuIjsKICAgICAkYmFja2VuZE1ldGhvZHN7JHtzaWduYXR1
cmV9fSA9ICRmdW5jdGlvbk5hbWU7CiAKICAgICBteSBAZnVuY3Rpb247Ci0gICAgcHVzaChAZnVu
Y3Rpb24sICJ2b2lkICR7YmFja2VuZENsYXNzTmFtZX06OiR7ZnVuY3Rpb25OYW1lfShQYXNzUmVm
UHRyPEluc3BlY3RvckFycmF5PiBhcmdzLCBTdHJpbmcqIGV4Y2VwdGlvbikiKTsKKyAgICBwdXNo
KEBmdW5jdGlvbiwgInZvaWQgJHtiYWNrZW5kQ2xhc3NOYW1lfTo6JHtmdW5jdGlvbk5hbWV9KFBh
c3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3MpIik7CiAgICAgcHVzaChAZnVuY3Rpb24sICJ7
Iik7Ci0gICAgbXkgJGkgPSAxOyAjIHplcm8gZWxlbWVudCBpcyB0aGUgbWV0aG9kIG5hbWUuCi0g
ICAgbXkgJGV4cGVjdGVkUGFyYW1ldGVyc0NvdW50ID0gc2NhbGFyKEBhcmdzRmlsdGVyZWQpOwot
ICAgIG15ICRleHBlY3RlZFBhcmFtZXRlcnNDb3VudFdpdGhNZXRob2ROYW1lID0gc2NhbGFyKEBh
cmdzRmlsdGVyZWQpICsgMTsKKyAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKFN0cmluZywgYmFja2VuZEZ1bmN0aW9uTmFtZSwgKFwiJGZ1bmN0aW9uTmFtZVwiKSk7
Iik7CisgICAgcHVzaChAZnVuY3Rpb24sICIgICAgbG9uZyBjYWxsSWQgPSAwOyIpOworICAgIHB1
c2goQGZ1bmN0aW9uLCAiIik7CisKKyAgICBteSAkZXhwZWN0ZWRQYXJhbWV0ZXJzQ291bnQgPSBz
Y2FsYXIoQGluQXJncyk7CisgICAgbXkgJGV4cGVjdGVkUGFyYW1ldGVyc0NvdW50V2l0aE1ldGhv
ZE5hbWUgPSBzY2FsYXIoQGluQXJncykgKyAxOwogICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgIGlm
IChhcmdzLT5sZW5ndGgoKSAhPSAkZXhwZWN0ZWRQYXJhbWV0ZXJzQ291bnRXaXRoTWV0aG9kTmFt
ZSkgeyIpOwotICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgICAgICAqZXhjZXB0aW9uID0gZm9ybWF0
V3JvbmdBcmd1bWVudHNDb3VudE1lc3NhZ2UoYXJncy0+bGVuZ3RoKCkgLSAxLCAkZXhwZWN0ZWRQ
YXJhbWV0ZXJzQ291bnQpOyIpOwogICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsiKTsKKyAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICAgICAgcHJvdG9jb2xF
cnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRzQ291
bnRNZXNzYWdlKGFyZ3MtPmxlbmd0aCgpIC0gMSwgJGV4cGVjdGVkUGFyYW1ldGVyc0NvdW50KSk7
Iik7CiAgICAgcHVzaChAZnVuY3Rpb24sICIgICAgICAgIHJldHVybjsiKTsKICAgICBwdXNoKEBm
dW5jdGlvbiwgIiAgICB9Iik7CisgICAgcHVzaChAZnVuY3Rpb24sICIiKTsKIAotICAgIGZvcmVh
Y2ggbXkgJHBhcmFtZXRlciAoQGFyZ3NGaWx0ZXJlZCkgeworICAgIG15ICRpID0gMTsgIyB6ZXJv
IGVsZW1lbnQgaXMgdGhlIG1ldGhvZCBuYW1lLgorICAgIGZvcmVhY2ggbXkgJHBhcmFtZXRlciAo
QGluQXJncykgewogICAgICAgICBteSAkcGFyYW1ldGVyVHlwZSA9ICRwYXJhbWV0ZXItPnR5cGU7
Ci0gICAgICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgICIgLiAkdHlwZVRyYW5zZm9ybXskcGFyYW1l
dGVyVHlwZX0tPnsicmV0VmFsIn0gLiAiICIgLiAkcGFyYW1ldGVyLT5uYW1lIC4gIjsiKTsKLSAg
ICAgICAgcHVzaChAZnVuY3Rpb24sICIgICAgaWYgKCFhcmdzLT5nZXQoIiAuICRpIC4gIiktPmFz
IiAuICR0eXBlVHJhbnNmb3JteyRwYXJhbWV0ZXJUeXBlfS0+eyJhY2Nlc3NvclN1ZmZpeCJ9IC4g
IigmIiAuICRwYXJhbWV0ZXItPm5hbWUgLiAiKSkgeyIpOwotICAgICAgICBwdXNoKEBmdW5jdGlv
biwgIiAgICAgICAgKmV4Y2VwdGlvbiA9IGZvcm1hdFdyb25nQXJndW1lbnRUeXBlTWVzc2FnZSgk
aSwgXCIiIC4gJHBhcmFtZXRlci0+bmFtZSAuICJcIiwgXCIkcGFyYW1ldGVyVHlwZVwiKTsiKTsK
KyAgICAgICAgbXkgJHJldHVyblR5cGUgPSAkdHlwZVRyYW5zZm9ybXskcGFyYW1ldGVyVHlwZX0t
PnskdHlwZVRyYW5zZm9ybXskcGFyYW1ldGVyVHlwZX0tPnsicmV0VmFsIn0gPyAicmV0VmFsIiA6
ICJ2YXJpYWJsZSJ9OworICAgICAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICAkcmV0dXJuVHlwZSAi
IC4gJHBhcmFtZXRlci0+bmFtZSAuICI7IikgaWYgISgkcGFyYW1ldGVyLT5uYW1lIGVxICJjYWxs
SWQiKTsKKyAgICAgICAgcHVzaChAZnVuY3Rpb24sICIgICAgaWYgKCFhcmdzLT5nZXQoJGkpLT5h
cyIgLiAkdHlwZVRyYW5zZm9ybXskcGFyYW1ldGVyVHlwZX0tPnsiYWNjZXNzb3JTdWZmaXgifSAu
ICIoJiIgLiAkcGFyYW1ldGVyLT5uYW1lIC4gIikpIHsiKTsKICAgICAgICAgcHVzaChAZnVuY3Rp
b24sICIgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyIpOworICAgICAgICBwdXNoKEBmdW5j
dGlvbiwgIiAgICAgICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUs
IGZvcm1hdFdyb25nQXJndW1lbnRUeXBlTWVzc2FnZSgkaSwgXCIiIC4gJHBhcmFtZXRlci0+bmFt
ZSAuICJcIiwgXCIkcGFyYW1ldGVyVHlwZVwiKSk7Iik7CiAgICAgICAgIHB1c2goQGZ1bmN0aW9u
LCAiICAgICAgICByZXR1cm47Iik7CiAgICAgICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgIH0iKTsK
KyAgICAgICAgcHVzaChAZnVuY3Rpb24sICIiKTsKICAgICAgICAgKyskaTsKICAgICB9Ci0gICAg
bXkgJGhhbmRsZXIgPSAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
ImhhbmRsZXIifSB8fCAiQmFja2VuZCI7CisKKyAgICBteSAkaGFuZGxlciA9ICRmdW5jdGlvbi0+
c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiaGFuZGxlciJ9IHx8ICJDb250cm9sbGVy
IjsKICAgICBteSAkaGFuZGxlckFjY2Vzc29yID0gJHR5cGVUcmFuc2Zvcm17JGhhbmRsZXJ9LT57
ImhhbmRsZXJBY2Nlc3NvciJ9OwogICAgICRiYWNrZW5kVHlwZXN7JGhhbmRsZXJ9ID0gMTsKLSAg
ICBwdXNoKEBmdW5jdGlvbiwgIiAgICBpZiAoJGhhbmRsZXJBY2Nlc3NvcikiKTsKLSAgICBwdXNo
KEBmdW5jdGlvbiwgIiAgICAgICAgJGhhbmRsZXJBY2Nlc3Nvci0+JGZ1bmN0aW9uTmFtZSgiIC4g
am9pbigiLCAiLCBtYXAoJF8tPm5hbWUsIEBhcmdzRmlsdGVyZWQpKSAuICIpOyIpOworICAgIHB1
c2goQGZ1bmN0aW9uLCAiICAgIGlmICghJGhhbmRsZXJBY2Nlc3NvcikgeyIpOworICAgIHB1c2go
QGZ1bmN0aW9uLCAiICAgICAgICBwcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9u
TmFtZSwgXCJFcnJvcjogJGhhbmRsZXIgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLlwiKTsiKTsK
KyAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICAgICAgcmV0dXJuOyIpOworICAgIHB1c2goQGZ1bmN0
aW9uLCAiICAgIH0iKTsKKyAgICBwdXNoKEBmdW5jdGlvbiwgIiIpOworCisgICAgcHVzaChAZnVu
Y3Rpb24sIG1hcCgiICAgICIgLiAkdHlwZVRyYW5zZm9ybXskXy0+dHlwZX0tPnsidmFyaWFibGUi
fSAuICIgIiAuICRfLT5uYW1lIC4gIjsiLCBAb3V0QXJncykpOyAjIGRlY2xhcmUgbG9jYWwgdmFy
aWFibGVzIGZvciBvdXQgYXJndW1lbnRzLgorCisgICAgbXkgJGFyZ3MgPSBqb2luKCIsICIsICht
YXAoJF8tPm5hbWUsIEBpbkFyZ3MpLCBtYXAoIiYiIC4gJF8tPm5hbWUsIEBvdXRBcmdzKSkpOwor
ICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgICRoYW5kbGVyQWNjZXNzb3ItPiRmdW5jdGlvbk5hbWUo
JGFyZ3MpOyIpOworICAgIHB1c2goQGZ1bmN0aW9uLCAiIik7CisKKyAgICAjIFRoZSByZXN1bHRz
IG9mIGZ1bmN0aW9uIGNhbGwgc2hvdWxkIGJlIHRyYW5zZmVyZWQgYmFjayB0byBmcm9udGVuZCAo
ZXhjZXB0IGFzeW5jIG1ldGhvZHMgLSBuZWVkIHRvIGZpeCB0aGF0KS4KKyAgICBpZiAoc2NhbGFy
KEBvdXRBcmdzKSAmJiAhJGZ1bmN0aW9uLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+
eyJhc3luYyJ9KSB7CisgICAgICAgIG15IEBwdXNoQXJndW1lbnRzID0gbWFwKCIgICAgICAgIGFy
Z3VtZW50cy0+cHVzaCIgLiAkdHlwZVRyYW5zZm9ybXskXy0+dHlwZX0tPnsiYWNjZXNzb3JTdWZm
aXgifSAuICIoIiAuICRfLT5uYW1lIC4gIik7IiwgQG91dEFyZ3MpOworICAgICAgICBteSAkY3Vz
dG9tUmVzcG9uc2UgPSAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
ImN1c3RvbVJlc3BvbnNlIn07CisgICAgICAgIG15ICRkaWRGdW5jdGlvbk5hbWUgPSAkY3VzdG9t
UmVzcG9uc2UgPyAkY3VzdG9tUmVzcG9uc2UgOiAiZGlkIiAuIHVjZmlyc3QoJGZ1bmN0aW9uLT5z
aWduYXR1cmUtPm5hbWUpOworCisgICAgICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgIGlmIChtX2lu
c3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RvckNsaWVudCgpKSB7Iik7CisgICAgICAgIHB1c2go
QGZ1bmN0aW9uLCAiICAgICAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3VtZW50cyA9IElu
c3BlY3RvckFycmF5OjpjcmVhdGUoKTsiKTsKKyAgICAgICAgcHVzaChAZnVuY3Rpb24sICIgICAg
ICAgIGFyZ3VtZW50cy0+cHVzaFN0cmluZyhcIiRkaWRGdW5jdGlvbk5hbWVcIik7Iik7CisgICAg
ICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgICAgICBhcmd1bWVudHMtPnB1c2hOdW1iZXIoY2FsbElk
KTsiKTsKKyAgICAgICAgcHVzaChAZnVuY3Rpb24sIEBwdXNoQXJndW1lbnRzKTsKKyAgICAgICAg
cHVzaChAZnVuY3Rpb24sICIgICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdG9y
Q2xpZW50KCktPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChhcmd1bWVudHMtPnRvSlNPTlN0cmluZygp
KTsiKTsKKyAgICAgICAgcHVzaChAZnVuY3Rpb24sICIgICAgfSIpOworICAgIH0KICAgICBwdXNo
KEBmdW5jdGlvbiwgIn0iKTsKICAgICBwdXNoKEBmdW5jdGlvbiwgIiIpOwogICAgIHB1c2goQGJh
Y2tlbmRNZXRob2RzSW1wbCwgQGZ1bmN0aW9uKTsKIH0KIAorc3ViIGdlbmVyYXRlQmFja2VuZFBy
b3RvY29sRXJyb3IKK3sKKyAgICBteSAkcHJvdG9jb2xFcnJvciA9IDw8ICJFT0YiOworCit2b2lk
ICR7YmFja2VuZENsYXNzTmFtZX06OnByb3RvY29sRXJyb3IoY29uc3QgbG9uZyBjYWxsSWQsIGNv
bnN0IFN0cmluZyYgbWV0aG9kLCBjb25zdCBTdHJpbmcmIGVycm9yVGV4dCkgY29uc3QKK3sKKyAg
ICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3VtZW50cyA9IEluc3BlY3RvckFycmF5OjpjcmVh
dGUoKTsKKyAgICBhcmd1bWVudHMtPnB1c2hTdHJpbmcoInByb3RvY29sRXJyb3IiKTsKKyAgICBh
cmd1bWVudHMtPnB1c2hOdW1iZXIoY2FsbElkKTsKKyAgICBhcmd1bWVudHMtPnB1c2hTdHJpbmco
bWV0aG9kKTsKKyAgICBhcmd1bWVudHMtPnB1c2hTdHJpbmcoZXJyb3JUZXh0KTsKKyAgICBtX2lu
c3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RvckNsaWVudCgpLT5zZW5kTWVzc2FnZVRvRnJvbnRl
bmQoYXJndW1lbnRzLT50b0pTT05TdHJpbmcoKSk7Cit9CitFT0YKKyAgICByZXR1cm4gc3BsaXQo
IlxuIiwgJHByb3RvY29sRXJyb3IpOworfQorCiBzdWIgZ2VuZXJhdGVCYWNrZW5kRGlzcGF0Y2hl
cgogewogICAgIG15IEBib2R5OwpAQCAtMzE1LDggKzM4MSw3IEBAIHN1YiBnZW5lcmF0ZUJhY2tl
bmREaXNwYXRjaGVyCiAKICAgICBwdXNoKEBib2R5LCAidm9pZCAke2JhY2tlbmRDbGFzc05hbWV9
OjpkaXNwYXRjaChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpIik7CiAgICAgcHVzaChAYm9keSwgInsi
KTsKLSAgICBwdXNoKEBib2R5LCAiICAgIFN0cmluZyBleGNlcHRpb247Iik7Ci0gICAgcHVzaChA
Ym9keSwgIiAgICB0eXBlZGVmIHZvaWQgKCR7YmFja2VuZENsYXNzTmFtZX06OipDYWxsSGFuZGxl
cikoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJncywgU3RyaW5nKiBleGNlcHRpb24pOyIp
OworICAgIHB1c2goQGJvZHksICIgICAgdHlwZWRlZiB2b2lkICgke2JhY2tlbmRDbGFzc05hbWV9
OjoqQ2FsbEhhbmRsZXIpKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3MpOyIpOwogICAg
IHB1c2goQGJvZHksICIgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgQ2FsbEhhbmRsZXI+IERp
c3BhdGNoTWFwOyIpOwogICAgIHB1c2goQGJvZHksICIgICAgREVGSU5FX1NUQVRJQ19MT0NBTChE
aXNwYXRjaE1hcCwgZGlzcGF0Y2hNYXAsICk7Iik7CiAgICAgcHVzaChAYm9keSwgIiAgICBpZiAo
ZGlzcGF0Y2hNYXAuaXNFbXB0eSgpKSB7Iik7CkBAIC0zMjYsMzggKzM5MSwzOCBAQCBzdWIgZ2Vu
ZXJhdGVCYWNrZW5kRGlzcGF0Y2hlcgogICAgIHB1c2goQGJvZHksICIgICAgUmVmUHRyPEluc3Bl
Y3RvclZhbHVlPiBwYXJzZWRNZXNzYWdlID0gSW5zcGVjdG9yVmFsdWU6OnBhcnNlSlNPTihtZXNz
YWdlKTsiKTsKICAgICBwdXNoKEBib2R5LCAiICAgIGlmICghcGFyc2VkTWVzc2FnZSkgeyIpOwog
ICAgIHB1c2goQGJvZHksICIgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyIpOwotICAgIHB1
c2goQGJvZHksICIgICAgICAgIGV4Y2VwdGlvbiA9IFwiRXJyb3I6IEludmFsaWQgbWVzc2FnZSBm
b3JtYXQuIE1lc3NhZ2Ugc2hvdWxkIGJlIGluIEpTT04gZm9ybWF0LlwiOyIpOworICAgIHB1c2go
QGJvZHksICIgICAgICAgIHByb3RvY29sRXJyb3IoMCwgXCJkaXNwYXRjaFwiLCBcIkVycm9yOiBJ
bnZhbGlkIG1lc3NhZ2UgZm9ybWF0LiBNZXNzYWdlIHNob3VsZCBiZSBpbiBKU09OIGZvcm1hdC5c
Iik7Iik7CiAgICAgcHVzaChAYm9keSwgIiAgICAgICAgcmV0dXJuOyIpOwogICAgIHB1c2goQGJv
ZHksICIgICAgfSIpOwogICAgIHB1c2goQGJvZHksICIiKTsKICAgICBwdXNoKEBib2R5LCAiICAg
IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gbWVzc2FnZUFycmF5ID0gcGFyc2VkTWVzc2FnZS0+YXNB
cnJheSgpOyIpOwogICAgIHB1c2goQGJvZHksICIgICAgaWYgKCFtZXNzYWdlQXJyYXkpIHsiKTsK
ICAgICBwdXNoKEBib2R5LCAiICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsiKTsKLSAgICBw
dXNoKEBib2R5LCAiICAgICAgICBleGNlcHRpb24gPSBcIkVycm9yOiBJbnZhbGlkIG1lc3NhZ2Ug
Zm9ybWF0LiBUaGUgbWVzc2FnZSBzaG91bGQgYmUgYSBKU09OaWZpZWQgYXJyYXkgb2YgYXJndW1l
bnRzLlwiOyIpOworICAgIHB1c2goQGJvZHksICIgICAgICAgIHByb3RvY29sRXJyb3IoMCwgXCJk
aXNwYXRjaFwiLCBcIkVycm9yOiBJbnZhbGlkIG1lc3NhZ2UgZm9ybWF0LiBUaGUgbWVzc2FnZSBz
aG91bGQgYmUgYSBKU09OaWZpZWQgYXJyYXkgb2YgYXJndW1lbnRzLlwiKTsiKTsKICAgICBwdXNo
KEBib2R5LCAiICAgICAgICByZXR1cm47Iik7CiAgICAgcHVzaChAYm9keSwgIiAgICB9Iik7CiAg
ICAgcHVzaChAYm9keSwgIiIpOwogICAgIHB1c2goQGJvZHksICIgICAgaWYgKCFtZXNzYWdlQXJy
YXktPmxlbmd0aCgpKSB7Iik7CiAgICAgcHVzaChAYm9keSwgIiAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Iik7Ci0gICAgcHVzaChAYm9keSwgIiAgICAgICAgZXhjZXB0aW9uID0gXCJFcnJv
cjogSW52YWxpZCBtZXNzYWdlIGZvcm1hdC4gRW1wdHkgbWVzc2FnZSB3YXMgcmVjZWl2ZWQuXCI7
Iik7CisgICAgcHVzaChAYm9keSwgIiAgICAgICAgcHJvdG9jb2xFcnJvcigwLCBcImRpc3BhdGNo
XCIsIFwiRXJyb3I6IEludmFsaWQgbWVzc2FnZSBmb3JtYXQuIEVtcHR5IG1lc3NhZ2Ugd2FzIHJl
Y2VpdmVkLlwiKTsiKTsKICAgICBwdXNoKEBib2R5LCAiICAgICAgICByZXR1cm47Iik7CiAgICAg
cHVzaChAYm9keSwgIiAgICB9Iik7CiAgICAgcHVzaChAYm9keSwgIiIpOwogICAgIHB1c2goQGJv
ZHksICIgICAgU3RyaW5nIG1ldGhvZE5hbWU7Iik7CiAgICAgcHVzaChAYm9keSwgIiAgICBpZiAo
IW1lc3NhZ2VBcnJheS0+Z2V0KDApLT5hc1N0cmluZygmbWV0aG9kTmFtZSkpIHsiKTsKICAgICBw
dXNoKEBib2R5LCAiICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsiKTsKLSAgICBwdXNoKEBi
b2R5LCAiICAgICAgICBleGNlcHRpb24gPSBcIkVycm9yOiBJbnZhbGlkIG1lc3NhZ2UgZm9ybWF0
LiBUaGUgZmlyc3QgZWxlbWVudCBvZiB0aGUgbWVzc2FnZSBzaG91bGQgYmUgbWV0aG9kIG5hbWUu
XCI7Iik7CisgICAgcHVzaChAYm9keSwgIiAgICAgICAgcHJvdG9jb2xFcnJvcigwLCBcImRpc3Bh
dGNoXCIsIFwiRXJyb3I6IEludmFsaWQgbWVzc2FnZSBmb3JtYXQuIFRoZSBmaXJzdCBlbGVtZW50
IG9mIHRoZSBtZXNzYWdlIHNob3VsZCBiZSBtZXRob2QgbmFtZS5cIik7Iik7CiAgICAgcHVzaChA
Ym9keSwgIiAgICAgICAgcmV0dXJuOyIpOwogICAgIHB1c2goQGJvZHksICIgICAgfSIpOwogICAg
IHB1c2goQGJvZHksICIiKTsKICAgICBwdXNoKEBib2R5LCAiICAgIEhhc2hNYXA8U3RyaW5nLCBD
YWxsSGFuZGxlcj46Oml0ZXJhdG9yIGl0ID0gZGlzcGF0Y2hNYXAuZmluZChtZXRob2ROYW1lKTsi
KTsKICAgICBwdXNoKEBib2R5LCAiICAgIGlmIChpdCA9PSBkaXNwYXRjaE1hcC5lbmQoKSkgeyIp
OwogICAgIHB1c2goQGJvZHksICIgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyIpOwotICAg
IHB1c2goQGJvZHksICIgICAgICAgIGV4Y2VwdGlvbiA9IFN0cmluZzo6Zm9ybWF0KFwiRXJyb3I6
IEludmFsaWQgbWV0aG9kIG5hbWUuICclcycgd2Fzbid0IGZvdW5kLlwiLCBtZXRob2ROYW1lLnV0
ZjgoKS5kYXRhKCkpOyIpOworICAgIHB1c2goQGJvZHksICIgICAgICAgIHByb3RvY29sRXJyb3Io
MCwgXCJkaXNwYXRjaFwiLCBTdHJpbmc6OmZvcm1hdChcIkVycm9yOiBJbnZhbGlkIG1ldGhvZCBu
YW1lLiAnJXMnIHdhc24ndCBmb3VuZC5cIiwgbWV0aG9kTmFtZS51dGY4KCkuZGF0YSgpKSk7Iik7
CiAgICAgcHVzaChAYm9keSwgIiAgICAgICAgcmV0dXJuOyIpOwogICAgIHB1c2goQGJvZHksICIg
ICAgfSIpOwogICAgIHB1c2goQGJvZHksICIiKTsKLSAgICBwdXNoKEBib2R5LCAiICAgICgoKnRo
aXMpLippdC0+c2Vjb25kKShtZXNzYWdlQXJyYXksICZleGNlcHRpb24pOyIpOworICAgIHB1c2go
QGJvZHksICIgICAgKCgqdGhpcykuKml0LT5zZWNvbmQpKG1lc3NhZ2VBcnJheSk7Iik7CiAgICAg
cHVzaChAYm9keSwgIn0iKTsKICAgICByZXR1cm4gQGJvZHk7CiB9CmRpZmYgLS1naXQgYS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuaWRsIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
LmlkbAppbmRleCBjZWE2ODNiLi5kNTBkNWNiIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3IuaWRsCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5pZGwKQEAg
LTg4LDcgKzg4LDcgQEAgbW9kdWxlIGNvcmUgewogICAgICAgICBbaGFuZGxlcj1CYWNrZW5kXSB2
b2lkIGVuYWJsZURlYnVnZ2VyKGluIGJvb2xlYW4gYWx3YXlzKTsKICAgICAgICAgW2hhbmRsZXI9
Q29udHJvbGxlcl0gdm9pZCBkaXNhYmxlRGVidWdnZXIoaW4gYm9vbGVhbiBhbHdheXMpOwogCi0g
ICAgICAgIFtoYW5kbGVyPUNvbnRyb2xsZXJdIHZvaWQgc2V0QnJlYWtwb2ludChpbiBsb25nIGNh
bGxJZCwgaW4gU3RyaW5nIHNvdXJjZUlELCBpbiB1bnNpZ25lZCBsb25nIGxpbmVOdW1iZXIsIGlu
IGJvb2xlYW4gZW5hYmxlZCwgaW4gU3RyaW5nIGNvbmRpdGlvbik7CisgICAgICAgIFtoYW5kbGVy
PUNvbnRyb2xsZXJdIHZvaWQgc2V0QnJlYWtwb2ludChpbiBsb25nIGNhbGxJZCwgaW4gU3RyaW5n
IHNvdXJjZUlELCBpbiB1bnNpZ25lZCBpbnQgbGluZU51bWJlciwgaW4gYm9vbGVhbiBlbmFibGVk
LCBpbiBTdHJpbmcgY29uZGl0aW9uLCBvdXQgYm9vbGVhbiBzdWNjZXNzLCBvdXQgdW5zaWduZWQg
aW50IGFjdHVhbExpbmVOdW1iZXIpOwogICAgICAgICBbaGFuZGxlcj1Db250cm9sbGVyXSB2b2lk
IHJlbW92ZUJyZWFrcG9pbnQoaW4gU3RyaW5nIHNvdXJjZUlELCBpbiB1bnNpZ25lZCBsb25nIGxp
bmVOdW1iZXIpOwogICAgICAgICBbaGFuZGxlcj1EZWJ1Z10gdm9pZCBhY3RpdmF0ZUJyZWFrcG9p
bnRzKCk7CiAgICAgICAgIFtoYW5kbGVyPURlYnVnXSB2b2lkIGRlYWN0aXZhdGVCcmVha3BvaW50
cygpOwpAQCAtMTIxLDIwICsxMjEsMjAgQEAgbW9kdWxlIGNvcmUgewogICAgICAgICBbaGFuZGxl
cj1CYWNrZW5kXSB2b2lkIGdldFByb2ZpbGVyTG9nTGluZXMoaW4gbG9uZyBjYWxsSWQsIGluIGxv
bmcgaW5Qb3NpdGlvbiwgb3V0IGxvbmcgb3V0UG9zaXRpb24sIG91dCBTdHJpbmcgbG9nKTsKICNl
bmRpZgogICAgICAgICBbaGFuZGxlcj1CYWNrZW5kXSB2b2lkIHNldEluamVjdGVkU2NyaXB0U291
cmNlKGluIFN0cmluZyBzY3JpcHRTb3VyY2UpOwotICAgICAgICBbaGFuZGxlcj1CYWNrZW5kXSB2
b2lkIGRpc3BhdGNoT25JbmplY3RlZFNjcmlwdChpbiBsb25nIGNhbGxJZCwgaW4gbG9uZyBpbmpl
Y3RlZFNjcmlwdElkLCBpbiBTdHJpbmcgbWV0aG9kTmFtZSwgaW4gU3RyaW5nIGFyZ3VtZW50cywg
aW4gYm9vbGVhbiBhc3luYywgb3V0IFZhbHVlIHJlc3VsdCwgb3V0IGJvb2xlYW4gaXNFeGNlcHRp
b24pOworICAgICAgICBbaGFuZGxlcj1CYWNrZW5kLCBhc3luY10gdm9pZCBkaXNwYXRjaE9uSW5q
ZWN0ZWRTY3JpcHQoaW4gbG9uZyBjYWxsSWQsIGluIGxvbmcgaW5qZWN0ZWRTY3JpcHRJZCwgaW4g
U3RyaW5nIG1ldGhvZE5hbWUsIGluIFN0cmluZyBhcmd1bWVudHMsIGluIGJvb2xlYW4gYXN5bmMs
IG91dCBWYWx1ZSByZXN1bHQsIG91dCBib29sZWFuIGlzRXhjZXB0aW9uKTsKICAgICAgICAgW2hh
bmRsZXI9Q29udHJvbGxlcl0gdm9pZCBhZGRTY3JpcHRUb0V2YWx1YXRlT25Mb2FkKGluIFN0cmlu
ZyBzY3JpcHRTb3VyY2UpOwogICAgICAgICBbaGFuZGxlcj1Db250cm9sbGVyXSB2b2lkIHJlbW92
ZUFsbFNjcmlwdHNUb0V2YWx1YXRlT25Mb2FkKCk7CiAKICAgICAgICAgW2hhbmRsZXI9RE9NXSB2
b2lkIGdldENoaWxkTm9kZXMoaW4gbG9uZyBjYWxsSWQsIGluIGxvbmcgbm9kZUlkKTsKICAgICAg
ICAgW2hhbmRsZXI9RE9NLCBjdXN0b21SZXNwb25zZT1kaWRBcHBseURvbUNoYW5nZV0gdm9pZCBz
ZXRBdHRyaWJ1dGUoaW4gbG9uZyBjYWxsSWQsIGluIGxvbmcgZWxlbWVudElkLCBpbiBTdHJpbmcg
bmFtZSwgaW4gU3RyaW5nIHZhbHVlLCBvdXQgYm9vbGVhbiBzdWNjZXNzKTsKICAgICAgICAgW2hh
bmRsZXI9RE9NLCBjdXN0b21SZXNwb25zZT1kaWRBcHBseURvbUNoYW5nZV0gdm9pZCByZW1vdmVB
dHRyaWJ1dGUoaW4gbG9uZyBjYWxsSWQsIGluIGxvbmcgZWxlbWVudElkLCBpbiBTdHJpbmcgbmFt
ZSwgb3V0IGJvb2xlYW4gc3VjY2Vzcyk7Ci0gICAgICAgIFtoYW5kbGVyPURPTV0gdm9pZCBzZXRU
ZXh0Tm9kZVZhbHVlKGluIGxvbmcgY2FsbElkLCBpbiBsb25nIG5vZGVJZCwgaW4gU3RyaW5nIHZh
bHVlKTsKLSAgICAgICAgW2hhbmRsZXI9RE9NXSB2b2lkIGdldEV2ZW50TGlzdGVuZXJzRm9yTm9k
ZShpbiBsb25nIGNhbGxJZCwgaW4gbG9uZyBub2RlSWQsIG91dCBsb25nIG5vZGVJZCwgb3V0IEFy
cmF5IGxpc3RlbmVyc0FycmF5KTsKKyAgICAgICAgW2hhbmRsZXI9RE9NLCBjdXN0b21SZXNwb25z
ZT1kaWRBcHBseURvbUNoYW5nZV0gdm9pZCBzZXRUZXh0Tm9kZVZhbHVlKGluIGxvbmcgY2FsbElk
LCBpbiBsb25nIG5vZGVJZCwgaW4gU3RyaW5nIHZhbHVlLCBvdXQgYm9vbGVhbiBzdWNjZXNzKTsK
KyAgICAgICAgW2hhbmRsZXI9RE9NXSB2b2lkIGdldEV2ZW50TGlzdGVuZXJzRm9yTm9kZShpbiBs
b25nIGNhbGxJZCwgaW4gbG9uZyBub2RlSWQsIG91dCBsb25nIG91dE5vZGVJZCwgb3V0IEFycmF5
IGxpc3RlbmVyc0FycmF5KTsKICAgICAgICAgW2hhbmRsZXI9RE9NXSB2b2lkIGNvcHlOb2RlKGlu
IGxvbmcgbm9kZUlkKTsKLSAgICAgICAgW2hhbmRsZXI9RE9NXSB2b2lkIHJlbW92ZU5vZGUoaW4g
bG9uZyBjYWxsSWQsIGluIGxvbmcgbm9kZUlkLCBvdXQgbG9uZyBub2RlSWQpOwotICAgICAgICBb
aGFuZGxlcj1ET01dIHZvaWQgY2hhbmdlVGFnTmFtZShpbiBsb25nIGNhbGxJZCwgaW4gbG9uZyBu
b2RlSWQsIGluIFN0cmluZyBuZXdUYWdOYW1lLCBvdXQgbG9uZyBub2RlSWQpOworICAgICAgICBb
aGFuZGxlcj1ET01dIHZvaWQgcmVtb3ZlTm9kZShpbiBsb25nIGNhbGxJZCwgaW4gbG9uZyBub2Rl
SWQsIG91dCBsb25nIG91dE5vZGVJZCk7CisgICAgICAgIFtoYW5kbGVyPURPTV0gdm9pZCBjaGFu
Z2VUYWdOYW1lKGluIGxvbmcgY2FsbElkLCBpbiBsb25nIG5vZGVJZCwgaW4gU3RyaW5nIG5ld1Rh
Z05hbWUsIG91dCBsb25nIG91dE5vZGVJZCk7CiAgICAgICAgIFtoYW5kbGVyPURPTV0gdm9pZCBn
ZXRPdXRlckhUTUwoaW4gbG9uZyBjYWxsSWQsIGluIGxvbmcgbm9kZUlkLCBvdXQgU3RyaW5nIG91
dGVySFRNTCk7Ci0gICAgICAgIFtoYW5kbGVyPURPTV0gdm9pZCBzZXRPdXRlckhUTUwoaW4gbG9u
ZyBjYWxsSWQsIGluIGxvbmcgbm9kZUlkLCBpbiBTdHJpbmcgb3V0ZXJIVE1MLCBvdXQgbG9uZyBu
b2RlSWQpOworICAgICAgICBbaGFuZGxlcj1ET01dIHZvaWQgc2V0T3V0ZXJIVE1MKGluIGxvbmcg
Y2FsbElkLCBpbiBsb25nIG5vZGVJZCwgaW4gU3RyaW5nIG91dGVySFRNTCwgb3V0IGxvbmcgb3V0
Tm9kZUlkKTsKICAgICAgICAgW2hhbmRsZXI9RE9NXSB2b2lkIGFkZEluc3BlY3RlZE5vZGUoaW4g
bG9uZyBub2RlSWQpOwogICAgICAgICBbaGFuZGxlcj1ET01dIHZvaWQgcGVyZm9ybVNlYXJjaChp
biBTdHJpbmcgcXVlcnksIGluIGJvb2xlYW4gcnVuU3luY2hyb25vdXNseSk7CiAgICAgICAgIFto
YW5kbGVyPURPTV0gdm9pZCBzZWFyY2hDYW5jZWxlZCgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmNwcCBiL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5jcHAKaW5kZXggZTQzOTJmNS4u
ZTMyNmNjNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQXBwbGljYXRp
b25DYWNoZUFnZW50LmNwcAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBcHBsaWNh
dGlvbkNhY2hlQWdlbnQuY3BwCkBAIC02MSwyMSArNjEsMTggQEAgdm9pZCBJbnNwZWN0b3JBcHBs
aWNhdGlvbkNhY2hlQWdlbnQ6OnVwZGF0ZU5ldHdvcmtTdGF0ZShib29sIGlzTm93T25saW5lKQog
ICAgIG1fZnJvbnRlbmQtPnVwZGF0ZU5ldHdvcmtTdGF0ZShpc05vd09ubGluZSk7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50OjpnZXRBcHBsaWNhdGlvbkNhY2hlcyhs
b25nIGNhbGxJZCkKK3ZvaWQgSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50OjpnZXRBcHBs
aWNhdGlvbkNhY2hlcyhsb25nLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiBhcHBsaWNhdGlvbkNh
Y2hlcykKIHsKICAgICBEb2N1bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIgPSBtX2luc3BlY3Rv
ckNvbnRyb2xsZXItPmluc3BlY3RlZFBhZ2UoKS0+bWFpbkZyYW1lKCktPmxvYWRlcigpLT5kb2N1
bWVudExvYWRlcigpOwotICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gYXBwbGljYXRpb25DYWNo
ZXM7CiAgICAgaWYgKGRvY3VtZW50TG9hZGVyKSB7CiAgICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVI
b3N0KiBob3N0ID0gZG9jdW1lbnRMb2FkZXItPmFwcGxpY2F0aW9uQ2FjaGVIb3N0KCk7CiAgICAg
ICAgIEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpDYWNoZUluZm8gaW5mbyA9IGhvc3QtPmFwcGxpY2F0
aW9uQ2FjaGVJbmZvKCk7CiAKICAgICAgICAgQXBwbGljYXRpb25DYWNoZUhvc3Q6OlJlc291cmNl
SW5mb0xpc3QgcmVzb3VyY2VzOwogICAgICAgICBob3N0LT5maWxsUmVzb3VyY2VMaXN0KCZyZXNv
dXJjZXMpOwotICAgICAgICBhcHBsaWNhdGlvbkNhY2hlcyA9IGJ1aWxkT2JqZWN0Rm9yQXBwbGlj
YXRpb25DYWNoZShyZXNvdXJjZXMsIGluZm8pOworICAgICAgICAqYXBwbGljYXRpb25DYWNoZXMg
PSBidWlsZE9iamVjdEZvckFwcGxpY2F0aW9uQ2FjaGUocmVzb3VyY2VzLCBpbmZvKTsKICAgICB9
IGVsc2UKLSAgICAgICAgYXBwbGljYXRpb25DYWNoZXMgPSBJbnNwZWN0b3JWYWx1ZTo6bnVsbCgp
OwotCi0gICAgbV9mcm9udGVuZC0+ZGlkR2V0QXBwbGljYXRpb25DYWNoZXMoY2FsbElkLCBhcHBs
aWNhdGlvbkNhY2hlcyk7CisgICAgICAgICphcHBsaWNhdGlvbkNhY2hlcyA9IEluc3BlY3RvclZh
bHVlOjpudWxsKCk7CiB9CiAKIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JB
cHBsaWNhdGlvbkNhY2hlQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yQXBwbGljYXRpb25DYWNoZShjb25z
dCBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6UmVzb3VyY2VJbmZvTGlzdCYgYXBwbGljYXRpb25DYWNo
ZVJlc291cmNlcywgY29uc3QgQXBwbGljYXRpb25DYWNoZUhvc3Q6OkNhY2hlSW5mbyYgYXBwbGlj
YXRpb25DYWNoZUluZm8pCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JB
cHBsaWNhdGlvbkNhY2hlQWdlbnQuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFwcGxp
Y2F0aW9uQ2FjaGVBZ2VudC5oCmluZGV4IGUwM2JhNGMuLmRkZTljNzAgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5oCisrKyBiL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5oCkBAIC0zNiw2
ICszNiw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEluc3BlY3RvckFycmF5OwogY2xh
c3MgSW5zcGVjdG9yQ29udHJvbGxlcjsKIGNsYXNzIEluc3BlY3Rvck9iamVjdDsKK2NsYXNzIElu
c3BlY3RvclZhbHVlOwogY2xhc3MgUmVtb3RlSW5zcGVjdG9yRnJvbnRlbmQ7CiBjbGFzcyBSZXNv
dXJjZVJlc3BvbnNlOwogCkBAIC01MCw3ICs1MSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHVwZGF0
ZU5ldHdvcmtTdGF0ZShib29sIGlzTm93T25saW5lKTsKIAogICAgIC8vIEZyb20gRnJvbnRlbmQK
LSAgICB2b2lkIGdldEFwcGxpY2F0aW9uQ2FjaGVzKGxvbmcgY2FsbElkKTsKKyAgICB2b2lkIGdl
dEFwcGxpY2F0aW9uQ2FjaGVzKGxvbmcgY2FsbElkLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiBh
cHBsaWNhdGlvbkNhY2hlcyk7CiAKIHByaXZhdGU6CiAgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IGJ1aWxkT2JqZWN0Rm9yQXBwbGljYXRpb25DYWNoZShjb25zdCBBcHBsaWNhdGlvbkNh
Y2hlSG9zdDo6UmVzb3VyY2VJbmZvTGlzdCYsIGNvbnN0IEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpD
YWNoZUluZm8mKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tl
bmQuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5jcHAKaW5kZXggNDhl
ZjYwMi4uMDViNDc0YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFj
a2VuZC5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5jcHAKQEAg
LTczLDMwICs3MywyNSBAQCB2b2lkIEluc3BlY3RvckJhY2tlbmQ6OnRha2VIZWFwU25hcHNob3Qo
KQogICAgIFNjcmlwdFByb2ZpbGVyOjp0YWtlSGVhcFNuYXBzaG90KCk7CiB9CiAKLXZvaWQgSW5z
cGVjdG9yQmFja2VuZDo6Z2V0UHJvZmlsZXJMb2dMaW5lcyhsb25nIGNhbGxJZCwgbG9uZyBwb3Np
dGlvbikKK3ZvaWQgSW5zcGVjdG9yQmFja2VuZDo6Z2V0UHJvZmlsZXJMb2dMaW5lcyhsb25nLCBs
b25nIHBvc2l0aW9uLCBsb25nKiBvdXRQb3NpdGlvbiwgU3RyaW5nKiBkYXRhKQogewogICAgIC8v
IEZJWE1FOiB3ZSBzaG91bGQgbWFrZSBpbnNwZWN0b3IgZGlzcGF0Y2hlciBwbHVnZ2FibGUsIHNv
IHRoYXQgZW1iZWRkZXJzIGNvdWxkIGNvbnRyaWJ1dGUgQVBJcyBpbnN0ZWFkIG9mIHBvbGx1dGlu
ZyB0aGUgY29yZSBvbmUKICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NDMzNTcKLSAgICBpZiAoUmVtb3RlSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250ZW5kID0g
cmVtb3RlRnJvbnRlbmQoKSkgewotICAgICAgICBTdHJpbmcgZGF0YTsKLSAgICAgICAgaW50IG91
dFBvc2l0aW9uID0gU2NyaXB0UHJvZmlsZXI6OmdldFByb2ZpbGVyTG9nTGluZXMocG9zaXRpb24s
ICZkYXRhKTsKLSAgICAgICAgZnJvbnRlbmQtPmRpZEdldFByb2ZpbGVyTG9nTGluZXMoY2FsbElk
LCBvdXRQb3NpdGlvbiwgZGF0YSk7Ci0gICAgfQorICAgICpvdXRQb3NpdGlvbiA9IFNjcmlwdFBy
b2ZpbGVyOjpnZXRQcm9maWxlckxvZ0xpbmVzKHBvc2l0aW9uLCBkYXRhKTsKIH0KICNlbmRpZgog
CiB2b2lkIEluc3BlY3RvckJhY2tlbmQ6OnNldEluamVjdGVkU2NyaXB0U291cmNlKGNvbnN0IFN0
cmluZyYgc291cmNlKQogewotICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXIpCi0gICAgICAg
IG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5qZWN0ZWRTY3JpcHRIb3N0KCktPnNldEluamVjdGVk
U2NyaXB0U291cmNlKHNvdXJjZSk7CisgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5qZWN0
ZWRTY3JpcHRIb3N0KCktPnNldEluamVjdGVkU2NyaXB0U291cmNlKHNvdXJjZSk7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yQmFja2VuZDo6ZGlzcGF0Y2hPbkluamVjdGVkU2NyaXB0KGxvbmcgY2FsbElk
LCBsb25nIGluamVjdGVkU2NyaXB0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kTmFtZSwgY29uc3Qg
U3RyaW5nJiBhcmd1bWVudHMsIGJvb2wgYXN5bmMpCit2b2lkIEluc3BlY3RvckJhY2tlbmQ6OmRp
c3BhdGNoT25JbmplY3RlZFNjcmlwdChsb25nIGNhbGxJZCwgbG9uZyBpbmplY3RlZFNjcmlwdElk
LCBjb25zdCBTdHJpbmcmIG1ldGhvZE5hbWUsIGNvbnN0IFN0cmluZyYgYXJndW1lbnRzLCBib29s
IGFzeW5jLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiByZXN1bHQsIGJvb2wqIGhhZEV4Y2VwdGlv
bikKIHsKLSAgICBSZW1vdGVJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQgPSByZW1vdGVGcm9u
dGVuZCgpOwotICAgIGlmICghZnJvbnRlbmQpCisgICAgaWYgKCFyZW1vdGVGcm9udGVuZCgpKQog
ICAgICAgICByZXR1cm47CiAKKyAgICAqaGFkRXhjZXB0aW9uID0gZmFsc2U7CiAgICAgLy8gRklY
TUU6IGV4cGxpY2l0bHkgcGFzcyBpbmplY3RlZFNjcmlwdElkIGFsb25nIHdpdGggbm9kZSBpZCB0
byB0aGUgZnJvbnRlbmQuCiAgICAgYm9vbCBpbmplY3RlZFNjcmlwdElkSXNOb2RlSWQgPSBpbmpl
Y3RlZFNjcmlwdElkIDw9IDA7CiAKQEAgLTEwOSwxMiArMTA0LDEwIEBAIHZvaWQgSW5zcGVjdG9y
QmFja2VuZDo6ZGlzcGF0Y2hPbkluamVjdGVkU2NyaXB0KGxvbmcgY2FsbElkLCBsb25nIGluamVj
dGVkU2NyaXB0CiAgICAgaWYgKGluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiByZXN1bHQ7Ci0gICAgYm9vbCBo
YWRFeGNlcHRpb24gPSBmYWxzZTsKLSAgICBpbmplY3RlZFNjcmlwdC5kaXNwYXRjaChjYWxsSWQs
IG1ldGhvZE5hbWUsIGFyZ3VtZW50cywgYXN5bmMsICZyZXN1bHQsICZoYWRFeGNlcHRpb24pOwor
ICAgIGluamVjdGVkU2NyaXB0LmRpc3BhdGNoKGNhbGxJZCwgbWV0aG9kTmFtZSwgYXJndW1lbnRz
LCBhc3luYywgcmVzdWx0LCBoYWRFeGNlcHRpb24pOwogICAgIGlmIChhc3luYykKICAgICAgICAg
cmV0dXJuOyAgLy8gSW5qZWN0ZWRTY3JpcHQgd2lsbCByZXR1cm4gcmVzdWx0IGFzeW5jaHJvbm91
c2x5IGJ5IG1lYW5zIG9mIDo6cmVwb3J0RGlkRGlzcGF0Y2hPbkluamVjdGVkU2NyaXB0LgotICAg
IGZyb250ZW5kLT5kaWREaXNwYXRjaE9uSW5qZWN0ZWRTY3JpcHQoY2FsbElkLCByZXN1bHQsIGhh
ZEV4Y2VwdGlvbik7CisgICAgcmVtb3RlRnJvbnRlbmQoKS0+ZGlkRGlzcGF0Y2hPbkluamVjdGVk
U2NyaXB0KGNhbGxJZCwgcmVzdWx0LT5nZXQoKSwgKmhhZEV4Y2VwdGlvbik7CiB9CiAKIHZvaWQg
SW5zcGVjdG9yQmFja2VuZDo6Y2xlYXJDb25zb2xlTWVzc2FnZXMobG9uZyBjYWxsSWQpCkBAIC0x
MzEsMTggKzEyNCwxNSBAQCB2b2lkIEluc3BlY3RvckJhY2tlbmQ6OnJlbGVhc2VXcmFwcGVyT2Jq
ZWN0R3JvdXAobG9uZyBpbmplY3RlZFNjcmlwdElkLCBjb25zdCBTdAogfQogCiAjaWYgRU5BQkxF
KERBVEFCQVNFKQotdm9pZCBJbnNwZWN0b3JCYWNrZW5kOjpnZXREYXRhYmFzZVRhYmxlTmFtZXMo
bG9uZyBjYWxsSWQsIGxvbmcgZGF0YWJhc2VJZCkKK3ZvaWQgSW5zcGVjdG9yQmFja2VuZDo6Z2V0
RGF0YWJhc2VUYWJsZU5hbWVzKGxvbmcsIGxvbmcgZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiogbmFtZXMpCiB7Ci0gICAgaWYgKFJlbW90ZUluc3BlY3RvckZyb250ZW5kKiBmcm9u
dGVuZCA9IHJlbW90ZUZyb250ZW5kKCkpIHsKLSAgICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5
PiByZXN1bHQgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7Ci0gICAgICAgIERhdGFiYXNlKiBk
YXRhYmFzZSA9IG1faW5zcGVjdG9yQ29udHJvbGxlci0+ZGF0YWJhc2VGb3JJZChkYXRhYmFzZUlk
KTsKLSAgICAgICAgaWYgKGRhdGFiYXNlKSB7Ci0gICAgICAgICAgICBWZWN0b3I8U3RyaW5nPiB0
YWJsZU5hbWVzID0gZGF0YWJhc2UtPnRhYmxlTmFtZXMoKTsKLSAgICAgICAgICAgIHVuc2lnbmVk
IGxlbmd0aCA9IHRhYmxlTmFtZXMuc2l6ZSgpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAgICAgICAgICAgIHJlc3VsdC0+cHVzaFN0cmlu
Zyh0YWJsZU5hbWVzW2ldKTsKLSAgICAgICAgfQotICAgICAgICBmcm9udGVuZC0+ZGlkR2V0RGF0
YWJhc2VUYWJsZU5hbWVzKGNhbGxJZCwgcmVzdWx0KTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yQXJy
YXk+IHJlc3VsdCA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKKyAgICBEYXRhYmFzZSogZGF0
YWJhc2UgPSBtX2luc3BlY3RvckNvbnRyb2xsZXItPmRhdGFiYXNlRm9ySWQoZGF0YWJhc2VJZCk7
CisgICAgaWYgKGRhdGFiYXNlKSB7CisgICAgICAgIFZlY3RvcjxTdHJpbmc+IHRhYmxlTmFtZXMg
PSBkYXRhYmFzZS0+dGFibGVOYW1lcygpOworICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSB0YWJs
ZU5hbWVzLnNpemUoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsg
KytpKQorICAgICAgICAgICAgKCpuYW1lcyktPnB1c2hTdHJpbmcodGFibGVOYW1lc1tpXSk7CiAg
ICAgfQogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JC
YWNrZW5kLmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmgKaW5kZXggN2Y0
YjUwMC4uNGYxZGU4NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFj
a2VuZC5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaApAQCAtNjIs
MTggKzYyLDE4IEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKICAg
ICB2b2lkIGVuYWJsZURlYnVnZ2VyKGJvb2wgYWx3YXlzKTsKICAgICB2b2lkIHRha2VIZWFwU25h
cHNob3QoKTsKLSAgICB2b2lkIGdldFByb2ZpbGVyTG9nTGluZXMobG9uZyBjYWxsSWQsIGxvbmcg
cG9zaXRpb24pOworICAgIHZvaWQgZ2V0UHJvZmlsZXJMb2dMaW5lcyhsb25nIGNhbGxJZCwgbG9u
ZyBwb3NpdGlvbiwgbG9uZyogb3V0UG9zaXRpb24sIFN0cmluZyogZGF0YSk7CiAjZW5kaWYKIAog
ICAgIHZvaWQgc2V0SW5qZWN0ZWRTY3JpcHRTb3VyY2UoY29uc3QgU3RyaW5nJiBzb3VyY2UpOwot
ICAgIHZvaWQgZGlzcGF0Y2hPbkluamVjdGVkU2NyaXB0KGxvbmcgY2FsbElkLCBsb25nIGluamVj
dGVkU2NyaXB0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kTmFtZSwgY29uc3QgU3RyaW5nJiBhcmd1
bWVudHMsIGJvb2wgYXN5bmMpOworICAgIHZvaWQgZGlzcGF0Y2hPbkluamVjdGVkU2NyaXB0KGxv
bmcgY2FsbElkLCBsb25nIGluamVjdGVkU2NyaXB0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kTmFt
ZSwgY29uc3QgU3RyaW5nJiBhcmd1bWVudHMsIGJvb2wgYXN5bmMsIFJlZlB0cjxJbnNwZWN0b3JW
YWx1ZT4qIHJlc3VsdCwgYm9vbCogaGFkRXhjZXB0aW9uKTsKICAgICB2b2lkIGNsZWFyQ29uc29s
ZU1lc3NhZ2VzKGxvbmcgY2FsbElkKTsKIAogICAgIC8vIEdlbmVyaWMgY29kZSBjYWxsZWQgZnJv
bSBjdXN0b20gaW1wbGVtZW50YXRpb25zLgogICAgIHZvaWQgcmVsZWFzZVdyYXBwZXJPYmplY3RH
cm91cChsb25nIGluamVjdGVkU2NyaXB0SWQsIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXApOwog
CiAjaWYgRU5BQkxFKERBVEFCQVNFKQotICAgIHZvaWQgZ2V0RGF0YWJhc2VUYWJsZU5hbWVzKGxv
bmcgY2FsbElkLCBsb25nIGRhdGFiYXNlSWQpOworICAgIHZvaWQgZ2V0RGF0YWJhc2VUYWJsZU5h
bWVzKGxvbmcgY2FsbElkLCBsb25nIGRhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4q
IG5hbWVzKTsKICNlbmRpZgogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQ1NTU3RvcmUuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NT
U3RvcmUuY3BwCmluZGV4IGQwOTgyMzAuLjE2ZDI1MDggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckNTU1N0b3JlLmNwcAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JDU1NTdG9yZS5jcHAKQEAgLTgxLDcgKzgxLDcgQEAgdm9pZCBJbnNwZWN0b3JDU1NTdG9y
ZTo6cmVtb3ZlRG9jdW1lbnQoRG9jdW1lbnQqIGRvYykKICAgICBtX2RvY3VtZW50Tm9kZVRvSW5z
cGVjdG9yU3R5bGVTaGVldE1hcC5yZW1vdmUoZG9jKTsKIH0KIAotQ1NTU3R5bGVTaGVldCogSW5z
cGVjdG9yQ1NTU3RvcmU6Omluc3BlY3RvclN0eWxlU2hlZXQoRG9jdW1lbnQqIG93bmVyRG9jdW1l
bnQsIGJvb2wgY3JlYXRlSWZBYnNlbnQsIGxvbmcgY2FsbElkKQorQ1NTU3R5bGVTaGVldCogSW5z
cGVjdG9yQ1NTU3RvcmU6Omluc3BlY3RvclN0eWxlU2hlZXQoRG9jdW1lbnQqIG93bmVyRG9jdW1l
bnQsIGJvb2wgY3JlYXRlSWZBYnNlbnQpCiB7CiAgICAgRG9jdW1lbnRUb1N0eWxlU2hlZXRNYXA6
Oml0ZXJhdG9yIGl0ID0gbV9kb2N1bWVudE5vZGVUb0luc3BlY3RvclN0eWxlU2hlZXRNYXAuZmlu
ZChvd25lckRvY3VtZW50KTsKICAgICBpZiAoaXQgIT0gbV9kb2N1bWVudE5vZGVUb0luc3BlY3Rv
clN0eWxlU2hlZXRNYXAuZW5kKCkpCkBAIC05NCwxNiArOTQsMTIgQEAgQ1NTU3R5bGVTaGVldCog
SW5zcGVjdG9yQ1NTU3RvcmU6Omluc3BlY3RvclN0eWxlU2hlZXQoRG9jdW1lbnQqIG93bmVyRG9j
dW1lbnQsIGIKICAgICAgICAgc3R5bGVFbGVtZW50LT5zZXRBdHRyaWJ1dGUoInR5cGUiLCAidGV4
dC9jc3MiLCBlYyk7CiAgICAgaWYgKCFlYykKICAgICAgICAgb3duZXJEb2N1bWVudC0+aGVhZCgp
LT5hcHBlbmRDaGlsZChzdHlsZUVsZW1lbnQsIGVjKTsKLSAgICBpZiAoZWMpIHsKLSAgICAgICAg
bV9pbnNwZWN0b3JDb250cm9sbGVyLT5yZW1vdGVJbnNwZWN0b3JGcm9udGVuZCgpLT5kaWRBZGRS
dWxlKGNhbGxJZCwgSW5zcGVjdG9yVmFsdWU6Om51bGwoKSwgZmFsc2UpOworICAgIGlmIChlYykK
ICAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQogICAgIFN0eWxlU2hlZXRMaXN0KiBzdHlsZVNoZWV0
cyA9IG93bmVyRG9jdW1lbnQtPnN0eWxlU2hlZXRzKCk7CiAgICAgU3R5bGVTaGVldCogc3R5bGVT
aGVldCA9IHN0eWxlU2hlZXRzLT5pdGVtKHN0eWxlU2hlZXRzLT5sZW5ndGgoKSAtIDEpOwotICAg
IGlmICghc3R5bGVTaGVldC0+aXNDU1NTdHlsZVNoZWV0KCkpIHsKLSAgICAgICAgbV9pbnNwZWN0
b3JDb250cm9sbGVyLT5yZW1vdGVJbnNwZWN0b3JGcm9udGVuZCgpLT5kaWRBZGRSdWxlKGNhbGxJ
ZCwgSW5zcGVjdG9yVmFsdWU6Om51bGwoKSwgZmFsc2UpOworICAgIGlmICghc3R5bGVTaGVldC0+
aXNDU1NTdHlsZVNoZWV0KCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIH0KICAgICBDU1NTdHls
ZVNoZWV0KiBpbnNwZWN0b3JTdHlsZVNoZWV0ID0gc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldCo+
KHN0eWxlU2hlZXQpOwogICAgIG1fZG9jdW1lbnROb2RlVG9JbnNwZWN0b3JTdHlsZVNoZWV0TWFw
LnNldChvd25lckRvY3VtZW50LCBpbnNwZWN0b3JTdHlsZVNoZWV0KTsKICAgICByZXR1cm4gaW5z
cGVjdG9yU3R5bGVTaGVldDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckNTU1N0b3JlLmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NTdG9yZS5oCmluZGV4
IDRmN2RmMDAuLjU2OTEyMDEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckNTU1N0b3JlLmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTU3RvcmUuaApA
QCAtNzEsNyArNzEsNyBAQCBwdWJsaWM6CiAgICAgQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldEZv
cklkKGxvbmcgc3R5bGVTaGVldElkKTsKICAgICBDU1NTdHlsZVJ1bGUqIHJ1bGVGb3JJZChsb25n
IHN0eWxlUnVsZUlkKTsKICAgICBEaXNhYmxlZFN0eWxlRGVjbGFyYXRpb24qIGRpc2FibGVkU3R5
bGVGb3JJZChsb25nIHN0eWxlSWQsIGJvb2wgY3JlYXRlSWZBYnNlbnQpOwotICAgIENTU1N0eWxl
U2hlZXQqIGluc3BlY3RvclN0eWxlU2hlZXQoRG9jdW1lbnQqIG93bmVyRG9jdW1lbnQsIGJvb2wg
Y3JlYXRlSWZBYnNlbnQsIGxvbmcgY2FsbElkKTsKKyAgICBDU1NTdHlsZVNoZWV0KiBpbnNwZWN0
b3JTdHlsZVNoZWV0KERvY3VtZW50KiBvd25lckRvY3VtZW50LCBib29sIGNyZWF0ZUlmQWJzZW50
KTsKICAgICB2b2lkIHJlbW92ZURvY3VtZW50KERvY3VtZW50Kik7CiAKICAgICBsb25nIGJpbmRS
dWxlKENTU1N0eWxlUnVsZSogcnVsZSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JDb250cm9sbGVyLmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRy
b2xsZXIuY3BwCmluZGV4IDIwNTJhZGIuLjBiZjg2MTYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNvbnRyb2xsZXIuY3BwCkBAIC0xODYsNyArMTg2LDcgQEAgSW5zcGVjdG9yQ29udHJv
bGxlcjo6SW5zcGVjdG9yQ29udHJvbGxlcihQYWdlKiBwYWdlLCBJbnNwZWN0b3JDbGllbnQqIGNs
aWVudCkKICAgICAsIG1fcmVzb3VyY2VUcmFja2luZ0VuYWJsZWQoZmFsc2UpCiAgICAgLCBtX3Nl
dHRpbmdzTG9hZGVkKGZhbHNlKQogICAgICwgbV9pbnNwZWN0b3JCYWNrZW5kKEluc3BlY3RvckJh
Y2tlbmQ6OmNyZWF0ZSh0aGlzKSkKLSAgICAsIG1faW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIo
bmV3IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKG1faW5zcGVjdG9yQmFja2VuZC5nZXQoKSkp
CisgICAgLCBtX2luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKG5ldyBJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlcih0aGlzKSkKICAgICAsIG1faW5qZWN0ZWRTY3JpcHRIb3N0KEluamVjdGVkU2Ny
aXB0SG9zdDo6Y3JlYXRlKHRoaXMpKQogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQog
ICAgICwgbV9kZWJ1Z2dlckVuYWJsZWQoZmFsc2UpCkBAIC0xMjk4LDExICsxMjk4LDggQEAgdm9p
ZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRPcGVuRGF0YWJhc2UoUGFzc1JlZlB0cjxEYXRhYmFz
ZT4gZGF0YWJhc2UsIGNvbnN0IFMKIH0KICNlbmRpZgogCi12b2lkIEluc3BlY3RvckNvbnRyb2xs
ZXI6OmdldENvb2tpZXMobG9uZyBjYWxsSWQpCit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6Omdl
dENvb2tpZXMobG9uZywgUmVmUHRyPEluc3BlY3RvckFycmF5PiogY29va2llcywgV2ViQ29yZTo6
U3RyaW5nKiBjb29raWVzU3RyaW5nKQogewotICAgIGlmICghbV9yZW1vdGVGcm9udGVuZCkKLSAg
ICAgICAgcmV0dXJuOwotCiAgICAgLy8gSWYgd2UgY2FuIGdldCByYXcgY29va2llcy4KICAgICBM
aXN0SGFzaFNldDxDb29raWU+IHJhd0Nvb2tpZXNMaXN0OwogCkBAIC0xMzM2LDE1ICsxMzMzLDEy
IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6Z2V0Q29va2llcyhsb25nIGNhbGxJZCkKICAg
ICAgICAgfQogICAgIH0KIAotICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gY29va2llczsKLSAg
ICBTdHJpbmcgY29va2llc1N0cmluZzsKICAgICBpZiAocmF3Q29va2llc0ltcGxlbWVudGVkKQot
ICAgICAgICBjb29raWVzID0gYnVpbGRBcnJheUZvckNvb2tpZXMocmF3Q29va2llc0xpc3QpOwor
ICAgICAgICAqY29va2llcyA9IGJ1aWxkQXJyYXlGb3JDb29raWVzKHJhd0Nvb2tpZXNMaXN0KTsK
ICAgICBlbHNlIHsKLSAgICAgICAgY29va2llcyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsK
LSAgICAgICAgY29va2llc1N0cmluZyA9IHN0cmluZ0Nvb2tpZXNMaXN0OworICAgICAgICAqY29v
a2llcyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKKyAgICAgICAgKmNvb2tpZXNTdHJpbmcg
PSBzdHJpbmdDb29raWVzTGlzdDsKICAgICB9Ci0gICAgbV9yZW1vdGVGcm9udGVuZC0+ZGlkR2V0
Q29va2llcyhjYWxsSWQsIGNvb2tpZXMsIGNvb2tpZXNTdHJpbmcpOwogfQogCiBQYXNzUmVmUHRy
PEluc3BlY3RvckFycmF5PiBJbnNwZWN0b3JDb250cm9sbGVyOjpidWlsZEFycmF5Rm9yQ29va2ll
cyhMaXN0SGFzaFNldDxDb29raWU+JiBjb29raWVzTGlzdCkKQEAgLTE0MjYsMTIgKzE0MjAsOSBA
QCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNlbGVjdERPTVN0b3JhZ2UoU3RvcmFnZSogc3Rv
cmFnZSkKICAgICAgICAgbV9yZW1vdGVGcm9udGVuZC0+c2VsZWN0RE9NU3RvcmFnZShzdG9yYWdl
UmVzb3VyY2VJZCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6Z2V0RE9NU3RvcmFn
ZUVudHJpZXMobG9uZyBjYWxsSWQsIGxvbmcgc3RvcmFnZUlkKQordm9pZCBJbnNwZWN0b3JDb250
cm9sbGVyOjpnZXRET01TdG9yYWdlRW50cmllcyhsb25nLCBsb25nIHN0b3JhZ2VJZCwgUmVmUHRy
PEluc3BlY3RvckFycmF5PiogZW50cmllcykKIHsKLSAgICBpZiAoIW1fcmVtb3RlRnJvbnRlbmQp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4ganNvbkFycmF5
ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgICplbnRyaWVzID0gSW5zcGVjdG9yQXJy
YXk6OmNyZWF0ZSgpOwogICAgIEluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZSogc3RvcmFnZVJl
c291cmNlID0gZ2V0RE9NU3RvcmFnZVJlc291cmNlRm9ySWQoc3RvcmFnZUlkKTsKICAgICBpZiAo
c3RvcmFnZVJlc291cmNlKSB7CiAgICAgICAgIHN0b3JhZ2VSZXNvdXJjZS0+c3RhcnRSZXBvcnRp
bmdDaGFuZ2VzVG9Gcm9udGVuZCgpOwpAQCAtMTQ0MiwzOSArMTQzMywzMCBAQCB2b2lkIEluc3Bl
Y3RvckNvbnRyb2xsZXI6OmdldERPTVN0b3JhZ2VFbnRyaWVzKGxvbmcgY2FsbElkLCBsb25nIHN0
b3JhZ2VJZCkKICAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gZW50cnkgPSBJbnNw
ZWN0b3JBcnJheTo6Y3JlYXRlKCk7CiAgICAgICAgICAgICBlbnRyeS0+cHVzaFN0cmluZyhuYW1l
KTsKICAgICAgICAgICAgIGVudHJ5LT5wdXNoU3RyaW5nKHZhbHVlKTsKLSAgICAgICAgICAgIGpz
b25BcnJheS0+cHVzaChlbnRyeSk7CisgICAgICAgICAgICAoKmVudHJpZXMpLT5wdXNoKGVudHJ5
KTsKICAgICAgICAgfQogICAgIH0KLSAgICBtX3JlbW90ZUZyb250ZW5kLT5kaWRHZXRET01TdG9y
YWdlRW50cmllcyhjYWxsSWQsIGpzb25BcnJheSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ29udHJv
bGxlcjo6c2V0RE9NU3RvcmFnZUl0ZW0obG9uZyBjYWxsSWQsIGxvbmcgc3RvcmFnZUlkLCBjb25z
dCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3ZvaWQgSW5zcGVjdG9yQ29udHJv
bGxlcjo6c2V0RE9NU3RvcmFnZUl0ZW0obG9uZywgbG9uZyBzdG9yYWdlSWQsIGNvbnN0IFN0cmlu
ZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sKiBzdWNjZXNzKQogewotICAgIGlmICgh
bV9yZW1vdGVGcm9udGVuZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYm9vbCBzdWNjZXNzID0g
ZmFsc2U7CisgICAgKnN1Y2Nlc3MgPSBmYWxzZTsKICAgICBJbnNwZWN0b3JET01TdG9yYWdlUmVz
b3VyY2UqIHN0b3JhZ2VSZXNvdXJjZSA9IGdldERPTVN0b3JhZ2VSZXNvdXJjZUZvcklkKHN0b3Jh
Z2VJZCk7CiAgICAgaWYgKHN0b3JhZ2VSZXNvdXJjZSkgewogICAgICAgICBFeGNlcHRpb25Db2Rl
IGV4Y2VwdGlvbiA9IDA7CiAgICAgICAgIHN0b3JhZ2VSZXNvdXJjZS0+ZG9tU3RvcmFnZSgpLT5z
ZXRJdGVtKGtleSwgdmFsdWUsIGV4Y2VwdGlvbik7Ci0gICAgICAgIHN1Y2Nlc3MgPSAhZXhjZXB0
aW9uOworICAgICAgICAqc3VjY2VzcyA9ICFleGNlcHRpb247CiAgICAgfQotICAgIG1fcmVtb3Rl
RnJvbnRlbmQtPmRpZFNldERPTVN0b3JhZ2VJdGVtKGNhbGxJZCwgc3VjY2Vzcyk7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6cmVtb3ZlRE9NU3RvcmFnZUl0ZW0obG9uZyBjYWxsSWQs
IGxvbmcgc3RvcmFnZUlkLCBjb25zdCBTdHJpbmcmIGtleSkKK3ZvaWQgSW5zcGVjdG9yQ29udHJv
bGxlcjo6cmVtb3ZlRE9NU3RvcmFnZUl0ZW0obG9uZywgbG9uZyBzdG9yYWdlSWQsIGNvbnN0IFN0
cmluZyYga2V5LCBib29sKiBzdWNjZXNzKQogewotICAgIGlmICghbV9yZW1vdGVGcm9udGVuZCkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7CisgICAgKnN1Y2Nl
c3MgPSBmYWxzZTsKICAgICBJbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UqIHN0b3JhZ2VSZXNv
dXJjZSA9IGdldERPTVN0b3JhZ2VSZXNvdXJjZUZvcklkKHN0b3JhZ2VJZCk7CiAgICAgaWYgKHN0
b3JhZ2VSZXNvdXJjZSkgewogICAgICAgICBzdG9yYWdlUmVzb3VyY2UtPmRvbVN0b3JhZ2UoKS0+
cmVtb3ZlSXRlbShrZXkpOwotICAgICAgICBzdWNjZXNzID0gdHJ1ZTsKKyAgICAgICAgKnN1Y2Nl
c3MgPSB0cnVlOwogICAgIH0KLSAgICBtX3JlbW90ZUZyb250ZW5kLT5kaWRSZW1vdmVET01TdG9y
YWdlSXRlbShjYWxsSWQsIHN1Y2Nlc3MpOwogfQogCiBJbnNwZWN0b3JET01TdG9yYWdlUmVzb3Vy
Y2UqIEluc3BlY3RvckNvbnRyb2xsZXI6OmdldERPTVN0b3JhZ2VSZXNvdXJjZUZvcklkKGxvbmcg
c3RvcmFnZUlkKQpAQCAtMTUzNiwyNiArMTUxOCwyMSBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xs
ZXI6OmNsZWFyUHJvZmlsZXMoKQogICAgIG1fbmV4dFVzZXJJbml0aWF0ZWRQcm9maWxlTnVtYmVy
ID0gMTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpnZXRQcm9maWxlSGVhZGVycyhs
b25nIGNhbGxJZCkKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6Z2V0UHJvZmlsZUhlYWRlcnMo
bG9uZywgUmVmUHRyPEluc3BlY3RvckFycmF5PiogaGVhZGVycykKIHsKLSAgICBpZiAoIW1fcmVt
b3RlRnJvbnRlbmQpCi0gICAgICAgIHJldHVybjsKLSAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
IHJlc3VsdCA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKKyAgICAqaGVhZGVycyA9IEluc3Bl
Y3RvckFycmF5OjpjcmVhdGUoKTsKICAgICBQcm9maWxlc01hcDo6aXRlcmF0b3IgcHJvZmlsZXNF
bmQgPSBtX3Byb2ZpbGVzLmVuZCgpOwogICAgIGZvciAoUHJvZmlsZXNNYXA6Oml0ZXJhdG9yIGl0
ID0gbV9wcm9maWxlcy5iZWdpbigpOyBpdCAhPSBwcm9maWxlc0VuZDsgKytpdCkKLSAgICAgICAg
cmVzdWx0LT5wdXNoKGNyZWF0ZVByb2ZpbGVIZWFkZXIoKml0LT5zZWNvbmQpKTsKLSAgICBtX3Jl
bW90ZUZyb250ZW5kLT5kaWRHZXRQcm9maWxlSGVhZGVycyhjYWxsSWQsIHJlc3VsdCk7CisgICAg
ICAgICgqaGVhZGVycyktPnB1c2goY3JlYXRlUHJvZmlsZUhlYWRlcigqaXQtPnNlY29uZCkpOwog
fQogCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmdldFByb2ZpbGUobG9uZyBjYWxsSWQsIHVu
c2lnbmVkIHVpZCkKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6Z2V0UHJvZmlsZShsb25nLCB1
bnNpZ25lZCB1aWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiBwcm9maWxlT2JqZWN0KQogewot
ICAgIGlmICghbV9mcm9udGVuZCkKLSAgICAgICAgcmV0dXJuOworICAgICpwcm9maWxlT2JqZWN0
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICBQcm9maWxlc01hcDo6aXRlcmF0b3Ig
aXQgPSBtX3Byb2ZpbGVzLmZpbmQodWlkKTsKICAgICBpZiAoaXQgIT0gbV9wcm9maWxlcy5lbmQo
KSkgewotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwcm9maWxlT2JqZWN0ID0gY3Jl
YXRlUHJvZmlsZUhlYWRlcigqaXQtPnNlY29uZCk7Ci0gICAgICAgIHByb2ZpbGVPYmplY3QtPnNl
dCgiaGVhZCIsIGl0LT5zZWNvbmQtPmJ1aWxkSW5zcGVjdG9yT2JqZWN0Rm9ySGVhZCgpKTsKLSAg
ICAgICAgbV9yZW1vdGVGcm9udGVuZC0+ZGlkR2V0UHJvZmlsZShjYWxsSWQsIHByb2ZpbGVPYmpl
Y3QpOworICAgICAgICAqcHJvZmlsZU9iamVjdCA9IGNyZWF0ZVByb2ZpbGVIZWFkZXIoKml0LT5z
ZWNvbmQpOworICAgICAgICAoKnByb2ZpbGVPYmplY3QpLT5zZXQoImhlYWQiLCBpdC0+c2Vjb25k
LT5idWlsZEluc3BlY3Rvck9iamVjdEZvckhlYWQoKSk7CiAgICAgfQogfQogCkBAIC0xNzIzLDIy
ICsxNzAwLDE2IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlzYWJsZURlYnVnZ2VyKGJv
b2wgYWx3YXlzKQogICAgICAgICBtX2Zyb250ZW5kLT5kZWJ1Z2dlcldhc0Rpc2FibGVkKCk7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZWRpdFNjcmlwdFNvdXJjZShsb25nIGNhbGxJ
ZCwgY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgY29uc3QgU3RyaW5nJiBuZXdDb250ZW50KQordm9p
ZCBJbnNwZWN0b3JDb250cm9sbGVyOjplZGl0U2NyaXB0U291cmNlKGxvbmcsIGNvbnN0IFN0cmlu
ZyYgc291cmNlSUQsIGNvbnN0IFN0cmluZyYgbmV3Q29udGVudCwgYm9vbCogc3VjY2VzcywgU3Ry
aW5nKiByZXN1bHQsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIG5ld0NhbGxGcmFtZXMpCiB7Ci0g
ICAgU3RyaW5nIHJlc3VsdDsKLSAgICBib29sIHN1Y2Nlc3MgPSBTY3JpcHREZWJ1Z1NlcnZlcjo6
c2hhcmVkKCkuZWRpdFNjcmlwdFNvdXJjZShzb3VyY2VJRCwgbmV3Q29udGVudCwgcmVzdWx0KTsK
LSAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGNhbGxGcmFtZXM7Ci0gICAgaWYgKHN1Y2Nlc3Mp
Ci0gICAgICAgIGNhbGxGcmFtZXMgPSBjdXJyZW50Q2FsbEZyYW1lcygpOwotICAgIG1fcmVtb3Rl
RnJvbnRlbmQtPmRpZEVkaXRTY3JpcHRTb3VyY2UoY2FsbElkLCBzdWNjZXNzLCByZXN1bHQsIGNh
bGxGcmFtZXMuZ2V0KCkpOworICAgICpuZXdDYWxsRnJhbWVzID0gSW5zcGVjdG9yVmFsdWU6Om51
bGwoKTsKKyAgICBpZiAoKnN1Y2Nlc3MgPSBTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkuZWRp
dFNjcmlwdFNvdXJjZShzb3VyY2VJRCwgbmV3Q29udGVudCwgKnJlc3VsdCkpCisgICAgICAgICpu
ZXdDYWxsRnJhbWVzID0gY3VycmVudENhbGxGcmFtZXMoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JD
b250cm9sbGVyOjpnZXRTY3JpcHRTb3VyY2UobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgc291
cmNlSUQpCit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmdldFNjcmlwdFNvdXJjZShsb25nLCBj
b25zdCBTdHJpbmcmIHNvdXJjZUlELCBTdHJpbmcqIHNjcmlwdFNvdXJjZSkKIHsKLSAgICBpZiAo
IW1fZnJvbnRlbmQpCi0gICAgICAgIHJldHVybjsKLSAgICBTdHJpbmcgc2NyaXB0U291cmNlID0g
bV9zY3JpcHRJRFRvQ29udGVudC5nZXQoc291cmNlSUQpOwotICAgIG1fcmVtb3RlRnJvbnRlbmQt
PmRpZEdldFNjcmlwdFNvdXJjZShjYWxsSWQsIHNjcmlwdFNvdXJjZSk7CisgICAgKnNjcmlwdFNv
dXJjZSA9IG1fc2NyaXB0SURUb0NvbnRlbnQuZ2V0KHNvdXJjZUlEKTsKIH0KIAogdm9pZCBJbnNw
ZWN0b3JDb250cm9sbGVyOjpyZXN1bWUoKQpAQCAtMTc2NywyNyArMTczOCwyNSBAQCBQYXNzUmVm
UHRyPEluc3BlY3RvclZhbHVlPiBJbnNwZWN0b3JDb250cm9sbGVyOjpjdXJyZW50Q2FsbEZyYW1l
cygpCiAgICAgcmV0dXJuIGluamVjdGVkU2NyaXB0LmNhbGxGcmFtZXMoKTsKIH0KIAotdm9pZCBJ
bnNwZWN0b3JDb250cm9sbGVyOjpzZXRCcmVha3BvaW50KGxvbmcgY2FsbElkLCBjb25zdCBTdHJp
bmcmIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBib29sIGVuYWJsZWQsIGNvbnN0IFN0
cmluZyYgY29uZGl0aW9uKQordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRCcmVha3BvaW50
KGxvbmcsIGNvbnN0IFN0cmluZyYgc291cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIGJvb2wg
ZW5hYmxlZCwgY29uc3QgU3RyaW5nJiBjb25kaXRpb24sIGJvb2wqIHN1Y2Nlc3MsIHVuc2lnbmVk
IGludCogYWN0dWFsTGluZU51bWJlcikKIHsKICAgICBTY3JpcHRCcmVha3BvaW50IGJyZWFrcG9p
bnQoZW5hYmxlZCwgY29uZGl0aW9uKTsKLSAgICB1bnNpZ25lZCBhY3R1YWxMaW5lTnVtYmVyID0g
MDsKLSAgICBib29sIHN1Y2Nlc3MgPSBTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkuc2V0QnJl
YWtwb2ludChzb3VyY2VJRCwgYnJlYWtwb2ludCwgbGluZU51bWJlciwgJmFjdHVhbExpbmVOdW1i
ZXIpOwotICAgIG1fZnJvbnRlbmQtPmRpZFNldEJyZWFrcG9pbnQoY2FsbElkLCBzdWNjZXNzLCBh
Y3R1YWxMaW5lTnVtYmVyKTsKLSAgICBpZiAoIXN1Y2Nlc3MpCisgICAgKnN1Y2Nlc3MgPSBTY3Jp
cHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkuc2V0QnJlYWtwb2ludChzb3VyY2VJRCwgYnJlYWtwb2lu
dCwgbGluZU51bWJlciwgYWN0dWFsTGluZU51bWJlcik7CisgICAgaWYgKCEqc3VjY2VzcykKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgU3RyaW5nIHVybCA9IG1fc291cmNlSURUb1VSTC5nZXQoc291
cmNlSUQpOwogICAgIGlmICh1cmwuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBT
dHJpbmcgYnJlYWtwb2ludElkID0gZm9ybWF0QnJlYWtwb2ludElkKHNvdXJjZUlELCBhY3R1YWxM
aW5lTnVtYmVyKTsKLSAgICBtX2JyZWFrcG9pbnRzTWFwcGluZy5zZXQoYnJlYWtwb2ludElkLCBh
Y3R1YWxMaW5lTnVtYmVyKTsKKyAgICBTdHJpbmcgYnJlYWtwb2ludElkID0gZm9ybWF0QnJlYWtw
b2ludElkKHNvdXJjZUlELCAqYWN0dWFsTGluZU51bWJlcik7CisgICAgbV9icmVha3BvaW50c01h
cHBpbmcuc2V0KGJyZWFrcG9pbnRJZCwgKmFjdHVhbExpbmVOdW1iZXIpOwogCiAgICAgU3RyaW5n
IGtleSA9IG1kNUJhc2UxNih1cmwpOwogICAgIEhhc2hNYXA8U3RyaW5nLCBTb3VyY2VCcmVha3Bv
aW50cz46Oml0ZXJhdG9yIGl0ID0gbV9zdGlja3lCcmVha3BvaW50cy5maW5kKGtleSk7CiAgICAg
aWYgKGl0ID09IG1fc3RpY2t5QnJlYWtwb2ludHMuZW5kKCkpCiAgICAgICAgIGl0ID0gbV9zdGlj
a3lCcmVha3BvaW50cy5zZXQoa2V5LCBTb3VyY2VCcmVha3BvaW50cygpKS5maXJzdDsKLSAgICBp
dC0+c2Vjb25kLnNldChhY3R1YWxMaW5lTnVtYmVyLCBicmVha3BvaW50KTsKKyAgICBpdC0+c2Vj
b25kLnNldCgqYWN0dWFsTGluZU51bWJlciwgYnJlYWtwb2ludCk7CiAgICAgc2F2ZUJyZWFrcG9p
bnRzKCk7CiB9CiAKQEAgLTIxNjEsMTQgKzIxMzAsMTAgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9s
bGVyOjpyZW1vdmVBbGxTY3JpcHRzVG9FdmFsdWF0ZU9uTG9hZCgpCiAgICAgbV9zY3JpcHRzVG9F
dmFsdWF0ZU9uTG9hZC5jbGVhcigpOwogfQogCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6Omdl
dFJlc291cmNlQ29udGVudChsb25nIGNhbGxJZCwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyKQor
dm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpnZXRSZXNvdXJjZUNvbnRlbnQobG9uZywgdW5zaWdu
ZWQgbG9uZyBpZGVudGlmaWVyLCBTdHJpbmcqIGNvbnRlbnQpCiB7Ci0gICAgaWYgKCFtX3JlbW90
ZUZyb250ZW5kKQotICAgICAgICByZXR1cm47Ci0KICAgICBSZWZQdHI8SW5zcGVjdG9yUmVzb3Vy
Y2U+IHJlc291cmNlID0gbV9yZXNvdXJjZXMuZ2V0KGlkZW50aWZpZXIpOwotICAgIFN0cmluZyBj
b250ZW50ID0gcmVzb3VyY2UgPyByZXNvdXJjZS0+c291cmNlU3RyaW5nKCkgOiBTdHJpbmcoKTsK
LSAgICBtX3JlbW90ZUZyb250ZW5kLT5kaWRHZXRSZXNvdXJjZUNvbnRlbnQoY2FsbElkLCBjb250
ZW50KTsKKyAgICAqY29udGVudCA9IHJlc291cmNlID8gcmVzb3VyY2UtPnNvdXJjZVN0cmluZygp
IDogU3RyaW5nKCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6cmVsb2FkUGFnZSgp
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmggYi9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKaW5kZXggMDdhNDBlYi4uNDE3
NmUzNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5o
CisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaApAQCAtMTIwLDYg
KzEyMCw3IEBAIHB1YmxpYzoKIAogICAgIEluc3BlY3RvckJhY2tlbmQqIGluc3BlY3RvckJhY2tl
bmQoKSB7IHJldHVybiBtX2luc3BlY3RvckJhY2tlbmQuZ2V0KCk7IH0KICAgICBJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlciogaW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIoKSB7IHJldHVybiBt
X2luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9CisgICAgSW5zcGVjdG9yQ2xpZW50
KiBpbnNwZWN0b3JDbGllbnQoKSB7IHJldHVybiBtX2NsaWVudDsgfQogICAgIEluamVjdGVkU2Ny
aXB0SG9zdCogaW5qZWN0ZWRTY3JpcHRIb3N0KCkgeyByZXR1cm4gbV9pbmplY3RlZFNjcmlwdEhv
c3QuZ2V0KCk7IH0KIAogICAgIHZvaWQgaW5zcGVjdGVkUGFnZURlc3Ryb3llZCgpOwpAQCAtMTkw
LDcgKzE5MSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHN0b3BUaW1lbGluZVByb2ZpbGVyKCk7CiAg
ICAgSW5zcGVjdG9yVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCgpIHsgcmV0dXJuIG1fdGlt
ZWxpbmVBZ2VudC5nZXQoKTsgfQogCi0gICAgdm9pZCBnZXRDb29raWVzKGxvbmcgY2FsbElkKTsK
KyAgICB2b2lkIGdldENvb2tpZXMobG9uZyBjYWxsSWQsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4q
IGNvb2tpZXMsIFdlYkNvcmU6OlN0cmluZyogY29va2llc1N0cmluZyk7CiAgICAgdm9pZCBkZWxl
dGVDb29raWUoY29uc3QgU3RyaW5nJiBjb29raWVOYW1lLCBjb25zdCBTdHJpbmcmIGRvbWFpbik7
CiAKICNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQpAQCAtMjE3LDkgKzIxOCw5
IEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCiAgICAgdm9pZCBkaWRVc2VET01T
dG9yYWdlKFN0b3JhZ2VBcmVhKiBzdG9yYWdlQXJlYSwgYm9vbCBpc0xvY2FsU3RvcmFnZSwgRnJh
bWUqIGZyYW1lKTsKICAgICB2b2lkIHNlbGVjdERPTVN0b3JhZ2UoU3RvcmFnZSogc3RvcmFnZSk7
Ci0gICAgdm9pZCBnZXRET01TdG9yYWdlRW50cmllcyhsb25nIGNhbGxJZCwgbG9uZyBzdG9yYWdl
SWQpOwotICAgIHZvaWQgc2V0RE9NU3RvcmFnZUl0ZW0obG9uZyBjYWxsSWQsIGxvbmcgc3RvcmFn
ZUlkLCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0gICAgdm9pZCBy
ZW1vdmVET01TdG9yYWdlSXRlbShsb25nIGNhbGxJZCwgbG9uZyBzdG9yYWdlSWQsIGNvbnN0IFN0
cmluZyYga2V5KTsKKyAgICB2b2lkIGdldERPTVN0b3JhZ2VFbnRyaWVzKGxvbmcgY2FsbElkLCBs
b25nIHN0b3JhZ2VJZCwgUmVmUHRyPEluc3BlY3RvckFycmF5PiogZW50cmllcyk7CisgICAgdm9p
ZCBzZXRET01TdG9yYWdlSXRlbShsb25nIGNhbGxJZCwgbG9uZyBzdG9yYWdlSWQsIGNvbnN0IFN0
cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sKiBzdWNjZXNzKTsKKyAgICB2b2lk
IHJlbW92ZURPTVN0b3JhZ2VJdGVtKGxvbmcgY2FsbElkLCBsb25nIHN0b3JhZ2VJZCwgY29uc3Qg
U3RyaW5nJiBrZXksIGJvb2wqIHN1Y2Nlc3MpOwogI2VuZGlmCiAKICAgICBjb25zdCBSZXNvdXJj
ZXNNYXAmIHJlc291cmNlcygpIGNvbnN0IHsgcmV0dXJuIG1fcmVzb3VyY2VzOyB9CkBAIC0yNjIs
OCArMjYzLDggQEAgcHVibGljOgogICAgIHZvaWQgZGlzYWJsZURlYnVnZ2VyKGJvb2wgYWx3YXlz
ID0gZmFsc2UpOwogICAgIGJvb2wgZGVidWdnZXJFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9k
ZWJ1Z2dlckVuYWJsZWQ7IH0KIAotICAgIHZvaWQgZWRpdFNjcmlwdFNvdXJjZShsb25nIGNhbGxJ
ZCwgY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgY29uc3QgU3RyaW5nJiBuZXdDb250ZW50KTsKLSAg
ICB2b2lkIGdldFNjcmlwdFNvdXJjZShsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBzb3VyY2VJ
RCk7CisgICAgdm9pZCBlZGl0U2NyaXB0U291cmNlKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcm
IHNvdXJjZUlELCBjb25zdCBTdHJpbmcmIG5ld0NvbnRlbnQsIGJvb2wqIHN1Y2Nlc3MsIFN0cmlu
ZyogcmVzdWx0LCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiBuZXdDYWxsRnJhbWVzKTsKKyAgICB2
b2lkIGdldFNjcmlwdFNvdXJjZShsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwg
U3RyaW5nKiBzY3JpcHRTb3VyY2UpOwogCiAgICAgdm9pZCByZXN1bWUoKTsKICAgICB2b2lkIHNl
dFBhdXNlT25FeGNlcHRpb25zU3RhdGUobG9uZyBwYXVzZVN0YXRlKTsKQEAgLTMwNyw3ICszMDgs
NyBAQCBwcml2YXRlOgogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQogICAgIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGN1cnJlbnRDYWxsRnJhbWVzKCk7CiAKLSAgICB2b2lkIHNl
dEJyZWFrcG9pbnQobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgc291cmNlSUQsIHVuc2lnbmVk
IGxpbmVOdW1iZXIsIGJvb2wgZW5hYmxlZCwgY29uc3QgU3RyaW5nJiBjb25kaXRpb24pOworICAg
IHZvaWQgc2V0QnJlYWtwb2ludChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwg
dW5zaWduZWQgbGluZU51bWJlciwgYm9vbCBlbmFibGVkLCBjb25zdCBTdHJpbmcmIGNvbmRpdGlv
biwgYm9vbCogc3VjY2VzcywgdW5zaWduZWQgaW50KiBhY3R1YWxMaW5lTnVtYmVyKTsKICAgICB2
b2lkIHJlbW92ZUJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgdW5zaWduZWQgbGlu
ZU51bWJlcik7CiAKICAgICB0eXBlZGVmIEhhc2hNYXA8dW5zaWduZWQgaW50LCBSZWZQdHI8U2Ny
aXB0UHJvZmlsZT4gPiBQcm9maWxlc01hcDsKQEAgLTMxNSw4ICszMTYsOCBAQCBwcml2YXRlOgog
ICAgIHZvaWQgc3RhcnRVc2VySW5pdGlhdGVkUHJvZmlsaW5nU29vbigpOwogICAgIHZvaWQgdG9n
Z2xlUmVjb3JkQnV0dG9uKGJvb2wpOwogICAgIHZvaWQgZW5hYmxlRGVidWdnZXJGcm9tRnJvbnRl
bmQoYm9vbCBhbHdheXMpOwotICAgIHZvaWQgZ2V0UHJvZmlsZUhlYWRlcnMobG9uZyBjYWxsSWQp
OwotICAgIHZvaWQgZ2V0UHJvZmlsZShsb25nIGNhbGxJZCwgdW5zaWduZWQgdWlkKTsKKyAgICB2
b2lkIGdldFByb2ZpbGVIZWFkZXJzKGxvbmcgY2FsbElkLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
KiBoZWFkZXJzKTsKKyAgICB2b2lkIGdldFByb2ZpbGUobG9uZyBjYWxsSWQsIHVuc2lnbmVkIHVp
ZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIHByb2ZpbGVPYmplY3QpOwogICAgIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVQcm9maWxlSGVhZGVyKGNvbnN0IFNjcmlwdFByb2Zp
bGUmIHByb2ZpbGUpOwogI2VuZGlmCiAjaWYgRU5BQkxFKERBVEFCQVNFKQpAQCAtMzM3LDcgKzMz
OCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBhZGRSZXNvdXJjZShJbnNwZWN0b3JSZXNvdXJjZSop
OwogICAgIHZvaWQgcmVtb3ZlUmVzb3VyY2UoSW5zcGVjdG9yUmVzb3VyY2UqKTsKICAgICBJbnNw
ZWN0b3JSZXNvdXJjZSogZ2V0VHJhY2tlZFJlc291cmNlKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmll
cik7Ci0gICAgdm9pZCBnZXRSZXNvdXJjZUNvbnRlbnQobG9uZyBjYWxsSWQsIHVuc2lnbmVkIGxv
bmcgaWRlbnRpZmllcik7CisgICAgdm9pZCBnZXRSZXNvdXJjZUNvbnRlbnQobG9uZyBjYWxsSWQs
IHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgU3RyaW5nKiBjb250ZW50KTsKIAogICAgIHZvaWQg
cHJ1bmVSZXNvdXJjZXMoUmVzb3VyY2VzTWFwKiwgRG9jdW1lbnRMb2FkZXIqIGxvYWRlclRvS2Vl
cCA9IDApOwogICAgIHZvaWQgcmVtb3ZlQWxsUmVzb3VyY2VzKFJlc291cmNlc01hcCogbWFwKSB7
IHBydW5lUmVzb3VyY2VzKG1hcCk7IH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckRPTUFnZW50LmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50
LmNwcAppbmRleCAwNzU5NDRhLi4wYzE3YzAwIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JET01BZ2VudC5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
RE9NQWdlbnQuY3BwCkBAIC00MzIsNzIgKzQzMiw2MCBAQCBsb25nIEluc3BlY3RvckRPTUFnZW50
OjpwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKE5vZGUqIG5vZGVUb1B1c2gpCiAgICAgcmV0dXJuIG1h
cC0+Z2V0KG5vZGVUb1B1c2gpOwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRBdHRy
aWJ1dGUobG9uZyBjYWxsSWQsIGxvbmcgZWxlbWVudElkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNv
bnN0IFN0cmluZyYgdmFsdWUpCit2b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRBdHRyaWJ1dGUo
bG9uZywgbG9uZyBlbGVtZW50SWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2
YWx1ZSwgYm9vbCogc3VjY2VzcykKIHsKKyAgICAqc3VjY2VzcyA9IGZhbHNlOwogICAgIE5vZGUq
IG5vZGUgPSBub2RlRm9ySWQoZWxlbWVudElkKTsKICAgICBpZiAobm9kZSAmJiAobm9kZS0+bm9k
ZVR5cGUoKSA9PSBOb2RlOjpFTEVNRU5UX05PREUpKSB7CiAgICAgICAgIEVsZW1lbnQqIGVsZW1l
bnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSk7CiAgICAgICAgIEV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOwogICAgICAgICBlbGVtZW50LT5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUsIGVjKTsK
LSAgICAgICAgbV9mcm9udGVuZC0+ZGlkQXBwbHlEb21DaGFuZ2UoY2FsbElkLCBlYyA9PSAwKTsK
LSAgICB9IGVsc2UgewotICAgICAgICBtX2Zyb250ZW5kLT5kaWRBcHBseURvbUNoYW5nZShjYWxs
SWQsIGZhbHNlKTsKKyAgICAgICAgKnN1Y2Nlc3MgPSAhZWM7CiAgICAgfQogfQogCi12b2lkIElu
c3BlY3RvckRPTUFnZW50OjpyZW1vdmVBdHRyaWJ1dGUobG9uZyBjYWxsSWQsIGxvbmcgZWxlbWVu
dElkLCBjb25zdCBTdHJpbmcmIG5hbWUpCit2b2lkIEluc3BlY3RvckRPTUFnZW50OjpyZW1vdmVB
dHRyaWJ1dGUobG9uZywgbG9uZyBlbGVtZW50SWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCog
c3VjY2VzcykKIHsKKyAgICAqc3VjY2VzcyA9IGZhbHNlOwogICAgIE5vZGUqIG5vZGUgPSBub2Rl
Rm9ySWQoZWxlbWVudElkKTsKICAgICBpZiAobm9kZSAmJiAobm9kZS0+bm9kZVR5cGUoKSA9PSBO
b2RlOjpFTEVNRU5UX05PREUpKSB7CiAgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNf
Y2FzdDxFbGVtZW50Kj4obm9kZSk7CiAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAg
ICAgICBlbGVtZW50LT5yZW1vdmVBdHRyaWJ1dGUobmFtZSwgZWMpOwotICAgICAgICBtX2Zyb250
ZW5kLT5kaWRBcHBseURvbUNoYW5nZShjYWxsSWQsIGVjID09IDApOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIG1fZnJvbnRlbmQtPmRpZEFwcGx5RG9tQ2hhbmdlKGNhbGxJZCwgZmFsc2UpOworICAg
ICAgICAqc3VjY2VzcyA9ICFlYzsKICAgICB9CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6
OnJlbW92ZU5vZGUobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkKQordm9pZCBJbnNwZWN0b3JET01B
Z2VudDo6cmVtb3ZlTm9kZShsb25nLCBsb25nIG5vZGVJZCwgbG9uZyogb3V0Tm9kZUlkKQogewor
ICAgICpvdXROb2RlSWQgPSAwOwogICAgIE5vZGUqIG5vZGUgPSBub2RlRm9ySWQobm9kZUlkKTsK
LSAgICBpZiAoIW5vZGUpIHsKLSAgICAgICAgbV9mcm9udGVuZC0+ZGlkUmVtb3ZlTm9kZShjYWxs
SWQsIDApOworICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAogICAgIE5v
ZGUqIHBhcmVudE5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCk7Ci0gICAgaWYgKCFwYXJlbnROb2Rl
KSB7Ci0gICAgICAgIG1fZnJvbnRlbmQtPmRpZFJlbW92ZU5vZGUoY2FsbElkLCAwKTsKKyAgICBp
ZiAoIXBhcmVudE5vZGUpCiAgICAgICAgIHJldHVybjsKLSAgICB9CiAKICAgICBFeGNlcHRpb25D
b2RlIGVjID0gMDsKICAgICBwYXJlbnROb2RlLT5yZW1vdmVDaGlsZChub2RlLCBlYyk7Ci0gICAg
aWYgKGVjKSB7Ci0gICAgICAgIG1fZnJvbnRlbmQtPmRpZFJlbW92ZU5vZGUoY2FsbElkLCAwKTsK
KyAgICBpZiAoZWMpCiAgICAgICAgIHJldHVybjsKLSAgICB9CiAKLSAgICBtX2Zyb250ZW5kLT5k
aWRSZW1vdmVOb2RlKGNhbGxJZCwgbm9kZUlkKTsKKyAgICAqb3V0Tm9kZUlkID0gbm9kZUlkOwog
fQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpjaGFuZ2VUYWdOYW1lKGxvbmcgY2FsbElkLCBs
b25nIG5vZGVJZCwgY29uc3QgU3RyaW5nJiB0YWdOYW1lKQordm9pZCBJbnNwZWN0b3JET01BZ2Vu
dDo6Y2hhbmdlVGFnTmFtZShsb25nLCBsb25nIG5vZGVJZCwgY29uc3QgU3RyaW5nJiB0YWdOYW1l
LCBsb25nKiBuZXdJZCkKIHsKKyAgICAqbmV3SWQgPSAwOwogICAgIE5vZGUqIG9sZE5vZGUgPSBu
b2RlRm9ySWQobm9kZUlkKTsKLSAgICBpZiAoIW9sZE5vZGUgfHwgIW9sZE5vZGUtPmlzRWxlbWVu
dE5vZGUoKSkgewotICAgICAgICBtX2Zyb250ZW5kLT5kaWRDaGFuZ2VUYWdOYW1lKGNhbGxJZCwg
MCk7CisgICAgaWYgKCFvbGROb2RlIHx8ICFvbGROb2RlLT5pc0VsZW1lbnROb2RlKCkpCiAgICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBib29sIGNoaWxkcmVuUmVxdWVzdGVkID0gbV9jaGls
ZHJlblJlcXVlc3RlZC5jb250YWlucyhub2RlSWQpOwogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9
IDA7CiAgICAgUmVmUHRyPEVsZW1lbnQ+IG5ld0VsZW0gPSBvbGROb2RlLT5kb2N1bWVudCgpLT5j
cmVhdGVFbGVtZW50KHRhZ05hbWUsIGVjKTsKLSAgICBpZiAoZWMpIHsKLSAgICAgICAgbV9mcm9u
dGVuZC0+ZGlkQ2hhbmdlVGFnTmFtZShjYWxsSWQsIDApOworICAgIGlmIChlYykKICAgICAgICAg
cmV0dXJuOwotICAgIH0KIAogICAgIC8vIENvcHkgb3ZlciB0aGUgb3JpZ2luYWwgbm9kZSdzIGF0
dHJpYnV0ZXMuCiAgICAgRWxlbWVudCogb2xkRWxlbSA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihv
bGROb2RlKTsKQEAgLTUxNSwzNiArNTAzLDI5IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmNo
YW5nZVRhZ05hbWUobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkLCBjb25zdCBTdHJpbmcmIHRhCiAg
ICAgcGFyZW50LT5pbnNlcnRCZWZvcmUobmV3RWxlbSwgb2xkTm9kZS0+bmV4dFNpYmxpbmcoKSwg
ZWMpOwogICAgIHBhcmVudC0+cmVtb3ZlQ2hpbGQob2xkTm9kZSwgZWMpOwogCi0gICAgaWYgKGVj
KSB7Ci0gICAgICAgIG1fZnJvbnRlbmQtPmRpZENoYW5nZVRhZ05hbWUoY2FsbElkLCAwKTsKKyAg
ICBpZiAoZWMpCiAgICAgICAgIHJldHVybjsKLSAgICB9CiAKLSAgICBsb25nIG5ld0lkID0gcHVz
aE5vZGVQYXRoVG9Gcm9udGVuZChuZXdFbGVtLmdldCgpKTsKLSAgICBpZiAoY2hpbGRyZW5SZXF1
ZXN0ZWQpCi0gICAgICAgIHB1c2hDaGlsZE5vZGVzVG9Gcm9udGVuZChuZXdJZCk7Ci0gICAgbV9m
cm9udGVuZC0+ZGlkQ2hhbmdlVGFnTmFtZShjYWxsSWQsIG5ld0lkKTsKKyAgICAqbmV3SWQgPSBw
dXNoTm9kZVBhdGhUb0Zyb250ZW5kKG5ld0VsZW0uZ2V0KCkpOworICAgIGlmIChtX2NoaWxkcmVu
UmVxdWVzdGVkLmNvbnRhaW5zKG5vZGVJZCkpCisgICAgICAgIHB1c2hDaGlsZE5vZGVzVG9Gcm9u
dGVuZCgqbmV3SWQpOwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRPdXRlckhUTUwo
bG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkKQordm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0T3V0
ZXJIVE1MKGxvbmcsIGxvbmcgbm9kZUlkLCBXZWJDb3JlOjpTdHJpbmcqIG91dGVySFRNTCkKIHsK
ICAgICBOb2RlKiBub2RlID0gbm9kZUZvcklkKG5vZGVJZCk7Ci0gICAgaWYgKCFub2RlIHx8ICFu
b2RlLT5pc0hUTUxFbGVtZW50KCkpIHsKLSAgICAgICAgbV9mcm9udGVuZC0+ZGlkR2V0T3V0ZXJI
VE1MKGNhbGxJZCwgIiIpOworICAgIGlmICghbm9kZSB8fCAhbm9kZS0+aXNIVE1MRWxlbWVudCgp
KQogICAgICAgICByZXR1cm47Ci0gICAgfQogCi0gICAgSFRNTEVsZW1lbnQqIGh0bWxFbGVtZW50
ID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihub2RlKTsKLSAgICBtX2Zyb250ZW5kLT5kaWRH
ZXRPdXRlckhUTUwoY2FsbElkLCBodG1sRWxlbWVudC0+b3V0ZXJIVE1MKCkpOworICAgICpvdXRl
ckhUTUwgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KG5vZGUpLT5vdXRlckhUTUwoKTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0T3V0ZXJIVE1MKGxvbmcgY2FsbElkLCBsb25n
IG5vZGVJZCwgY29uc3QgU3RyaW5nJiBvdXRlckhUTUwpCit2b2lkIEluc3BlY3RvckRPTUFnZW50
OjpzZXRPdXRlckhUTUwobG9uZywgbG9uZyBub2RlSWQsIGNvbnN0IFN0cmluZyYgb3V0ZXJIVE1M
LCBsb25nKiBuZXdJZCkKIHsKKyAgICAqbmV3SWQgPSAwOwogICAgIE5vZGUqIG5vZGUgPSBub2Rl
Rm9ySWQobm9kZUlkKTsKLSAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPmlzSFRNTEVsZW1lbnQoKSkg
ewotICAgICAgICBtX2Zyb250ZW5kLT5kaWRTZXRPdXRlckhUTUwoY2FsbElkLCAwKTsKKyAgICBp
ZiAoIW5vZGUgfHwgIW5vZGUtPmlzSFRNTEVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuOwotICAg
IH0KIAogICAgIGJvb2wgY2hpbGRyZW5SZXF1ZXN0ZWQgPSBtX2NoaWxkcmVuUmVxdWVzdGVkLmNv
bnRhaW5zKG5vZGVJZCk7CiAgICAgTm9kZSogcHJldmlvdXNTaWJsaW5nID0gbm9kZS0+cHJldmlv
dXNTaWJsaW5nKCk7CkBAIC01NTQsNDEgKzUzNSwzNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50
OjpzZXRPdXRlckhUTUwobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkLCBjb25zdCBTdHJpbmcmIG91
dAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIGh0bWxFbGVtZW50LT5zZXRPdXRlckhU
TUwob3V0ZXJIVE1MLCBlYyk7CiAgICAgaWYgKGVjKQotICAgICAgICBtX2Zyb250ZW5kLT5kaWRT
ZXRPdXRlckhUTUwoY2FsbElkLCAwKTsKKyAgICAgICAgcmV0dXJuOwogCiAgICAgTm9kZSogbmV3
Tm9kZSA9IHByZXZpb3VzU2libGluZyA/IHByZXZpb3VzU2libGluZy0+bmV4dFNpYmxpbmcoKSA6
IHBhcmVudE5vZGUtPmZpcnN0Q2hpbGQoKTsKIAotICAgIGxvbmcgbmV3SWQgPSBwdXNoTm9kZVBh
dGhUb0Zyb250ZW5kKG5ld05vZGUpOworICAgICpuZXdJZCA9IHB1c2hOb2RlUGF0aFRvRnJvbnRl
bmQobmV3Tm9kZSk7CiAgICAgaWYgKGNoaWxkcmVuUmVxdWVzdGVkKQotICAgICAgICBwdXNoQ2hp
bGROb2Rlc1RvRnJvbnRlbmQobmV3SWQpOwotCi0gICAgbV9mcm9udGVuZC0+ZGlkU2V0T3V0ZXJI
VE1MKGNhbGxJZCwgbmV3SWQpOworICAgICAgICBwdXNoQ2hpbGROb2Rlc1RvRnJvbnRlbmQoKm5l
d0lkKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0VGV4dE5vZGVWYWx1ZShsb25n
IGNhbGxJZCwgbG9uZyBub2RlSWQsIGNvbnN0IFN0cmluZyYgdmFsdWUpCit2b2lkIEluc3BlY3Rv
ckRPTUFnZW50OjpzZXRUZXh0Tm9kZVZhbHVlKGxvbmcsIGxvbmcgbm9kZUlkLCBjb25zdCBTdHJp
bmcmIHZhbHVlLCBib29sKiBzdWNjZXNzKQogeworICAgICpzdWNjZXNzID0gZmFsc2U7CiAgICAg
Tm9kZSogbm9kZSA9IG5vZGVGb3JJZChub2RlSWQpOwogICAgIGlmIChub2RlICYmIChub2RlLT5u
b2RlVHlwZSgpID09IE5vZGU6OlRFWFRfTk9ERSkpIHsKICAgICAgICAgVGV4dCogdGV4dF9ub2Rl
ID0gc3RhdGljX2Nhc3Q8VGV4dCo+KG5vZGUpOwogICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0g
MDsKICAgICAgICAgdGV4dF9ub2RlLT5yZXBsYWNlV2hvbGVUZXh0KHZhbHVlLCBlYyk7Ci0gICAg
ICAgIG1fZnJvbnRlbmQtPmRpZEFwcGx5RG9tQ2hhbmdlKGNhbGxJZCwgZWMgPT0gMCk7Ci0gICAg
fSBlbHNlIHsKLSAgICAgICAgbV9mcm9udGVuZC0+ZGlkQXBwbHlEb21DaGFuZ2UoY2FsbElkLCBm
YWxzZSk7CisgICAgICAgICpzdWNjZXNzID0gIWVjOwogICAgIH0KIH0KIAotdm9pZCBJbnNwZWN0
b3JET01BZ2VudDo6Z2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2RlKGxvbmcgY2FsbElkLCBsb25nIG5v
ZGVJZCkKK3ZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldEV2ZW50TGlzdGVuZXJzRm9yTm9kZShs
b25nLCBsb25nIG5vZGVJZCwgbG9uZyogb3V0Tm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
KiBsaXN0ZW5lcnNBcnJheSkKIHsKICAgICBOb2RlKiBub2RlID0gbm9kZUZvcklkKG5vZGVJZCk7
Ci0gICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBsaXN0ZW5lcnNBcnJheSA9IEluc3BlY3RvckFy
cmF5OjpjcmVhdGUoKTsKKyAgICAqbGlzdGVuZXJzQXJyYXkgPSBJbnNwZWN0b3JBcnJheTo6Y3Jl
YXRlKCk7CisgICAgKm91dE5vZGVJZCA9IG5vZGVJZDsKICAgICBFdmVudFRhcmdldERhdGEqIGQ7
CiAKICAgICAvLyBRdWljayBicmVhayBpZiBhIG51bGwgbm9kZSBvciBubyBsaXN0ZW5lcnMgYXQg
YWxsCi0gICAgaWYgKCFub2RlIHx8ICEoZCA9IG5vZGUtPmV2ZW50VGFyZ2V0RGF0YSgpKSkgewot
ICAgICAgICBtX2Zyb250ZW5kLT5kaWRHZXRFdmVudExpc3RlbmVyc0Zvck5vZGUoY2FsbElkLCBu
b2RlSWQsIGxpc3RlbmVyc0FycmF5LnJlbGVhc2UoKSk7CisgICAgaWYgKCFub2RlIHx8ICEoZCA9
IG5vZGUtPmV2ZW50VGFyZ2V0RGF0YSgpKSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAogICAg
IC8vIEdldCB0aGUgbGlzdCBvZiBldmVudCB0eXBlcyB0aGlzIE5vZGUgaXMgY29uY2VybmVkIHdp
dGgKICAgICBWZWN0b3I8QXRvbWljU3RyaW5nPiBldmVudFR5cGVzOwpAQCAtNTk5LDEwICs1NzYs
OCBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRFdmVudExpc3RlbmVyc0Zvck5vZGUobG9u
ZyBjYWxsSWQsIGxvbmcgbm9kZUlkKQogCiAgICAgLy8gUXVpY2sgYnJlYWsgaWYgbm8gdXNlZnVs
IGxpc3RlbmVycwogICAgIHNpemVfdCBldmVudFR5cGVzTGVuZ3RoID0gZXZlbnRUeXBlcy5zaXpl
KCk7Ci0gICAgaWYgKGV2ZW50VHlwZXNMZW5ndGggPT0gMCkgewotICAgICAgICBtX2Zyb250ZW5k
LT5kaWRHZXRFdmVudExpc3RlbmVyc0Zvck5vZGUoY2FsbElkLCBub2RlSWQsIGxpc3RlbmVyc0Fy
cmF5LnJlbGVhc2UoKSk7CisgICAgaWYgKCFldmVudFR5cGVzTGVuZ3RoKQogICAgICAgICByZXR1
cm47Ci0gICAgfQogCiAgICAgLy8gVGhlIE5vZGUncyBFdmVudCBBbmNlc3RvcnMgKG5vdCBpbmNs
dWRpbmcgc2VsZikKICAgICBWZWN0b3I8UmVmUHRyPENvbnRhaW5lck5vZGU+ID4gYW5jZXN0b3Jz
OwpAQCAtNjMzLDcgKzYwOCw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldEV2ZW50TGlz
dGVuZXJzRm9yTm9kZShsb25nIGNhbGxJZCwgbG9uZyBub2RlSWQpCiAgICAgICAgIGZvciAoc2l6
ZV90IGogPSAwOyBqIDwgdmVjdG9yLnNpemUoKTsgKytqKSB7CiAgICAgICAgICAgICBjb25zdCBS
ZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciYgbGlzdGVuZXIgPSB2ZWN0b3Jbal07CiAgICAgICAgICAg
ICBpZiAobGlzdGVuZXIudXNlQ2FwdHVyZSkKLSAgICAgICAgICAgICAgICBsaXN0ZW5lcnNBcnJh
eS0+cHVzaChidWlsZE9iamVjdEZvckV2ZW50TGlzdGVuZXIobGlzdGVuZXIsIGluZm8uZXZlbnRU
eXBlLCBpbmZvLm5vZGUpKTsKKyAgICAgICAgICAgICAgICAoKmxpc3RlbmVyc0FycmF5KS0+cHVz
aChidWlsZE9iamVjdEZvckV2ZW50TGlzdGVuZXIobGlzdGVuZXIsIGluZm8uZXZlbnRUeXBlLCBp
bmZvLm5vZGUpKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNjQ0LDExICs2MTksOSBAQCB2b2lk
IEluc3BlY3RvckRPTUFnZW50OjpnZXRFdmVudExpc3RlbmVyc0Zvck5vZGUobG9uZyBjYWxsSWQs
IGxvbmcgbm9kZUlkKQogICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IHZlY3Rvci5zaXpl
KCk7ICsraikgewogICAgICAgICAgICAgY29uc3QgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXImIGxp
c3RlbmVyID0gdmVjdG9yW2pdOwogICAgICAgICAgICAgaWYgKCFsaXN0ZW5lci51c2VDYXB0dXJl
KQotICAgICAgICAgICAgICAgIGxpc3RlbmVyc0FycmF5LT5wdXNoKGJ1aWxkT2JqZWN0Rm9yRXZl
bnRMaXN0ZW5lcihsaXN0ZW5lciwgaW5mby5ldmVudFR5cGUsIGluZm8ubm9kZSkpOworICAgICAg
ICAgICAgICAgICgqbGlzdGVuZXJzQXJyYXkpLT5wdXNoKGJ1aWxkT2JqZWN0Rm9yRXZlbnRMaXN0
ZW5lcihsaXN0ZW5lciwgaW5mby5ldmVudFR5cGUsIGluZm8ubm9kZSkpOwogICAgICAgICB9CiAg
ICAgfQotCi0gICAgbV9mcm9udGVuZC0+ZGlkR2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2RlKGNhbGxJ
ZCwgbm9kZUlkLCBsaXN0ZW5lcnNBcnJheS5yZWxlYXNlKCkpOwogfQogCiB2b2lkIEluc3BlY3Rv
ckRPTUFnZW50OjphZGRJbnNwZWN0ZWROb2RlKGxvbmcgbm9kZUlkKQpAQCAtMTAwNiwxOSArOTc5
LDE2IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmRpZE1vZGlmeURPTUF0dHIoRWxlbWVudCog
ZWxlbWVudCkKICAgICBtX2Zyb250ZW5kLT5hdHRyaWJ1dGVzVXBkYXRlZChpZCwgYnVpbGRBcnJh
eUZvckVsZW1lbnRBdHRyaWJ1dGVzKGVsZW1lbnQpKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01B
Z2VudDo6Z2V0U3R5bGVzKGxvbmcgY2FsbElkLCBsb25nIG5vZGVJZCwgYm9vbCBhdXRob3JPbmx5
KQordm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0U3R5bGVzKGxvbmcsIGxvbmcgbm9kZUlkLCBi
b29sIGF1dGhvck9ubHksIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHN0eWxlcykKIHsKKyAgICAq
c3R5bGVzID0gSW5zcGVjdG9yVmFsdWU6Om51bGwoKTsKICAgICBOb2RlKiBub2RlID0gbm9kZUZv
cklkKG5vZGVJZCk7Ci0gICAgaWYgKCFub2RlIHx8IG5vZGUtPm5vZGVUeXBlKCkgIT0gTm9kZTo6
RUxFTUVOVF9OT0RFKSB7Ci0gICAgICAgIG1fZnJvbnRlbmQtPmRpZEdldFN0eWxlcyhjYWxsSWQs
IEluc3BlY3RvclZhbHVlOjpudWxsKCkpOworICAgIGlmICghbm9kZSB8fCBub2RlLT5ub2RlVHlw
ZSgpICE9IE5vZGU6OkVMRU1FTlRfTk9ERSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAogICAg
IERPTVdpbmRvdyogZGVmYXVsdFZpZXcgPSBub2RlLT5vd25lckRvY3VtZW50KCktPmRlZmF1bHRW
aWV3KCk7Ci0gICAgaWYgKCFkZWZhdWx0VmlldykgewotICAgICAgICBtX2Zyb250ZW5kLT5kaWRH
ZXRTdHlsZXMoY2FsbElkLCBJbnNwZWN0b3JWYWx1ZTo6bnVsbCgpKTsKKyAgICBpZiAoIWRlZmF1
bHRWaWV3KQogICAgICAgICByZXR1cm47Ci0gICAgfQogCiAgICAgRWxlbWVudCogZWxlbWVudCA9
IHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKTsKICAgICBSZWZQdHI8Q1NTQ29tcHV0ZWRTdHls
ZURlY2xhcmF0aW9uPiBjb21wdXRlZFN0eWxlSW5mbyA9IGNvbXB1dGVkU3R5bGUobm9kZSwgdHJ1
ZSk7IC8vIFN1cHBvcnQgdGhlIHZpZXdpbmcgb2YgOnZpc2l0ZWQgaW5mb3JtYXRpb24gaW4gY29t
cHV0ZWQgc3R5bGUuCkBAIC0xMDUwLDEwICsxMDIwLDEwIEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdl
bnQ6OmdldFN0eWxlcyhsb25nIGNhbGxJZCwgbG9uZyBub2RlSWQsIGJvb2wgYXV0aG9yT25seSkK
ICAgICAgICAgcGFyZW50RWxlbWVudCA9IHBhcmVudEVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKTsK
ICAgICAgICAgY3VycmVudFN0eWxlID0gcGFyZW50U3R5bGU7CiAgICAgfQotICAgIG1fZnJvbnRl
bmQtPmRpZEdldFN0eWxlcyhjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCkpOworICAgICpzdHlsZXMg
PSByZXN1bHQucmVsZWFzZSgpOwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRBbGxT
dHlsZXMobG9uZyBjYWxsSWQpCit2b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRBbGxTdHlsZXMo
bG9uZywgUmVmUHRyPEluc3BlY3RvckFycmF5Piogc3R5bGVzKQogewogICAgIFJlZlB0cjxJbnNw
ZWN0b3JBcnJheT4gcmVzdWx0ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwogICAgIGZvciAo
TGlzdEhhc2hTZXQ8UmVmUHRyPERvY3VtZW50PiA+OjppdGVyYXRvciBpdCA9IG1fZG9jdW1lbnRz
LmJlZ2luKCk7IGl0ICE9IG1fZG9jdW1lbnRzLmVuZCgpOyArK2l0KSB7CkBAIC0xMDY0LDI3ICsx
MDM0LDI1IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldEFsbFN0eWxlcyhsb25nIGNhbGxJ
ZCkKICAgICAgICAgICAgICAgICByZXN1bHQtPnB1c2goYnVpbGRPYmplY3RGb3JTdHlsZVNoZWV0
KCgqaXQpLmdldCgpLCBzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4oc3R5bGVTaGVldCkpKTsK
ICAgICAgICAgfQogICAgIH0KLSAgICBtX2Zyb250ZW5kLT5kaWRHZXRBbGxTdHlsZXMoY2FsbElk
LCByZXN1bHQucmVsZWFzZSgpKTsKKyAgICAqc3R5bGVzID0gcmVzdWx0LnJlbGVhc2UoKTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0U3R5bGVTaGVldChsb25nIGNhbGxJZCwgbG9u
ZyBzdHlsZVNoZWV0SWQpCit2b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRTdHlsZVNoZWV0KGxv
bmcsIGxvbmcgc3R5bGVTaGVldElkLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiBzdHlsZVNoZWV0
T2JqZWN0KQogeworICAgICpzdHlsZVNoZWV0T2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKICAgICBDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0ID0gY3NzU3RvcmUoKS0+c3R5bGVT
aGVldEZvcklkKHN0eWxlU2hlZXRJZCk7CiAgICAgaWYgKHN0eWxlU2hlZXQgJiYgc3R5bGVTaGVl
dC0+ZG9jKCkpCi0gICAgICAgIG1fZnJvbnRlbmQtPmRpZEdldFN0eWxlU2hlZXQoY2FsbElkLCBi
dWlsZE9iamVjdEZvclN0eWxlU2hlZXQoc3R5bGVTaGVldC0+ZG9jKCksIHN0eWxlU2hlZXQpKTsK
LSAgICBlbHNlCi0gICAgICAgIG1fZnJvbnRlbmQtPmRpZEdldFN0eWxlU2hlZXQoY2FsbElkLCBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICAgICAgKnN0eWxlU2hlZXRPYmplY3QgPSBi
dWlsZE9iamVjdEZvclN0eWxlU2hlZXQoc3R5bGVTaGVldC0+ZG9jKCksIHN0eWxlU2hlZXQpOwog
fQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRSdWxlUmFuZ2VzKGxvbmcgY2FsbElkLCBs
b25nIHN0eWxlU2hlZXRJZCkKK3ZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldFJ1bGVSYW5nZXMo
bG9uZywgbG9uZyBzdHlsZVNoZWV0SWQsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHJ1bGVSYW5n
ZSkKIHsKKyAgICAqcnVsZVJhbmdlID0gSW5zcGVjdG9yVmFsdWU6Om51bGwoKTsKICAgICBDU1NT
dHlsZVNoZWV0KiBzdHlsZVNoZWV0ID0gY3NzU3RvcmUoKS0+c3R5bGVTaGVldEZvcklkKHN0eWxl
U2hlZXRJZCk7CiAgICAgaWYgKHN0eWxlU2hlZXQgJiYgc3R5bGVTaGVldC0+ZG9jKCkpIHsKICAg
ICAgICAgSGFzaE1hcDxsb25nLCBTb3VyY2VSYW5nZT4gcnVsZVJhbmdlcyA9IGNzc1N0b3JlKCkt
PmdldFJ1bGVSYW5nZXMoc3R5bGVTaGVldCk7Ci0gICAgICAgIGlmICghcnVsZVJhbmdlcy5zaXpl
KCkpIHsKLSAgICAgICAgICAgIG1fZnJvbnRlbmQtPmRpZEdldFN0eWxlU2hlZXQoY2FsbElkLCBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICAgICAgaWYgKCFydWxlUmFuZ2VzLnNpemUo
KSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQogICAgICAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICBm
b3IgKEhhc2hNYXA8bG9uZywgU291cmNlUmFuZ2U+OjppdGVyYXRvciBpdCA9IHJ1bGVSYW5nZXMu
YmVnaW4oKTsgaXQgIT0gcnVsZVJhbmdlcy5lbmQoKTsgKytpdCkgewogICAgICAgICAgICAgaWYg
KGl0LT5zZWNvbmQuc2Vjb25kKSB7CkBAIC0xMDk2LDM5ICsxMDY0LDMyIEBAIHZvaWQgSW5zcGVj
dG9yRE9NQWdlbnQ6OmdldFJ1bGVSYW5nZXMobG9uZyBjYWxsSWQsIGxvbmcgc3R5bGVTaGVldElk
KQogICAgICAgICAgICAgICAgIGJvZHlSYW5nZS0+c2V0TnVtYmVyKCJlbmQiLCBpdC0+c2Vjb25k
LnNlY29uZCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgbV9mcm9udGVuZC0+
ZGlkR2V0UnVsZVJhbmdlcyhjYWxsSWQsIHJlc3VsdCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1f
ZnJvbnRlbmQtPmRpZEdldFJ1bGVSYW5nZXMoY2FsbElkLCBJbnNwZWN0b3JWYWx1ZTo6bnVsbCgp
KTsKKyAgICAgICAgKnJ1bGVSYW5nZSA9IHJlc3VsdC5yZWxlYXNlKCk7CisgICAgfQogfQogCi12
b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRJbmxpbmVTdHlsZShsb25nIGNhbGxJZCwgbG9uZyBu
b2RlSWQpCit2b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRJbmxpbmVTdHlsZShsb25nLCBsb25n
IG5vZGVJZCwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogc3R5bGUpCiB7CisgICAgKnN0eWxlID0g
SW5zcGVjdG9yVmFsdWU6Om51bGwoKTsKICAgICBOb2RlKiBub2RlID0gbm9kZUZvcklkKG5vZGVJ
ZCk7Ci0gICAgaWYgKCFub2RlIHx8IG5vZGUtPm5vZGVUeXBlKCkgIT0gTm9kZTo6RUxFTUVOVF9O
T0RFKSB7Ci0gICAgICAgIG1fZnJvbnRlbmQtPmRpZEdldElubGluZVN0eWxlKGNhbGxJZCwgSW5z
cGVjdG9yVmFsdWU6Om51bGwoKSk7CisgICAgaWYgKCFub2RlIHx8IG5vZGUtPm5vZGVUeXBlKCkg
IT0gTm9kZTo6RUxFTUVOVF9OT0RFKQogICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIEVsZW1l
bnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSk7Ci0gICAgbV9mcm9udGVu
ZC0+ZGlkR2V0SW5saW5lU3R5bGUoY2FsbElkLCBidWlsZE9iamVjdEZvclN0eWxlKGVsZW1lbnQt
PnN0eWxlKCksIHRydWUpKTsKKyAgICAqc3R5bGUgPSBidWlsZE9iamVjdEZvclN0eWxlKHN0YXRp
Y19jYXN0PEVsZW1lbnQqPihub2RlKS0+c3R5bGUoKSwgdHJ1ZSk7CiB9CiAKLXZvaWQgSW5zcGVj
dG9yRE9NQWdlbnQ6OmdldENvbXB1dGVkU3R5bGUobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkKQor
dm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0Q29tcHV0ZWRTdHlsZShsb25nLCBsb25nIG5vZGVJ
ZCwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogc3R5bGUpCiB7CisgICAgKnN0eWxlID0gSW5zcGVj
dG9yVmFsdWU6Om51bGwoKTsKICAgICBOb2RlKiBub2RlID0gbm9kZUZvcklkKG5vZGVJZCk7Ci0g
ICAgaWYgKCFub2RlIHx8IG5vZGUtPm5vZGVUeXBlKCkgIT0gTm9kZTo6RUxFTUVOVF9OT0RFKSB7
Ci0gICAgICAgIG1fZnJvbnRlbmQtPmRpZEdldENvbXB1dGVkU3R5bGUoY2FsbElkLCBJbnNwZWN0
b3JWYWx1ZTo6bnVsbCgpKTsKKyAgICBpZiAoIW5vZGUgfHwgbm9kZS0+bm9kZVR5cGUoKSAhPSBO
b2RlOjpFTEVNRU5UX05PREUpCiAgICAgICAgIHJldHVybjsKLSAgICB9CiAKICAgICBET01XaW5k
b3cqIGRlZmF1bHRWaWV3ID0gbm9kZS0+b3duZXJEb2N1bWVudCgpLT5kZWZhdWx0VmlldygpOwot
ICAgIGlmICghZGVmYXVsdFZpZXcpIHsKLSAgICAgICAgbV9mcm9udGVuZC0+ZGlkR2V0Q29tcHV0
ZWRTdHlsZShjYWxsSWQsIEluc3BlY3RvclZhbHVlOjpudWxsKCkpOworICAgIGlmICghZGVmYXVs
dFZpZXcpCiAgICAgICAgIHJldHVybjsKLSAgICB9CiAKICAgICBFbGVtZW50KiBlbGVtZW50ID0g
c3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpOwotICAgIFJlZlB0cjxDU1NTdHlsZURlY2xhcmF0
aW9uPiBjb21wdXRlZFN0eWxlID0gZGVmYXVsdFZpZXctPmdldENvbXB1dGVkU3R5bGUoZWxlbWVu
dCwgIiIpOwotICAgIG1fZnJvbnRlbmQtPmRpZEdldENvbXB1dGVkU3R5bGUoY2FsbElkLCBidWls
ZE9iamVjdEZvclN0eWxlKGNvbXB1dGVkU3R5bGUuZ2V0KCksIGZhbHNlKSk7CisgICAgKnN0eWxl
ID0gYnVpbGRPYmplY3RGb3JTdHlsZShkZWZhdWx0Vmlldy0+Z2V0Q29tcHV0ZWRTdHlsZShlbGVt
ZW50LCAiIikuZ2V0KCksIGZhbHNlKTsKIH0KIAogUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IEluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVjdEZvckF0dHJpYnV0ZVN0eWxlcyhFbGVtZW50
KiBlbGVtZW50KQpAQCAtMTE3NCwxMyArMTEzNSwxNCBAQCBQYXNzUmVmUHRyPEluc3BlY3RvckFy
cmF5PiBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRBcnJheUZvclBzZXVkb0VsZW1lbnRzKEVsZW1l
bgogICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwogfQogCi12b2lkIEluc3BlY3RvckRPTUFn
ZW50OjphcHBseVN0eWxlVGV4dChsb25nIGNhbGxJZCwgbG9uZyBzdHlsZUlkLCBjb25zdCBTdHJp
bmcmIHN0eWxlVGV4dCwgY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCit2b2lkIEluc3BlY3Rv
ckRPTUFnZW50OjphcHBseVN0eWxlVGV4dChsb25nLCBsb25nIHN0eWxlSWQsIGNvbnN0IFN0cmlu
ZyYgc3R5bGVUZXh0LCBjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSwgYm9vbCogc3VjY2Vzcywg
UmVmUHRyPEluc3BlY3RvclZhbHVlPiogc3R5bGVPYmplY3QsIFJlZlB0cjxJbnNwZWN0b3JBcnJh
eT4qIGNoYW5nZWRQcm9wZXJ0aWVzQXJyYXkpCiB7CisgICAgKnN1Y2Nlc3MgPSBmYWxzZTsKKyAg
ICAqc3R5bGVPYmplY3QgPSBJbnNwZWN0b3JWYWx1ZTo6bnVsbCgpOworICAgICpjaGFuZ2VkUHJv
cGVydGllc0FycmF5ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwogICAgIENTU1N0eWxlRGVj
bGFyYXRpb24qIHN0eWxlID0gY3NzU3RvcmUoKS0+c3R5bGVGb3JJZChzdHlsZUlkKTsKLSAgICBp
ZiAoIXN0eWxlKSB7Ci0gICAgICAgIG1fZnJvbnRlbmQtPmRpZEFwcGx5U3R5bGVUZXh0KGNhbGxJ
ZCwgZmFsc2UsIEluc3BlY3RvclZhbHVlOjpudWxsKCksIEluc3BlY3RvckFycmF5OjpjcmVhdGUo
KSk7CisgICAgaWYgKCFzdHlsZSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAogICAgIC8vIFJl
bW92ZSBkaXNhYmxlZCBwcm9wZXJ0eSBlbnRyeSBmb3IgcHJvcGVydHkgd2l0aCBnaXZlbiBuYW1l
LgogICAgIERpc2FibGVkU3R5bGVEZWNsYXJhdGlvbiogZGlzYWJsZWRTdHlsZSA9IGNzc1N0b3Jl
KCktPmRpc2FibGVkU3R5bGVGb3JJZChzdHlsZUlkLCBmYWxzZSk7CkBAIC0xMjA3LDI0ICsxMTY5
LDE5IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmFwcGx5U3R5bGVUZXh0KGxvbmcgY2FsbElk
LCBsb25nIHN0eWxlSWQsIGNvbnN0IFN0cmluZyYKICAgICAgICAgaWYgKCFlYykKICAgICAgICAg
ICAgIHN0eWxlLT5yZW1vdmVQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIGVjKTsKIAotICAgICAgICBp
ZiAoZWMpIHsKLSAgICAgICAgICAgIG1fZnJvbnRlbmQtPmRpZEFwcGx5U3R5bGVUZXh0KGNhbGxJ
ZCwgZmFsc2UsIEluc3BlY3RvclZhbHVlOjpudWxsKCksIEluc3BlY3RvckFycmF5OjpjcmVhdGUo
KSk7CisgICAgICAgIGlmIChlYykKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQogICAg
IH0KIAogICAgIC8vIE5vdGlmeSBjYWxsZXIgdGhhdCB0aGUgcHJvcGVydHkgd2FzIHN1Y2Nlc3Nm
dWxseSBkZWxldGVkLgogICAgIGlmICghc3R5bGVUZXh0TGVuZ3RoKSB7Ci0gICAgICAgIFJlZlB0
cjxJbnNwZWN0b3JBcnJheT4gY2hhbmdlZFByb3BlcnRpZXMgPSBJbnNwZWN0b3JBcnJheTo6Y3Jl
YXRlKCk7Ci0gICAgICAgIGNoYW5nZWRQcm9wZXJ0aWVzLT5wdXNoU3RyaW5nKHByb3BlcnR5TmFt
ZSk7Ci0gICAgICAgIG1fZnJvbnRlbmQtPmRpZEFwcGx5U3R5bGVUZXh0KGNhbGxJZCwgdHJ1ZSwg
SW5zcGVjdG9yVmFsdWU6Om51bGwoKSwgY2hhbmdlZFByb3BlcnRpZXMucmVsZWFzZSgpKTsKKyAg
ICAgICAgKCpjaGFuZ2VkUHJvcGVydGllc0FycmF5KS0+cHVzaFN0cmluZyhwcm9wZXJ0eU5hbWUp
OworICAgICAgICAqc3VjY2VzcyA9IHRydWU7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBpZiAoIXRlbXBTdHlsZS0+bGVuZ3RoKCkpIHsKLSAgICAgICAgbV9mcm9udGVuZC0+ZGlkQXBw
bHlTdHlsZVRleHQoY2FsbElkLCBmYWxzZSwgSW5zcGVjdG9yVmFsdWU6Om51bGwoKSwgSW5zcGVj
dG9yQXJyYXk6OmNyZWF0ZSgpKTsKKyAgICBpZiAoIXRlbXBTdHlsZS0+bGVuZ3RoKCkpCiAgICAg
ICAgIHJldHVybjsKLSAgICB9CiAKICAgICAvLyBJdGVyYXRlIG9mIHRoZSBwcm9wZXJ0aWVzIG9u
IHRoZSB0ZXN0IGVsZW1lbnQncyBzdHlsZSBkZWNsYXJhdGlvbiBhbmQKICAgICAvLyBhZGQgdGhl
bSB0byB0aGUgcmVhbCBzdHlsZSBkZWNsYXJhdGlvbi4gV2UgdGFrZSBjYXJlIHRvIG1vdmUgc2hv
cnRoYW5kcy4KQEAgLTEyNTgsNDEgKzEyMTUsNDAgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6
YXBwbHlTdHlsZVRleHQobG9uZyBjYWxsSWQsIGxvbmcgc3R5bGVJZCwgY29uc3QgU3RyaW5nJgog
ICAgICAgICAgICAgZGlzYWJsZWRTdHlsZS0+cmVtb3ZlKG5hbWUpOwogICAgICAgICBjaGFuZ2Vk
UHJvcGVydGllcy5hcHBlbmQobmFtZSk7CiAgICAgfQotICAgIG1fZnJvbnRlbmQtPmRpZEFwcGx5
U3R5bGVUZXh0KGNhbGxJZCwgdHJ1ZSwgYnVpbGRPYmplY3RGb3JTdHlsZShzdHlsZSwgdHJ1ZSks
IHRvQXJyYXkoY2hhbmdlZFByb3BlcnRpZXMpKTsKKyAgICAqc3VjY2VzcyA9IHRydWU7CisgICAg
KnN0eWxlT2JqZWN0ID0gYnVpbGRPYmplY3RGb3JTdHlsZShzdHlsZSwgdHJ1ZSk7CisgICAgKmNo
YW5nZWRQcm9wZXJ0aWVzQXJyYXkgPSB0b0FycmF5KGNoYW5nZWRQcm9wZXJ0aWVzKTsKIH0KIAot
dm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0U3R5bGVUZXh0KGxvbmcgY2FsbElkLCBsb25nIHN0
eWxlSWQsIGNvbnN0IFN0cmluZyYgY3NzVGV4dCkKK3ZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNl
dFN0eWxlVGV4dChsb25nLCBsb25nIHN0eWxlSWQsIGNvbnN0IFN0cmluZyYgY3NzVGV4dCwgYm9v
bCogc3VjY2VzcykKIHsKKyAgICAqc3VjY2VzcyA9IGZhbHNlOwogICAgIENTU1N0eWxlRGVjbGFy
YXRpb24qIHN0eWxlID0gY3NzU3RvcmUoKS0+c3R5bGVGb3JJZChzdHlsZUlkKTsKLSAgICBpZiAo
IXN0eWxlKSB7Ci0gICAgICAgIG1fZnJvbnRlbmQtPmRpZFNldFN0eWxlVGV4dChjYWxsSWQsIGZh
bHNlKTsKKyAgICBpZiAoIXN0eWxlKQogICAgICAgICByZXR1cm47Ci0gICAgfQogICAgIEV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOwogICAgIHN0eWxlLT5zZXRDc3NUZXh0KGNzc1RleHQsIGVjKTsKLSAg
ICBtX2Zyb250ZW5kLT5kaWRTZXRTdHlsZVRleHQoY2FsbElkLCAhZWMpOworICAgICpzdWNjZXNz
ID0gIWVjOwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRTdHlsZVByb3BlcnR5KGxv
bmcgY2FsbElkLCBsb25nIHN0eWxlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5n
JiB2YWx1ZSkKK3ZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldFN0eWxlUHJvcGVydHkobG9uZywg
bG9uZyBzdHlsZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJv
b2wqIHN1Y2Nlc3MpCiB7CisgICAgKnN1Y2Nlc3MgPSBmYWxzZTsKICAgICBDU1NTdHlsZURlY2xh
cmF0aW9uKiBzdHlsZSA9IGNzc1N0b3JlKCktPnN0eWxlRm9ySWQoc3R5bGVJZCk7Ci0gICAgaWYg
KCFzdHlsZSkgewotICAgICAgICBtX2Zyb250ZW5kLT5kaWRTZXRTdHlsZVByb3BlcnR5KGNhbGxJ
ZCwgZmFsc2UpOworICAgIGlmICghc3R5bGUpCiAgICAgICAgIHJldHVybjsKLSAgICB9CiAKICAg
ICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBzdHlsZS0+c2V0UHJvcGVydHkobmFtZSwgdmFs
dWUsIGVjKTsKLSAgICBtX2Zyb250ZW5kLT5kaWRTZXRTdHlsZVByb3BlcnR5KGNhbGxJZCwgIWVj
KTsKKyAgICAqc3VjY2VzcyA9ICFlYzsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6dG9n
Z2xlU3R5bGVFbmFibGVkKGxvbmcgY2FsbElkLCBsb25nIHN0eWxlSWQsIGNvbnN0IFN0cmluZyYg
cHJvcGVydHlOYW1lLCBib29sIGRpc2FibGVkKQordm9pZCBJbnNwZWN0b3JET01BZ2VudDo6dG9n
Z2xlU3R5bGVFbmFibGVkKGxvbmcsIGxvbmcgc3R5bGVJZCwgY29uc3QgU3RyaW5nJiBwcm9wZXJ0
eU5hbWUsIGJvb2wgZGlzYWJsZWQsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHN0eWxlT2JqZWN0
KQogeworICAgICpzdHlsZU9iamVjdCA9IEluc3BlY3RvclZhbHVlOjpudWxsKCk7CiAgICAgQ1NT
U3R5bGVEZWNsYXJhdGlvbiogc3R5bGUgPSBjc3NTdG9yZSgpLT5zdHlsZUZvcklkKHN0eWxlSWQp
OwotICAgIGlmICghc3R5bGUpIHsKLSAgICAgICAgbV9mcm9udGVuZC0+ZGlkVG9nZ2xlU3R5bGVF
bmFibGVkKGNhbGxJZCwgSW5zcGVjdG9yVmFsdWU6Om51bGwoKSk7CisgICAgaWYgKCFzdHlsZSkK
ICAgICAgICAgcmV0dXJuOwotICAgIH0KIAogICAgIERpc2FibGVkU3R5bGVEZWNsYXJhdGlvbiog
ZGlzYWJsZWRTdHlsZSA9IGNzc1N0b3JlKCktPmRpc2FibGVkU3R5bGVGb3JJZChzdHlsZUlkLCB0
cnVlKTsKIApAQCAtMTMwOCwzMCArMTI2NCwyNiBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50Ojp0
b2dnbGVTdHlsZUVuYWJsZWQobG9uZyBjYWxsSWQsIGxvbmcgc3R5bGVJZCwgY29uc3QgU3RyaQog
ICAgICAgICBpZiAoIWVjKQogICAgICAgICAgICAgZGlzYWJsZWRTdHlsZS0+cmVtb3ZlKHByb3Bl
cnR5TmFtZSk7CiAgICAgfQotICAgIGlmIChlYykgewotICAgICAgICBtX2Zyb250ZW5kLT5kaWRU
b2dnbGVTdHlsZUVuYWJsZWQoY2FsbElkLCBJbnNwZWN0b3JWYWx1ZTo6bnVsbCgpKTsKKyAgICBp
ZiAoZWMpCiAgICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV9mcm9udGVuZC0+ZGlkVG9nZ2xl
U3R5bGVFbmFibGVkKGNhbGxJZCwgYnVpbGRPYmplY3RGb3JTdHlsZShzdHlsZSwgdHJ1ZSkpOwor
ICAgICpzdHlsZU9iamVjdCA9IGJ1aWxkT2JqZWN0Rm9yU3R5bGUoc3R5bGUsIHRydWUpOwogfQog
Ci12b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRSdWxlU2VsZWN0b3IobG9uZyBjYWxsSWQsIGxv
bmcgcnVsZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBsb25nIHNlbGVjdGVkTm9kZUlkKQor
dm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0UnVsZVNlbGVjdG9yKGxvbmcsIGxvbmcgcnVsZUlk
LCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBsb25nIHNlbGVjdGVkTm9kZUlkLCBSZWZQdHI8SW5z
cGVjdG9yVmFsdWU+KiBydWxlT2JqZWN0LCBib29sKiBzZWxlY3RvckFmZmVjdHNOb2RlKQogewor
ICAgICpzZWxlY3RvckFmZmVjdHNOb2RlID0gZmFsc2U7CisgICAgKnJ1bGVPYmplY3QgPSBJbnNw
ZWN0b3JWYWx1ZTo6bnVsbCgpOwogICAgIENTU1N0eWxlUnVsZSogcnVsZSA9IGNzc1N0b3JlKCkt
PnJ1bGVGb3JJZChydWxlSWQpOwotICAgIGlmICghcnVsZSkgewotICAgICAgICBtX2Zyb250ZW5k
LT5kaWRTZXRSdWxlU2VsZWN0b3IoY2FsbElkLCBJbnNwZWN0b3JWYWx1ZTo6bnVsbCgpLCBmYWxz
ZSk7CisgICAgaWYgKCFydWxlKQogICAgICAgICByZXR1cm47Ci0gICAgfQogCiAgICAgTm9kZSog
bm9kZSA9IG5vZGVGb3JJZChzZWxlY3RlZE5vZGVJZCk7CiAKICAgICBDU1NTdHlsZVNoZWV0KiBz
dHlsZVNoZWV0ID0gcnVsZS0+cGFyZW50U3R5bGVTaGVldCgpOwogICAgIEV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOwogICAgIHN0eWxlU2hlZXQtPmFkZFJ1bGUoc2VsZWN0b3IsIHJ1bGUtPnN0eWxlKCkt
PmNzc1RleHQoKSwgZWMpOwotICAgIGlmIChlYykgewotICAgICAgICBtX2Zyb250ZW5kLT5kaWRT
ZXRSdWxlU2VsZWN0b3IoY2FsbElkLCBJbnNwZWN0b3JWYWx1ZTo6bnVsbCgpLCBmYWxzZSk7Cisg
ICAgaWYgKGVjKQogICAgICAgICByZXR1cm47Ci0gICAgfQogCiAgICAgQ1NTU3R5bGVSdWxlKiBu
ZXdSdWxlID0gc3RhdGljX2Nhc3Q8Q1NTU3R5bGVSdWxlKj4oc3R5bGVTaGVldC0+aXRlbShzdHls
ZVNoZWV0LT5sZW5ndGgoKSAtIDEpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3R5
bGVTaGVldC0+bGVuZ3RoKCk7ICsraSkgewpAQCAtMTM0MSwzNSArMTI5MywzNCBAQCB2b2lkIElu
c3BlY3RvckRPTUFnZW50OjpzZXRSdWxlU2VsZWN0b3IobG9uZyBjYWxsSWQsIGxvbmcgcnVsZUlk
LCBjb25zdCBTdHJpbmcmCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoZWMpIHsKLSAgICAg
ICAgbV9mcm9udGVuZC0+ZGlkU2V0UnVsZVNlbGVjdG9yKGNhbGxJZCwgSW5zcGVjdG9yVmFsdWU6
Om51bGwoKSwgZmFsc2UpOworICAgIGlmIChlYykKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAot
ICAgIG1fZnJvbnRlbmQtPmRpZFNldFJ1bGVTZWxlY3RvcihjYWxsSWQsIGJ1aWxkT2JqZWN0Rm9y
UnVsZShub2RlLT5vd25lckRvY3VtZW50KCksIG5ld1J1bGUpLCBydWxlQWZmZWN0c05vZGUobmV3
UnVsZSwgbm9kZSkpOworICAgICpzZWxlY3RvckFmZmVjdHNOb2RlID0gcnVsZUFmZmVjdHNOb2Rl
KG5ld1J1bGUsIG5vZGUpOworICAgICpydWxlT2JqZWN0ID0gYnVpbGRPYmplY3RGb3JSdWxlKG5v
ZGUtPm93bmVyRG9jdW1lbnQoKSwgbmV3UnVsZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdl
bnQ6OmFkZFJ1bGUobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIGxvbmcgc2Vs
ZWN0ZWROb2RlSWQpCit2b2lkIEluc3BlY3RvckRPTUFnZW50OjphZGRSdWxlKGxvbmcsIGNvbnN0
IFN0cmluZyYgc2VsZWN0b3IsIGxvbmcgc2VsZWN0ZWROb2RlSWQsIFJlZlB0cjxJbnNwZWN0b3JW
YWx1ZT4qIHJ1bGVPYmplY3QsIGJvb2wqIHNlbGVjdG9yQWZmZWN0c05vZGUpCiB7CisgICAgKnNl
bGVjdG9yQWZmZWN0c05vZGUgPSBmYWxzZTsKKyAgICAqcnVsZU9iamVjdCA9IEluc3BlY3RvclZh
bHVlOjpudWxsKCk7CisKICAgICBOb2RlKiBub2RlID0gbm9kZUZvcklkKHNlbGVjdGVkTm9kZUlk
KTsKLSAgICBpZiAoIW5vZGUpIHsKLSAgICAgICAgbV9mcm9udGVuZC0+ZGlkQWRkUnVsZShjYWxs
SWQsIEluc3BlY3RvclZhbHVlOjpudWxsKCksIGZhbHNlKTsKKyAgICBpZiAoIW5vZGUpCiAgICAg
ICAgIHJldHVybjsKLSAgICB9CiAKLSAgICBDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0ID0gY3Nz
U3RvcmUoKS0+aW5zcGVjdG9yU3R5bGVTaGVldChub2RlLT5vd25lckRvY3VtZW50KCksIHRydWUs
IGNhbGxJZCk7CisgICAgQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCA9IGNzc1N0b3JlKCktPmlu
c3BlY3RvclN0eWxlU2hlZXQobm9kZS0+b3duZXJEb2N1bWVudCgpLCB0cnVlKTsKICAgICBpZiAo
IXN0eWxlU2hlZXQpCiAgICAgICAgIHJldHVybjsgLy8gY291bGQgbm90IGFkZCBhIHN0eWxlc2hl
ZXQgdG8gdGhlIG93bmVyRG9jdW1lbnQKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAg
IHN0eWxlU2hlZXQtPmFkZFJ1bGUoc2VsZWN0b3IsICIiLCBlYyk7Ci0gICAgaWYgKGVjKSB7Ci0g
ICAgICAgIG1fZnJvbnRlbmQtPmRpZEFkZFJ1bGUoY2FsbElkLCBJbnNwZWN0b3JWYWx1ZTo6bnVs
bCgpLCBmYWxzZSk7CisgICAgaWYgKGVjKQogICAgICAgICByZXR1cm47Ci0gICAgfQogCiAgICAg
Q1NTU3R5bGVSdWxlKiBuZXdSdWxlID0gc3RhdGljX2Nhc3Q8Q1NTU3R5bGVSdWxlKj4oc3R5bGVT
aGVldC0+aXRlbShzdHlsZVNoZWV0LT5sZW5ndGgoKSAtIDEpKTsKLSAgICBtX2Zyb250ZW5kLT5k
aWRBZGRSdWxlKGNhbGxJZCwgYnVpbGRPYmplY3RGb3JSdWxlKG5vZGUtPm93bmVyRG9jdW1lbnQo
KSwgbmV3UnVsZSksIHJ1bGVBZmZlY3RzTm9kZShuZXdSdWxlLCBub2RlKSk7CisgICAgKnNlbGVj
dG9yQWZmZWN0c05vZGUgPSBydWxlQWZmZWN0c05vZGUobmV3UnVsZSwgbm9kZSk7CisgICAgKnJ1
bGVPYmplY3QgPSBidWlsZE9iamVjdEZvclJ1bGUobm9kZS0+b3duZXJEb2N1bWVudCgpLCBuZXdS
dWxlKTsKIH0KIAogUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3RvckRPTUFnZW50
OjpidWlsZE9iamVjdEZvclN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBib29sIGJp
bmQpCkBAIC0xNDcxLDcgKzE0MjIsNyBAQCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gSW5z
cGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yUnVsZShEb2N1bWVudCogb3duZQogICAgIGJv
b2wgaXNVc2VyID0gcGFyZW50U3R5bGVTaGVldCAmJiBwYXJlbnRTdHlsZVNoZWV0LT5vd25lck5v
ZGUoKSAmJiBwYXJlbnRTdHlsZVNoZWV0LT5vd25lck5vZGUoKS0+bm9kZU5hbWUoKSA9PSAiI2Rv
Y3VtZW50IjsKICAgICByZXN1bHQtPnNldEJvb2woImlzVXNlckFnZW50IiwgaXNVc2VyQWdlbnQp
OwogICAgIHJlc3VsdC0+c2V0Qm9vbCgiaXNVc2VyIiwgaXNVc2VyKTsKLSAgICByZXN1bHQtPnNl
dEJvb2woImlzVmlhSW5zcGVjdG9yIiwgcnVsZS0+cGFyZW50U3R5bGVTaGVldCgpID09IGNzc1N0
b3JlKCktPmluc3BlY3RvclN0eWxlU2hlZXQob3duZXJEb2N1bWVudCwgZmFsc2UsIC0xKSk7Cisg
ICAgcmVzdWx0LT5zZXRCb29sKCJpc1ZpYUluc3BlY3RvciIsIHJ1bGUtPnBhcmVudFN0eWxlU2hl
ZXQoKSA9PSBjc3NTdG9yZSgpLT5pbnNwZWN0b3JTdHlsZVNoZWV0KG93bmVyRG9jdW1lbnQsIGZh
bHNlKSk7CiAKICAgICAvLyBCaW5kIGVkaXRhYmxlIHNjcmlwdHMgb25seS4KICAgICBib29sIGJp
bmQgPSAhaXNVc2VyQWdlbnQgJiYgIWlzVXNlcjsKQEAgLTE2NDIsMTcgKzE1OTMsMTIgQEAgdm9p
ZCBJbnNwZWN0b3JET01BZ2VudDo6Y29weU5vZGUobG9uZyBub2RlSWQpCiAgICAgUGFzdGVib2Fy
ZDo6Z2VuZXJhbFBhc3RlYm9hcmQoKS0+d3JpdGVQbGFpblRleHQobWFya3VwKTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JET01BZ2VudDo6cHVzaE5vZGVCeVBhdGhUb0Zyb250ZW5kKGxvbmcgY2FsbElk
LCBjb25zdCBTdHJpbmcmIHBhdGgpCit2b2lkIEluc3BlY3RvckRPTUFnZW50OjpwdXNoTm9kZUJ5
UGF0aFRvRnJvbnRlbmQobG9uZywgY29uc3QgU3RyaW5nJiBwYXRoLCBsb25nKiBub2RlSWQpCiB7
Ci0gICAgaWYgKCFtX2Zyb250ZW5kKQotICAgICAgICByZXR1cm47Ci0KLSAgICBsb25nIGlkID0g
MDsKKyAgICAqbm9kZUlkID0gMDsKICAgICBOb2RlKiBub2RlID0gbm9kZUZvclBhdGgocGF0aCk7
CiAgICAgaWYgKG5vZGUpCi0gICAgICAgIGlkID0gcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChub2Rl
KTsKLQotICAgIG1fZnJvbnRlbmQtPmRpZFB1c2hOb2RlQnlQYXRoVG9Gcm9udGVuZChjYWxsSWQs
IGlkKTsKKyAgICAgICAgKm5vZGVJZCA9IHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQobm9kZSk7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckRPTUFnZW50LmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2Vu
dC5oCmluZGV4IDM4YjcwMzQuLjUzZWEyNGMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckRPTUFnZW50LmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9N
QWdlbnQuaApAQCAtMTAxLDMxICsxMDEsMzEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAg
ICAgIC8vIE1ldGhvZHMgY2FsbGVkIGZyb20gdGhlIGZyb250ZW5kIGZvciBET00gbm9kZXMgaW5z
cGVjdGlvbi4KICAgICAgICAgdm9pZCBnZXRDaGlsZE5vZGVzKGxvbmcgY2FsbElkLCBsb25nIG5v
ZGVJZCk7Ci0gICAgICAgIHZvaWQgc2V0QXR0cmlidXRlKGxvbmcgY2FsbElkLCBsb25nIGVsZW1l
bnRJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKLSAgICAgICAg
dm9pZCByZW1vdmVBdHRyaWJ1dGUobG9uZyBjYWxsSWQsIGxvbmcgZWxlbWVudElkLCBjb25zdCBT
dHJpbmcmIG5hbWUpOwotICAgICAgICB2b2lkIHJlbW92ZU5vZGUobG9uZyBjYWxsSWQsIGxvbmcg
bm9kZUlkKTsKLSAgICAgICAgdm9pZCBjaGFuZ2VUYWdOYW1lKGxvbmcgY2FsbElkLCBsb25nIG5v
ZGVJZCwgY29uc3QgU3RyaW5nJiB0YWdOYW1lKTsKLSAgICAgICAgdm9pZCBnZXRPdXRlckhUTUwo
bG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkKTsKLSAgICAgICAgdm9pZCBzZXRPdXRlckhUTUwobG9u
ZyBjYWxsSWQsIGxvbmcgbm9kZUlkLCBjb25zdCBTdHJpbmcmIG91dGVySFRNTCk7Ci0gICAgICAg
IHZvaWQgc2V0VGV4dE5vZGVWYWx1ZShsb25nIGNhbGxJZCwgbG9uZyBub2RlSWQsIGNvbnN0IFN0
cmluZyYgdmFsdWUpOwotICAgICAgICB2b2lkIGdldEV2ZW50TGlzdGVuZXJzRm9yTm9kZShsb25n
IGNhbGxJZCwgbG9uZyBub2RlSWQpOworICAgICAgICB2b2lkIHNldEF0dHJpYnV0ZShsb25nIGNh
bGxJZCwgbG9uZyBlbGVtZW50SWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2
YWx1ZSwgYm9vbCogc3VjY2Vzcyk7CisgICAgICAgIHZvaWQgcmVtb3ZlQXR0cmlidXRlKGxvbmcg
Y2FsbElkLCBsb25nIGVsZW1lbnRJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiBzdWNjZXNz
KTsKKyAgICAgICAgdm9pZCByZW1vdmVOb2RlKGxvbmcgY2FsbElkLCBsb25nIG5vZGVJZCwgbG9u
Zyogb3V0Tm9kZUlkKTsKKyAgICAgICAgdm9pZCBjaGFuZ2VUYWdOYW1lKGxvbmcgY2FsbElkLCBs
b25nIG5vZGVJZCwgY29uc3QgU3RyaW5nJiB0YWdOYW1lLCBsb25nKiBuZXdJZCk7CisgICAgICAg
IHZvaWQgZ2V0T3V0ZXJIVE1MKGxvbmcgY2FsbElkLCBsb25nIG5vZGVJZCwgV2ViQ29yZTo6U3Ry
aW5nKiBvdXRlckhUTUwpOworICAgICAgICB2b2lkIHNldE91dGVySFRNTChsb25nIGNhbGxJZCwg
bG9uZyBub2RlSWQsIGNvbnN0IFN0cmluZyYgb3V0ZXJIVE1MLCBsb25nKiBuZXdJZCk7CisgICAg
ICAgIHZvaWQgc2V0VGV4dE5vZGVWYWx1ZShsb25nIGNhbGxJZCwgbG9uZyBub2RlSWQsIGNvbnN0
IFN0cmluZyYgdmFsdWUsIGJvb2wqIHN1Y2Nlc3MpOworICAgICAgICB2b2lkIGdldEV2ZW50TGlz
dGVuZXJzRm9yTm9kZShsb25nIGNhbGxJZCwgbG9uZyBub2RlSWQsIGxvbmcqIG91dE5vZGVJZCwg
UmVmUHRyPEluc3BlY3RvckFycmF5PiogbGlzdGVuZXJzQXJyYXkpOwogICAgICAgICB2b2lkIGFk
ZEluc3BlY3RlZE5vZGUobG9uZyBub2RlSWQpOwogICAgICAgICB2b2lkIHBlcmZvcm1TZWFyY2go
Y29uc3QgU3RyaW5nJiB3aGl0ZXNwYWNlVHJpbW1lZFF1ZXJ5LCBib29sIHJ1blN5bmNocm9ub3Vz
bHkpOwogICAgICAgICB2b2lkIHNlYXJjaENhbmNlbGVkKCk7CiAKICAgICAgICAgLy8gTWV0aG9k
cyBjYWxsZWQgZnJvbSB0aGUgZnJvbnRlbmQgZm9yIENTUyBzdHlsZXMgaW5zcGVjdGlvbi4KLSAg
ICAgICAgdm9pZCBnZXRTdHlsZXMobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkLCBib29sIGF1dGhv
ck9ubHkpOwotICAgICAgICB2b2lkIGdldEFsbFN0eWxlcyhsb25nIGNhbGxJZCk7Ci0gICAgICAg
IHZvaWQgZ2V0SW5saW5lU3R5bGUobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkKTsKLSAgICAgICAg
dm9pZCBnZXRDb21wdXRlZFN0eWxlKGxvbmcgY2FsbElkLCBsb25nIG5vZGVJZCk7Ci0gICAgICAg
IHZvaWQgZ2V0U3R5bGVTaGVldChsb25nIGNhbGxJZCwgbG9uZyBzdHlsZVNoZWV0SWQpOwotICAg
ICAgICB2b2lkIGdldFJ1bGVSYW5nZXMobG9uZyBjYWxsSWQsIGxvbmcgc3R5bGVTaGVldElkKTsK
LSAgICAgICAgdm9pZCBhcHBseVN0eWxlVGV4dChsb25nIGNhbGxJZCwgbG9uZyBzdHlsZUlkLCBj
b25zdCBTdHJpbmcmIHN0eWxlVGV4dCwgY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpOwotICAg
ICAgICB2b2lkIHNldFN0eWxlVGV4dChsb25nIGNhbGxJZCwgbG9uZyBzdHlsZUlkLCBjb25zdCBT
dHJpbmcmIGNzc1RleHQpOwotICAgICAgICB2b2lkIHNldFN0eWxlUHJvcGVydHkobG9uZyBjYWxs
SWQsIGxvbmcgc3R5bGVJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVl
KTsKLSAgICAgICAgdm9pZCB0b2dnbGVTdHlsZUVuYWJsZWQobG9uZyBjYWxsSWQsIGxvbmcgc3R5
bGVJZCwgY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIGJvb2wgZGlzYWJsZWQpOwotICAgICAg
ICB2b2lkIHNldFJ1bGVTZWxlY3Rvcihsb25nIGNhbGxJZCwgbG9uZyBydWxlSWQsIGNvbnN0IFN0
cmluZyYgc2VsZWN0b3IsIGxvbmcgc2VsZWN0ZWROb2RlSWQpOwotICAgICAgICB2b2lkIGFkZFJ1
bGUobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIGxvbmcgc2VsZWN0ZWROb2Rl
SWQpOworICAgICAgICB2b2lkIGdldFN0eWxlcyhsb25nIGNhbGxJZCwgbG9uZyBub2RlSWQsIGJv
b2wgYXV0aG9yT25seSwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogc3R5bGVzKTsKKyAgICAgICAg
dm9pZCBnZXRBbGxTdHlsZXMobG9uZyBjYWxsSWQsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIHN0
eWxlcyk7CisgICAgICAgIHZvaWQgZ2V0SW5saW5lU3R5bGUobG9uZyBjYWxsSWQsIGxvbmcgbm9k
ZUlkLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiBzdHlsZXMpOworICAgICAgICB2b2lkIGdldENv
bXB1dGVkU3R5bGUobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yVmFs
dWU+KiBzdHlsZXMpOworICAgICAgICB2b2lkIGdldFN0eWxlU2hlZXQobG9uZyBjYWxsSWQsIGxv
bmcgc3R5bGVTaGVldElkLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiBzdHlsZVNoZWV0T2JqZWN0
KTsKKyAgICAgICAgdm9pZCBnZXRSdWxlUmFuZ2VzKGxvbmcgY2FsbElkLCBsb25nIHN0eWxlU2hl
ZXRJZCwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogcnVsZVJhbmdlKTsKKyAgICAgICAgdm9pZCBh
cHBseVN0eWxlVGV4dChsb25nIGNhbGxJZCwgbG9uZyBzdHlsZUlkLCBjb25zdCBTdHJpbmcmIHN0
eWxlVGV4dCwgY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIGJvb2wqIHN1Y2Nlc3MsIFJlZlB0
cjxJbnNwZWN0b3JWYWx1ZT4qIHN0eWxlT2JqZWN0LCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBj
aGFuZ2VkUHJvcGVydGllcyk7CisgICAgICAgIHZvaWQgc2V0U3R5bGVUZXh0KGxvbmcgY2FsbElk
LCBsb25nIHN0eWxlSWQsIGNvbnN0IFN0cmluZyYgY3NzVGV4dCwgYm9vbCogc3VjY2Vzcyk7Cisg
ICAgICAgIHZvaWQgc2V0U3R5bGVQcm9wZXJ0eShsb25nIGNhbGxJZCwgbG9uZyBzdHlsZUlkLCBj
b25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wqIHN1Y2Nlc3MpOwor
ICAgICAgICB2b2lkIHRvZ2dsZVN0eWxlRW5hYmxlZChsb25nIGNhbGxJZCwgbG9uZyBzdHlsZUlk
LCBjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSwgYm9vbCBkaXNhYmxlZCwgUmVmUHRyPEluc3Bl
Y3RvclZhbHVlPiogc3R5bGVPYmplY3QpOworICAgICAgICB2b2lkIHNldFJ1bGVTZWxlY3Rvcihs
b25nIGNhbGxJZCwgbG9uZyBydWxlSWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIGxvbmcgc2Vs
ZWN0ZWROb2RlSWQsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHJ1bGVPYmplY3QsIGJvb2wqIHNl
bGVjdG9yQWZmZWN0c05vZGUpOworICAgICAgICB2b2lkIGFkZFJ1bGUobG9uZyBjYWxsSWQsIGNv
bnN0IFN0cmluZyYgc2VsZWN0b3IsIGxvbmcgc2VsZWN0ZWROb2RlSWQsIFJlZlB0cjxJbnNwZWN0
b3JWYWx1ZT4qIHJ1bGVPYmplY3QsIGJvb2wqIHNlbGVjdG9yQWZmZWN0c05vZGUpOwogCiAgICAg
ICAgIC8vIE1ldGhvZHMgY2FsbGVkIGZyb20gdGhlIEluc3BlY3RvckNvbnRyb2xsZXIuCiAgICAg
ICAgIHZvaWQgc2V0RG9jdW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50KTsKQEAgLTEzOCw3ICsxMzgs
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIE5vZGUqIG5vZGVGb3JJZChsb25nIG5v
ZGVJZCk7CiAgICAgICAgIGxvbmcgcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChOb2RlKiBub2RlKTsK
ICAgICAgICAgdm9pZCBwdXNoQ2hpbGROb2Rlc1RvRnJvbnRlbmQobG9uZyBub2RlSWQpOwotICAg
ICAgICB2b2lkIHB1c2hOb2RlQnlQYXRoVG9Gcm9udGVuZChsb25nIGNhbGxJZCwgY29uc3QgU3Ry
aW5nJiBwYXRoKTsKKyAgICAgICAgdm9pZCBwdXNoTm9kZUJ5UGF0aFRvRnJvbnRlbmQobG9uZyBj
YWxsSWQsIGNvbnN0IFN0cmluZyYgcGF0aCwgbG9uZyogbm9kZUlkKTsKICAgICAgICAgbG9uZyBp
bnNwZWN0ZWROb2RlKHVuc2lnbmVkIGxvbmcgbnVtKTsKICAgICAgICAgdm9pZCBjb3B5Tm9kZShs
b25nIG5vZGVJZCk7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZh
bHVlcy5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwCmluZGV4IGQ0
ODhiNTAuLmRhZDg0YWMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZh
bHVlcy5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcApAQCAt
NDk0LDYgKzQ5NCwxMSBAQCBib29sIEluc3BlY3RvclZhbHVlOjphc051bWJlcih1bnNpZ25lZCBs
b25nKikgY29uc3QKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK2Jvb2wgSW5zcGVjdG9yVmFsdWU6
OmFzTnVtYmVyKHVuc2lnbmVkIGludCopIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQor
CiBib29sIEluc3BlY3RvclZhbHVlOjphc1N0cmluZyhTdHJpbmcqKSBjb25zdAogewogICAgIHJl
dHVybiBmYWxzZTsKQEAgLTU2Niw2ICs1NzEsMTMgQEAgYm9vbCBJbnNwZWN0b3JCYXNpY1ZhbHVl
Ojphc051bWJlcih1bnNpZ25lZCBsb25nKiBvdXRwdXQpIGNvbnN0CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKK2Jvb2wgSW5zcGVjdG9yQmFzaWNWYWx1ZTo6YXNOdW1iZXIodW5zaWduZWQgaW50KiBv
dXRwdXQpIGNvbnN0Cit7CisgICAgaWYgKHR5cGUoKSAhPSBUeXBlRG91YmxlKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgKm91dHB1dCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4obV9k
b3VibGVWYWx1ZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CiAKIHZvaWQgSW5zcGVjdG9yQmFzaWNW
YWx1ZTo6d3JpdGVKU09OKFZlY3RvcjxVQ2hhcj4qIG91dHB1dCkgY29uc3QKIHsKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oIGIvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yVmFsdWVzLmgKaW5kZXggOTQwYmFiOS4uNjQyZjA5MyAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yVmFsdWVzLmgKQEAgLTcxLDYgKzcxLDcgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgYm9vbCBhc051bWJlcihkb3VibGUqIG91dHB1dCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29s
IGFzTnVtYmVyKGxvbmcqIG91dHB1dCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGFzTnVtYmVy
KHVuc2lnbmVkIGxvbmcqIG91dHB1dCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGFzTnVtYmVy
KHVuc2lnbmVkIGludCogb3V0cHV0KSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgYXNTdHJpbmco
U3RyaW5nKiBvdXRwdXQpIGNvbnN0OwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IGFzT2JqZWN0KCk7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5
PiBhc0FycmF5KCk7CkBAIC0xMDksNiArMTEwLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9v
bCBhc051bWJlcihkb3VibGUqIG91dHB1dCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGFzTnVt
YmVyKGxvbmcqIG91dHB1dCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGFzTnVtYmVyKHVuc2ln
bmVkIGxvbmcqIG91dHB1dCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGFzTnVtYmVyKHVuc2ln
bmVkIGludCogb3V0cHV0KSBjb25zdDsKIAogICAgIHZpcnR1YWwgdm9pZCB3cml0ZUpTT04oVmVj
dG9yPFVDaGFyPiogb3V0cHV0KSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL0NhbGxiYWNrLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0Nh
bGxiYWNrLmpzCmluZGV4IDhhZTdmOTUuLmM4YWUwM2UgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9DYWxsYmFjay5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvQ2FsbGJhY2suanMKQEAgLTQ4LDkgKzQ4LDE1IEBAIFdlYkluc3BlY3Rvci5DYWxsYmFj
ay5wcm90b3R5cGUgPSB7CiAgICAgICAgIHZhciBjYWxsYmFjayA9IHRoaXMuX2NhbGxiYWNrc1tj
YWxsYmFja0lkXTsKICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgYXJncyk7CiAgICAgICAg
IGRlbGV0ZSB0aGlzLl9jYWxsYmFja3NbY2FsbGJhY2tJZF07CisgICAgfSwKKworICAgIHJlbW92
ZUNhbGxiYWNrRW50cnk6IGZ1bmN0aW9uKGNhbGxiYWNrSWQpCisgICAgeworICAgICAgICBkZWxl
dGUgdGhpcy5fY2FsbGJhY2tzW2NhbGxiYWNrSWRdOwogICAgIH0KIH0KIAogV2ViSW5zcGVjdG9y
LkNhbGxiYWNrLl9JTlNUQU5DRSA9IG5ldyBXZWJJbnNwZWN0b3IuQ2FsbGJhY2soKTsKIFdlYklu
c3BlY3Rvci5DYWxsYmFjay53cmFwID0gV2ViSW5zcGVjdG9yLkNhbGxiYWNrLl9JTlNUQU5DRS53
cmFwLmJpbmQoV2ViSW5zcGVjdG9yLkNhbGxiYWNrLl9JTlNUQU5DRSk7CiBXZWJJbnNwZWN0b3Iu
Q2FsbGJhY2sucHJvY2Vzc0NhbGxiYWNrID0gV2ViSW5zcGVjdG9yLkNhbGxiYWNrLl9JTlNUQU5D
RS5wcm9jZXNzQ2FsbGJhY2suYmluZChXZWJJbnNwZWN0b3IuQ2FsbGJhY2suX0lOU1RBTkNFKTsK
K1dlYkluc3BlY3Rvci5DYWxsYmFjay5yZW1vdmVDYWxsYmFja0VudHJ5ID0gV2ViSW5zcGVjdG9y
LkNhbGxiYWNrLl9JTlNUQU5DRS5yZW1vdmVDYWxsYmFja0VudHJ5LmJpbmQoV2ViSW5zcGVjdG9y
LkNhbGxiYWNrLl9JTlNUQU5DRSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvRWxlbWVudHNQYW5lbC5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9FbGVt
ZW50c1BhbmVsLmpzCmluZGV4IDA5YTg0ZjcuLjY3MTNkZGMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9FbGVtZW50c1BhbmVsLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9FbGVtZW50c1BhbmVsLmpzCkBAIC0xNzksMTIgKzE3OSwxMiBAQCBXZWJJ
bnNwZWN0b3IuRWxlbWVudHNQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMucmVjZW50
bHlNb2RpZmllZE5vZGVzID0gW107CiAKICAgICAgICAgZGVsZXRlIHRoaXMuY3VycmVudFF1ZXJ5
OwotICAgICAgICB0aGlzLnNlYXJjaENhbmNlbGVkKCk7CiAgICAgfSwKIAogICAgIHNldERvY3Vt
ZW50OiBmdW5jdGlvbihpbnNwZWN0ZWRSb290RG9jdW1lbnQpCiAgICAgewogICAgICAgICB0aGlz
LnJlc2V0KCk7CisgICAgICAgIHRoaXMuc2VhcmNoQ2FuY2VsZWQoKTsKIAogICAgICAgICBpZiAo
IWluc3BlY3RlZFJvb3REb2N1bWVudCkKICAgICAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMgYi9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzCmluZGV4IDlkNDE3NjYuLjk4NmU1MzQgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMKKysrIGIvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcwpAQCAtNTg2LDYgKzU4NiwxMSBA
QCBXZWJJbnNwZWN0b3IuZGlzcGF0Y2hNZXNzYWdlRnJvbUJhY2tlbmQgPSBmdW5jdGlvbihhcmd1
bWVudHMpCiAgICAgV2ViSW5zcGVjdG9yLmRpc3BhdGNoLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7
CiB9CiAKK1dlYkluc3BlY3Rvci5wcm90b2NvbEVycm9yID0gZnVuY3Rpb24oY2FsbElkLCBtZXRo
b2ROYW1lLCBlcnJvclRleHQpCit7CisgICAgV2ViSW5zcGVjdG9yLmxvZygiSW5zcGVjdG9yQmFj
a2VuZC4iICsgbWV0aG9kTmFtZSArICIgZmFpbGVkIHdpdGggZXJyb3IgdGV4dDogJyIgKyBlcnJv
clRleHQgKyAiJyIpOworICAgIFdlYkluc3BlY3Rvci5DYWxsYmFjay5yZW1vdmVDYWxsYmFja0Vu
dHJ5KGNhbGxJZCk7Cit9CiAKIFdlYkluc3BlY3Rvci53aW5kb3dSZXNpemUgPSBmdW5jdGlvbihl
dmVudCkKIHsK
</data>
<flag name="review"
          id="51948"
          type_id="1"
          status="-"
          setter="yurys"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>63571</attachid>
            <date>2010-08-05 03:35:16 -0700</date>
            <delta_ts>2010-08-05 07:49:50 -0700</delta_ts>
            <desc>InspectorBackendDispatcher.cpp - sample of generated file.</desc>
            <filename>InspectorBackendDispatcher.cpp</filename>
            <type>application/octet-stream</type>
            <size>99706</size>
            <attacher name="Ilya Tikhonovsky">loislo</attacher>
            
              <data encoding="base64">Ly8gQ29weXJpZ2h0IChjKSAyMDEwIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgovLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgoK
I2luY2x1ZGUgImNvbmZpZy5oIgojaW5jbHVkZSAiSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIu
aCIKCiNpZiBFTkFCTEUoSU5TUEVDVE9SKQoKI2luY2x1ZGUgIkluc3BlY3RvckFwcGxpY2F0aW9u
Q2FjaGVBZ2VudC5oIgojaW5jbHVkZSAiSW5zcGVjdG9yQmFja2VuZC5oIgojaW5jbHVkZSAiSW5z
cGVjdG9yQ2xpZW50LmgiCiNpbmNsdWRlICJJbnNwZWN0b3JET01BZ2VudC5oIgojaW5jbHVkZSAi
SW5zcGVjdG9yVmFsdWVzLmgiCiNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgojaW5jbHVkZSAi
U2NyaXB0RGVidWdTZXJ2ZXIuaCIKCm5hbWVzcGFjZSBXZWJDb3JlIHsKCnN0YXRpYyBTdHJpbmcg
Zm9ybWF0V3JvbmdBcmd1bWVudHNDb3VudE1lc3NhZ2UodW5zaWduZWQgZXhwZWN0ZWQsIHVuc2ln
bmVkIGFjdHVhbCkKewogICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCJXcm9uZyBudW1iZXIgb2Yg
cGFyYW1ldGVyczogJWQgKGV4cGVjdGVkOiAlZCkiLCBhY3R1YWwsIGV4cGVjdGVkKTsKfQoKc3Rh
dGljIFN0cmluZyBmb3JtYXRXcm9uZ0FyZ3VtZW50VHlwZU1lc3NhZ2UodW5zaWduZWQgcG9zaXRp
b24sIGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IGNoYXIqIGV4cGVjdGVkVHlwZSkKewogICAgcmV0
dXJuIFN0cmluZzo6Zm9ybWF0KCJGYWlsZWQgdG8gY29udmVydCBwYXJhbWV0ZXIgJWQgKCVzKSB0
byAlcyIsIHBvc2l0aW9uLCBuYW1lLCBleHBlY3RlZFR5cGUpOwp9Cgp2b2lkIEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyOjpzdG9yZUxhc3RBY3RpdmVQYW5lbChQYXNzUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiBhcmdzKQp7CiAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgYmFja2VuZEZ1
bmN0aW9uTmFtZSwgKCJzdG9yZUxhc3RBY3RpdmVQYW5lbCIpKTsKICAgIGxvbmcgY2FsbElkID0g
MDsKCiAgICBpZiAoYXJncy0+bGVuZ3RoKCkgIT0gMikgewogICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1l
LCBmb3JtYXRXcm9uZ0FyZ3VtZW50c0NvdW50TWVzc2FnZShhcmdzLT5sZW5ndGgoKSAtIDEsIDEp
KTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgU3RyaW5nIHBhbmVsTmFtZTsKICAgIGlmICgh
YXJncy0+Z2V0KDEpLT5hc1N0cmluZygmcGFuZWxOYW1lKSkgewogICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25O
YW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50VHlwZU1lc3NhZ2UoMSwgInBhbmVsTmFtZSIsICJTdHJp
bmciKSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmICghbV9pbnNwZWN0b3JDb250cm9s
bGVyKSB7CiAgICAgICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUs
ICJFcnJvcjogQ29udHJvbGxlciBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CiAgICAgICAg
cmV0dXJuOwogICAgfQoKICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+c3RvcmVMYXN0QWN0aXZl
UGFuZWwocGFuZWxOYW1lKTsKCn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnNh
dmVBcHBsaWNhdGlvblNldHRpbmdzKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3MpCnsK
ICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAoInNh
dmVBcHBsaWNhdGlvblNldHRpbmdzIikpOwogICAgbG9uZyBjYWxsSWQgPSAwOwoKICAgIGlmIChh
cmdzLT5sZW5ndGgoKSAhPSAyKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
ICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25n
QXJndW1lbnRzQ291bnRNZXNzYWdlKGFyZ3MtPmxlbmd0aCgpIC0gMSwgMSkpOwogICAgICAgIHJl
dHVybjsKICAgIH0KCiAgICBTdHJpbmcgc2V0dGluZ3M7CiAgICBpZiAoIWFyZ3MtPmdldCgxKS0+
YXNTdHJpbmcoJnNldHRpbmdzKSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
ICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9u
Z0FyZ3VtZW50VHlwZU1lc3NhZ2UoMSwgInNldHRpbmdzIiwgIlN0cmluZyIpKTsKICAgICAgICBy
ZXR1cm47CiAgICB9CgogICAgaWYgKCFtX2luc3BlY3RvckNvbnRyb2xsZXIpIHsKICAgICAgICBw
cm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgIkVycm9yOiBDb250cm9s
bGVyIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKICAgICAgICByZXR1cm47CiAgICB9Cgog
ICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5zYXZlQXBwbGljYXRpb25TZXR0aW5ncyhzZXR0aW5n
cyk7Cgp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpzYXZlU2Vzc2lvblNldHRp
bmdzKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3MpCnsKICAgIERFRklORV9TVEFUSUNf
TE9DQUwoU3RyaW5nLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAoInNhdmVTZXNzaW9uU2V0dGluZ3Mi
KSk7CiAgICBsb25nIGNhbGxJZCA9IDA7CgogICAgaWYgKGFyZ3MtPmxlbmd0aCgpICE9IDIpIHsK
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVycm9yKGNhbGxJ
ZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudHNDb3VudE1lc3NhZ2Uo
YXJncy0+bGVuZ3RoKCkgLSAxLCAxKSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIFN0cmlu
ZyBzZXR0aW5nczsKICAgIGlmICghYXJncy0+Z2V0KDEpLT5hc1N0cmluZygmc2V0dGluZ3MpKSB7
CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcihjYWxs
SWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRUeXBlTWVzc2FnZSgx
LCAic2V0dGluZ3MiLCAiU3RyaW5nIikpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAo
IW1faW5zcGVjdG9yQ29udHJvbGxlcikgewogICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBi
YWNrZW5kRnVuY3Rpb25OYW1lLCAiRXJyb3I6IENvbnRyb2xsZXIgaGFuZGxlciBpcyBub3QgYXZh
aWxhYmxlLiIpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBtX2luc3BlY3RvckNvbnRyb2xs
ZXItPnNhdmVTZXNzaW9uU2V0dGluZ3Moc2V0dGluZ3MpOwoKfQoKdm9pZCBJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcjo6ZW5hYmxlU2VhcmNoaW5nRm9yTm9kZShQYXNzUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiBhcmdzKQp7CiAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgYmFja2VuZEZ1
bmN0aW9uTmFtZSwgKCJlbmFibGVTZWFyY2hpbmdGb3JOb2RlIikpOwogICAgbG9uZyBjYWxsSWQg
PSAwOwoKICAgIGlmIChhcmdzLT5sZW5ndGgoKSAhPSAxKSB7CiAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5h
bWUsIGZvcm1hdFdyb25nQXJndW1lbnRzQ291bnRNZXNzYWdlKGFyZ3MtPmxlbmd0aCgpIC0gMSwg
MCkpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoIW1faW5zcGVjdG9yQ29udHJvbGxl
cikgewogICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAi
RXJyb3I6IENvbnRyb2xsZXIgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwogICAgICAgIHJl
dHVybjsKICAgIH0KCiAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmVuYWJsZVNlYXJjaGluZ0Zv
ck5vZGUoKTsKCn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmRpc2FibGVTZWFy
Y2hpbmdGb3JOb2RlKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3MpCnsKICAgIERFRklO
RV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAoImRpc2FibGVTZWFy
Y2hpbmdGb3JOb2RlIikpOwogICAgbG9uZyBjYWxsSWQgPSAwOwoKICAgIGlmIChhcmdzLT5sZW5n
dGgoKSAhPSAxKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9j
b2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRz
Q291bnRNZXNzYWdlKGFyZ3MtPmxlbmd0aCgpIC0gMSwgMCkpOwogICAgICAgIHJldHVybjsKICAg
IH0KCiAgICBpZiAoIW1faW5zcGVjdG9yQ29udHJvbGxlcikgewogICAgICAgIHByb3RvY29sRXJy
b3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAiRXJyb3I6IENvbnRyb2xsZXIgaGFuZGxl
ciBpcyBub3QgYXZhaWxhYmxlLiIpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBtX2luc3Bl
Y3RvckNvbnRyb2xsZXItPmRpc2FibGVTZWFyY2hpbmdGb3JOb2RlKCk7Cgp9Cgp2b2lkIEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyOjplbmFibGVNb25pdG9yaW5nWEhSKFBhc3NSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+IGFyZ3MpCnsKICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBiYWNr
ZW5kRnVuY3Rpb25OYW1lLCAoImVuYWJsZU1vbml0b3JpbmdYSFIiKSk7CiAgICBsb25nIGNhbGxJ
ZCA9IDA7CgogICAgaWYgKGFyZ3MtPmxlbmd0aCgpICE9IDEpIHsKICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9u
TmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudHNDb3VudE1lc3NhZ2UoYXJncy0+bGVuZ3RoKCkgLSAx
LCAwKSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmICghbV9pbnNwZWN0b3JDb250cm9s
bGVyKSB7CiAgICAgICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUs
ICJFcnJvcjogQ29udHJvbGxlciBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CiAgICAgICAg
cmV0dXJuOwogICAgfQoKICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+ZW5hYmxlTW9uaXRvcmlu
Z1hIUigpOwoKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzYWJsZU1vbml0
b3JpbmdYSFIoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJncykKewogICAgREVGSU5FX1NU
QVRJQ19MT0NBTChTdHJpbmcsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICgiZGlzYWJsZU1vbml0b3Jp
bmdYSFIiKSk7CiAgICBsb25nIGNhbGxJZCA9IDA7CgogICAgaWYgKGFyZ3MtPmxlbmd0aCgpICE9
IDEpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVycm9y
KGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudHNDb3VudE1l
c3NhZ2UoYXJncy0+bGVuZ3RoKCkgLSAxLCAwKSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAg
IGlmICghbV9pbnNwZWN0b3JDb250cm9sbGVyKSB7CiAgICAgICAgcHJvdG9jb2xFcnJvcihjYWxs
SWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICJFcnJvcjogQ29udHJvbGxlciBoYW5kbGVyIGlzIG5v
dCBhdmFpbGFibGUuIik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIG1faW5zcGVjdG9yQ29u
dHJvbGxlci0+ZGlzYWJsZU1vbml0b3JpbmdYSFIoKTsKCn0KCnZvaWQgSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXI6OmVuYWJsZVJlc291cmNlVHJhY2tpbmcoUGFzc1JlZlB0cjxJbnNwZWN0b3JB
cnJheT4gYXJncykKewogICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGJhY2tlbmRGdW5j
dGlvbk5hbWUsICgiZW5hYmxlUmVzb3VyY2VUcmFja2luZyIpKTsKICAgIGxvbmcgY2FsbElkID0g
MDsKCiAgICBpZiAoYXJncy0+bGVuZ3RoKCkgIT0gMikgewogICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1l
LCBmb3JtYXRXcm9uZ0FyZ3VtZW50c0NvdW50TWVzc2FnZShhcmdzLT5sZW5ndGgoKSAtIDEsIDEp
KTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgYm9vbCBhbHdheXM7CiAgICBpZiAoIWFyZ3Mt
PmdldCgxKS0+YXNCb29sKCZhbHdheXMpKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1h
dFdyb25nQXJndW1lbnRUeXBlTWVzc2FnZSgxLCAiYWx3YXlzIiwgImJvb2xlYW4iKSk7CiAgICAg
ICAgcmV0dXJuOwogICAgfQoKICAgIGlmICghbV9pbnNwZWN0b3JDb250cm9sbGVyKSB7CiAgICAg
ICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICJFcnJvcjogQ29u
dHJvbGxlciBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CiAgICAgICAgcmV0dXJuOwogICAg
fQoKICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+ZW5hYmxlUmVzb3VyY2VUcmFja2luZyhhbHdh
eXMpOwoKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzYWJsZVJlc291cmNl
VHJhY2tpbmcoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJncykKewogICAgREVGSU5FX1NU
QVRJQ19MT0NBTChTdHJpbmcsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICgiZGlzYWJsZVJlc291cmNl
VHJhY2tpbmciKSk7CiAgICBsb25nIGNhbGxJZCA9IDA7CgogICAgaWYgKGFyZ3MtPmxlbmd0aCgp
ICE9IDIpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVy
cm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudHNDb3Vu
dE1lc3NhZ2UoYXJncy0+bGVuZ3RoKCkgLSAxLCAxKSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoK
ICAgIGJvb2wgYWx3YXlzOwogICAgaWYgKCFhcmdzLT5nZXQoMSktPmFzQm9vbCgmYWx3YXlzKSkg
ewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29sRXJyb3IoY2Fs
bElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50VHlwZU1lc3NhZ2Uo
MSwgImFsd2F5cyIsICJib29sZWFuIikpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAo
IW1faW5zcGVjdG9yQ29udHJvbGxlcikgewogICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBi
YWNrZW5kRnVuY3Rpb25OYW1lLCAiRXJyb3I6IENvbnRyb2xsZXIgaGFuZGxlciBpcyBub3QgYXZh
aWxhYmxlLiIpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBtX2luc3BlY3RvckNvbnRyb2xs
ZXItPmRpc2FibGVSZXNvdXJjZVRyYWNraW5nKGFsd2F5cyk7Cgp9Cgp2b2lkIEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyOjpnZXRSZXNvdXJjZUNvbnRlbnQoUGFzc1JlZlB0cjxJbnNwZWN0b3JB
cnJheT4gYXJncykKewogICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGJhY2tlbmRGdW5j
dGlvbk5hbWUsICgiZ2V0UmVzb3VyY2VDb250ZW50IikpOwogICAgbG9uZyBjYWxsSWQgPSAwOwoK
ICAgIGlmIChhcmdzLT5sZW5ndGgoKSAhPSAzKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZv
cm1hdFdyb25nQXJndW1lbnRzQ291bnRNZXNzYWdlKGFyZ3MtPmxlbmd0aCgpIC0gMSwgMikpOwog
ICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoIWFyZ3MtPmdldCgxKS0+YXNOdW1iZXIoJmNh
bGxJZCkpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVy
cm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudFR5cGVN
ZXNzYWdlKDEsICJjYWxsSWQiLCAibG9uZyIpKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAg
dW5zaWduZWQgbG9uZyBpZGVudGlmaWVyOwogICAgaWYgKCFhcmdzLT5nZXQoMiktPmFzTnVtYmVy
KCZpZGVudGlmaWVyKSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHBy
b3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3Vt
ZW50VHlwZU1lc3NhZ2UoMiwgImlkZW50aWZpZXIiLCAidW5zaWduZWQgbG9uZyIpKTsKICAgICAg
ICByZXR1cm47CiAgICB9CgogICAgaWYgKCFtX2luc3BlY3RvckNvbnRyb2xsZXIpIHsKICAgICAg
ICBwcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgIkVycm9yOiBDb250
cm9sbGVyIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKICAgICAgICByZXR1cm47CiAgICB9
CgogICAgU3RyaW5nIGNvbnRlbnQ7CiAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmdldFJlc291
cmNlQ29udGVudChjYWxsSWQsIGlkZW50aWZpZXIsICZjb250ZW50KTsKCiAgICBpZiAobV9pbnNw
ZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0b3JDbGllbnQoKSkgewogICAgICAgIFJlZlB0cjxJbnNw
ZWN0b3JBcnJheT4gYXJndW1lbnRzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwogICAgICAg
IGFyZ3VtZW50cy0+cHVzaFN0cmluZygiZGlkR2V0UmVzb3VyY2VDb250ZW50Iik7CiAgICAgICAg
YXJndW1lbnRzLT5wdXNoTnVtYmVyKGNhbGxJZCk7CiAgICAgICAgYXJndW1lbnRzLT5wdXNoU3Ry
aW5nKGNvbnRlbnQpOwogICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdG9yQ2xp
ZW50KCktPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChhcmd1bWVudHMtPnRvSlNPTlN0cmluZygpKTsK
ICAgIH0KfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6cmVsb2FkUGFnZShQYXNz
UmVmUHRyPEluc3BlY3RvckFycmF5PiBhcmdzKQp7CiAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0
cmluZywgYmFja2VuZEZ1bmN0aW9uTmFtZSwgKCJyZWxvYWRQYWdlIikpOwogICAgbG9uZyBjYWxs
SWQgPSAwOwoKICAgIGlmIChhcmdzLT5sZW5ndGgoKSAhPSAxKSB7CiAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlv
bk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRzQ291bnRNZXNzYWdlKGFyZ3MtPmxlbmd0aCgpIC0g
MSwgMCkpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoIW1faW5zcGVjdG9yQ29udHJv
bGxlcikgewogICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1l
LCAiRXJyb3I6IENvbnRyb2xsZXIgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwogICAgICAg
IHJldHVybjsKICAgIH0KCiAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPnJlbG9hZFBhZ2UoKTsK
Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnN0YXJ0VGltZWxpbmVQcm9maWxl
cihQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcmdzKQp7CiAgICBERUZJTkVfU1RBVElDX0xP
Q0FMKFN0cmluZywgYmFja2VuZEZ1bmN0aW9uTmFtZSwgKCJzdGFydFRpbWVsaW5lUHJvZmlsZXIi
KSk7CiAgICBsb25nIGNhbGxJZCA9IDA7CgogICAgaWYgKGFyZ3MtPmxlbmd0aCgpICE9IDEpIHsK
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVycm9yKGNhbGxJ
ZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudHNDb3VudE1lc3NhZ2Uo
YXJncy0+bGVuZ3RoKCkgLSAxLCAwKSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmICgh
bV9pbnNwZWN0b3JDb250cm9sbGVyKSB7CiAgICAgICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJh
Y2tlbmRGdW5jdGlvbk5hbWUsICJFcnJvcjogQ29udHJvbGxlciBoYW5kbGVyIGlzIG5vdCBhdmFp
bGFibGUuIik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIG1faW5zcGVjdG9yQ29udHJvbGxl
ci0+c3RhcnRUaW1lbGluZVByb2ZpbGVyKCk7Cgp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyOjpzdG9wVGltZWxpbmVQcm9maWxlcihQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBh
cmdzKQp7CiAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgYmFja2VuZEZ1bmN0aW9uTmFt
ZSwgKCJzdG9wVGltZWxpbmVQcm9maWxlciIpKTsKICAgIGxvbmcgY2FsbElkID0gMDsKCiAgICBp
ZiAoYXJncy0+bGVuZ3RoKCkgIT0gMSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRX
cm9uZ0FyZ3VtZW50c0NvdW50TWVzc2FnZShhcmdzLT5sZW5ndGgoKSAtIDEsIDApKTsKICAgICAg
ICByZXR1cm47CiAgICB9CgogICAgaWYgKCFtX2luc3BlY3RvckNvbnRyb2xsZXIpIHsKICAgICAg
ICBwcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgIkVycm9yOiBDb250
cm9sbGVyIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKICAgICAgICByZXR1cm47CiAgICB9
CgogICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5zdG9wVGltZWxpbmVQcm9maWxlcigpOwoKfQoK
dm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6ZW5hYmxlRGVidWdnZXIoUGFzc1JlZlB0
cjxJbnNwZWN0b3JBcnJheT4gYXJncykKewogICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcs
IGJhY2tlbmRGdW5jdGlvbk5hbWUsICgiZW5hYmxlRGVidWdnZXIiKSk7CiAgICBsb25nIGNhbGxJ
ZCA9IDA7CgogICAgaWYgKGFyZ3MtPmxlbmd0aCgpICE9IDIpIHsKICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9u
TmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudHNDb3VudE1lc3NhZ2UoYXJncy0+bGVuZ3RoKCkgLSAx
LCAxKSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGJvb2wgYWx3YXlzOwogICAgaWYgKCFh
cmdzLT5nZXQoMSktPmFzQm9vbCgmYWx3YXlzKSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBm
b3JtYXRXcm9uZ0FyZ3VtZW50VHlwZU1lc3NhZ2UoMSwgImFsd2F5cyIsICJib29sZWFuIikpOwog
ICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoIW1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5z
cGVjdG9yQmFja2VuZCgpKSB7CiAgICAgICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRG
dW5jdGlvbk5hbWUsICJFcnJvcjogQmFja2VuZCBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7
CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVj
dG9yQmFja2VuZCgpLT5lbmFibGVEZWJ1Z2dlcihhbHdheXMpOwoKfQoKdm9pZCBJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcjo6ZGlzYWJsZURlYnVnZ2VyKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJy
YXk+IGFyZ3MpCnsKICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBiYWNrZW5kRnVuY3Rp
b25OYW1lLCAoImRpc2FibGVEZWJ1Z2dlciIpKTsKICAgIGxvbmcgY2FsbElkID0gMDsKCiAgICBp
ZiAoYXJncy0+bGVuZ3RoKCkgIT0gMikgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRX
cm9uZ0FyZ3VtZW50c0NvdW50TWVzc2FnZShhcmdzLT5sZW5ndGgoKSAtIDEsIDEpKTsKICAgICAg
ICByZXR1cm47CiAgICB9CgogICAgYm9vbCBhbHdheXM7CiAgICBpZiAoIWFyZ3MtPmdldCgxKS0+
YXNCb29sKCZhbHdheXMpKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAg
cHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJn
dW1lbnRUeXBlTWVzc2FnZSgxLCAiYWx3YXlzIiwgImJvb2xlYW4iKSk7CiAgICAgICAgcmV0dXJu
OwogICAgfQoKICAgIGlmICghbV9pbnNwZWN0b3JDb250cm9sbGVyKSB7CiAgICAgICAgcHJvdG9j
b2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICJFcnJvcjogQ29udHJvbGxlciBo
YW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIG1f
aW5zcGVjdG9yQ29udHJvbGxlci0+ZGlzYWJsZURlYnVnZ2VyKGFsd2F5cyk7Cgp9Cgp2b2lkIElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpzZXRCcmVha3BvaW50KFBhc3NSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+IGFyZ3MpCnsKICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBiYWNrZW5k
RnVuY3Rpb25OYW1lLCAoInNldEJyZWFrcG9pbnQiKSk7CiAgICBsb25nIGNhbGxJZCA9IDA7Cgog
ICAgaWYgKGFyZ3MtPmxlbmd0aCgpICE9IDYpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICAgICBwcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9y
bWF0V3JvbmdBcmd1bWVudHNDb3VudE1lc3NhZ2UoYXJncy0+bGVuZ3RoKCkgLSAxLCA1KSk7CiAg
ICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmICghYXJncy0+Z2V0KDEpLT5hc051bWJlcigmY2Fs
bElkKSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29sRXJy
b3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50VHlwZU1l
c3NhZ2UoMSwgImNhbGxJZCIsICJsb25nIikpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBT
dHJpbmcgc291cmNlSUQ7CiAgICBpZiAoIWFyZ3MtPmdldCgyKS0+YXNTdHJpbmcoJnNvdXJjZUlE
KSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29sRXJyb3Io
Y2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50VHlwZU1lc3Nh
Z2UoMiwgInNvdXJjZUlEIiwgIlN0cmluZyIpKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAg
dW5zaWduZWQgaW50IGxpbmVOdW1iZXI7CiAgICBpZiAoIWFyZ3MtPmdldCgzKS0+YXNOdW1iZXIo
JmxpbmVOdW1iZXIpKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcHJv
dG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1l
bnRUeXBlTWVzc2FnZSgzLCAibGluZU51bWJlciIsICJ1bnNpZ25lZCBpbnQiKSk7CiAgICAgICAg
cmV0dXJuOwogICAgfQoKICAgIGJvb2wgZW5hYmxlZDsKICAgIGlmICghYXJncy0+Z2V0KDQpLT5h
c0Jvb2woJmVuYWJsZWQpKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAg
cHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJn
dW1lbnRUeXBlTWVzc2FnZSg0LCAiZW5hYmxlZCIsICJib29sZWFuIikpOwogICAgICAgIHJldHVy
bjsKICAgIH0KCiAgICBTdHJpbmcgY29uZGl0aW9uOwogICAgaWYgKCFhcmdzLT5nZXQoNSktPmFz
U3RyaW5nKCZjb25kaXRpb24pKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
ICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25n
QXJndW1lbnRUeXBlTWVzc2FnZSg1LCAiY29uZGl0aW9uIiwgIlN0cmluZyIpKTsKICAgICAgICBy
ZXR1cm47CiAgICB9CgogICAgaWYgKCFtX2luc3BlY3RvckNvbnRyb2xsZXIpIHsKICAgICAgICBw
cm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgIkVycm9yOiBDb250cm9s
bGVyIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKICAgICAgICByZXR1cm47CiAgICB9Cgog
ICAgYm9vbCBzdWNjZXNzOwogICAgdW5zaWduZWQgaW50IGFjdHVhbExpbmVOdW1iZXI7CiAgICBt
X2luc3BlY3RvckNvbnRyb2xsZXItPnNldEJyZWFrcG9pbnQoY2FsbElkLCBzb3VyY2VJRCwgbGlu
ZU51bWJlciwgZW5hYmxlZCwgY29uZGl0aW9uLCAmc3VjY2VzcywgJmFjdHVhbExpbmVOdW1iZXIp
OwoKICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RvckNsaWVudCgpKSB7CiAg
ICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcmd1bWVudHMgPSBJbnNwZWN0b3JBcnJheTo6
Y3JlYXRlKCk7CiAgICAgICAgYXJndW1lbnRzLT5wdXNoU3RyaW5nKCJkaWRTZXRCcmVha3BvaW50
Iik7CiAgICAgICAgYXJndW1lbnRzLT5wdXNoTnVtYmVyKGNhbGxJZCk7CiAgICAgICAgYXJndW1l
bnRzLT5wdXNoQm9vbChzdWNjZXNzKTsKICAgICAgICBhcmd1bWVudHMtPnB1c2hOdW1iZXIoYWN0
dWFsTGluZU51bWJlcik7CiAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0b3JD
bGllbnQoKS0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGFyZ3VtZW50cy0+dG9KU09OU3RyaW5nKCkp
OwogICAgfQp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpyZW1vdmVCcmVha3Bv
aW50KFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3MpCnsKICAgIERFRklORV9TVEFUSUNf
TE9DQUwoU3RyaW5nLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAoInJlbW92ZUJyZWFrcG9pbnQiKSk7
CiAgICBsb25nIGNhbGxJZCA9IDA7CgogICAgaWYgKGFyZ3MtPmxlbmd0aCgpICE9IDMpIHsKICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVycm9yKGNhbGxJZCwg
YmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudHNDb3VudE1lc3NhZ2UoYXJn
cy0+bGVuZ3RoKCkgLSAxLCAyKSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIFN0cmluZyBz
b3VyY2VJRDsKICAgIGlmICghYXJncy0+Z2V0KDEpLT5hc1N0cmluZygmc291cmNlSUQpKSB7CiAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcihjYWxsSWQs
IGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRUeXBlTWVzc2FnZSgxLCAi
c291cmNlSUQiLCAiU3RyaW5nIikpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICB1bnNpZ25l
ZCBsb25nIGxpbmVOdW1iZXI7CiAgICBpZiAoIWFyZ3MtPmdldCgyKS0+YXNOdW1iZXIoJmxpbmVO
dW1iZXIpKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xF
cnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRUeXBl
TWVzc2FnZSgyLCAibGluZU51bWJlciIsICJ1bnNpZ25lZCBsb25nIikpOwogICAgICAgIHJldHVy
bjsKICAgIH0KCiAgICBpZiAoIW1faW5zcGVjdG9yQ29udHJvbGxlcikgewogICAgICAgIHByb3Rv
Y29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAiRXJyb3I6IENvbnRyb2xsZXIg
aGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBt
X2luc3BlY3RvckNvbnRyb2xsZXItPnJlbW92ZUJyZWFrcG9pbnQoc291cmNlSUQsIGxpbmVOdW1i
ZXIpOwoKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6YWN0aXZhdGVCcmVha3Bv
aW50cyhQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcmdzKQp7CiAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKFN0cmluZywgYmFja2VuZEZ1bmN0aW9uTmFtZSwgKCJhY3RpdmF0ZUJyZWFrcG9pbnRz
IikpOwogICAgbG9uZyBjYWxsSWQgPSAwOwoKICAgIGlmIChhcmdzLT5sZW5ndGgoKSAhPSAxKSB7
CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcihjYWxs
SWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRzQ291bnRNZXNzYWdl
KGFyZ3MtPmxlbmd0aCgpIC0gMSwgMCkpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAo
ISgmU2NyaXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgpKSkgewogICAgICAgIHByb3RvY29sRXJyb3Io
Y2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAiRXJyb3I6IERlYnVnIGhhbmRsZXIgaXMgbm90
IGF2YWlsYWJsZS4iKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgKCZTY3JpcHREZWJ1Z1Nl
cnZlcjo6c2hhcmVkKCkpLT5hY3RpdmF0ZUJyZWFrcG9pbnRzKCk7Cgp9Cgp2b2lkIEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyOjpkZWFjdGl2YXRlQnJlYWtwb2ludHMoUGFzc1JlZlB0cjxJbnNw
ZWN0b3JBcnJheT4gYXJncykKewogICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGJhY2tl
bmRGdW5jdGlvbk5hbWUsICgiZGVhY3RpdmF0ZUJyZWFrcG9pbnRzIikpOwogICAgbG9uZyBjYWxs
SWQgPSAwOwoKICAgIGlmIChhcmdzLT5sZW5ndGgoKSAhPSAxKSB7CiAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlv
bk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRzQ291bnRNZXNzYWdlKGFyZ3MtPmxlbmd0aCgpIC0g
MSwgMCkpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoISgmU2NyaXB0RGVidWdTZXJ2
ZXI6OnNoYXJlZCgpKSkgewogICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVu
Y3Rpb25OYW1lLCAiRXJyb3I6IERlYnVnIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKICAg
ICAgICByZXR1cm47CiAgICB9CgogICAgKCZTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkpLT5k
ZWFjdGl2YXRlQnJlYWtwb2ludHMoKTsKCn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI6OnBhdXNlKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3MpCnsKICAgIERFRklORV9T
VEFUSUNfTE9DQUwoU3RyaW5nLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAoInBhdXNlIikpOwogICAg
bG9uZyBjYWxsSWQgPSAwOwoKICAgIGlmIChhcmdzLT5sZW5ndGgoKSAhPSAxKSB7CiAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tl
bmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRzQ291bnRNZXNzYWdlKGFyZ3MtPmxl
bmd0aCgpIC0gMSwgMCkpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoISgmU2NyaXB0
RGVidWdTZXJ2ZXI6OnNoYXJlZCgpKSkgewogICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBi
YWNrZW5kRnVuY3Rpb25OYW1lLCAiRXJyb3I6IERlYnVnIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJs
ZS4iKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgKCZTY3JpcHREZWJ1Z1NlcnZlcjo6c2hh
cmVkKCkpLT5wYXVzZSgpOwoKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6cmVz
dW1lKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3MpCnsKICAgIERFRklORV9TVEFUSUNf
TE9DQUwoU3RyaW5nLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAoInJlc3VtZSIpKTsKICAgIGxvbmcg
Y2FsbElkID0gMDsKCiAgICBpZiAoYXJncy0+bGVuZ3RoKCkgIT0gMSkgewogICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVu
Y3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50c0NvdW50TWVzc2FnZShhcmdzLT5sZW5ndGgo
KSAtIDEsIDApKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKCFtX2luc3BlY3RvckNv
bnRyb2xsZXIpIHsKICAgICAgICBwcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9u
TmFtZSwgIkVycm9yOiBDb250cm9sbGVyIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKICAg
ICAgICByZXR1cm47CiAgICB9CgogICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5yZXN1bWUoKTsK
Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnN0ZXBPdmVyU3RhdGVtZW50KFBh
c3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3MpCnsKICAgIERFRklORV9TVEFUSUNfTE9DQUwo
U3RyaW5nLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAoInN0ZXBPdmVyU3RhdGVtZW50IikpOwogICAg
bG9uZyBjYWxsSWQgPSAwOwoKICAgIGlmIChhcmdzLT5sZW5ndGgoKSAhPSAxKSB7CiAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tl
bmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRzQ291bnRNZXNzYWdlKGFyZ3MtPmxl
bmd0aCgpIC0gMSwgMCkpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoISgmU2NyaXB0
RGVidWdTZXJ2ZXI6OnNoYXJlZCgpKSkgewogICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBi
YWNrZW5kRnVuY3Rpb25OYW1lLCAiRXJyb3I6IERlYnVnIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJs
ZS4iKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgKCZTY3JpcHREZWJ1Z1NlcnZlcjo6c2hh
cmVkKCkpLT5zdGVwT3ZlclN0YXRlbWVudCgpOwoKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcjo6c3RlcEludG9TdGF0ZW1lbnQoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJn
cykKewogICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGJhY2tlbmRGdW5jdGlvbk5hbWUs
ICgic3RlcEludG9TdGF0ZW1lbnQiKSk7CiAgICBsb25nIGNhbGxJZCA9IDA7CgogICAgaWYgKGFy
Z3MtPmxlbmd0aCgpICE9IDEpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICBwcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdB
cmd1bWVudHNDb3VudE1lc3NhZ2UoYXJncy0+bGVuZ3RoKCkgLSAxLCAwKSk7CiAgICAgICAgcmV0
dXJuOwogICAgfQoKICAgIGlmICghKCZTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkpKSB7CiAg
ICAgICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICJFcnJvcjog
RGVidWcgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwogICAgICAgIHJldHVybjsKICAgIH0K
CiAgICAoJlNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKSktPnN0ZXBJbnRvU3RhdGVtZW50KCk7
Cgp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpzdGVwT3V0T2ZGdW5jdGlvbihQ
YXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcmdzKQp7CiAgICBERUZJTkVfU1RBVElDX0xPQ0FM
KFN0cmluZywgYmFja2VuZEZ1bmN0aW9uTmFtZSwgKCJzdGVwT3V0T2ZGdW5jdGlvbiIpKTsKICAg
IGxvbmcgY2FsbElkID0gMDsKCiAgICBpZiAoYXJncy0+bGVuZ3RoKCkgIT0gMSkgewogICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNr
ZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50c0NvdW50TWVzc2FnZShhcmdzLT5s
ZW5ndGgoKSAtIDEsIDApKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKCEoJlNjcmlw
dERlYnVnU2VydmVyOjpzaGFyZWQoKSkpIHsKICAgICAgICBwcm90b2NvbEVycm9yKGNhbGxJZCwg
YmFja2VuZEZ1bmN0aW9uTmFtZSwgIkVycm9yOiBEZWJ1ZyBoYW5kbGVyIGlzIG5vdCBhdmFpbGFi
bGUuIik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICgmU2NyaXB0RGVidWdTZXJ2ZXI6OnNo
YXJlZCgpKS0+c3RlcE91dE9mRnVuY3Rpb24oKTsKCn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXI6OnNldFBhdXNlT25FeGNlcHRpb25zU3RhdGUoUGFzc1JlZlB0cjxJbnNwZWN0b3JB
cnJheT4gYXJncykKewogICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGJhY2tlbmRGdW5j
dGlvbk5hbWUsICgic2V0UGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSIpKTsKICAgIGxvbmcgY2FsbElk
ID0gMDsKCiAgICBpZiAoYXJncy0+bGVuZ3RoKCkgIT0gMikgewogICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25O
YW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50c0NvdW50TWVzc2FnZShhcmdzLT5sZW5ndGgoKSAtIDEs
IDEpKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgbG9uZyBwYXVzZU9uRXhjZXB0aW9uc1N0
YXRlOwogICAgaWYgKCFhcmdzLT5nZXQoMSktPmFzTnVtYmVyKCZwYXVzZU9uRXhjZXB0aW9uc1N0
YXRlKSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29sRXJy
b3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50VHlwZU1l
c3NhZ2UoMSwgInBhdXNlT25FeGNlcHRpb25zU3RhdGUiLCAibG9uZyIpKTsKICAgICAgICByZXR1
cm47CiAgICB9CgogICAgaWYgKCFtX2luc3BlY3RvckNvbnRyb2xsZXIpIHsKICAgICAgICBwcm90
b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgIkVycm9yOiBDb250cm9sbGVy
IGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAg
bV9pbnNwZWN0b3JDb250cm9sbGVyLT5zZXRQYXVzZU9uRXhjZXB0aW9uc1N0YXRlKHBhdXNlT25F
eGNlcHRpb25zU3RhdGUpOwoKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6ZWRp
dFNjcmlwdFNvdXJjZShQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcmdzKQp7CiAgICBERUZJ
TkVfU1RBVElDX0xPQ0FMKFN0cmluZywgYmFja2VuZEZ1bmN0aW9uTmFtZSwgKCJlZGl0U2NyaXB0
U291cmNlIikpOwogICAgbG9uZyBjYWxsSWQgPSAwOwoKICAgIGlmIChhcmdzLT5sZW5ndGgoKSAh
PSA0KSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJv
cihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRzQ291bnRN
ZXNzYWdlKGFyZ3MtPmxlbmd0aCgpIC0gMSwgMykpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAg
ICBpZiAoIWFyZ3MtPmdldCgxKS0+YXNOdW1iZXIoJmNhbGxJZCkpIHsKICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0
aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudFR5cGVNZXNzYWdlKDEsICJjYWxsSWQiLCAibG9u
ZyIpKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgU3RyaW5nIHNvdXJjZUlEOwogICAgaWYg
KCFhcmdzLT5nZXQoMiktPmFzU3RyaW5nKCZzb3VyY2VJRCkpIHsKICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9u
TmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudFR5cGVNZXNzYWdlKDIsICJzb3VyY2VJRCIsICJTdHJp
bmciKSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIFN0cmluZyBuZXdDb250ZW50OwogICAg
aWYgKCFhcmdzLT5nZXQoMyktPmFzU3RyaW5nKCZuZXdDb250ZW50KSkgewogICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVu
Y3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50VHlwZU1lc3NhZ2UoMywgIm5ld0NvbnRlbnQi
LCAiU3RyaW5nIikpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoIW1faW5zcGVjdG9y
Q29udHJvbGxlcikgewogICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rp
b25OYW1lLCAiRXJyb3I6IENvbnRyb2xsZXIgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwog
ICAgICAgIHJldHVybjsKICAgIH0KCiAgICBib29sIHN1Y2Nlc3M7CiAgICBTdHJpbmcgcmVzdWx0
OwogICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiBuZXdDYWxsRnJhbWVzOwogICAgbV9pbnNwZWN0
b3JDb250cm9sbGVyLT5lZGl0U2NyaXB0U291cmNlKGNhbGxJZCwgc291cmNlSUQsIG5ld0NvbnRl
bnQsICZzdWNjZXNzLCAmcmVzdWx0LCAmbmV3Q2FsbEZyYW1lcyk7CgogICAgaWYgKG1faW5zcGVj
dG9yQ29udHJvbGxlci0+aW5zcGVjdG9yQ2xpZW50KCkpIHsKICAgICAgICBSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+IGFyZ3VtZW50cyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKICAgICAgICBh
cmd1bWVudHMtPnB1c2hTdHJpbmcoImRpZEVkaXRTY3JpcHRTb3VyY2UiKTsKICAgICAgICBhcmd1
bWVudHMtPnB1c2hOdW1iZXIoY2FsbElkKTsKICAgICAgICBhcmd1bWVudHMtPnB1c2hCb29sKHN1
Y2Nlc3MpOwogICAgICAgIGFyZ3VtZW50cy0+cHVzaFN0cmluZyhyZXN1bHQpOwogICAgICAgIGFy
Z3VtZW50cy0+cHVzaChuZXdDYWxsRnJhbWVzKTsKICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xs
ZXItPmluc3BlY3RvckNsaWVudCgpLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoYXJndW1lbnRzLT50
b0pTT05TdHJpbmcoKSk7CiAgICB9Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6
OmdldFNjcmlwdFNvdXJjZShQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcmdzKQp7CiAgICBE
RUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgYmFja2VuZEZ1bmN0aW9uTmFtZSwgKCJnZXRTY3Jp
cHRTb3VyY2UiKSk7CiAgICBsb25nIGNhbGxJZCA9IDA7CgogICAgaWYgKGFyZ3MtPmxlbmd0aCgp
ICE9IDMpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVy
cm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudHNDb3Vu
dE1lc3NhZ2UoYXJncy0+bGVuZ3RoKCkgLSAxLCAyKSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoK
ICAgIGlmICghYXJncy0+Z2V0KDEpLT5hc051bWJlcigmY2FsbElkKSkgewogICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVu
Y3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50VHlwZU1lc3NhZ2UoMSwgImNhbGxJZCIsICJs
b25nIikpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBTdHJpbmcgc291cmNlSUQ7CiAgICBp
ZiAoIWFyZ3MtPmdldCgyKS0+YXNTdHJpbmcoJnNvdXJjZUlEKSkgewogICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rp
b25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50VHlwZU1lc3NhZ2UoMiwgInNvdXJjZUlEIiwgIlN0
cmluZyIpKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKCFtX2luc3BlY3RvckNvbnRy
b2xsZXIpIHsKICAgICAgICBwcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFt
ZSwgIkVycm9yOiBDb250cm9sbGVyIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKICAgICAg
ICByZXR1cm47CiAgICB9CgogICAgU3RyaW5nIHNjcmlwdFNvdXJjZTsKICAgIG1faW5zcGVjdG9y
Q29udHJvbGxlci0+Z2V0U2NyaXB0U291cmNlKGNhbGxJZCwgc291cmNlSUQsICZzY3JpcHRTb3Vy
Y2UpOwoKICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RvckNsaWVudCgpKSB7
CiAgICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcmd1bWVudHMgPSBJbnNwZWN0b3JBcnJh
eTo6Y3JlYXRlKCk7CiAgICAgICAgYXJndW1lbnRzLT5wdXNoU3RyaW5nKCJkaWRHZXRTY3JpcHRT
b3VyY2UiKTsKICAgICAgICBhcmd1bWVudHMtPnB1c2hOdW1iZXIoY2FsbElkKTsKICAgICAgICBh
cmd1bWVudHMtPnB1c2hTdHJpbmcoc2NyaXB0U291cmNlKTsKICAgICAgICBtX2luc3BlY3RvckNv
bnRyb2xsZXItPmluc3BlY3RvckNsaWVudCgpLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoYXJndW1l
bnRzLT50b0pTT05TdHJpbmcoKSk7CiAgICB9Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXI6OmVuYWJsZVByb2ZpbGVyKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3MpCnsK
ICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAoImVu
YWJsZVByb2ZpbGVyIikpOwogICAgbG9uZyBjYWxsSWQgPSAwOwoKICAgIGlmIChhcmdzLT5sZW5n
dGgoKSAhPSAyKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9j
b2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRz
Q291bnRNZXNzYWdlKGFyZ3MtPmxlbmd0aCgpIC0gMSwgMSkpOwogICAgICAgIHJldHVybjsKICAg
IH0KCiAgICBib29sIGFsd2F5czsKICAgIGlmICghYXJncy0+Z2V0KDEpLT5hc0Jvb2woJmFsd2F5
cykpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVycm9y
KGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudFR5cGVNZXNz
YWdlKDEsICJhbHdheXMiLCAiYm9vbGVhbiIpKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAg
aWYgKCFtX2luc3BlY3RvckNvbnRyb2xsZXIpIHsKICAgICAgICBwcm90b2NvbEVycm9yKGNhbGxJ
ZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgIkVycm9yOiBDb250cm9sbGVyIGhhbmRsZXIgaXMgbm90
IGF2YWlsYWJsZS4iKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgbV9pbnNwZWN0b3JDb250
cm9sbGVyLT5lbmFibGVQcm9maWxlcihhbHdheXMpOwoKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlcjo6ZGlzYWJsZVByb2ZpbGVyKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFy
Z3MpCnsKICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBiYWNrZW5kRnVuY3Rpb25OYW1l
LCAoImRpc2FibGVQcm9maWxlciIpKTsKICAgIGxvbmcgY2FsbElkID0gMDsKCiAgICBpZiAoYXJn
cy0+bGVuZ3RoKCkgIT0gMikgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAg
IHByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0Fy
Z3VtZW50c0NvdW50TWVzc2FnZShhcmdzLT5sZW5ndGgoKSAtIDEsIDEpKTsKICAgICAgICByZXR1
cm47CiAgICB9CgogICAgYm9vbCBhbHdheXM7CiAgICBpZiAoIWFyZ3MtPmdldCgxKS0+YXNCb29s
KCZhbHdheXMpKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9j
b2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRU
eXBlTWVzc2FnZSgxLCAiYWx3YXlzIiwgImJvb2xlYW4iKSk7CiAgICAgICAgcmV0dXJuOwogICAg
fQoKICAgIGlmICghbV9pbnNwZWN0b3JDb250cm9sbGVyKSB7CiAgICAgICAgcHJvdG9jb2xFcnJv
cihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICJFcnJvcjogQ29udHJvbGxlciBoYW5kbGVy
IGlzIG5vdCBhdmFpbGFibGUuIik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIG1faW5zcGVj
dG9yQ29udHJvbGxlci0+ZGlzYWJsZVByb2ZpbGVyKGFsd2F5cyk7Cgp9Cgp2b2lkIEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyOjpzdGFydFByb2ZpbGluZyhQYXNzUmVmUHRyPEluc3BlY3RvckFy
cmF5PiBhcmdzKQp7CiAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgYmFja2VuZEZ1bmN0
aW9uTmFtZSwgKCJzdGFydFByb2ZpbGluZyIpKTsKICAgIGxvbmcgY2FsbElkID0gMDsKCiAgICBp
ZiAoYXJncy0+bGVuZ3RoKCkgIT0gMSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRX
cm9uZ0FyZ3VtZW50c0NvdW50TWVzc2FnZShhcmdzLT5sZW5ndGgoKSAtIDEsIDApKTsKICAgICAg
ICByZXR1cm47CiAgICB9CgogICAgaWYgKCFtX2luc3BlY3RvckNvbnRyb2xsZXIpIHsKICAgICAg
ICBwcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgIkVycm9yOiBDb250
cm9sbGVyIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKICAgICAgICByZXR1cm47CiAgICB9
CgogICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5zdGFydFByb2ZpbGluZygpOwoKfQoKdm9pZCBJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6c3RvcFByb2ZpbGluZyhQYXNzUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiBhcmdzKQp7CiAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgYmFja2Vu
ZEZ1bmN0aW9uTmFtZSwgKCJzdG9wUHJvZmlsaW5nIikpOwogICAgbG9uZyBjYWxsSWQgPSAwOwoK
ICAgIGlmIChhcmdzLT5sZW5ndGgoKSAhPSAxKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZv
cm1hdFdyb25nQXJndW1lbnRzQ291bnRNZXNzYWdlKGFyZ3MtPmxlbmd0aCgpIC0gMSwgMCkpOwog
ICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoIW1faW5zcGVjdG9yQ29udHJvbGxlcikgewog
ICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAiRXJyb3I6
IENvbnRyb2xsZXIgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwogICAgICAgIHJldHVybjsK
ICAgIH0KCiAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPnN0b3BQcm9maWxpbmcoKTsKCn0KCnZv
aWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFByb2ZpbGVIZWFkZXJzKFBhc3NSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3MpCnsKICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5n
LCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAoImdldFByb2ZpbGVIZWFkZXJzIikpOwogICAgbG9uZyBj
YWxsSWQgPSAwOwoKICAgIGlmIChhcmdzLT5sZW5ndGgoKSAhPSAyKSB7CiAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5j
dGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRzQ291bnRNZXNzYWdlKGFyZ3MtPmxlbmd0aCgp
IC0gMSwgMSkpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoIWFyZ3MtPmdldCgxKS0+
YXNOdW1iZXIoJmNhbGxJZCkpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICBwcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdB
cmd1bWVudFR5cGVNZXNzYWdlKDEsICJjYWxsSWQiLCAibG9uZyIpKTsKICAgICAgICByZXR1cm47
CiAgICB9CgogICAgaWYgKCFtX2luc3BlY3RvckNvbnRyb2xsZXIpIHsKICAgICAgICBwcm90b2Nv
bEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgIkVycm9yOiBDb250cm9sbGVyIGhh
bmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgUmVm
UHRyPEluc3BlY3RvckFycmF5PiBoZWFkZXJzOwogICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5n
ZXRQcm9maWxlSGVhZGVycyhjYWxsSWQsICZoZWFkZXJzKTsKCiAgICBpZiAobV9pbnNwZWN0b3JD
b250cm9sbGVyLT5pbnNwZWN0b3JDbGllbnQoKSkgewogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JB
cnJheT4gYXJndW1lbnRzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwogICAgICAgIGFyZ3Vt
ZW50cy0+cHVzaFN0cmluZygiZGlkR2V0UHJvZmlsZUhlYWRlcnMiKTsKICAgICAgICBhcmd1bWVu
dHMtPnB1c2hOdW1iZXIoY2FsbElkKTsKICAgICAgICBhcmd1bWVudHMtPnB1c2goaGVhZGVycyk7
CiAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0b3JDbGllbnQoKS0+c2VuZE1l
c3NhZ2VUb0Zyb250ZW5kKGFyZ3VtZW50cy0+dG9KU09OU3RyaW5nKCkpOwogICAgfQp9Cgp2b2lk
IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRQcm9maWxlKFBhc3NSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+IGFyZ3MpCnsKICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBiYWNrZW5k
RnVuY3Rpb25OYW1lLCAoImdldFByb2ZpbGUiKSk7CiAgICBsb25nIGNhbGxJZCA9IDA7CgogICAg
aWYgKGFyZ3MtPmxlbmd0aCgpICE9IDMpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICAgICBwcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0
V3JvbmdBcmd1bWVudHNDb3VudE1lc3NhZ2UoYXJncy0+bGVuZ3RoKCkgLSAxLCAyKSk7CiAgICAg
ICAgcmV0dXJuOwogICAgfQoKICAgIGlmICghYXJncy0+Z2V0KDEpLT5hc051bWJlcigmY2FsbElk
KSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29sRXJyb3Io
Y2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50VHlwZU1lc3Nh
Z2UoMSwgImNhbGxJZCIsICJsb25nIikpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICB1bnNp
Z25lZCBsb25nIHVpZDsKICAgIGlmICghYXJncy0+Z2V0KDIpLT5hc051bWJlcigmdWlkKSkgewog
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElk
LCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50VHlwZU1lc3NhZ2UoMiwg
InVpZCIsICJ1bnNpZ25lZCBsb25nIikpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAo
IW1faW5zcGVjdG9yQ29udHJvbGxlcikgewogICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBi
YWNrZW5kRnVuY3Rpb25OYW1lLCAiRXJyb3I6IENvbnRyb2xsZXIgaGFuZGxlciBpcyBub3QgYXZh
aWxhYmxlLiIpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBwcm9maWxlOwogICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5nZXRQcm9maWxlKGNhbGxJ
ZCwgdWlkLCAmcHJvZmlsZSk7CgogICAgaWYgKG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVj
dG9yQ2xpZW50KCkpIHsKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3VtZW50cyA9
IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKICAgICAgICBhcmd1bWVudHMtPnB1c2hTdHJpbmco
ImRpZEdldFByb2ZpbGUiKTsKICAgICAgICBhcmd1bWVudHMtPnB1c2hOdW1iZXIoY2FsbElkKTsK
ICAgICAgICBhcmd1bWVudHMtPnB1c2gocHJvZmlsZSk7CiAgICAgICAgbV9pbnNwZWN0b3JDb250
cm9sbGVyLT5pbnNwZWN0b3JDbGllbnQoKS0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGFyZ3VtZW50
cy0+dG9KU09OU3RyaW5nKCkpOwogICAgfQp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyOjpyZW1vdmVQcm9maWxlKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3MpCnsKICAg
IERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAoInJlbW92
ZVByb2ZpbGUiKSk7CiAgICBsb25nIGNhbGxJZCA9IDA7CgogICAgaWYgKGFyZ3MtPmxlbmd0aCgp
ICE9IDIpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVy
cm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudHNDb3Vu
dE1lc3NhZ2UoYXJncy0+bGVuZ3RoKCkgLSAxLCAxKSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoK
ICAgIHVuc2lnbmVkIGxvbmcgdWlkOwogICAgaWYgKCFhcmdzLT5nZXQoMSktPmFzTnVtYmVyKCZ1
aWQpKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJv
cihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRUeXBlTWVz
c2FnZSgxLCAidWlkIiwgInVuc2lnbmVkIGxvbmciKSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoK
ICAgIGlmICghbV9pbnNwZWN0b3JDb250cm9sbGVyKSB7CiAgICAgICAgcHJvdG9jb2xFcnJvcihj
YWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICJFcnJvcjogQ29udHJvbGxlciBoYW5kbGVyIGlz
IG5vdCBhdmFpbGFibGUuIik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIG1faW5zcGVjdG9y
Q29udHJvbGxlci0+cmVtb3ZlUHJvZmlsZSh1aWQpOwoKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlcjo6Y2xlYXJQcm9maWxlcyhQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcmdz
KQp7CiAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgYmFja2VuZEZ1bmN0aW9uTmFtZSwg
KCJjbGVhclByb2ZpbGVzIikpOwogICAgbG9uZyBjYWxsSWQgPSAwOwoKICAgIGlmIChhcmdzLT5s
ZW5ndGgoKSAhPSAxKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcHJv
dG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1l
bnRzQ291bnRNZXNzYWdlKGFyZ3MtPmxlbmd0aCgpIC0gMSwgMCkpOwogICAgICAgIHJldHVybjsK
ICAgIH0KCiAgICBpZiAoIW1faW5zcGVjdG9yQ29udHJvbGxlcikgewogICAgICAgIHByb3RvY29s
RXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAiRXJyb3I6IENvbnRyb2xsZXIgaGFu
ZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBtX2lu
c3BlY3RvckNvbnRyb2xsZXItPmNsZWFyUHJvZmlsZXMoKTsKCn0KCnZvaWQgSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI6OnRha2VIZWFwU25hcHNob3QoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJh
eT4gYXJncykKewogICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGJhY2tlbmRGdW5jdGlv
bk5hbWUsICgidGFrZUhlYXBTbmFwc2hvdCIpKTsKICAgIGxvbmcgY2FsbElkID0gMDsKCiAgICBp
ZiAoYXJncy0+bGVuZ3RoKCkgIT0gMSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRX
cm9uZ0FyZ3VtZW50c0NvdW50TWVzc2FnZShhcmdzLT5sZW5ndGgoKSAtIDEsIDApKTsKICAgICAg
ICByZXR1cm47CiAgICB9CgogICAgaWYgKCFtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3Rv
ckJhY2tlbmQoKSkgewogICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rp
b25OYW1lLCAiRXJyb3I6IEJhY2tlbmQgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwogICAg
ICAgIHJldHVybjsKICAgIH0KCiAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RvckJh
Y2tlbmQoKS0+dGFrZUhlYXBTbmFwc2hvdCgpOwoKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcjo6Z2V0UHJvZmlsZXJMb2dMaW5lcyhQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBh
cmdzKQp7CiAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgYmFja2VuZEZ1bmN0aW9uTmFt
ZSwgKCJnZXRQcm9maWxlckxvZ0xpbmVzIikpOwogICAgbG9uZyBjYWxsSWQgPSAwOwoKICAgIGlm
IChhcmdzLT5sZW5ndGgoKSAhPSAzKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdy
b25nQXJndW1lbnRzQ291bnRNZXNzYWdlKGFyZ3MtPmxlbmd0aCgpIC0gMSwgMikpOwogICAgICAg
IHJldHVybjsKICAgIH0KCiAgICBpZiAoIWFyZ3MtPmdldCgxKS0+YXNOdW1iZXIoJmNhbGxJZCkp
IHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVycm9yKGNh
bGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudFR5cGVNZXNzYWdl
KDEsICJjYWxsSWQiLCAibG9uZyIpKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgbG9uZyBp
blBvc2l0aW9uOwogICAgaWYgKCFhcmdzLT5nZXQoMiktPmFzTnVtYmVyKCZpblBvc2l0aW9uKSkg
ewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29sRXJyb3IoY2Fs
bElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50VHlwZU1lc3NhZ2Uo
MiwgImluUG9zaXRpb24iLCAibG9uZyIpKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYg
KCFtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RvckJhY2tlbmQoKSkgewogICAgICAgIHBy
b3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAiRXJyb3I6IEJhY2tlbmQg
aGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBs
b25nIG91dFBvc2l0aW9uOwogICAgU3RyaW5nIGxvZzsKICAgIG1faW5zcGVjdG9yQ29udHJvbGxl
ci0+aW5zcGVjdG9yQmFja2VuZCgpLT5nZXRQcm9maWxlckxvZ0xpbmVzKGNhbGxJZCwgaW5Qb3Np
dGlvbiwgJm91dFBvc2l0aW9uLCAmbG9nKTsKCiAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVy
LT5pbnNwZWN0b3JDbGllbnQoKSkgewogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJn
dW1lbnRzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwogICAgICAgIGFyZ3VtZW50cy0+cHVz
aFN0cmluZygiZGlkR2V0UHJvZmlsZXJMb2dMaW5lcyIpOwogICAgICAgIGFyZ3VtZW50cy0+cHVz
aE51bWJlcihjYWxsSWQpOwogICAgICAgIGFyZ3VtZW50cy0+cHVzaE51bWJlcihvdXRQb3NpdGlv
bik7CiAgICAgICAgYXJndW1lbnRzLT5wdXNoU3RyaW5nKGxvZyk7CiAgICAgICAgbV9pbnNwZWN0
b3JDb250cm9sbGVyLT5pbnNwZWN0b3JDbGllbnQoKS0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGFy
Z3VtZW50cy0+dG9KU09OU3RyaW5nKCkpOwogICAgfQp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyOjpzZXRJbmplY3RlZFNjcmlwdFNvdXJjZShQYXNzUmVmUHRyPEluc3BlY3RvckFy
cmF5PiBhcmdzKQp7CiAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgYmFja2VuZEZ1bmN0
aW9uTmFtZSwgKCJzZXRJbmplY3RlZFNjcmlwdFNvdXJjZSIpKTsKICAgIGxvbmcgY2FsbElkID0g
MDsKCiAgICBpZiAoYXJncy0+bGVuZ3RoKCkgIT0gMikgewogICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1l
LCBmb3JtYXRXcm9uZ0FyZ3VtZW50c0NvdW50TWVzc2FnZShhcmdzLT5sZW5ndGgoKSAtIDEsIDEp
KTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgU3RyaW5nIHNjcmlwdFNvdXJjZTsKICAgIGlm
ICghYXJncy0+Z2V0KDEpLT5hc1N0cmluZygmc2NyaXB0U291cmNlKSkgewogICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVu
Y3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50VHlwZU1lc3NhZ2UoMSwgInNjcmlwdFNvdXJj
ZSIsICJTdHJpbmciKSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmICghbV9pbnNwZWN0
b3JDb250cm9sbGVyLT5pbnNwZWN0b3JCYWNrZW5kKCkpIHsKICAgICAgICBwcm90b2NvbEVycm9y
KGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgIkVycm9yOiBCYWNrZW5kIGhhbmRsZXIgaXMg
bm90IGF2YWlsYWJsZS4iKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgbV9pbnNwZWN0b3JD
b250cm9sbGVyLT5pbnNwZWN0b3JCYWNrZW5kKCktPnNldEluamVjdGVkU2NyaXB0U291cmNlKHNj
cmlwdFNvdXJjZSk7Cgp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRj
aE9uSW5qZWN0ZWRTY3JpcHQoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJncykKewogICAg
REVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICgiZGlzcGF0
Y2hPbkluamVjdGVkU2NyaXB0IikpOwogICAgbG9uZyBjYWxsSWQgPSAwOwoKICAgIGlmIChhcmdz
LT5sZW5ndGgoKSAhPSA2KSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAg
cHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJn
dW1lbnRzQ291bnRNZXNzYWdlKGFyZ3MtPmxlbmd0aCgpIC0gMSwgNSkpOwogICAgICAgIHJldHVy
bjsKICAgIH0KCiAgICBpZiAoIWFyZ3MtPmdldCgxKS0+YXNOdW1iZXIoJmNhbGxJZCkpIHsKICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVycm9yKGNhbGxJZCwg
YmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudFR5cGVNZXNzYWdlKDEsICJj
YWxsSWQiLCAibG9uZyIpKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgbG9uZyBpbmplY3Rl
ZFNjcmlwdElkOwogICAgaWYgKCFhcmdzLT5nZXQoMiktPmFzTnVtYmVyKCZpbmplY3RlZFNjcmlw
dElkKSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29sRXJy
b3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50VHlwZU1l
c3NhZ2UoMiwgImluamVjdGVkU2NyaXB0SWQiLCAibG9uZyIpKTsKICAgICAgICByZXR1cm47CiAg
ICB9CgogICAgU3RyaW5nIG1ldGhvZE5hbWU7CiAgICBpZiAoIWFyZ3MtPmdldCgzKS0+YXNTdHJp
bmcoJm1ldGhvZE5hbWUpKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAg
cHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJn
dW1lbnRUeXBlTWVzc2FnZSgzLCAibWV0aG9kTmFtZSIsICJTdHJpbmciKSk7CiAgICAgICAgcmV0
dXJuOwogICAgfQoKICAgIFN0cmluZyBhcmd1bWVudHM7CiAgICBpZiAoIWFyZ3MtPmdldCg0KS0+
YXNTdHJpbmcoJmFyZ3VtZW50cykpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICAgICBwcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3Jv
bmdBcmd1bWVudFR5cGVNZXNzYWdlKDQsICJhcmd1bWVudHMiLCAiU3RyaW5nIikpOwogICAgICAg
IHJldHVybjsKICAgIH0KCiAgICBib29sIGFzeW5jOwogICAgaWYgKCFhcmdzLT5nZXQoNSktPmFz
Qm9vbCgmYXN5bmMpKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcHJv
dG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1l
bnRUeXBlTWVzc2FnZSg1LCAiYXN5bmMiLCAiYm9vbGVhbiIpKTsKICAgICAgICByZXR1cm47CiAg
ICB9CgogICAgaWYgKCFtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RvckJhY2tlbmQoKSkg
ewogICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAiRXJy
b3I6IEJhY2tlbmQgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwogICAgICAgIHJldHVybjsK
ICAgIH0KCiAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHJlc3VsdDsKICAgIGJvb2wgaXNFeGNl
cHRpb247CiAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RvckJhY2tlbmQoKS0+ZGlz
cGF0Y2hPbkluamVjdGVkU2NyaXB0KGNhbGxJZCwgaW5qZWN0ZWRTY3JpcHRJZCwgbWV0aG9kTmFt
ZSwgYXJndW1lbnRzLCBhc3luYywgJnJlc3VsdCwgJmlzRXhjZXB0aW9uKTsKCn0KCnZvaWQgSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmFkZFNjcmlwdFRvRXZhbHVhdGVPbkxvYWQoUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJncykKewogICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJp
bmcsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICgiYWRkU2NyaXB0VG9FdmFsdWF0ZU9uTG9hZCIpKTsK
ICAgIGxvbmcgY2FsbElkID0gMDsKCiAgICBpZiAoYXJncy0+bGVuZ3RoKCkgIT0gMikgewogICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBi
YWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50c0NvdW50TWVzc2FnZShhcmdz
LT5sZW5ndGgoKSAtIDEsIDEpKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgU3RyaW5nIHNj
cmlwdFNvdXJjZTsKICAgIGlmICghYXJncy0+Z2V0KDEpLT5hc1N0cmluZygmc2NyaXB0U291cmNl
KSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29sRXJyb3Io
Y2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50VHlwZU1lc3Nh
Z2UoMSwgInNjcmlwdFNvdXJjZSIsICJTdHJpbmciKSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoK
ICAgIGlmICghbV9pbnNwZWN0b3JDb250cm9sbGVyKSB7CiAgICAgICAgcHJvdG9jb2xFcnJvcihj
YWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICJFcnJvcjogQ29udHJvbGxlciBoYW5kbGVyIGlz
IG5vdCBhdmFpbGFibGUuIik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIG1faW5zcGVjdG9y
Q29udHJvbGxlci0+YWRkU2NyaXB0VG9FdmFsdWF0ZU9uTG9hZChzY3JpcHRTb3VyY2UpOwoKfQoK
dm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6cmVtb3ZlQWxsU2NyaXB0c1RvRXZhbHVh
dGVPbkxvYWQoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJncykKewogICAgREVGSU5FX1NU
QVRJQ19MT0NBTChTdHJpbmcsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICgicmVtb3ZlQWxsU2NyaXB0
c1RvRXZhbHVhdGVPbkxvYWQiKSk7CiAgICBsb25nIGNhbGxJZCA9IDA7CgogICAgaWYgKGFyZ3Mt
Pmxlbmd0aCgpICE9IDEpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBw
cm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1
bWVudHNDb3VudE1lc3NhZ2UoYXJncy0+bGVuZ3RoKCkgLSAxLCAwKSk7CiAgICAgICAgcmV0dXJu
OwogICAgfQoKICAgIGlmICghbV9pbnNwZWN0b3JDb250cm9sbGVyKSB7CiAgICAgICAgcHJvdG9j
b2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICJFcnJvcjogQ29udHJvbGxlciBo
YW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIG1f
aW5zcGVjdG9yQ29udHJvbGxlci0+cmVtb3ZlQWxsU2NyaXB0c1RvRXZhbHVhdGVPbkxvYWQoKTsK
Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldENoaWxkTm9kZXMoUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJncykKewogICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJp
bmcsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICgiZ2V0Q2hpbGROb2RlcyIpKTsKICAgIGxvbmcgY2Fs
bElkID0gMDsKCiAgICBpZiAoYXJncy0+bGVuZ3RoKCkgIT0gMykgewogICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rp
b25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50c0NvdW50TWVzc2FnZShhcmdzLT5sZW5ndGgoKSAt
IDEsIDIpKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKCFhcmdzLT5nZXQoMSktPmFz
TnVtYmVyKCZjYWxsSWQpKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAg
cHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJn
dW1lbnRUeXBlTWVzc2FnZSgxLCAiY2FsbElkIiwgImxvbmciKSk7CiAgICAgICAgcmV0dXJuOwog
ICAgfQoKICAgIGxvbmcgbm9kZUlkOwogICAgaWYgKCFhcmdzLT5nZXQoMiktPmFzTnVtYmVyKCZu
b2RlSWQpKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xF
cnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRUeXBl
TWVzc2FnZSgyLCAibm9kZUlkIiwgImxvbmciKSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAg
IGlmICghbV9pbnNwZWN0b3JDb250cm9sbGVyLT5kb21BZ2VudCgpKSB7CiAgICAgICAgcHJvdG9j
b2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICJFcnJvcjogRE9NIGhhbmRsZXIg
aXMgbm90IGF2YWlsYWJsZS4iKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgbV9pbnNwZWN0
b3JDb250cm9sbGVyLT5kb21BZ2VudCgpLT5nZXRDaGlsZE5vZGVzKGNhbGxJZCwgbm9kZUlkKTsK
Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnNldEF0dHJpYnV0ZShQYXNzUmVm
UHRyPEluc3BlY3RvckFycmF5PiBhcmdzKQp7CiAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmlu
ZywgYmFja2VuZEZ1bmN0aW9uTmFtZSwgKCJzZXRBdHRyaWJ1dGUiKSk7CiAgICBsb25nIGNhbGxJ
ZCA9IDA7CgogICAgaWYgKGFyZ3MtPmxlbmd0aCgpICE9IDUpIHsKICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9u
TmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudHNDb3VudE1lc3NhZ2UoYXJncy0+bGVuZ3RoKCkgLSAx
LCA0KSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmICghYXJncy0+Z2V0KDEpLT5hc051
bWJlcigmY2FsbElkKSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHBy
b3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3Vt
ZW50VHlwZU1lc3NhZ2UoMSwgImNhbGxJZCIsICJsb25nIikpOwogICAgICAgIHJldHVybjsKICAg
IH0KCiAgICBsb25nIGVsZW1lbnRJZDsKICAgIGlmICghYXJncy0+Z2V0KDIpLT5hc051bWJlcigm
ZWxlbWVudElkKSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3Rv
Y29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50
VHlwZU1lc3NhZ2UoMiwgImVsZW1lbnRJZCIsICJsb25nIikpOwogICAgICAgIHJldHVybjsKICAg
IH0KCiAgICBTdHJpbmcgbmFtZTsKICAgIGlmICghYXJncy0+Z2V0KDMpLT5hc1N0cmluZygmbmFt
ZSkpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVycm9y
KGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudFR5cGVNZXNz
YWdlKDMsICJuYW1lIiwgIlN0cmluZyIpKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgU3Ry
aW5nIHZhbHVlOwogICAgaWYgKCFhcmdzLT5nZXQoNCktPmFzU3RyaW5nKCZ2YWx1ZSkpIHsKICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVycm9yKGNhbGxJZCwg
YmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudFR5cGVNZXNzYWdlKDQsICJ2
YWx1ZSIsICJTdHJpbmciKSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmICghbV9pbnNw
ZWN0b3JDb250cm9sbGVyLT5kb21BZ2VudCgpKSB7CiAgICAgICAgcHJvdG9jb2xFcnJvcihjYWxs
SWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICJFcnJvcjogRE9NIGhhbmRsZXIgaXMgbm90IGF2YWls
YWJsZS4iKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgYm9vbCBzdWNjZXNzOwogICAgbV9p
bnNwZWN0b3JDb250cm9sbGVyLT5kb21BZ2VudCgpLT5zZXRBdHRyaWJ1dGUoY2FsbElkLCBlbGVt
ZW50SWQsIG5hbWUsIHZhbHVlLCAmc3VjY2Vzcyk7CgogICAgaWYgKG1faW5zcGVjdG9yQ29udHJv
bGxlci0+aW5zcGVjdG9yQ2xpZW50KCkpIHsKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
IGFyZ3VtZW50cyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKICAgICAgICBhcmd1bWVudHMt
PnB1c2hTdHJpbmcoImRpZEFwcGx5RG9tQ2hhbmdlIik7CiAgICAgICAgYXJndW1lbnRzLT5wdXNo
TnVtYmVyKGNhbGxJZCk7CiAgICAgICAgYXJndW1lbnRzLT5wdXNoQm9vbChzdWNjZXNzKTsKICAg
ICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RvckNsaWVudCgpLT5zZW5kTWVzc2Fn
ZVRvRnJvbnRlbmQoYXJndW1lbnRzLT50b0pTT05TdHJpbmcoKSk7CiAgICB9Cn0KCnZvaWQgSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnJlbW92ZUF0dHJpYnV0ZShQYXNzUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiBhcmdzKQp7CiAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgYmFja2Vu
ZEZ1bmN0aW9uTmFtZSwgKCJyZW1vdmVBdHRyaWJ1dGUiKSk7CiAgICBsb25nIGNhbGxJZCA9IDA7
CgogICAgaWYgKGFyZ3MtPmxlbmd0aCgpICE9IDQpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICAgICBwcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwg
Zm9ybWF0V3JvbmdBcmd1bWVudHNDb3VudE1lc3NhZ2UoYXJncy0+bGVuZ3RoKCkgLSAxLCAzKSk7
CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmICghYXJncy0+Z2V0KDEpLT5hc051bWJlcigm
Y2FsbElkKSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29s
RXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50VHlw
ZU1lc3NhZ2UoMSwgImNhbGxJZCIsICJsb25nIikpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAg
ICBsb25nIGVsZW1lbnRJZDsKICAgIGlmICghYXJncy0+Z2V0KDIpLT5hc051bWJlcigmZWxlbWVu
dElkKSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29sRXJy
b3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50VHlwZU1l
c3NhZ2UoMiwgImVsZW1lbnRJZCIsICJsb25nIikpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAg
ICBTdHJpbmcgbmFtZTsKICAgIGlmICghYXJncy0+Z2V0KDMpLT5hc1N0cmluZygmbmFtZSkpIHsK
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVycm9yKGNhbGxJ
ZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudFR5cGVNZXNzYWdlKDMs
ICJuYW1lIiwgIlN0cmluZyIpKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKCFtX2lu
c3BlY3RvckNvbnRyb2xsZXItPmRvbUFnZW50KCkpIHsKICAgICAgICBwcm90b2NvbEVycm9yKGNh
bGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgIkVycm9yOiBET00gaGFuZGxlciBpcyBub3QgYXZh
aWxhYmxlLiIpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBib29sIHN1Y2Nlc3M7CiAgICBt
X2luc3BlY3RvckNvbnRyb2xsZXItPmRvbUFnZW50KCktPnJlbW92ZUF0dHJpYnV0ZShjYWxsSWQs
IGVsZW1lbnRJZCwgbmFtZSwgJnN1Y2Nlc3MpOwoKICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xs
ZXItPmluc3BlY3RvckNsaWVudCgpKSB7CiAgICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBh
cmd1bWVudHMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CiAgICAgICAgYXJndW1lbnRzLT5w
dXNoU3RyaW5nKCJkaWRBcHBseURvbUNoYW5nZSIpOwogICAgICAgIGFyZ3VtZW50cy0+cHVzaE51
bWJlcihjYWxsSWQpOwogICAgICAgIGFyZ3VtZW50cy0+cHVzaEJvb2woc3VjY2Vzcyk7CiAgICAg
ICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0b3JDbGllbnQoKS0+c2VuZE1lc3NhZ2VU
b0Zyb250ZW5kKGFyZ3VtZW50cy0+dG9KU09OU3RyaW5nKCkpOwogICAgfQp9Cgp2b2lkIEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyOjpzZXRUZXh0Tm9kZVZhbHVlKFBhc3NSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+IGFyZ3MpCnsKICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBiYWNrZW5k
RnVuY3Rpb25OYW1lLCAoInNldFRleHROb2RlVmFsdWUiKSk7CiAgICBsb25nIGNhbGxJZCA9IDA7
CgogICAgaWYgKGFyZ3MtPmxlbmd0aCgpICE9IDQpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICAgICBwcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwg
Zm9ybWF0V3JvbmdBcmd1bWVudHNDb3VudE1lc3NhZ2UoYXJncy0+bGVuZ3RoKCkgLSAxLCAzKSk7
CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmICghYXJncy0+Z2V0KDEpLT5hc051bWJlcigm
Y2FsbElkKSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29s
RXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50VHlw
ZU1lc3NhZ2UoMSwgImNhbGxJZCIsICJsb25nIikpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAg
ICBsb25nIG5vZGVJZDsKICAgIGlmICghYXJncy0+Z2V0KDIpLT5hc051bWJlcigmbm9kZUlkKSkg
ewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29sRXJyb3IoY2Fs
bElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50VHlwZU1lc3NhZ2Uo
MiwgIm5vZGVJZCIsICJsb25nIikpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBTdHJpbmcg
dmFsdWU7CiAgICBpZiAoIWFyZ3MtPmdldCgzKS0+YXNTdHJpbmcoJnZhbHVlKSkgewogICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNr
ZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50VHlwZU1lc3NhZ2UoMywgInZhbHVl
IiwgIlN0cmluZyIpKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKCFtX2luc3BlY3Rv
ckNvbnRyb2xsZXItPmRvbUFnZW50KCkpIHsKICAgICAgICBwcm90b2NvbEVycm9yKGNhbGxJZCwg
YmFja2VuZEZ1bmN0aW9uTmFtZSwgIkVycm9yOiBET00gaGFuZGxlciBpcyBub3QgYXZhaWxhYmxl
LiIpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBib29sIHN1Y2Nlc3M7CiAgICBtX2luc3Bl
Y3RvckNvbnRyb2xsZXItPmRvbUFnZW50KCktPnNldFRleHROb2RlVmFsdWUoY2FsbElkLCBub2Rl
SWQsIHZhbHVlLCAmc3VjY2Vzcyk7CgogICAgaWYgKG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5z
cGVjdG9yQ2xpZW50KCkpIHsKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3VtZW50
cyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKICAgICAgICBhcmd1bWVudHMtPnB1c2hTdHJp
bmcoImRpZEFwcGx5RG9tQ2hhbmdlIik7CiAgICAgICAgYXJndW1lbnRzLT5wdXNoTnVtYmVyKGNh
bGxJZCk7CiAgICAgICAgYXJndW1lbnRzLT5wdXNoQm9vbChzdWNjZXNzKTsKICAgICAgICBtX2lu
c3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RvckNsaWVudCgpLT5zZW5kTWVzc2FnZVRvRnJvbnRl
bmQoYXJndW1lbnRzLT50b0pTT05TdHJpbmcoKSk7CiAgICB9Cn0KCnZvaWQgSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI6OmdldEV2ZW50TGlzdGVuZXJzRm9yTm9kZShQYXNzUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiBhcmdzKQp7CiAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgYmFja2Vu
ZEZ1bmN0aW9uTmFtZSwgKCJnZXRFdmVudExpc3RlbmVyc0Zvck5vZGUiKSk7CiAgICBsb25nIGNh
bGxJZCA9IDA7CgogICAgaWYgKGFyZ3MtPmxlbmd0aCgpICE9IDMpIHsKICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0
aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudHNDb3VudE1lc3NhZ2UoYXJncy0+bGVuZ3RoKCkg
LSAxLCAyKSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmICghYXJncy0+Z2V0KDEpLT5h
c051bWJlcigmY2FsbElkKSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAg
IHByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0Fy
Z3VtZW50VHlwZU1lc3NhZ2UoMSwgImNhbGxJZCIsICJsb25nIikpOwogICAgICAgIHJldHVybjsK
ICAgIH0KCiAgICBsb25nIG5vZGVJZDsKICAgIGlmICghYXJncy0+Z2V0KDIpLT5hc051bWJlcigm
bm9kZUlkKSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29s
RXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50VHlw
ZU1lc3NhZ2UoMiwgIm5vZGVJZCIsICJsb25nIikpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAg
ICBpZiAoIW1faW5zcGVjdG9yQ29udHJvbGxlci0+ZG9tQWdlbnQoKSkgewogICAgICAgIHByb3Rv
Y29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAiRXJyb3I6IERPTSBoYW5kbGVy
IGlzIG5vdCBhdmFpbGFibGUuIik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGxvbmcgb3V0
Tm9kZUlkOwogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBsaXN0ZW5lcnNBcnJheTsKICAgIG1f
aW5zcGVjdG9yQ29udHJvbGxlci0+ZG9tQWdlbnQoKS0+Z2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2Rl
KGNhbGxJZCwgbm9kZUlkLCAmb3V0Tm9kZUlkLCAmbGlzdGVuZXJzQXJyYXkpOwoKICAgIGlmICht
X2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RvckNsaWVudCgpKSB7CiAgICAgICAgUmVmUHRy
PEluc3BlY3RvckFycmF5PiBhcmd1bWVudHMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CiAg
ICAgICAgYXJndW1lbnRzLT5wdXNoU3RyaW5nKCJkaWRHZXRFdmVudExpc3RlbmVyc0Zvck5vZGUi
KTsKICAgICAgICBhcmd1bWVudHMtPnB1c2hOdW1iZXIoY2FsbElkKTsKICAgICAgICBhcmd1bWVu
dHMtPnB1c2hOdW1iZXIob3V0Tm9kZUlkKTsKICAgICAgICBhcmd1bWVudHMtPnB1c2gobGlzdGVu
ZXJzQXJyYXkpOwogICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdG9yQ2xpZW50
KCktPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChhcmd1bWVudHMtPnRvSlNPTlN0cmluZygpKTsKICAg
IH0KfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Y29weU5vZGUoUGFzc1JlZlB0
cjxJbnNwZWN0b3JBcnJheT4gYXJncykKewogICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcs
IGJhY2tlbmRGdW5jdGlvbk5hbWUsICgiY29weU5vZGUiKSk7CiAgICBsb25nIGNhbGxJZCA9IDA7
CgogICAgaWYgKGFyZ3MtPmxlbmd0aCgpICE9IDIpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICAgICBwcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwg
Zm9ybWF0V3JvbmdBcmd1bWVudHNDb3VudE1lc3NhZ2UoYXJncy0+bGVuZ3RoKCkgLSAxLCAxKSk7
CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGxvbmcgbm9kZUlkOwogICAgaWYgKCFhcmdzLT5n
ZXQoMSktPmFzTnVtYmVyKCZub2RlSWQpKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1h
dFdyb25nQXJndW1lbnRUeXBlTWVzc2FnZSgxLCAibm9kZUlkIiwgImxvbmciKSk7CiAgICAgICAg
cmV0dXJuOwogICAgfQoKICAgIGlmICghbV9pbnNwZWN0b3JDb250cm9sbGVyLT5kb21BZ2VudCgp
KSB7CiAgICAgICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICJF
cnJvcjogRE9NIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKICAgICAgICByZXR1cm47CiAg
ICB9CgogICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5kb21BZ2VudCgpLT5jb3B5Tm9kZShub2Rl
SWQpOwoKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6cmVtb3ZlTm9kZShQYXNz
UmVmUHRyPEluc3BlY3RvckFycmF5PiBhcmdzKQp7CiAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0
cmluZywgYmFja2VuZEZ1bmN0aW9uTmFtZSwgKCJyZW1vdmVOb2RlIikpOwogICAgbG9uZyBjYWxs
SWQgPSAwOwoKICAgIGlmIChhcmdzLT5sZW5ndGgoKSAhPSAzKSB7CiAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlv
bk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRzQ291bnRNZXNzYWdlKGFyZ3MtPmxlbmd0aCgpIC0g
MSwgMikpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoIWFyZ3MtPmdldCgxKS0+YXNO
dW1iZXIoJmNhbGxJZCkpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBw
cm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1
bWVudFR5cGVNZXNzYWdlKDEsICJjYWxsSWQiLCAibG9uZyIpKTsKICAgICAgICByZXR1cm47CiAg
ICB9CgogICAgbG9uZyBub2RlSWQ7CiAgICBpZiAoIWFyZ3MtPmdldCgyKS0+YXNOdW1iZXIoJm5v
ZGVJZCkpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVy
cm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudFR5cGVN
ZXNzYWdlKDIsICJub2RlSWQiLCAibG9uZyIpKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAg
aWYgKCFtX2luc3BlY3RvckNvbnRyb2xsZXItPmRvbUFnZW50KCkpIHsKICAgICAgICBwcm90b2Nv
bEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgIkVycm9yOiBET00gaGFuZGxlciBp
cyBub3QgYXZhaWxhYmxlLiIpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBsb25nIG91dE5v
ZGVJZDsKICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+ZG9tQWdlbnQoKS0+cmVtb3ZlTm9kZShj
YWxsSWQsIG5vZGVJZCwgJm91dE5vZGVJZCk7CgogICAgaWYgKG1faW5zcGVjdG9yQ29udHJvbGxl
ci0+aW5zcGVjdG9yQ2xpZW50KCkpIHsKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFy
Z3VtZW50cyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKICAgICAgICBhcmd1bWVudHMtPnB1
c2hTdHJpbmcoImRpZFJlbW92ZU5vZGUiKTsKICAgICAgICBhcmd1bWVudHMtPnB1c2hOdW1iZXIo
Y2FsbElkKTsKICAgICAgICBhcmd1bWVudHMtPnB1c2hOdW1iZXIob3V0Tm9kZUlkKTsKICAgICAg
ICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RvckNsaWVudCgpLT5zZW5kTWVzc2FnZVRv
RnJvbnRlbmQoYXJndW1lbnRzLT50b0pTT05TdHJpbmcoKSk7CiAgICB9Cn0KCnZvaWQgSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXI6OmNoYW5nZVRhZ05hbWUoUGFzc1JlZlB0cjxJbnNwZWN0b3JB
cnJheT4gYXJncykKewogICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGJhY2tlbmRGdW5j
dGlvbk5hbWUsICgiY2hhbmdlVGFnTmFtZSIpKTsKICAgIGxvbmcgY2FsbElkID0gMDsKCiAgICBp
ZiAoYXJncy0+bGVuZ3RoKCkgIT0gNCkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRX
cm9uZ0FyZ3VtZW50c0NvdW50TWVzc2FnZShhcmdzLT5sZW5ndGgoKSAtIDEsIDMpKTsKICAgICAg
ICByZXR1cm47CiAgICB9CgogICAgaWYgKCFhcmdzLT5nZXQoMSktPmFzTnVtYmVyKCZjYWxsSWQp
KSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcihj
YWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRUeXBlTWVzc2Fn
ZSgxLCAiY2FsbElkIiwgImxvbmciKSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGxvbmcg
bm9kZUlkOwogICAgaWYgKCFhcmdzLT5nZXQoMiktPmFzTnVtYmVyKCZub2RlSWQpKSB7CiAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJh
Y2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRUeXBlTWVzc2FnZSgyLCAibm9k
ZUlkIiwgImxvbmciKSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIFN0cmluZyBuZXdUYWdO
YW1lOwogICAgaWYgKCFhcmdzLT5nZXQoMyktPmFzU3RyaW5nKCZuZXdUYWdOYW1lKSkgewogICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBi
YWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50VHlwZU1lc3NhZ2UoMywgIm5l
d1RhZ05hbWUiLCAiU3RyaW5nIikpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoIW1f
aW5zcGVjdG9yQ29udHJvbGxlci0+ZG9tQWdlbnQoKSkgewogICAgICAgIHByb3RvY29sRXJyb3Io
Y2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAiRXJyb3I6IERPTSBoYW5kbGVyIGlzIG5vdCBh
dmFpbGFibGUuIik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGxvbmcgb3V0Tm9kZUlkOwog
ICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5kb21BZ2VudCgpLT5jaGFuZ2VUYWdOYW1lKGNhbGxJ
ZCwgbm9kZUlkLCBuZXdUYWdOYW1lLCAmb3V0Tm9kZUlkKTsKCiAgICBpZiAobV9pbnNwZWN0b3JD
b250cm9sbGVyLT5pbnNwZWN0b3JDbGllbnQoKSkgewogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JB
cnJheT4gYXJndW1lbnRzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwogICAgICAgIGFyZ3Vt
ZW50cy0+cHVzaFN0cmluZygiZGlkQ2hhbmdlVGFnTmFtZSIpOwogICAgICAgIGFyZ3VtZW50cy0+
cHVzaE51bWJlcihjYWxsSWQpOwogICAgICAgIGFyZ3VtZW50cy0+cHVzaE51bWJlcihvdXROb2Rl
SWQpOwogICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdG9yQ2xpZW50KCktPnNl
bmRNZXNzYWdlVG9Gcm9udGVuZChhcmd1bWVudHMtPnRvSlNPTlN0cmluZygpKTsKICAgIH0KfQoK
dm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0T3V0ZXJIVE1MKFBhc3NSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+IGFyZ3MpCnsKICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBi
YWNrZW5kRnVuY3Rpb25OYW1lLCAoImdldE91dGVySFRNTCIpKTsKICAgIGxvbmcgY2FsbElkID0g
MDsKCiAgICBpZiAoYXJncy0+bGVuZ3RoKCkgIT0gMykgewogICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1l
LCBmb3JtYXRXcm9uZ0FyZ3VtZW50c0NvdW50TWVzc2FnZShhcmdzLT5sZW5ndGgoKSAtIDEsIDIp
KTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKCFhcmdzLT5nZXQoMSktPmFzTnVtYmVy
KCZjYWxsSWQpKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9j
b2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRU
eXBlTWVzc2FnZSgxLCAiY2FsbElkIiwgImxvbmciKSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoK
ICAgIGxvbmcgbm9kZUlkOwogICAgaWYgKCFhcmdzLT5nZXQoMiktPmFzTnVtYmVyKCZub2RlSWQp
KSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcihj
YWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRUeXBlTWVzc2Fn
ZSgyLCAibm9kZUlkIiwgImxvbmciKSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmICgh
bV9pbnNwZWN0b3JDb250cm9sbGVyLT5kb21BZ2VudCgpKSB7CiAgICAgICAgcHJvdG9jb2xFcnJv
cihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICJFcnJvcjogRE9NIGhhbmRsZXIgaXMgbm90
IGF2YWlsYWJsZS4iKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgU3RyaW5nIG91dGVySFRN
TDsKICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+ZG9tQWdlbnQoKS0+Z2V0T3V0ZXJIVE1MKGNh
bGxJZCwgbm9kZUlkLCAmb3V0ZXJIVE1MKTsKCiAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVy
LT5pbnNwZWN0b3JDbGllbnQoKSkgewogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJn
dW1lbnRzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwogICAgICAgIGFyZ3VtZW50cy0+cHVz
aFN0cmluZygiZGlkR2V0T3V0ZXJIVE1MIik7CiAgICAgICAgYXJndW1lbnRzLT5wdXNoTnVtYmVy
KGNhbGxJZCk7CiAgICAgICAgYXJndW1lbnRzLT5wdXNoU3RyaW5nKG91dGVySFRNTCk7CiAgICAg
ICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0b3JDbGllbnQoKS0+c2VuZE1lc3NhZ2VU
b0Zyb250ZW5kKGFyZ3VtZW50cy0+dG9KU09OU3RyaW5nKCkpOwogICAgfQp9Cgp2b2lkIEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyOjpzZXRPdXRlckhUTUwoUGFzc1JlZlB0cjxJbnNwZWN0b3JB
cnJheT4gYXJncykKewogICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGJhY2tlbmRGdW5j
dGlvbk5hbWUsICgic2V0T3V0ZXJIVE1MIikpOwogICAgbG9uZyBjYWxsSWQgPSAwOwoKICAgIGlm
IChhcmdzLT5sZW5ndGgoKSAhPSA0KSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdy
b25nQXJndW1lbnRzQ291bnRNZXNzYWdlKGFyZ3MtPmxlbmd0aCgpIC0gMSwgMykpOwogICAgICAg
IHJldHVybjsKICAgIH0KCiAgICBpZiAoIWFyZ3MtPmdldCgxKS0+YXNOdW1iZXIoJmNhbGxJZCkp
IHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVycm9yKGNh
bGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudFR5cGVNZXNzYWdl
KDEsICJjYWxsSWQiLCAibG9uZyIpKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgbG9uZyBu
b2RlSWQ7CiAgICBpZiAoIWFyZ3MtPmdldCgyKS0+YXNOdW1iZXIoJm5vZGVJZCkpIHsKICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVycm9yKGNhbGxJZCwgYmFj
a2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudFR5cGVNZXNzYWdlKDIsICJub2Rl
SWQiLCAibG9uZyIpKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgU3RyaW5nIG91dGVySFRN
TDsKICAgIGlmICghYXJncy0+Z2V0KDMpLT5hc1N0cmluZygmb3V0ZXJIVE1MKSkgewogICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNr
ZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50VHlwZU1lc3NhZ2UoMywgIm91dGVy
SFRNTCIsICJTdHJpbmciKSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmICghbV9pbnNw
ZWN0b3JDb250cm9sbGVyLT5kb21BZ2VudCgpKSB7CiAgICAgICAgcHJvdG9jb2xFcnJvcihjYWxs
SWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICJFcnJvcjogRE9NIGhhbmRsZXIgaXMgbm90IGF2YWls
YWJsZS4iKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgbG9uZyBvdXROb2RlSWQ7CiAgICBt
X2luc3BlY3RvckNvbnRyb2xsZXItPmRvbUFnZW50KCktPnNldE91dGVySFRNTChjYWxsSWQsIG5v
ZGVJZCwgb3V0ZXJIVE1MLCAmb3V0Tm9kZUlkKTsKCiAgICBpZiAobV9pbnNwZWN0b3JDb250cm9s
bGVyLT5pbnNwZWN0b3JDbGllbnQoKSkgewogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4g
YXJndW1lbnRzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwogICAgICAgIGFyZ3VtZW50cy0+
cHVzaFN0cmluZygiZGlkU2V0T3V0ZXJIVE1MIik7CiAgICAgICAgYXJndW1lbnRzLT5wdXNoTnVt
YmVyKGNhbGxJZCk7CiAgICAgICAgYXJndW1lbnRzLT5wdXNoTnVtYmVyKG91dE5vZGVJZCk7CiAg
ICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0b3JDbGllbnQoKS0+c2VuZE1lc3Nh
Z2VUb0Zyb250ZW5kKGFyZ3VtZW50cy0+dG9KU09OU3RyaW5nKCkpOwogICAgfQp9Cgp2b2lkIElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjphZGRJbnNwZWN0ZWROb2RlKFBhc3NSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+IGFyZ3MpCnsKICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBiYWNr
ZW5kRnVuY3Rpb25OYW1lLCAoImFkZEluc3BlY3RlZE5vZGUiKSk7CiAgICBsb25nIGNhbGxJZCA9
IDA7CgogICAgaWYgKGFyZ3MtPmxlbmd0aCgpICE9IDIpIHsKICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFt
ZSwgZm9ybWF0V3JvbmdBcmd1bWVudHNDb3VudE1lc3NhZ2UoYXJncy0+bGVuZ3RoKCkgLSAxLCAx
KSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGxvbmcgbm9kZUlkOwogICAgaWYgKCFhcmdz
LT5nZXQoMSktPmFzTnVtYmVyKCZub2RlSWQpKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZv
cm1hdFdyb25nQXJndW1lbnRUeXBlTWVzc2FnZSgxLCAibm9kZUlkIiwgImxvbmciKSk7CiAgICAg
ICAgcmV0dXJuOwogICAgfQoKICAgIGlmICghbV9pbnNwZWN0b3JDb250cm9sbGVyLT5kb21BZ2Vu
dCgpKSB7CiAgICAgICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUs
ICJFcnJvcjogRE9NIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKICAgICAgICByZXR1cm47
CiAgICB9CgogICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5kb21BZ2VudCgpLT5hZGRJbnNwZWN0
ZWROb2RlKG5vZGVJZCk7Cgp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpwZXJm
b3JtU2VhcmNoKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3MpCnsKICAgIERFRklORV9T
VEFUSUNfTE9DQUwoU3RyaW5nLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAoInBlcmZvcm1TZWFyY2gi
KSk7CiAgICBsb25nIGNhbGxJZCA9IDA7CgogICAgaWYgKGFyZ3MtPmxlbmd0aCgpICE9IDMpIHsK
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVycm9yKGNhbGxJ
ZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudHNDb3VudE1lc3NhZ2Uo
YXJncy0+bGVuZ3RoKCkgLSAxLCAyKSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIFN0cmlu
ZyBxdWVyeTsKICAgIGlmICghYXJncy0+Z2V0KDEpLT5hc1N0cmluZygmcXVlcnkpKSB7CiAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJh
Y2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRUeXBlTWVzc2FnZSgxLCAicXVl
cnkiLCAiU3RyaW5nIikpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBib29sIHJ1blN5bmNo
cm9ub3VzbHk7CiAgICBpZiAoIWFyZ3MtPmdldCgyKS0+YXNCb29sKCZydW5TeW5jaHJvbm91c2x5
KSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29sRXJyb3Io
Y2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50VHlwZU1lc3Nh
Z2UoMiwgInJ1blN5bmNocm9ub3VzbHkiLCAiYm9vbGVhbiIpKTsKICAgICAgICByZXR1cm47CiAg
ICB9CgogICAgaWYgKCFtX2luc3BlY3RvckNvbnRyb2xsZXItPmRvbUFnZW50KCkpIHsKICAgICAg
ICBwcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgIkVycm9yOiBET00g
aGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBt
X2luc3BlY3RvckNvbnRyb2xsZXItPmRvbUFnZW50KCktPnBlcmZvcm1TZWFyY2gocXVlcnksIHJ1
blN5bmNocm9ub3VzbHkpOwoKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6c2Vh
cmNoQ2FuY2VsZWQoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJncykKewogICAgREVGSU5F
X1NUQVRJQ19MT0NBTChTdHJpbmcsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICgic2VhcmNoQ2FuY2Vs
ZWQiKSk7CiAgICBsb25nIGNhbGxJZCA9IDA7CgogICAgaWYgKGFyZ3MtPmxlbmd0aCgpICE9IDEp
IHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVycm9yKGNh
bGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudHNDb3VudE1lc3Nh
Z2UoYXJncy0+bGVuZ3RoKCkgLSAxLCAwKSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlm
ICghbV9pbnNwZWN0b3JDb250cm9sbGVyLT5kb21BZ2VudCgpKSB7CiAgICAgICAgcHJvdG9jb2xF
cnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICJFcnJvcjogRE9NIGhhbmRsZXIgaXMg
bm90IGF2YWlsYWJsZS4iKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgbV9pbnNwZWN0b3JD
b250cm9sbGVyLT5kb21BZ2VudCgpLT5zZWFyY2hDYW5jZWxlZCgpOwoKfQoKdm9pZCBJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcjo6cHVzaE5vZGVCeVBhdGhUb0Zyb250ZW5kKFBhc3NSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+IGFyZ3MpCnsKICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBi
YWNrZW5kRnVuY3Rpb25OYW1lLCAoInB1c2hOb2RlQnlQYXRoVG9Gcm9udGVuZCIpKTsKICAgIGxv
bmcgY2FsbElkID0gMDsKCiAgICBpZiAoYXJncy0+bGVuZ3RoKCkgIT0gMykgewogICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5k
RnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50c0NvdW50TWVzc2FnZShhcmdzLT5sZW5n
dGgoKSAtIDEsIDIpKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKCFhcmdzLT5nZXQo
MSktPmFzTnVtYmVyKCZjYWxsSWQpKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdy
b25nQXJndW1lbnRUeXBlTWVzc2FnZSgxLCAiY2FsbElkIiwgImxvbmciKSk7CiAgICAgICAgcmV0
dXJuOwogICAgfQoKICAgIFN0cmluZyBwYXRoOwogICAgaWYgKCFhcmdzLT5nZXQoMiktPmFzU3Ry
aW5nKCZwYXRoKSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3Rv
Y29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50
VHlwZU1lc3NhZ2UoMiwgInBhdGgiLCAiU3RyaW5nIikpOwogICAgICAgIHJldHVybjsKICAgIH0K
CiAgICBpZiAoIW1faW5zcGVjdG9yQ29udHJvbGxlci0+ZG9tQWdlbnQoKSkgewogICAgICAgIHBy
b3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAiRXJyb3I6IERPTSBoYW5k
bGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGxvbmcg
bm9kZUlkOwogICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5kb21BZ2VudCgpLT5wdXNoTm9kZUJ5
UGF0aFRvRnJvbnRlbmQoY2FsbElkLCBwYXRoLCAmbm9kZUlkKTsKCiAgICBpZiAobV9pbnNwZWN0
b3JDb250cm9sbGVyLT5pbnNwZWN0b3JDbGllbnQoKSkgewogICAgICAgIFJlZlB0cjxJbnNwZWN0
b3JBcnJheT4gYXJndW1lbnRzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwogICAgICAgIGFy
Z3VtZW50cy0+cHVzaFN0cmluZygiZGlkUHVzaE5vZGVCeVBhdGhUb0Zyb250ZW5kIik7CiAgICAg
ICAgYXJndW1lbnRzLT5wdXNoTnVtYmVyKGNhbGxJZCk7CiAgICAgICAgYXJndW1lbnRzLT5wdXNo
TnVtYmVyKG5vZGVJZCk7CiAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0b3JD
bGllbnQoKS0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGFyZ3VtZW50cy0+dG9KU09OU3RyaW5nKCkp
OwogICAgfQp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpjbGVhckNvbnNvbGVN
ZXNzYWdlcyhQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcmdzKQp7CiAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKFN0cmluZywgYmFja2VuZEZ1bmN0aW9uTmFtZSwgKCJjbGVhckNvbnNvbGVNZXNz
YWdlcyIpKTsKICAgIGxvbmcgY2FsbElkID0gMDsKCiAgICBpZiAoYXJncy0+bGVuZ3RoKCkgIT0g
MikgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29sRXJyb3Io
Y2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50c0NvdW50TWVz
c2FnZShhcmdzLT5sZW5ndGgoKSAtIDEsIDEpKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAg
aWYgKCFhcmdzLT5nZXQoMSktPmFzTnVtYmVyKCZjYWxsSWQpKSB7CiAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlv
bk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRUeXBlTWVzc2FnZSgxLCAiY2FsbElkIiwgImxvbmci
KSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmICghbV9pbnNwZWN0b3JDb250cm9sbGVy
LT5pbnNwZWN0b3JCYWNrZW5kKCkpIHsKICAgICAgICBwcm90b2NvbEVycm9yKGNhbGxJZCwgYmFj
a2VuZEZ1bmN0aW9uTmFtZSwgIkVycm9yOiBCYWNrZW5kIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJs
ZS4iKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5p
bnNwZWN0b3JCYWNrZW5kKCktPmNsZWFyQ29uc29sZU1lc3NhZ2VzKGNhbGxJZCk7Cgp9Cgp2b2lk
IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpoaWdobGlnaHRET01Ob2RlKFBhc3NSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+IGFyZ3MpCnsKICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBi
YWNrZW5kRnVuY3Rpb25OYW1lLCAoImhpZ2hsaWdodERPTU5vZGUiKSk7CiAgICBsb25nIGNhbGxJ
ZCA9IDA7CgogICAgaWYgKGFyZ3MtPmxlbmd0aCgpICE9IDIpIHsKICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9u
TmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudHNDb3VudE1lc3NhZ2UoYXJncy0+bGVuZ3RoKCkgLSAx
LCAxKSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGxvbmcgbm9kZUlkOwogICAgaWYgKCFh
cmdzLT5nZXQoMSktPmFzTnVtYmVyKCZub2RlSWQpKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUs
IGZvcm1hdFdyb25nQXJndW1lbnRUeXBlTWVzc2FnZSgxLCAibm9kZUlkIiwgImxvbmciKSk7CiAg
ICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmICghbV9pbnNwZWN0b3JDb250cm9sbGVyKSB7CiAg
ICAgICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICJFcnJvcjog
Q29udHJvbGxlciBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CiAgICAgICAgcmV0dXJuOwog
ICAgfQoKICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+aGlnaGxpZ2h0RE9NTm9kZShub2RlSWQp
OwoKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6aGlkZURPTU5vZGVIaWdobGln
aHQoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJncykKewogICAgREVGSU5FX1NUQVRJQ19M
T0NBTChTdHJpbmcsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICgiaGlkZURPTU5vZGVIaWdobGlnaHQi
KSk7CiAgICBsb25nIGNhbGxJZCA9IDA7CgogICAgaWYgKGFyZ3MtPmxlbmd0aCgpICE9IDEpIHsK
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVycm9yKGNhbGxJ
ZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudHNDb3VudE1lc3NhZ2Uo
YXJncy0+bGVuZ3RoKCkgLSAxLCAwKSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmICgh
bV9pbnNwZWN0b3JDb250cm9sbGVyKSB7CiAgICAgICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJh
Y2tlbmRGdW5jdGlvbk5hbWUsICJFcnJvcjogQ29udHJvbGxlciBoYW5kbGVyIGlzIG5vdCBhdmFp
bGFibGUuIik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIG1faW5zcGVjdG9yQ29udHJvbGxl
ci0+aGlkZURPTU5vZGVIaWdobGlnaHQoKTsKCn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXI6OmdldFN0eWxlcyhQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcmdzKQp7CiAgICBE
RUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgYmFja2VuZEZ1bmN0aW9uTmFtZSwgKCJnZXRTdHls
ZXMiKSk7CiAgICBsb25nIGNhbGxJZCA9IDA7CgogICAgaWYgKGFyZ3MtPmxlbmd0aCgpICE9IDQp
IHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVycm9yKGNh
bGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudHNDb3VudE1lc3Nh
Z2UoYXJncy0+bGVuZ3RoKCkgLSAxLCAzKSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlm
ICghYXJncy0+Z2V0KDEpLT5hc051bWJlcigmY2FsbElkKSkgewogICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25O
YW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50VHlwZU1lc3NhZ2UoMSwgImNhbGxJZCIsICJsb25nIikp
OwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBsb25nIG5vZGVJZDsKICAgIGlmICghYXJncy0+
Z2V0KDIpLT5hc051bWJlcigmbm9kZUlkKSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3Jt
YXRXcm9uZ0FyZ3VtZW50VHlwZU1lc3NhZ2UoMiwgIm5vZGVJZCIsICJsb25nIikpOwogICAgICAg
IHJldHVybjsKICAgIH0KCiAgICBib29sIGF1dGhPbmx5OwogICAgaWYgKCFhcmdzLT5nZXQoMykt
PmFzQm9vbCgmYXV0aE9ubHkpKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
ICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25n
QXJndW1lbnRUeXBlTWVzc2FnZSgzLCAiYXV0aE9ubHkiLCAiYm9vbGVhbiIpKTsKICAgICAgICBy
ZXR1cm47CiAgICB9CgogICAgaWYgKCFtX2luc3BlY3RvckNvbnRyb2xsZXItPmRvbUFnZW50KCkp
IHsKICAgICAgICBwcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgIkVy
cm9yOiBET00gaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwogICAgICAgIHJldHVybjsKICAg
IH0KCiAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHN0eWxlczsKICAgIG1faW5zcGVjdG9yQ29u
dHJvbGxlci0+ZG9tQWdlbnQoKS0+Z2V0U3R5bGVzKGNhbGxJZCwgbm9kZUlkLCBhdXRoT25seSwg
JnN0eWxlcyk7CgogICAgaWYgKG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdG9yQ2xpZW50
KCkpIHsKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3VtZW50cyA9IEluc3BlY3Rv
ckFycmF5OjpjcmVhdGUoKTsKICAgICAgICBhcmd1bWVudHMtPnB1c2hTdHJpbmcoImRpZEdldFN0
eWxlcyIpOwogICAgICAgIGFyZ3VtZW50cy0+cHVzaE51bWJlcihjYWxsSWQpOwogICAgICAgIGFy
Z3VtZW50cy0+cHVzaChzdHlsZXMpOwogICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5z
cGVjdG9yQ2xpZW50KCktPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChhcmd1bWVudHMtPnRvSlNPTlN0
cmluZygpKTsKICAgIH0KfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0QWxs
U3R5bGVzKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3MpCnsKICAgIERFRklORV9TVEFU
SUNfTE9DQUwoU3RyaW5nLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAoImdldEFsbFN0eWxlcyIpKTsK
ICAgIGxvbmcgY2FsbElkID0gMDsKCiAgICBpZiAoYXJncy0+bGVuZ3RoKCkgIT0gMikgewogICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBi
YWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50c0NvdW50TWVzc2FnZShhcmdz
LT5sZW5ndGgoKSAtIDEsIDEpKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKCFhcmdz
LT5nZXQoMSktPmFzTnVtYmVyKCZjYWxsSWQpKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZv
cm1hdFdyb25nQXJndW1lbnRUeXBlTWVzc2FnZSgxLCAiY2FsbElkIiwgImxvbmciKSk7CiAgICAg
ICAgcmV0dXJuOwogICAgfQoKICAgIGlmICghbV9pbnNwZWN0b3JDb250cm9sbGVyLT5kb21BZ2Vu
dCgpKSB7CiAgICAgICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUs
ICJFcnJvcjogRE9NIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKICAgICAgICByZXR1cm47
CiAgICB9CgogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBzdHlsZXM7CiAgICBtX2luc3BlY3Rv
ckNvbnRyb2xsZXItPmRvbUFnZW50KCktPmdldEFsbFN0eWxlcyhjYWxsSWQsICZzdHlsZXMpOwoK
ICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RvckNsaWVudCgpKSB7CiAgICAg
ICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcmd1bWVudHMgPSBJbnNwZWN0b3JBcnJheTo6Y3Jl
YXRlKCk7CiAgICAgICAgYXJndW1lbnRzLT5wdXNoU3RyaW5nKCJkaWRHZXRBbGxTdHlsZXMiKTsK
ICAgICAgICBhcmd1bWVudHMtPnB1c2hOdW1iZXIoY2FsbElkKTsKICAgICAgICBhcmd1bWVudHMt
PnB1c2goc3R5bGVzKTsKICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RvckNs
aWVudCgpLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoYXJndW1lbnRzLT50b0pTT05TdHJpbmcoKSk7
CiAgICB9Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldElubGluZVN0eWxl
KFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3MpCnsKICAgIERFRklORV9TVEFUSUNfTE9D
QUwoU3RyaW5nLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAoImdldElubGluZVN0eWxlIikpOwogICAg
bG9uZyBjYWxsSWQgPSAwOwoKICAgIGlmIChhcmdzLT5sZW5ndGgoKSAhPSAzKSB7CiAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tl
bmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRzQ291bnRNZXNzYWdlKGFyZ3MtPmxl
bmd0aCgpIC0gMSwgMikpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoIWFyZ3MtPmdl
dCgxKS0+YXNOdW1iZXIoJmNhbGxJZCkpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICAgICBwcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0
V3JvbmdBcmd1bWVudFR5cGVNZXNzYWdlKDEsICJjYWxsSWQiLCAibG9uZyIpKTsKICAgICAgICBy
ZXR1cm47CiAgICB9CgogICAgbG9uZyBub2RlSWQ7CiAgICBpZiAoIWFyZ3MtPmdldCgyKS0+YXNO
dW1iZXIoJm5vZGVJZCkpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBw
cm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1
bWVudFR5cGVNZXNzYWdlKDIsICJub2RlSWQiLCAibG9uZyIpKTsKICAgICAgICByZXR1cm47CiAg
ICB9CgogICAgaWYgKCFtX2luc3BlY3RvckNvbnRyb2xsZXItPmRvbUFnZW50KCkpIHsKICAgICAg
ICBwcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgIkVycm9yOiBET00g
aGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBS
ZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHN0eWxlOwogICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5k
b21BZ2VudCgpLT5nZXRJbmxpbmVTdHlsZShjYWxsSWQsIG5vZGVJZCwgJnN0eWxlKTsKCiAgICBp
ZiAobV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0b3JDbGllbnQoKSkgewogICAgICAgIFJl
ZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJndW1lbnRzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgp
OwogICAgICAgIGFyZ3VtZW50cy0+cHVzaFN0cmluZygiZGlkR2V0SW5saW5lU3R5bGUiKTsKICAg
ICAgICBhcmd1bWVudHMtPnB1c2hOdW1iZXIoY2FsbElkKTsKICAgICAgICBhcmd1bWVudHMtPnB1
c2goc3R5bGUpOwogICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdG9yQ2xpZW50
KCktPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChhcmd1bWVudHMtPnRvSlNPTlN0cmluZygpKTsKICAg
IH0KfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0Q29tcHV0ZWRTdHlsZShQ
YXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcmdzKQp7CiAgICBERUZJTkVfU1RBVElDX0xPQ0FM
KFN0cmluZywgYmFja2VuZEZ1bmN0aW9uTmFtZSwgKCJnZXRDb21wdXRlZFN0eWxlIikpOwogICAg
bG9uZyBjYWxsSWQgPSAwOwoKICAgIGlmIChhcmdzLT5sZW5ndGgoKSAhPSAzKSB7CiAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tl
bmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRzQ291bnRNZXNzYWdlKGFyZ3MtPmxl
bmd0aCgpIC0gMSwgMikpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoIWFyZ3MtPmdl
dCgxKS0+YXNOdW1iZXIoJmNhbGxJZCkpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICAgICBwcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0
V3JvbmdBcmd1bWVudFR5cGVNZXNzYWdlKDEsICJjYWxsSWQiLCAibG9uZyIpKTsKICAgICAgICBy
ZXR1cm47CiAgICB9CgogICAgbG9uZyBub2RlSWQ7CiAgICBpZiAoIWFyZ3MtPmdldCgyKS0+YXNO
dW1iZXIoJm5vZGVJZCkpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBw
cm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1
bWVudFR5cGVNZXNzYWdlKDIsICJub2RlSWQiLCAibG9uZyIpKTsKICAgICAgICByZXR1cm47CiAg
ICB9CgogICAgaWYgKCFtX2luc3BlY3RvckNvbnRyb2xsZXItPmRvbUFnZW50KCkpIHsKICAgICAg
ICBwcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgIkVycm9yOiBET00g
aGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBS
ZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHN0eWxlOwogICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5k
b21BZ2VudCgpLT5nZXRDb21wdXRlZFN0eWxlKGNhbGxJZCwgbm9kZUlkLCAmc3R5bGUpOwoKICAg
IGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RvckNsaWVudCgpKSB7CiAgICAgICAg
UmVmUHRyPEluc3BlY3RvckFycmF5PiBhcmd1bWVudHMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRl
KCk7CiAgICAgICAgYXJndW1lbnRzLT5wdXNoU3RyaW5nKCJkaWRHZXRDb21wdXRlZFN0eWxlIik7
CiAgICAgICAgYXJndW1lbnRzLT5wdXNoTnVtYmVyKGNhbGxJZCk7CiAgICAgICAgYXJndW1lbnRz
LT5wdXNoKHN0eWxlKTsKICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RvckNs
aWVudCgpLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoYXJndW1lbnRzLT50b0pTT05TdHJpbmcoKSk7
CiAgICB9Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFN0eWxlU2hlZXQo
UGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJncykKewogICAgREVGSU5FX1NUQVRJQ19MT0NB
TChTdHJpbmcsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICgiZ2V0U3R5bGVTaGVldCIpKTsKICAgIGxv
bmcgY2FsbElkID0gMDsKCiAgICBpZiAoYXJncy0+bGVuZ3RoKCkgIT0gMykgewogICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5k
RnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50c0NvdW50TWVzc2FnZShhcmdzLT5sZW5n
dGgoKSAtIDEsIDIpKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKCFhcmdzLT5nZXQo
MSktPmFzTnVtYmVyKCZjYWxsSWQpKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdy
b25nQXJndW1lbnRUeXBlTWVzc2FnZSgxLCAiY2FsbElkIiwgImxvbmciKSk7CiAgICAgICAgcmV0
dXJuOwogICAgfQoKICAgIGxvbmcgc3R5bGVTaGVldElkOwogICAgaWYgKCFhcmdzLT5nZXQoMikt
PmFzTnVtYmVyKCZzdHlsZVNoZWV0SWQpKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1h
dFdyb25nQXJndW1lbnRUeXBlTWVzc2FnZSgyLCAic3R5bGVTaGVldElkIiwgImxvbmciKSk7CiAg
ICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmICghbV9pbnNwZWN0b3JDb250cm9sbGVyLT5kb21B
Z2VudCgpKSB7CiAgICAgICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5h
bWUsICJFcnJvcjogRE9NIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKICAgICAgICByZXR1
cm47CiAgICB9CgogICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiBzdHlsZVNoZWV0OwogICAgbV9p
bnNwZWN0b3JDb250cm9sbGVyLT5kb21BZ2VudCgpLT5nZXRTdHlsZVNoZWV0KGNhbGxJZCwgc3R5
bGVTaGVldElkLCAmc3R5bGVTaGVldCk7CgogICAgaWYgKG1faW5zcGVjdG9yQ29udHJvbGxlci0+
aW5zcGVjdG9yQ2xpZW50KCkpIHsKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3Vt
ZW50cyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKICAgICAgICBhcmd1bWVudHMtPnB1c2hT
dHJpbmcoImRpZEdldFN0eWxlU2hlZXQiKTsKICAgICAgICBhcmd1bWVudHMtPnB1c2hOdW1iZXIo
Y2FsbElkKTsKICAgICAgICBhcmd1bWVudHMtPnB1c2goc3R5bGVTaGVldCk7CiAgICAgICAgbV9p
bnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0b3JDbGllbnQoKS0+c2VuZE1lc3NhZ2VUb0Zyb250
ZW5kKGFyZ3VtZW50cy0+dG9KU09OU3RyaW5nKCkpOwogICAgfQp9Cgp2b2lkIEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyOjpnZXRSdWxlUmFuZ2VzKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
IGFyZ3MpCnsKICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBiYWNrZW5kRnVuY3Rpb25O
YW1lLCAoImdldFJ1bGVSYW5nZXMiKSk7CiAgICBsb25nIGNhbGxJZCA9IDA7CgogICAgaWYgKGFy
Z3MtPmxlbmd0aCgpICE9IDMpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICBwcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdB
cmd1bWVudHNDb3VudE1lc3NhZ2UoYXJncy0+bGVuZ3RoKCkgLSAxLCAyKSk7CiAgICAgICAgcmV0
dXJuOwogICAgfQoKICAgIGlmICghYXJncy0+Z2V0KDEpLT5hc051bWJlcigmY2FsbElkKSkgewog
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElk
LCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50VHlwZU1lc3NhZ2UoMSwg
ImNhbGxJZCIsICJsb25nIikpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBsb25nIHN0eWxl
U2hlZXRJZDsKICAgIGlmICghYXJncy0+Z2V0KDIpLT5hc051bWJlcigmc3R5bGVTaGVldElkKSkg
ewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29sRXJyb3IoY2Fs
bElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50VHlwZU1lc3NhZ2Uo
MiwgInN0eWxlU2hlZXRJZCIsICJsb25nIikpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBp
ZiAoIW1faW5zcGVjdG9yQ29udHJvbGxlci0+ZG9tQWdlbnQoKSkgewogICAgICAgIHByb3RvY29s
RXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAiRXJyb3I6IERPTSBoYW5kbGVyIGlz
IG5vdCBhdmFpbGFibGUuIik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIFJlZlB0cjxJbnNw
ZWN0b3JWYWx1ZT4gcmFuZ2VzOwogICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5kb21BZ2VudCgp
LT5nZXRSdWxlUmFuZ2VzKGNhbGxJZCwgc3R5bGVTaGVldElkLCAmcmFuZ2VzKTsKCiAgICBpZiAo
bV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0b3JDbGllbnQoKSkgewogICAgICAgIFJlZlB0
cjxJbnNwZWN0b3JBcnJheT4gYXJndW1lbnRzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwog
ICAgICAgIGFyZ3VtZW50cy0+cHVzaFN0cmluZygiZGlkR2V0UnVsZVJhbmdlcyIpOwogICAgICAg
IGFyZ3VtZW50cy0+cHVzaE51bWJlcihjYWxsSWQpOwogICAgICAgIGFyZ3VtZW50cy0+cHVzaChy
YW5nZXMpOwogICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdG9yQ2xpZW50KCkt
PnNlbmRNZXNzYWdlVG9Gcm9udGVuZChhcmd1bWVudHMtPnRvSlNPTlN0cmluZygpKTsKICAgIH0K
fQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6YXBwbHlTdHlsZVRleHQoUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJncykKewogICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJp
bmcsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICgiYXBwbHlTdHlsZVRleHQiKSk7CiAgICBsb25nIGNh
bGxJZCA9IDA7CgogICAgaWYgKGFyZ3MtPmxlbmd0aCgpICE9IDUpIHsKICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0
aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudHNDb3VudE1lc3NhZ2UoYXJncy0+bGVuZ3RoKCkg
LSAxLCA0KSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmICghYXJncy0+Z2V0KDEpLT5h
c051bWJlcigmY2FsbElkKSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAg
IHByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0Fy
Z3VtZW50VHlwZU1lc3NhZ2UoMSwgImNhbGxJZCIsICJsb25nIikpOwogICAgICAgIHJldHVybjsK
ICAgIH0KCiAgICBsb25nIHN0eWxlSWQ7CiAgICBpZiAoIWFyZ3MtPmdldCgyKS0+YXNOdW1iZXIo
JnN0eWxlSWQpKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9j
b2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRU
eXBlTWVzc2FnZSgyLCAic3R5bGVJZCIsICJsb25nIikpOwogICAgICAgIHJldHVybjsKICAgIH0K
CiAgICBTdHJpbmcgc3R5bGVUZXh0OwogICAgaWYgKCFhcmdzLT5nZXQoMyktPmFzU3RyaW5nKCZz
dHlsZVRleHQpKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9j
b2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRU
eXBlTWVzc2FnZSgzLCAic3R5bGVUZXh0IiwgIlN0cmluZyIpKTsKICAgICAgICByZXR1cm47CiAg
ICB9CgogICAgU3RyaW5nIHByb3BlcnR5TmFtZTsKICAgIGlmICghYXJncy0+Z2V0KDQpLT5hc1N0
cmluZygmcHJvcGVydHlOYW1lKSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
ICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9u
Z0FyZ3VtZW50VHlwZU1lc3NhZ2UoNCwgInByb3BlcnR5TmFtZSIsICJTdHJpbmciKSk7CiAgICAg
ICAgcmV0dXJuOwogICAgfQoKICAgIGlmICghbV9pbnNwZWN0b3JDb250cm9sbGVyLT5kb21BZ2Vu
dCgpKSB7CiAgICAgICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUs
ICJFcnJvcjogRE9NIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKICAgICAgICByZXR1cm47
CiAgICB9CgogICAgYm9vbCBzdWNjZXNzOwogICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiBzdHls
ZTsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gY2hhbmdlZFByb3BlcnRpZXM7CiAgICBtX2lu
c3BlY3RvckNvbnRyb2xsZXItPmRvbUFnZW50KCktPmFwcGx5U3R5bGVUZXh0KGNhbGxJZCwgc3R5
bGVJZCwgc3R5bGVUZXh0LCBwcm9wZXJ0eU5hbWUsICZzdWNjZXNzLCAmc3R5bGUsICZjaGFuZ2Vk
UHJvcGVydGllcyk7CgogICAgaWYgKG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdG9yQ2xp
ZW50KCkpIHsKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3VtZW50cyA9IEluc3Bl
Y3RvckFycmF5OjpjcmVhdGUoKTsKICAgICAgICBhcmd1bWVudHMtPnB1c2hTdHJpbmcoImRpZEFw
cGx5U3R5bGVUZXh0Iik7CiAgICAgICAgYXJndW1lbnRzLT5wdXNoTnVtYmVyKGNhbGxJZCk7CiAg
ICAgICAgYXJndW1lbnRzLT5wdXNoQm9vbChzdWNjZXNzKTsKICAgICAgICBhcmd1bWVudHMtPnB1
c2goc3R5bGUpOwogICAgICAgIGFyZ3VtZW50cy0+cHVzaChjaGFuZ2VkUHJvcGVydGllcyk7CiAg
ICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0b3JDbGllbnQoKS0+c2VuZE1lc3Nh
Z2VUb0Zyb250ZW5kKGFyZ3VtZW50cy0+dG9KU09OU3RyaW5nKCkpOwogICAgfQp9Cgp2b2lkIElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpzZXRTdHlsZVRleHQoUGFzc1JlZlB0cjxJbnNwZWN0
b3JBcnJheT4gYXJncykKewogICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGJhY2tlbmRG
dW5jdGlvbk5hbWUsICgic2V0U3R5bGVUZXh0IikpOwogICAgbG9uZyBjYWxsSWQgPSAwOwoKICAg
IGlmIChhcmdzLT5sZW5ndGgoKSAhPSA0KSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1h
dFdyb25nQXJndW1lbnRzQ291bnRNZXNzYWdlKGFyZ3MtPmxlbmd0aCgpIC0gMSwgMykpOwogICAg
ICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoIWFyZ3MtPmdldCgxKS0+YXNOdW1iZXIoJmNhbGxJ
ZCkpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVycm9y
KGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudFR5cGVNZXNz
YWdlKDEsICJjYWxsSWQiLCAibG9uZyIpKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgbG9u
ZyBzdHlsZUlkOwogICAgaWYgKCFhcmdzLT5nZXQoMiktPmFzTnVtYmVyKCZzdHlsZUlkKSkgewog
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElk
LCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50VHlwZU1lc3NhZ2UoMiwg
InN0eWxlSWQiLCAibG9uZyIpKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgU3RyaW5nIHN0
eWxlVGV4dDsKICAgIGlmICghYXJncy0+Z2V0KDMpLT5hc1N0cmluZygmc3R5bGVUZXh0KSkgewog
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElk
LCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50VHlwZU1lc3NhZ2UoMywg
InN0eWxlVGV4dCIsICJTdHJpbmciKSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmICgh
bV9pbnNwZWN0b3JDb250cm9sbGVyLT5kb21BZ2VudCgpKSB7CiAgICAgICAgcHJvdG9jb2xFcnJv
cihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICJFcnJvcjogRE9NIGhhbmRsZXIgaXMgbm90
IGF2YWlsYWJsZS4iKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgYm9vbCBzdWNjZXNzOwog
ICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5kb21BZ2VudCgpLT5zZXRTdHlsZVRleHQoY2FsbElk
LCBzdHlsZUlkLCBzdHlsZVRleHQsICZzdWNjZXNzKTsKCiAgICBpZiAobV9pbnNwZWN0b3JDb250
cm9sbGVyLT5pbnNwZWN0b3JDbGllbnQoKSkgewogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJh
eT4gYXJndW1lbnRzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwogICAgICAgIGFyZ3VtZW50
cy0+cHVzaFN0cmluZygiZGlkU2V0U3R5bGVUZXh0Iik7CiAgICAgICAgYXJndW1lbnRzLT5wdXNo
TnVtYmVyKGNhbGxJZCk7CiAgICAgICAgYXJndW1lbnRzLT5wdXNoQm9vbChzdWNjZXNzKTsKICAg
ICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RvckNsaWVudCgpLT5zZW5kTWVzc2Fn
ZVRvRnJvbnRlbmQoYXJndW1lbnRzLT50b0pTT05TdHJpbmcoKSk7CiAgICB9Cn0KCnZvaWQgSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnNldFN0eWxlUHJvcGVydHkoUGFzc1JlZlB0cjxJbnNw
ZWN0b3JBcnJheT4gYXJncykKewogICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGJhY2tl
bmRGdW5jdGlvbk5hbWUsICgic2V0U3R5bGVQcm9wZXJ0eSIpKTsKICAgIGxvbmcgY2FsbElkID0g
MDsKCiAgICBpZiAoYXJncy0+bGVuZ3RoKCkgIT0gNSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1l
LCBmb3JtYXRXcm9uZ0FyZ3VtZW50c0NvdW50TWVzc2FnZShhcmdzLT5sZW5ndGgoKSAtIDEsIDQp
KTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKCFhcmdzLT5nZXQoMSktPmFzTnVtYmVy
KCZjYWxsSWQpKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9j
b2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRU
eXBlTWVzc2FnZSgxLCAiY2FsbElkIiwgImxvbmciKSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoK
ICAgIGxvbmcgc3R5bGVJZDsKICAgIGlmICghYXJncy0+Z2V0KDIpLT5hc051bWJlcigmc3R5bGVJ
ZCkpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVycm9y
KGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudFR5cGVNZXNz
YWdlKDIsICJzdHlsZUlkIiwgImxvbmciKSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIFN0
cmluZyBuYW1lOwogICAgaWYgKCFhcmdzLT5nZXQoMyktPmFzU3RyaW5nKCZuYW1lKSkgewogICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBi
YWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50VHlwZU1lc3NhZ2UoMywgIm5h
bWUiLCAiU3RyaW5nIikpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBTdHJpbmcgdmFsdWU7
CiAgICBpZiAoIWFyZ3MtPmdldCg0KS0+YXNTdHJpbmcoJnZhbHVlKSkgewogICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVu
Y3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50VHlwZU1lc3NhZ2UoNCwgInZhbHVlIiwgIlN0
cmluZyIpKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKCFtX2luc3BlY3RvckNvbnRy
b2xsZXItPmRvbUFnZW50KCkpIHsKICAgICAgICBwcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2Vu
ZEZ1bmN0aW9uTmFtZSwgIkVycm9yOiBET00gaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwog
ICAgICAgIHJldHVybjsKICAgIH0KCiAgICBib29sIHN1Y2Nlc3M7CiAgICBtX2luc3BlY3RvckNv
bnRyb2xsZXItPmRvbUFnZW50KCktPnNldFN0eWxlUHJvcGVydHkoY2FsbElkLCBzdHlsZUlkLCBu
YW1lLCB2YWx1ZSwgJnN1Y2Nlc3MpOwoKICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXItPmlu
c3BlY3RvckNsaWVudCgpKSB7CiAgICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcmd1bWVu
dHMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CiAgICAgICAgYXJndW1lbnRzLT5wdXNoU3Ry
aW5nKCJkaWRTZXRTdHlsZVByb3BlcnR5Iik7CiAgICAgICAgYXJndW1lbnRzLT5wdXNoTnVtYmVy
KGNhbGxJZCk7CiAgICAgICAgYXJndW1lbnRzLT5wdXNoQm9vbChzdWNjZXNzKTsKICAgICAgICBt
X2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RvckNsaWVudCgpLT5zZW5kTWVzc2FnZVRvRnJv
bnRlbmQoYXJndW1lbnRzLT50b0pTT05TdHJpbmcoKSk7CiAgICB9Cn0KCnZvaWQgSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXI6OnRvZ2dsZVN0eWxlRW5hYmxlZChQYXNzUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiBhcmdzKQp7CiAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgYmFja2VuZEZ1
bmN0aW9uTmFtZSwgKCJ0b2dnbGVTdHlsZUVuYWJsZWQiKSk7CiAgICBsb25nIGNhbGxJZCA9IDA7
CgogICAgaWYgKGFyZ3MtPmxlbmd0aCgpICE9IDUpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICAgICBwcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwg
Zm9ybWF0V3JvbmdBcmd1bWVudHNDb3VudE1lc3NhZ2UoYXJncy0+bGVuZ3RoKCkgLSAxLCA0KSk7
CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmICghYXJncy0+Z2V0KDEpLT5hc051bWJlcigm
Y2FsbElkKSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29s
RXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50VHlw
ZU1lc3NhZ2UoMSwgImNhbGxJZCIsICJsb25nIikpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAg
ICBsb25nIHN0eWxlSWQ7CiAgICBpZiAoIWFyZ3MtPmdldCgyKS0+YXNOdW1iZXIoJnN0eWxlSWQp
KSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcihj
YWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRUeXBlTWVzc2Fn
ZSgyLCAic3R5bGVJZCIsICJsb25nIikpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBTdHJp
bmcgcHJvcGVydHlOYW1lOwogICAgaWYgKCFhcmdzLT5nZXQoMyktPmFzU3RyaW5nKCZwcm9wZXJ0
eU5hbWUpKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xF
cnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRUeXBl
TWVzc2FnZSgzLCAicHJvcGVydHlOYW1lIiwgIlN0cmluZyIpKTsKICAgICAgICByZXR1cm47CiAg
ICB9CgogICAgYm9vbCBkaXNhYmxlZDsKICAgIGlmICghYXJncy0+Z2V0KDQpLT5hc0Jvb2woJmRp
c2FibGVkKSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29s
RXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50VHlw
ZU1lc3NhZ2UoNCwgImRpc2FibGVkIiwgImJvb2xlYW4iKSk7CiAgICAgICAgcmV0dXJuOwogICAg
fQoKICAgIGlmICghbV9pbnNwZWN0b3JDb250cm9sbGVyLT5kb21BZ2VudCgpKSB7CiAgICAgICAg
cHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICJFcnJvcjogRE9NIGhh
bmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgUmVm
UHRyPEluc3BlY3RvclZhbHVlPiBzdHlsZTsKICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+ZG9t
QWdlbnQoKS0+dG9nZ2xlU3R5bGVFbmFibGVkKGNhbGxJZCwgc3R5bGVJZCwgcHJvcGVydHlOYW1l
LCBkaXNhYmxlZCwgJnN0eWxlKTsKCiAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNw
ZWN0b3JDbGllbnQoKSkgewogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJndW1lbnRz
ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwogICAgICAgIGFyZ3VtZW50cy0+cHVzaFN0cmlu
ZygiZGlkVG9nZ2xlU3R5bGVFbmFibGVkIik7CiAgICAgICAgYXJndW1lbnRzLT5wdXNoTnVtYmVy
KGNhbGxJZCk7CiAgICAgICAgYXJndW1lbnRzLT5wdXNoKHN0eWxlKTsKICAgICAgICBtX2luc3Bl
Y3RvckNvbnRyb2xsZXItPmluc3BlY3RvckNsaWVudCgpLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQo
YXJndW1lbnRzLT50b0pTT05TdHJpbmcoKSk7CiAgICB9Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXI6OnNldFJ1bGVTZWxlY3RvcihQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBh
cmdzKQp7CiAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgYmFja2VuZEZ1bmN0aW9uTmFt
ZSwgKCJzZXRSdWxlU2VsZWN0b3IiKSk7CiAgICBsb25nIGNhbGxJZCA9IDA7CgogICAgaWYgKGFy
Z3MtPmxlbmd0aCgpICE9IDUpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICBwcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdB
cmd1bWVudHNDb3VudE1lc3NhZ2UoYXJncy0+bGVuZ3RoKCkgLSAxLCA0KSk7CiAgICAgICAgcmV0
dXJuOwogICAgfQoKICAgIGlmICghYXJncy0+Z2V0KDEpLT5hc051bWJlcigmY2FsbElkKSkgewog
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElk
LCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50VHlwZU1lc3NhZ2UoMSwg
ImNhbGxJZCIsICJsb25nIikpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBsb25nIHJ1bGVJ
ZDsKICAgIGlmICghYXJncy0+Z2V0KDIpLT5hc051bWJlcigmcnVsZUlkKSkgewogICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5k
RnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50VHlwZU1lc3NhZ2UoMiwgInJ1bGVJZCIs
ICJsb25nIikpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBTdHJpbmcgc2VsZWN0b3I7CiAg
ICBpZiAoIWFyZ3MtPmdldCgzKS0+YXNTdHJpbmcoJnNlbGVjdG9yKSkgewogICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVu
Y3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50VHlwZU1lc3NhZ2UoMywgInNlbGVjdG9yIiwg
IlN0cmluZyIpKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgbG9uZyBzZWxlY3RlZE5vZGVJ
ZDsKICAgIGlmICghYXJncy0+Z2V0KDQpLT5hc051bWJlcigmc2VsZWN0ZWROb2RlSWQpKSB7CiAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcihjYWxsSWQs
IGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRUeXBlTWVzc2FnZSg0LCAi
c2VsZWN0ZWROb2RlSWQiLCAibG9uZyIpKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYg
KCFtX2luc3BlY3RvckNvbnRyb2xsZXItPmRvbUFnZW50KCkpIHsKICAgICAgICBwcm90b2NvbEVy
cm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgIkVycm9yOiBET00gaGFuZGxlciBpcyBu
b3QgYXZhaWxhYmxlLiIpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBSZWZQdHI8SW5zcGVj
dG9yVmFsdWU+IHJ1bGU7CiAgICBib29sIHNlbGVjdG9yQWZmZWN0c05vZGU7CiAgICBtX2luc3Bl
Y3RvckNvbnRyb2xsZXItPmRvbUFnZW50KCktPnNldFJ1bGVTZWxlY3RvcihjYWxsSWQsIHJ1bGVJ
ZCwgc2VsZWN0b3IsIHNlbGVjdGVkTm9kZUlkLCAmcnVsZSwgJnNlbGVjdG9yQWZmZWN0c05vZGUp
OwoKICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RvckNsaWVudCgpKSB7CiAg
ICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcmd1bWVudHMgPSBJbnNwZWN0b3JBcnJheTo6
Y3JlYXRlKCk7CiAgICAgICAgYXJndW1lbnRzLT5wdXNoU3RyaW5nKCJkaWRTZXRSdWxlU2VsZWN0
b3IiKTsKICAgICAgICBhcmd1bWVudHMtPnB1c2hOdW1iZXIoY2FsbElkKTsKICAgICAgICBhcmd1
bWVudHMtPnB1c2gocnVsZSk7CiAgICAgICAgYXJndW1lbnRzLT5wdXNoQm9vbChzZWxlY3RvckFm
ZmVjdHNOb2RlKTsKICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RvckNsaWVu
dCgpLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoYXJndW1lbnRzLT50b0pTT05TdHJpbmcoKSk7CiAg
ICB9Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmFkZFJ1bGUoUGFzc1JlZlB0
cjxJbnNwZWN0b3JBcnJheT4gYXJncykKewogICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcs
IGJhY2tlbmRGdW5jdGlvbk5hbWUsICgiYWRkUnVsZSIpKTsKICAgIGxvbmcgY2FsbElkID0gMDsK
CiAgICBpZiAoYXJncy0+bGVuZ3RoKCkgIT0gNCkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBm
b3JtYXRXcm9uZ0FyZ3VtZW50c0NvdW50TWVzc2FnZShhcmdzLT5sZW5ndGgoKSAtIDEsIDMpKTsK
ICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKCFhcmdzLT5nZXQoMSktPmFzTnVtYmVyKCZj
YWxsSWQpKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xF
cnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRUeXBl
TWVzc2FnZSgxLCAiY2FsbElkIiwgImxvbmciKSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAg
IFN0cmluZyBzZWxlY3RvcjsKICAgIGlmICghYXJncy0+Z2V0KDIpLT5hc1N0cmluZygmc2VsZWN0
b3IpKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJv
cihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRUeXBlTWVz
c2FnZSgyLCAic2VsZWN0b3IiLCAiU3RyaW5nIikpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAg
ICBsb25nIHNlbGVjdGVkTm9kZUlkOwogICAgaWYgKCFhcmdzLT5nZXQoMyktPmFzTnVtYmVyKCZz
ZWxlY3RlZE5vZGVJZCkpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBw
cm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1
bWVudFR5cGVNZXNzYWdlKDMsICJzZWxlY3RlZE5vZGVJZCIsICJsb25nIikpOwogICAgICAgIHJl
dHVybjsKICAgIH0KCiAgICBpZiAoIW1faW5zcGVjdG9yQ29udHJvbGxlci0+ZG9tQWdlbnQoKSkg
ewogICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAiRXJy
b3I6IERPTSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CiAgICAgICAgcmV0dXJuOwogICAg
fQoKICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gcnVsZTsKICAgIGJvb2wgc2VsZWN0b3JBZmZl
Y3RzTm9kZTsKICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+ZG9tQWdlbnQoKS0+YWRkUnVsZShj
YWxsSWQsIHNlbGVjdG9yLCBzZWxlY3RlZE5vZGVJZCwgJnJ1bGUsICZzZWxlY3RvckFmZmVjdHNO
b2RlKTsKCiAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0b3JDbGllbnQoKSkg
ewogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJndW1lbnRzID0gSW5zcGVjdG9yQXJy
YXk6OmNyZWF0ZSgpOwogICAgICAgIGFyZ3VtZW50cy0+cHVzaFN0cmluZygiZGlkQWRkUnVsZSIp
OwogICAgICAgIGFyZ3VtZW50cy0+cHVzaE51bWJlcihjYWxsSWQpOwogICAgICAgIGFyZ3VtZW50
cy0+cHVzaChydWxlKTsKICAgICAgICBhcmd1bWVudHMtPnB1c2hCb29sKHNlbGVjdG9yQWZmZWN0
c05vZGUpOwogICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdG9yQ2xpZW50KCkt
PnNlbmRNZXNzYWdlVG9Gcm9udGVuZChhcmd1bWVudHMtPnRvSlNPTlN0cmluZygpKTsKICAgIH0K
fQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0Q29va2llcyhQYXNzUmVmUHRy
PEluc3BlY3RvckFycmF5PiBhcmdzKQp7CiAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywg
YmFja2VuZEZ1bmN0aW9uTmFtZSwgKCJnZXRDb29raWVzIikpOwogICAgbG9uZyBjYWxsSWQgPSAw
OwoKICAgIGlmIChhcmdzLT5sZW5ndGgoKSAhPSAyKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUs
IGZvcm1hdFdyb25nQXJndW1lbnRzQ291bnRNZXNzYWdlKGFyZ3MtPmxlbmd0aCgpIC0gMSwgMSkp
OwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoIWFyZ3MtPmdldCgxKS0+YXNOdW1iZXIo
JmNhbGxJZCkpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBwcm90b2Nv
bEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudFR5
cGVNZXNzYWdlKDEsICJjYWxsSWQiLCAibG9uZyIpKTsKICAgICAgICByZXR1cm47CiAgICB9Cgog
ICAgaWYgKCFtX2luc3BlY3RvckNvbnRyb2xsZXIpIHsKICAgICAgICBwcm90b2NvbEVycm9yKGNh
bGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgIkVycm9yOiBDb250cm9sbGVyIGhhbmRsZXIgaXMg
bm90IGF2YWlsYWJsZS4iKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiBjb29raWVzOwogICAgU3RyaW5nIGNvb2tpZXNTdHJpbmc7CiAgICBtX2luc3Bl
Y3RvckNvbnRyb2xsZXItPmdldENvb2tpZXMoY2FsbElkLCAmY29va2llcywgJmNvb2tpZXNTdHJp
bmcpOwoKICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RvckNsaWVudCgpKSB7
CiAgICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcmd1bWVudHMgPSBJbnNwZWN0b3JBcnJh
eTo6Y3JlYXRlKCk7CiAgICAgICAgYXJndW1lbnRzLT5wdXNoU3RyaW5nKCJkaWRHZXRDb29raWVz
Iik7CiAgICAgICAgYXJndW1lbnRzLT5wdXNoTnVtYmVyKGNhbGxJZCk7CiAgICAgICAgYXJndW1l
bnRzLT5wdXNoKGNvb2tpZXMpOwogICAgICAgIGFyZ3VtZW50cy0+cHVzaFN0cmluZyhjb29raWVz
U3RyaW5nKTsKICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RvckNsaWVudCgp
LT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoYXJndW1lbnRzLT50b0pTT05TdHJpbmcoKSk7CiAgICB9
Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmRlbGV0ZUNvb2tpZShQYXNzUmVm
UHRyPEluc3BlY3RvckFycmF5PiBhcmdzKQp7CiAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmlu
ZywgYmFja2VuZEZ1bmN0aW9uTmFtZSwgKCJkZWxldGVDb29raWUiKSk7CiAgICBsb25nIGNhbGxJ
ZCA9IDA7CgogICAgaWYgKGFyZ3MtPmxlbmd0aCgpICE9IDMpIHsKICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9u
TmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudHNDb3VudE1lc3NhZ2UoYXJncy0+bGVuZ3RoKCkgLSAx
LCAyKSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIFN0cmluZyBjb29raWVOYW1lOwogICAg
aWYgKCFhcmdzLT5nZXQoMSktPmFzU3RyaW5nKCZjb29raWVOYW1lKSkgewogICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVu
Y3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50VHlwZU1lc3NhZ2UoMSwgImNvb2tpZU5hbWUi
LCAiU3RyaW5nIikpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBTdHJpbmcgZG9tYWluOwog
ICAgaWYgKCFhcmdzLT5nZXQoMiktPmFzU3RyaW5nKCZkb21haW4pKSB7CiAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5j
dGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRUeXBlTWVzc2FnZSgyLCAiZG9tYWluIiwgIlN0
cmluZyIpKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKCFtX2luc3BlY3RvckNvbnRy
b2xsZXIpIHsKICAgICAgICBwcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFt
ZSwgIkVycm9yOiBDb250cm9sbGVyIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKICAgICAg
ICByZXR1cm47CiAgICB9CgogICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5kZWxldGVDb29raWUo
Y29va2llTmFtZSwgZG9tYWluKTsKCn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6
OmdldEFwcGxpY2F0aW9uQ2FjaGVzKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3MpCnsK
ICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAoImdl
dEFwcGxpY2F0aW9uQ2FjaGVzIikpOwogICAgbG9uZyBjYWxsSWQgPSAwOwoKICAgIGlmIChhcmdz
LT5sZW5ndGgoKSAhPSAyKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAg
cHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJn
dW1lbnRzQ291bnRNZXNzYWdlKGFyZ3MtPmxlbmd0aCgpIC0gMSwgMSkpOwogICAgICAgIHJldHVy
bjsKICAgIH0KCiAgICBpZiAoIWFyZ3MtPmdldCgxKS0+YXNOdW1iZXIoJmNhbGxJZCkpIHsKICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVycm9yKGNhbGxJZCwg
YmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudFR5cGVNZXNzYWdlKDEsICJj
YWxsSWQiLCAibG9uZyIpKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKCFtX2luc3Bl
Y3RvckNvbnRyb2xsZXItPmFwcGxpY2F0aW9uQ2FjaGVBZ2VudCgpKSB7CiAgICAgICAgcHJvdG9j
b2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICJFcnJvcjogQXBwbGljYXRpb25D
YWNoZSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CiAgICAgICAgcmV0dXJuOwogICAgfQoK
ICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gYXBwbGljYXRpb25DYWNoZXM7CiAgICBtX2luc3Bl
Y3RvckNvbnRyb2xsZXItPmFwcGxpY2F0aW9uQ2FjaGVBZ2VudCgpLT5nZXRBcHBsaWNhdGlvbkNh
Y2hlcyhjYWxsSWQsICZhcHBsaWNhdGlvbkNhY2hlcyk7CgogICAgaWYgKG1faW5zcGVjdG9yQ29u
dHJvbGxlci0+aW5zcGVjdG9yQ2xpZW50KCkpIHsKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yQXJy
YXk+IGFyZ3VtZW50cyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKICAgICAgICBhcmd1bWVu
dHMtPnB1c2hTdHJpbmcoImRpZEdldEFwcGxpY2F0aW9uQ2FjaGVzIik7CiAgICAgICAgYXJndW1l
bnRzLT5wdXNoTnVtYmVyKGNhbGxJZCk7CiAgICAgICAgYXJndW1lbnRzLT5wdXNoKGFwcGxpY2F0
aW9uQ2FjaGVzKTsKICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RvckNsaWVu
dCgpLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoYXJndW1lbnRzLT50b0pTT05TdHJpbmcoKSk7CiAg
ICB9Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnJlbGVhc2VXcmFwcGVyT2Jq
ZWN0R3JvdXAoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJncykKewogICAgREVGSU5FX1NU
QVRJQ19MT0NBTChTdHJpbmcsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICgicmVsZWFzZVdyYXBwZXJP
YmplY3RHcm91cCIpKTsKICAgIGxvbmcgY2FsbElkID0gMDsKCiAgICBpZiAoYXJncy0+bGVuZ3Ro
KCkgIT0gMykgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29s
RXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50c0Nv
dW50TWVzc2FnZShhcmdzLT5sZW5ndGgoKSAtIDEsIDIpKTsKICAgICAgICByZXR1cm47CiAgICB9
CgogICAgbG9uZyBpbmplY3RlZFNjcmlwdElkOwogICAgaWYgKCFhcmdzLT5nZXQoMSktPmFzTnVt
YmVyKCZpbmplY3RlZFNjcmlwdElkKSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRX
cm9uZ0FyZ3VtZW50VHlwZU1lc3NhZ2UoMSwgImluamVjdGVkU2NyaXB0SWQiLCAibG9uZyIpKTsK
ICAgICAgICByZXR1cm47CiAgICB9CgogICAgU3RyaW5nIG9iamVjdEdyb3VwOwogICAgaWYgKCFh
cmdzLT5nZXQoMiktPmFzU3RyaW5nKCZvYmplY3RHcm91cCkpIHsKICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9u
TmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudFR5cGVNZXNzYWdlKDIsICJvYmplY3RHcm91cCIsICJT
dHJpbmciKSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmICghbV9pbnNwZWN0b3JDb250
cm9sbGVyLT5pbnNwZWN0b3JCYWNrZW5kKCkpIHsKICAgICAgICBwcm90b2NvbEVycm9yKGNhbGxJ
ZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgIkVycm9yOiBCYWNrZW5kIGhhbmRsZXIgaXMgbm90IGF2
YWlsYWJsZS4iKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgbV9pbnNwZWN0b3JDb250cm9s
bGVyLT5pbnNwZWN0b3JCYWNrZW5kKCktPnJlbGVhc2VXcmFwcGVyT2JqZWN0R3JvdXAoaW5qZWN0
ZWRTY3JpcHRJZCwgb2JqZWN0R3JvdXApOwoKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcjo6ZGlkRXZhbHVhdGVGb3JUZXN0SW5Gcm9udGVuZChQYXNzUmVmUHRyPEluc3BlY3RvckFy
cmF5PiBhcmdzKQp7CiAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgYmFja2VuZEZ1bmN0
aW9uTmFtZSwgKCJkaWRFdmFsdWF0ZUZvclRlc3RJbkZyb250ZW5kIikpOwogICAgbG9uZyBjYWxs
SWQgPSAwOwoKICAgIGlmIChhcmdzLT5sZW5ndGgoKSAhPSAzKSB7CiAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlv
bk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRzQ291bnRNZXNzYWdlKGFyZ3MtPmxlbmd0aCgpIC0g
MSwgMikpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoIWFyZ3MtPmdldCgxKS0+YXNO
dW1iZXIoJmNhbGxJZCkpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBw
cm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1
bWVudFR5cGVNZXNzYWdlKDEsICJjYWxsSWQiLCAibG9uZyIpKTsKICAgICAgICByZXR1cm47CiAg
ICB9CgogICAgU3RyaW5nIGpzb25SZXN1bHQ7CiAgICBpZiAoIWFyZ3MtPmdldCgyKS0+YXNTdHJp
bmcoJmpzb25SZXN1bHQpKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAg
cHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJn
dW1lbnRUeXBlTWVzc2FnZSgyLCAianNvblJlc3VsdCIsICJTdHJpbmciKSk7CiAgICAgICAgcmV0
dXJuOwogICAgfQoKICAgIGlmICghbV9pbnNwZWN0b3JDb250cm9sbGVyKSB7CiAgICAgICAgcHJv
dG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICJFcnJvcjogQ29udHJvbGxl
ciBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAg
IG1faW5zcGVjdG9yQ29udHJvbGxlci0+ZGlkRXZhbHVhdGVGb3JUZXN0SW5Gcm9udGVuZChjYWxs
SWQsIGpzb25SZXN1bHQpOwoKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0
RGF0YWJhc2VUYWJsZU5hbWVzKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3MpCnsKICAg
IERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAoImdldERh
dGFiYXNlVGFibGVOYW1lcyIpKTsKICAgIGxvbmcgY2FsbElkID0gMDsKCiAgICBpZiAoYXJncy0+
bGVuZ3RoKCkgIT0gMykgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHBy
b3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3Vt
ZW50c0NvdW50TWVzc2FnZShhcmdzLT5sZW5ndGgoKSAtIDEsIDIpKTsKICAgICAgICByZXR1cm47
CiAgICB9CgogICAgaWYgKCFhcmdzLT5nZXQoMSktPmFzTnVtYmVyKCZjYWxsSWQpKSB7CiAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJh
Y2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRUeXBlTWVzc2FnZSgxLCAiY2Fs
bElkIiwgImxvbmciKSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGxvbmcgZGF0YWJhc2VJ
ZDsKICAgIGlmICghYXJncy0+Z2V0KDIpLT5hc051bWJlcigmZGF0YWJhc2VJZCkpIHsKICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVycm9yKGNhbGxJZCwgYmFj
a2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudFR5cGVNZXNzYWdlKDIsICJkYXRh
YmFzZUlkIiwgImxvbmciKSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmICghbV9pbnNw
ZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0b3JCYWNrZW5kKCkpIHsKICAgICAgICBwcm90b2NvbEVy
cm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgIkVycm9yOiBCYWNrZW5kIGhhbmRsZXIg
aXMgbm90IGF2YWlsYWJsZS4iKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgUmVmUHRyPElu
c3BlY3RvckFycmF5PiB0YWJsZU5hbWVzOwogICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNw
ZWN0b3JCYWNrZW5kKCktPmdldERhdGFiYXNlVGFibGVOYW1lcyhjYWxsSWQsIGRhdGFiYXNlSWQs
ICZ0YWJsZU5hbWVzKTsKCiAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0b3JD
bGllbnQoKSkgewogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJndW1lbnRzID0gSW5z
cGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwogICAgICAgIGFyZ3VtZW50cy0+cHVzaFN0cmluZygiZGlk
R2V0RGF0YWJhc2VUYWJsZU5hbWVzIik7CiAgICAgICAgYXJndW1lbnRzLT5wdXNoTnVtYmVyKGNh
bGxJZCk7CiAgICAgICAgYXJndW1lbnRzLT5wdXNoKHRhYmxlTmFtZXMpOwogICAgICAgIG1faW5z
cGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdG9yQ2xpZW50KCktPnNlbmRNZXNzYWdlVG9Gcm9udGVu
ZChhcmd1bWVudHMtPnRvSlNPTlN0cmluZygpKTsKICAgIH0KfQoKdm9pZCBJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcjo6Z2V0RE9NU3RvcmFnZUVudHJpZXMoUGFzc1JlZlB0cjxJbnNwZWN0b3JB
cnJheT4gYXJncykKewogICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGJhY2tlbmRGdW5j
dGlvbk5hbWUsICgiZ2V0RE9NU3RvcmFnZUVudHJpZXMiKSk7CiAgICBsb25nIGNhbGxJZCA9IDA7
CgogICAgaWYgKGFyZ3MtPmxlbmd0aCgpICE9IDMpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICAgICBwcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwg
Zm9ybWF0V3JvbmdBcmd1bWVudHNDb3VudE1lc3NhZ2UoYXJncy0+bGVuZ3RoKCkgLSAxLCAyKSk7
CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmICghYXJncy0+Z2V0KDEpLT5hc051bWJlcigm
Y2FsbElkKSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29s
RXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50VHlw
ZU1lc3NhZ2UoMSwgImNhbGxJZCIsICJsb25nIikpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAg
ICBsb25nIHN0b3JhZ2VJZDsKICAgIGlmICghYXJncy0+Z2V0KDIpLT5hc051bWJlcigmc3RvcmFn
ZUlkKSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29sRXJy
b3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50VHlwZU1l
c3NhZ2UoMiwgInN0b3JhZ2VJZCIsICJsb25nIikpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAg
ICBpZiAoIW1faW5zcGVjdG9yQ29udHJvbGxlcikgewogICAgICAgIHByb3RvY29sRXJyb3IoY2Fs
bElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAiRXJyb3I6IENvbnRyb2xsZXIgaGFuZGxlciBpcyBu
b3QgYXZhaWxhYmxlLiIpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+IGVudHJpZXM7CiAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmdldERPTVN0b3Jh
Z2VFbnRyaWVzKGNhbGxJZCwgc3RvcmFnZUlkLCAmZW50cmllcyk7CgogICAgaWYgKG1faW5zcGVj
dG9yQ29udHJvbGxlci0+aW5zcGVjdG9yQ2xpZW50KCkpIHsKICAgICAgICBSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+IGFyZ3VtZW50cyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKICAgICAgICBh
cmd1bWVudHMtPnB1c2hTdHJpbmcoImRpZEdldERPTVN0b3JhZ2VFbnRyaWVzIik7CiAgICAgICAg
YXJndW1lbnRzLT5wdXNoTnVtYmVyKGNhbGxJZCk7CiAgICAgICAgYXJndW1lbnRzLT5wdXNoKGVu
dHJpZXMpOwogICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdG9yQ2xpZW50KCkt
PnNlbmRNZXNzYWdlVG9Gcm9udGVuZChhcmd1bWVudHMtPnRvSlNPTlN0cmluZygpKTsKICAgIH0K
fQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6c2V0RE9NU3RvcmFnZUl0ZW0oUGFz
c1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJncykKewogICAgREVGSU5FX1NUQVRJQ19MT0NBTChT
dHJpbmcsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICgic2V0RE9NU3RvcmFnZUl0ZW0iKSk7CiAgICBs
b25nIGNhbGxJZCA9IDA7CgogICAgaWYgKGFyZ3MtPmxlbmd0aCgpICE9IDUpIHsKICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2Vu
ZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudHNDb3VudE1lc3NhZ2UoYXJncy0+bGVu
Z3RoKCkgLSAxLCA0KSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmICghYXJncy0+Z2V0
KDEpLT5hc051bWJlcigmY2FsbElkKSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRX
cm9uZ0FyZ3VtZW50VHlwZU1lc3NhZ2UoMSwgImNhbGxJZCIsICJsb25nIikpOwogICAgICAgIHJl
dHVybjsKICAgIH0KCiAgICBsb25nIHN0b3JhZ2VJZDsKICAgIGlmICghYXJncy0+Z2V0KDIpLT5h
c051bWJlcigmc3RvcmFnZUlkKSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
ICAgIHByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9u
Z0FyZ3VtZW50VHlwZU1lc3NhZ2UoMiwgInN0b3JhZ2VJZCIsICJsb25nIikpOwogICAgICAgIHJl
dHVybjsKICAgIH0KCiAgICBTdHJpbmcga2V5OwogICAgaWYgKCFhcmdzLT5nZXQoMyktPmFzU3Ry
aW5nKCZrZXkpKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9j
b2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRU
eXBlTWVzc2FnZSgzLCAia2V5IiwgIlN0cmluZyIpKTsKICAgICAgICByZXR1cm47CiAgICB9Cgog
ICAgU3RyaW5nIHZhbHVlOwogICAgaWYgKCFhcmdzLT5nZXQoNCktPmFzU3RyaW5nKCZ2YWx1ZSkp
IHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVycm9yKGNh
bGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudFR5cGVNZXNzYWdl
KDQsICJ2YWx1ZSIsICJTdHJpbmciKSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmICgh
bV9pbnNwZWN0b3JDb250cm9sbGVyKSB7CiAgICAgICAgcHJvdG9jb2xFcnJvcihjYWxsSWQsIGJh
Y2tlbmRGdW5jdGlvbk5hbWUsICJFcnJvcjogQ29udHJvbGxlciBoYW5kbGVyIGlzIG5vdCBhdmFp
bGFibGUuIik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGJvb2wgc3VjY2VzczsKICAgIG1f
aW5zcGVjdG9yQ29udHJvbGxlci0+c2V0RE9NU3RvcmFnZUl0ZW0oY2FsbElkLCBzdG9yYWdlSWQs
IGtleSwgdmFsdWUsICZzdWNjZXNzKTsKCiAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyLT5p
bnNwZWN0b3JDbGllbnQoKSkgewogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJndW1l
bnRzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwogICAgICAgIGFyZ3VtZW50cy0+cHVzaFN0
cmluZygiZGlkU2V0RE9NU3RvcmFnZUl0ZW0iKTsKICAgICAgICBhcmd1bWVudHMtPnB1c2hOdW1i
ZXIoY2FsbElkKTsKICAgICAgICBhcmd1bWVudHMtPnB1c2hCb29sKHN1Y2Nlc3MpOwogICAgICAg
IG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdG9yQ2xpZW50KCktPnNlbmRNZXNzYWdlVG9G
cm9udGVuZChhcmd1bWVudHMtPnRvSlNPTlN0cmluZygpKTsKICAgIH0KfQoKdm9pZCBJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcjo6cmVtb3ZlRE9NU3RvcmFnZUl0ZW0oUGFzc1JlZlB0cjxJbnNw
ZWN0b3JBcnJheT4gYXJncykKewogICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGJhY2tl
bmRGdW5jdGlvbk5hbWUsICgicmVtb3ZlRE9NU3RvcmFnZUl0ZW0iKSk7CiAgICBsb25nIGNhbGxJ
ZCA9IDA7CgogICAgaWYgKGFyZ3MtPmxlbmd0aCgpICE9IDQpIHsKICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9u
TmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudHNDb3VudE1lc3NhZ2UoYXJncy0+bGVuZ3RoKCkgLSAx
LCAzKSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmICghYXJncy0+Z2V0KDEpLT5hc051
bWJlcigmY2FsbElkKSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHBy
b3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3Vt
ZW50VHlwZU1lc3NhZ2UoMSwgImNhbGxJZCIsICJsb25nIikpOwogICAgICAgIHJldHVybjsKICAg
IH0KCiAgICBsb25nIHN0b3JhZ2VJZDsKICAgIGlmICghYXJncy0+Z2V0KDIpLT5hc051bWJlcigm
c3RvcmFnZUlkKSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHByb3Rv
Y29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50
VHlwZU1lc3NhZ2UoMiwgInN0b3JhZ2VJZCIsICJsb25nIikpOwogICAgICAgIHJldHVybjsKICAg
IH0KCiAgICBTdHJpbmcga2V5OwogICAgaWYgKCFhcmdzLT5nZXQoMyktPmFzU3RyaW5nKCZrZXkp
KSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcHJvdG9jb2xFcnJvcihj
YWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRUeXBlTWVzc2Fn
ZSgzLCAia2V5IiwgIlN0cmluZyIpKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKCFt
X2luc3BlY3RvckNvbnRyb2xsZXIpIHsKICAgICAgICBwcm90b2NvbEVycm9yKGNhbGxJZCwgYmFj
a2VuZEZ1bmN0aW9uTmFtZSwgIkVycm9yOiBDb250cm9sbGVyIGhhbmRsZXIgaXMgbm90IGF2YWls
YWJsZS4iKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgYm9vbCBzdWNjZXNzOwogICAgbV9p
bnNwZWN0b3JDb250cm9sbGVyLT5yZW1vdmVET01TdG9yYWdlSXRlbShjYWxsSWQsIHN0b3JhZ2VJ
ZCwga2V5LCAmc3VjY2Vzcyk7CgogICAgaWYgKG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVj
dG9yQ2xpZW50KCkpIHsKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3VtZW50cyA9
IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKICAgICAgICBhcmd1bWVudHMtPnB1c2hTdHJpbmco
ImRpZFJlbW92ZURPTVN0b3JhZ2VJdGVtIik7CiAgICAgICAgYXJndW1lbnRzLT5wdXNoTnVtYmVy
KGNhbGxJZCk7CiAgICAgICAgYXJndW1lbnRzLT5wdXNoQm9vbChzdWNjZXNzKTsKICAgICAgICBt
X2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RvckNsaWVudCgpLT5zZW5kTWVzc2FnZVRvRnJv
bnRlbmQoYXJndW1lbnRzLT50b0pTT05TdHJpbmcoKSk7CiAgICB9Cn0KCnZvaWQgSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKewogICAg
dHlwZWRlZiB2b2lkIChJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6KkNhbGxIYW5kbGVyKShQ
YXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcmdzKTsKICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJp
bmcsIENhbGxIYW5kbGVyPiBEaXNwYXRjaE1hcDsKICAgIERFRklORV9TVEFUSUNfTE9DQUwoRGlz
cGF0Y2hNYXAsIGRpc3BhdGNoTWFwLCApOwogICAgaWYgKGRpc3BhdGNoTWFwLmlzRW1wdHkoKSkg
ewogICAgICAgIGRpc3BhdGNoTWFwLmFkZCgiZ2V0Q2hpbGROb2RlcyIsICZJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcjo6Z2V0Q2hpbGROb2Rlcyk7CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKCJw
YXVzZSIsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6cGF1c2UpOwogICAgICAgIGRpc3Bh
dGNoTWFwLmFkZCgiYWN0aXZhdGVCcmVha3BvaW50cyIsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcjo6YWN0aXZhdGVCcmVha3BvaW50cyk7CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKCJkaXNh
YmxlTW9uaXRvcmluZ1hIUiIsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzYWJsZU1v
bml0b3JpbmdYSFIpOwogICAgICAgIGRpc3BhdGNoTWFwLmFkZCgiYXBwbHlTdHlsZVRleHQiLCAm
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmFwcGx5U3R5bGVUZXh0KTsKICAgICAgICBkaXNw
YXRjaE1hcC5hZGQoInN0ZXBPdXRPZkZ1bmN0aW9uIiwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyOjpzdGVwT3V0T2ZGdW5jdGlvbik7CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKCJoaWRlRE9N
Tm9kZUhpZ2hsaWdodCIsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6aGlkZURPTU5vZGVI
aWdobGlnaHQpOwogICAgICAgIGRpc3BhdGNoTWFwLmFkZCgic2V0QXR0cmlidXRlIiwgJkluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyOjpzZXRBdHRyaWJ1dGUpOwogICAgICAgIGRpc3BhdGNoTWFw
LmFkZCgicmVzdW1lIiwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpyZXN1bWUpOwogICAg
ICAgIGRpc3BhdGNoTWFwLmFkZCgiY29weU5vZGUiLCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI6OmNvcHlOb2RlKTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoImRpZEV2YWx1YXRlRm9yVGVz
dEluRnJvbnRlbmQiLCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmRpZEV2YWx1YXRlRm9y
VGVzdEluRnJvbnRlbmQpOwogICAgICAgIGRpc3BhdGNoTWFwLmFkZCgic2V0UnVsZVNlbGVjdG9y
IiwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpzZXRSdWxlU2VsZWN0b3IpOwogICAgICAg
IGRpc3BhdGNoTWFwLmFkZCgiZGlzcGF0Y2hPbkluamVjdGVkU2NyaXB0IiwgJkluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaE9uSW5qZWN0ZWRTY3JpcHQpOwogICAgICAgIGRpc3Bh
dGNoTWFwLmFkZCgiZ2V0UHJvZmlsZUhlYWRlcnMiLCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI6OmdldFByb2ZpbGVIZWFkZXJzKTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoImVuYWJsZURl
YnVnZ2VyIiwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjplbmFibGVEZWJ1Z2dlcik7CiAg
ICAgICAgZGlzcGF0Y2hNYXAuYWRkKCJzZXRJbmplY3RlZFNjcmlwdFNvdXJjZSIsICZJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcjo6c2V0SW5qZWN0ZWRTY3JpcHRTb3VyY2UpOwogICAgICAgIGRp
c3BhdGNoTWFwLmFkZCgic3RhcnRUaW1lbGluZVByb2ZpbGVyIiwgJkluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyOjpzdGFydFRpbWVsaW5lUHJvZmlsZXIpOwogICAgICAgIGRpc3BhdGNoTWFwLmFk
ZCgiYWRkSW5zcGVjdGVkTm9kZSIsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6YWRkSW5z
cGVjdGVkTm9kZSk7CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKCJzZXRUZXh0Tm9kZVZhbHVlIiwg
Jkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpzZXRUZXh0Tm9kZVZhbHVlKTsKICAgICAgICBk
aXNwYXRjaE1hcC5hZGQoInNldEJyZWFrcG9pbnQiLCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI6OnNldEJyZWFrcG9pbnQpOwogICAgICAgIGRpc3BhdGNoTWFwLmFkZCgiZ2V0U2NyaXB0U291
cmNlIiwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRTY3JpcHRTb3VyY2UpOwogICAg
ICAgIGRpc3BhdGNoTWFwLmFkZCgic2V0UGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSIsICZJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcjo6c2V0UGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSk7CiAgICAgICAg
ZGlzcGF0Y2hNYXAuYWRkKCJzdG9wUHJvZmlsaW5nIiwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyOjpzdG9wUHJvZmlsaW5nKTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoImdldERhdGFiYXNl
VGFibGVOYW1lcyIsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0RGF0YWJhc2VUYWJs
ZU5hbWVzKTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoImRpc2FibGVTZWFyY2hpbmdGb3JOb2Rl
IiwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpkaXNhYmxlU2VhcmNoaW5nRm9yTm9kZSk7
CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKCJ0b2dnbGVTdHlsZUVuYWJsZWQiLCAmSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXI6OnRvZ2dsZVN0eWxlRW5hYmxlZCk7CiAgICAgICAgZGlzcGF0Y2hN
YXAuYWRkKCJoaWdobGlnaHRET01Ob2RlIiwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpo
aWdobGlnaHRET01Ob2RlKTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoInNhdmVBcHBsaWNhdGlv
blNldHRpbmdzIiwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpzYXZlQXBwbGljYXRpb25T
ZXR0aW5ncyk7CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKCJkaXNhYmxlUmVzb3VyY2VUcmFja2lu
ZyIsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzYWJsZVJlc291cmNlVHJhY2tpbmcp
OwogICAgICAgIGRpc3BhdGNoTWFwLmFkZCgic2V0T3V0ZXJIVE1MIiwgJkluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyOjpzZXRPdXRlckhUTUwpOwogICAgICAgIGRpc3BhdGNoTWFwLmFkZCgiZGlz
YWJsZURlYnVnZ2VyIiwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpkaXNhYmxlRGVidWdn
ZXIpOwogICAgICAgIGRpc3BhdGNoTWFwLmFkZCgic3RlcEludG9TdGF0ZW1lbnQiLCAmSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXI6OnN0ZXBJbnRvU3RhdGVtZW50KTsKICAgICAgICBkaXNwYXRj
aE1hcC5hZGQoInN0ZXBPdmVyU3RhdGVtZW50IiwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
OjpzdGVwT3ZlclN0YXRlbWVudCk7CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKCJnZXRTdHlsZVNo
ZWV0IiwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRTdHlsZVNoZWV0KTsKICAgICAg
ICBkaXNwYXRjaE1hcC5hZGQoInJlbW92ZUJyZWFrcG9pbnQiLCAmSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXI6OnJlbW92ZUJyZWFrcG9pbnQpOwogICAgICAgIGRpc3BhdGNoTWFwLmFkZCgic2F2
ZVNlc3Npb25TZXR0aW5ncyIsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6c2F2ZVNlc3Np
b25TZXR0aW5ncyk7CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKCJyZW1vdmVET01TdG9yYWdlSXRl
bSIsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6cmVtb3ZlRE9NU3RvcmFnZUl0ZW0pOwog
ICAgICAgIGRpc3BhdGNoTWFwLmFkZCgiZW5hYmxlU2VhcmNoaW5nRm9yTm9kZSIsICZJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcjo6ZW5hYmxlU2VhcmNoaW5nRm9yTm9kZSk7CiAgICAgICAgZGlz
cGF0Y2hNYXAuYWRkKCJnZXRDb29raWVzIiwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpn
ZXRDb29raWVzKTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoImRpc2FibGVQcm9maWxlciIsICZJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzYWJsZVByb2ZpbGVyKTsKICAgICAgICBkaXNw
YXRjaE1hcC5hZGQoImFkZFNjcmlwdFRvRXZhbHVhdGVPbkxvYWQiLCAmSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXI6OmFkZFNjcmlwdFRvRXZhbHVhdGVPbkxvYWQpOwogICAgICAgIGRpc3BhdGNo
TWFwLmFkZCgic2V0U3R5bGVQcm9wZXJ0eSIsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6
c2V0U3R5bGVQcm9wZXJ0eSk7CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKCJ0YWtlSGVhcFNuYXBz
aG90IiwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjp0YWtlSGVhcFNuYXBzaG90KTsKICAg
ICAgICBkaXNwYXRjaE1hcC5hZGQoInNldFN0eWxlVGV4dCIsICZJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcjo6c2V0U3R5bGVUZXh0KTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoInJlbW92ZUF0
dHJpYnV0ZSIsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6cmVtb3ZlQXR0cmlidXRlKTsK
ICAgICAgICBkaXNwYXRjaE1hcC5hZGQoImdldEV2ZW50TGlzdGVuZXJzRm9yTm9kZSIsICZJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2RlKTsKICAgICAg
ICBkaXNwYXRjaE1hcC5hZGQoInBlcmZvcm1TZWFyY2giLCAmSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXI6OnBlcmZvcm1TZWFyY2gpOwogICAgICAgIGRpc3BhdGNoTWFwLmFkZCgiY2hhbmdlVGFn
TmFtZSIsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Y2hhbmdlVGFnTmFtZSk7CiAgICAg
ICAgZGlzcGF0Y2hNYXAuYWRkKCJjbGVhclByb2ZpbGVzIiwgJkluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyOjpjbGVhclByb2ZpbGVzKTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoInJlbW92ZUFs
bFNjcmlwdHNUb0V2YWx1YXRlT25Mb2FkIiwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpy
ZW1vdmVBbGxTY3JpcHRzVG9FdmFsdWF0ZU9uTG9hZCk7CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRk
KCJnZXRQcm9maWxlckxvZ0xpbmVzIiwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRQ
cm9maWxlckxvZ0xpbmVzKTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoInJlbW92ZVByb2ZpbGUi
LCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnJlbW92ZVByb2ZpbGUpOwogICAgICAgIGRp
c3BhdGNoTWFwLmFkZCgicHVzaE5vZGVCeVBhdGhUb0Zyb250ZW5kIiwgJkluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyOjpwdXNoTm9kZUJ5UGF0aFRvRnJvbnRlbmQpOwogICAgICAgIGRpc3BhdGNo
TWFwLmFkZCgicmVsZWFzZVdyYXBwZXJPYmplY3RHcm91cCIsICZJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcjo6cmVsZWFzZVdyYXBwZXJPYmplY3RHcm91cCk7CiAgICAgICAgZGlzcGF0Y2hNYXAu
YWRkKCJhZGRSdWxlIiwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjphZGRSdWxlKTsKICAg
ICAgICBkaXNwYXRjaE1hcC5hZGQoInNldERPTVN0b3JhZ2VJdGVtIiwgJkluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyOjpzZXRET01TdG9yYWdlSXRlbSk7CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRk
KCJnZXRBcHBsaWNhdGlvbkNhY2hlcyIsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0
QXBwbGljYXRpb25DYWNoZXMpOwogICAgICAgIGRpc3BhdGNoTWFwLmFkZCgiZWRpdFNjcmlwdFNv
dXJjZSIsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6ZWRpdFNjcmlwdFNvdXJjZSk7CiAg
ICAgICAgZGlzcGF0Y2hNYXAuYWRkKCJzdG9wVGltZWxpbmVQcm9maWxlciIsICZJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcjo6c3RvcFRpbWVsaW5lUHJvZmlsZXIpOwogICAgICAgIGRpc3BhdGNo
TWFwLmFkZCgiZW5hYmxlTW9uaXRvcmluZ1hIUiIsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cjo6ZW5hYmxlTW9uaXRvcmluZ1hIUik7CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKCJzZWFyY2hD
YW5jZWxlZCIsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6c2VhcmNoQ2FuY2VsZWQpOwog
ICAgICAgIGRpc3BhdGNoTWFwLmFkZCgic3RhcnRQcm9maWxpbmciLCAmSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXI6OnN0YXJ0UHJvZmlsaW5nKTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoImVu
YWJsZVJlc291cmNlVHJhY2tpbmciLCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmVuYWJs
ZVJlc291cmNlVHJhY2tpbmcpOwogICAgICAgIGRpc3BhdGNoTWFwLmFkZCgiY2xlYXJDb25zb2xl
TWVzc2FnZXMiLCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmNsZWFyQ29uc29sZU1lc3Nh
Z2VzKTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoImdldElubGluZVN0eWxlIiwgJkluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyOjpnZXRJbmxpbmVTdHlsZSk7CiAgICAgICAgZGlzcGF0Y2hNYXAu
YWRkKCJnZXRPdXRlckhUTUwiLCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldE91dGVy
SFRNTCk7CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKCJnZXRDb21wdXRlZFN0eWxlIiwgJkluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRDb21wdXRlZFN0eWxlKTsKICAgICAgICBkaXNwYXRj
aE1hcC5hZGQoImRlYWN0aXZhdGVCcmVha3BvaW50cyIsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcjo6ZGVhY3RpdmF0ZUJyZWFrcG9pbnRzKTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoImdl
dFJ1bGVSYW5nZXMiLCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFJ1bGVSYW5nZXMp
OwogICAgICAgIGRpc3BhdGNoTWFwLmFkZCgiZ2V0UmVzb3VyY2VDb250ZW50IiwgJkluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyOjpnZXRSZXNvdXJjZUNvbnRlbnQpOwogICAgICAgIGRpc3BhdGNo
TWFwLmFkZCgiZ2V0RE9NU3RvcmFnZUVudHJpZXMiLCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI6OmdldERPTVN0b3JhZ2VFbnRyaWVzKTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoInJlbW92
ZU5vZGUiLCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnJlbW92ZU5vZGUpOwogICAgICAg
IGRpc3BhdGNoTWFwLmFkZCgiZ2V0U3R5bGVzIiwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
OjpnZXRTdHlsZXMpOwogICAgICAgIGRpc3BhdGNoTWFwLmFkZCgiZW5hYmxlUHJvZmlsZXIiLCAm
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmVuYWJsZVByb2ZpbGVyKTsKICAgICAgICBkaXNw
YXRjaE1hcC5hZGQoImdldEFsbFN0eWxlcyIsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6
Z2V0QWxsU3R5bGVzKTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoImRlbGV0ZUNvb2tpZSIsICZJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6ZGVsZXRlQ29va2llKTsKICAgICAgICBkaXNwYXRj
aE1hcC5hZGQoInN0b3JlTGFzdEFjdGl2ZVBhbmVsIiwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyOjpzdG9yZUxhc3RBY3RpdmVQYW5lbCk7CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKCJnZXRQ
cm9maWxlIiwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRQcm9maWxlKTsKICAgICAg
ICBkaXNwYXRjaE1hcC5hZGQoInJlbG9hZFBhZ2UiLCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI6OnJlbG9hZFBhZ2UpOwogICAgfQoKICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gcGFyc2Vk
TWVzc2FnZSA9IEluc3BlY3RvclZhbHVlOjpwYXJzZUpTT04obWVzc2FnZSk7CiAgICBpZiAoIXBh
cnNlZE1lc3NhZ2UpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBwcm90
b2NvbEVycm9yKDAsICJkaXNwYXRjaCIsICJFcnJvcjogSW52YWxpZCBtZXNzYWdlIGZvcm1hdC4g
TWVzc2FnZSBzaG91bGQgYmUgaW4gSlNPTiBmb3JtYXQuIik7CiAgICAgICAgcmV0dXJuOwogICAg
fQoKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gbWVzc2FnZUFycmF5ID0gcGFyc2VkTWVzc2Fn
ZS0+YXNBcnJheSgpOwogICAgaWYgKCFtZXNzYWdlQXJyYXkpIHsKICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICBwcm90b2NvbEVycm9yKDAsICJkaXNwYXRjaCIsICJFcnJvcjog
SW52YWxpZCBtZXNzYWdlIGZvcm1hdC4gVGhlIG1lc3NhZ2Ugc2hvdWxkIGJlIGEgSlNPTmlmaWVk
IGFycmF5IG9mIGFyZ3VtZW50cy4iKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKCFt
ZXNzYWdlQXJyYXktPmxlbmd0aCgpKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgICAgcHJvdG9jb2xFcnJvcigwLCAiZGlzcGF0Y2giLCAiRXJyb3I6IEludmFsaWQgbWVzc2Fn
ZSBmb3JtYXQuIEVtcHR5IG1lc3NhZ2Ugd2FzIHJlY2VpdmVkLiIpOwogICAgICAgIHJldHVybjsK
ICAgIH0KCiAgICBTdHJpbmcgbWV0aG9kTmFtZTsKICAgIGlmICghbWVzc2FnZUFycmF5LT5nZXQo
MCktPmFzU3RyaW5nKCZtZXRob2ROYW1lKSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgIHByb3RvY29sRXJyb3IoMCwgImRpc3BhdGNoIiwgIkVycm9yOiBJbnZhbGlkIG1l
c3NhZ2UgZm9ybWF0LiBUaGUgZmlyc3QgZWxlbWVudCBvZiB0aGUgbWVzc2FnZSBzaG91bGQgYmUg
bWV0aG9kIG5hbWUuIik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIEhhc2hNYXA8U3RyaW5n
LCBDYWxsSGFuZGxlcj46Oml0ZXJhdG9yIGl0ID0gZGlzcGF0Y2hNYXAuZmluZChtZXRob2ROYW1l
KTsKICAgIGlmIChpdCA9PSBkaXNwYXRjaE1hcC5lbmQoKSkgewogICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgICAgIHByb3RvY29sRXJyb3IoMCwgImRpc3BhdGNoIiwgU3RyaW5nOjpm
b3JtYXQoIkVycm9yOiBJbnZhbGlkIG1ldGhvZCBuYW1lLiAnJXMnIHdhc24ndCBmb3VuZC4iLCBt
ZXRob2ROYW1lLnV0ZjgoKS5kYXRhKCkpKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgKCgq
dGhpcykuKml0LT5zZWNvbmQpKG1lc3NhZ2VBcnJheSk7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXI6OnByb3RvY29sRXJyb3IoY29uc3QgbG9uZyBjYWxsSWQsIGNvbnN0IFN0cmlu
ZyYgbWV0aG9kLCBjb25zdCBTdHJpbmcmIGVycm9yVGV4dCkgY29uc3QKewogICAgUmVmUHRyPElu
c3BlY3RvckFycmF5PiBhcmd1bWVudHMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CiAgICBh
cmd1bWVudHMtPnB1c2hTdHJpbmcoInByb3RvY29sRXJyb3IiKTsKICAgIGFyZ3VtZW50cy0+cHVz
aE51bWJlcihjYWxsSWQpOwogICAgYXJndW1lbnRzLT5wdXNoU3RyaW5nKG1ldGhvZCk7CiAgICBh
cmd1bWVudHMtPnB1c2hTdHJpbmcoZXJyb3JUZXh0KTsKICAgIG1faW5zcGVjdG9yQ29udHJvbGxl
ci0+aW5zcGVjdG9yQ2xpZW50KCktPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChhcmd1bWVudHMtPnRv
SlNPTlN0cmluZygpKTsKfQoKfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQoKI2VuZGlmIC8vIEVOQUJM
RShJTlNQRUNUT1IpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63591</attachid>
            <date>2010-08-05 07:49:50 -0700</date>
            <delta_ts>2010-08-05 08:33:50 -0700</delta_ts>
            <desc>[patch] second iteration</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>80410</size>
            <attacher name="Ilya Tikhonovsky">loislo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YWQ5ZDUxNi4uMjBhZGI4YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3OCBAQAorMjAxMC0wOC0wNSAgSWx5YSBUaWtob25v
dnNreSAgPGxvaXNsb0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgV2ViSW5zcGVjdG9yOiBJbiB0aGUgY3VycmVudCBpbXBsZW1l
bnRhdGlvbiBvZiBpbnNwZWN0b3IgYWdlbnRzIHdlJ3JlIGNhbGxpbmcKKyAgICAgICAgZGlkIG1l
dGhvZHMgbWFudWFsbHkuIFRoYXQgaXMgZXJyb3IgcHJvbmUgYW5kIGlzIGJhZCBmcm9tIHByb3Rv
Y29sIHBvaW50IG9mIHZpZXcuCisgICAgICAgIEl0IHdvdWxkIGJlIGJldHRlciB0byBjYWxsIGRp
ZCBtZXRob2RzIGF1dG9tYXRpY2FsbHkgZnJvbSB0aGUgY29ycmVzcG9uZGluZyBtZXRob2RzCisg
ICAgICAgIG9mIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyIGFuZCByZXBvcnQgdGhlIHJlc3Vs
dHMuIEFzIGZhciBhcyBvdXIgcHJvdG9jb2wgaXMKKyAgICAgICAgc3RhdGVmdWxsIHRoaXMgdHJp
Y2sgd2lsbCBrZWVwIGl0IGluIHRoZSBjb25zaXN0ZW50IHN0YXRlLgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDM0ODkKKworICAgICAgICAqIGluc3Bl
Y3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnBtOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNw
ZWN0b3IuaWRsOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hl
QWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFn
ZW50OjpnZXRBcHBsaWNhdGlvbkNhY2hlcyk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rv
ckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JC
YWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckJhY2tlbmQ6OmdldFByb2Zp
bGVyTG9nTGluZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQmFja2VuZDo6c2V0SW5q
ZWN0ZWRTY3JpcHRTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQmFja2VuZDo6
ZGlzcGF0Y2hPbkluamVjdGVkU2NyaXB0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckJh
Y2tlbmQ6OmdldERhdGFiYXNlVGFibGVOYW1lcyk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3Bl
Y3RvckJhY2tlbmQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ1NTU3RvcmUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTU3RvcmU6Omluc3BlY3RvclN0eWxlU2hl
ZXQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDU1NTdG9yZS5oOgorICAgICAgICAq
IGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckNvbnRyb2xsZXI6Okluc3BlY3RvckNvbnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6Z2V0Q29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JDb250cm9sbGVyOjpnZXRET01TdG9yYWdlRW50cmllcyk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRET01TdG9yYWdlSXRlbSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpyZW1vdmVET01TdG9yYWdlSXRlbSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpnZXRQcm9maWxlSGVhZGVycyk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpnZXRQcm9maWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmVkaXRTY3JpcHRTb3VyY2UpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6Z2V0U2NyaXB0U291cmNlKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnNldEJyZWFrcG9pbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6Z2V0UmVzb3VyY2VDb250ZW50KToK
KyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6aW5zcGVjdG9yQ2xpZW50KToKKyAgICAgICAgKiBp
bnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yRE9NQWdlbnQ6OnNldEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JE
T01BZ2VudDo6cmVtb3ZlQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRP
TUFnZW50OjpyZW1vdmVOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50
OjpjaGFuZ2VUYWdOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50Ojpn
ZXRPdXRlckhUTUwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OnNldE91
dGVySFRNTCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6c2V0VGV4dE5v
ZGVWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6Z2V0RXZlbnRM
aXN0ZW5lcnNGb3JOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50Ojpn
ZXRTdHlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmdldEFsbFN0
eWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6Z2V0U3R5bGVTaGVl
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6Z2V0UnVsZVJhbmdlcyk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6Z2V0SW5saW5lU3R5bGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmdldENvbXB1dGVkU3R5bGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmFwcGx5U3R5bGVUZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpzZXRTdHlsZVRleHQpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OnNldFN0eWxlUHJvcGVydHkpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OnRvZ2dsZVN0eWxlRW5hYmxlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6c2V0UnVsZVNlbGVjdG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjphZGRSdWxlKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVjdEZvclJ1bGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OnB1c2hOb2RlQnlQYXRoVG9Gcm9udGVuZCk6CisgICAg
ICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9y
L0luc3BlY3RvclZhbHVlcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JWYWx1ZTo6
YXNOdW1iZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQmFzaWNWYWx1ZTo6YXNOdW1i
ZXIpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaDoKKyAgICAgICAgKiBp
bnNwZWN0b3IvZnJvbnQtZW5kL0NhbGxiYWNrLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNh
bGxiYWNrLnByb3RvdHlwZS5wcm9jZXNzQ2FsbGJhY2spOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LkNhbGxiYWNrLnByb3RvdHlwZS5yZW1vdmVDYWxsYmFja0VudHJ5KToKKyAgICAgICAgKiBpbnNw
ZWN0b3IvZnJvbnQtZW5kL0VsZW1lbnRzUGFuZWwuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
RWxlbWVudHNQYW5lbC5wcm90b3R5cGUucmVzZXQpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9u
dC1lbmQvaW5zcGVjdG9yLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLnByb3RvY29sRXJyb3Ip
OgorCiAyMDEwLTA4LTA1ICBab2x0YW4gSG9ydmF0aCAgPHpvbHRhbkB3ZWJraXQub3JnPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEhhdXNtYW5uLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9p
bnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5wbSBiL1dlYkNvcmUvaW5zcGVjdG9yL0Nv
ZGVHZW5lcmF0b3JJbnNwZWN0b3IucG0KaW5kZXggMGFlOWU4NS4uYjFhMjU5NyAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5wbQorKysgYi9XZWJD
b3JlL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnBtCkBAIC0xNywxMiArMTcsMTEg
QEAgJHR5cGVUcmFuc2Zvcm17Ikluc3BlY3RvckNsaWVudCJ9ID0gewogJHR5cGVUcmFuc2Zvcm17
IkJhY2tlbmQifSA9IHsKICAgICAiZm9yd2FyZCIgPT4gIkluc3BlY3RvckJhY2tlbmQiLAogICAg
ICJoZWFkZXIiID0+ICJJbnNwZWN0b3JCYWNrZW5kLmgiLAotICAgICJoYW5kbGVyQWNjZXNzb3Ii
ID0+ICJtX2luc3BlY3RvckJhY2tlbmQiLAorICAgICJoYW5kbGVyQWNjZXNzb3IiID0+ICJtX2lu
c3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RvckJhY2tlbmQoKSIsCiB9OwogJHR5cGVUcmFuc2Zv
cm17IkNvbnRyb2xsZXIifSA9IHsKLSAgICAiZm9yd2FyZCIgPT4gIkluc3BlY3RvckNvbnRyb2xs
ZXIiLAotICAgICJoZWFkZXIiID0+ICJJbnNwZWN0b3JDb250cm9sbGVyLmgiLAotICAgICJoYW5k
bGVyQWNjZXNzb3IiID0+ICJtX2luc3BlY3RvckJhY2tlbmQtPmluc3BlY3RvckNvbnRyb2xsZXIo
KSIsCisgICAgImZvcndhcmRIZWFkZXIiID0+ICJJbnNwZWN0b3JDb250cm9sbGVyLmgiLAorICAg
ICJoYW5kbGVyQWNjZXNzb3IiID0+ICJtX2luc3BlY3RvckNvbnRyb2xsZXIiLAogfTsKICR0eXBl
VHJhbnNmb3JteyJEZWJ1ZyJ9ID0gewogICAgICJmb3J3YXJkIiA9PiAiU2NyaXB0RGVidWdTZXJ2
ZXIiLApAQCAtMzIsMTIgKzMxLDE2IEBAICR0eXBlVHJhbnNmb3JteyJEZWJ1ZyJ9ID0gewogJHR5
cGVUcmFuc2Zvcm17IkRPTSJ9ID0gewogICAgICJmb3J3YXJkIiA9PiAiSW5zcGVjdG9yRE9NQWdl
bnQiLAogICAgICJoZWFkZXIiID0+ICJJbnNwZWN0b3JET01BZ2VudC5oIiwKLSAgICAiaGFuZGxl
ckFjY2Vzc29yIiA9PiAibV9pbnNwZWN0b3JCYWNrZW5kLT5pbnNwZWN0b3JET01BZ2VudCgpIiwK
KyAgICAiaGFuZGxlckFjY2Vzc29yIiA9PiAibV9pbnNwZWN0b3JDb250cm9sbGVyLT5kb21BZ2Vu
dCgpIiwKIH07CiAkdHlwZVRyYW5zZm9ybXsiQXBwbGljYXRpb25DYWNoZSJ9ID0gewogICAgICJm
b3J3YXJkIiA9PiAiSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50IiwKICAgICAiaGVhZGVy
IiA9PiAiSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmgiLAotICAgICJoYW5kbGVyQWNj
ZXNzb3IiID0+ICJtX2luc3BlY3RvckJhY2tlbmQtPmluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVB
Z2VudCgpIiwKKyAgICAiaGFuZGxlckFjY2Vzc29yIiA9PiAibV9pbnNwZWN0b3JDb250cm9sbGVy
LT5hcHBsaWNhdGlvbkNhY2hlQWdlbnQoKSIsCit9OworJHR5cGVUcmFuc2Zvcm17IkZyb250ZW5k
In0gPSB7CisgICAgImZvcndhcmQiID0+ICJSZW1vdGVJbnNwZWN0b3JGcm9udGVuZCIsCisgICAg
ImhlYWRlciIgPT4gIlJlbW90ZUluc3BlY3RvckZyb250ZW5kLmgiLAogfTsKICR0eXBlVHJhbnNm
b3JteyJQYXNzUmVmUHRyIn0gPSB7CiAgICAgImZvcndhcmRIZWFkZXIiID0+ICJ3dGYvUGFzc1Jl
ZlB0ci5oIiwKQEAgLTQ1LDYgKzQ4LDggQEAgJHR5cGVUcmFuc2Zvcm17IlBhc3NSZWZQdHIifSA9
IHsKICR0eXBlVHJhbnNmb3JteyJPYmplY3QifSA9IHsKICAgICAicGFyYW0iID0+ICJQYXNzUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4iLAogICAgICJyZXRWYWwiID0+ICJQYXNzUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4iLAorICAgICJ2YXJpYWJsZSIgPT4gIlJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IiwKKyAgICAiZGVmYXVsdFZhbHVlIiA9PiAiSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSIsCiAg
ICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JPYmplY3QiLAogICAgICJoZWFkZXIiID0+ICJJbnNw
ZWN0b3JWYWx1ZXMuaCIsCiAgICAgImFjY2Vzc29yU3VmZml4IiA9PiAiIgpAQCAtNTIsNiArNTcs
OCBAQCAkdHlwZVRyYW5zZm9ybXsiT2JqZWN0In0gPSB7CiAkdHlwZVRyYW5zZm9ybXsiQXJyYXki
fSA9IHsKICAgICAicGFyYW0iID0+ICJQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiIsCiAgICAg
InJldFZhbCIgPT4gIlBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IiwKKyAgICAidmFyaWFibGUi
ID0+ICJSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IiwKKyAgICAiZGVmYXVsdFZhbHVlIiA9PiAiSW5z
cGVjdG9yQXJyYXk6OmNyZWF0ZSgpIiwKICAgICAiZm9yd2FyZCIgPT4gIkluc3BlY3RvckFycmF5
IiwKICAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yVmFsdWVzLmgiLAogICAgICJhY2Nlc3NvclN1
ZmZpeCIgPT4gIiIKQEAgLTU5LDQxICs2Niw1NSBAQCAkdHlwZVRyYW5zZm9ybXsiQXJyYXkifSA9
IHsKICR0eXBlVHJhbnNmb3JteyJWYWx1ZSJ9ID0gewogICAgICJwYXJhbSIgPT4gIlBhc3NSZWZQ
dHI8SW5zcGVjdG9yVmFsdWU+IiwKICAgICAicmV0VmFsIiA9PiAiUGFzc1JlZlB0cjxJbnNwZWN0
b3JWYWx1ZT4iLAorICAgICJ2YXJpYWJsZSIgPT4gIlJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4iLAor
ICAgICJkZWZhdWx0VmFsdWUiID0+ICJJbnNwZWN0b3JWYWx1ZTo6bnVsbCgpIiwKICAgICAiZm9y
d2FyZCIgPT4gIkluc3BlY3RvclZhbHVlIiwKICAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yVmFs
dWVzLmgiLAogICAgICJhY2Nlc3NvclN1ZmZpeCIgPT4gIiIKIH07CiAkdHlwZVRyYW5zZm9ybXsi
U3RyaW5nIn0gPSB7CiAgICAgInBhcmFtIiA9PiAiY29uc3QgU3RyaW5nJiIsCi0gICAgInJldFZh
bCIgPT4gIlN0cmluZyIsCisgICAgInZhcmlhYmxlIiA9PiAiU3RyaW5nIiwKICAgICAiZm9yd2Fy
ZCIgPT4gIlN0cmluZyIsCiAgICAgImhlYWRlciIgPT4gIlBsYXRmb3JtU3RyaW5nLmgiLAogICAg
ICJhY2Nlc3NvclN1ZmZpeCIgPT4gIlN0cmluZyIKIH07CiAkdHlwZVRyYW5zZm9ybXsibG9uZyJ9
ID0gewogICAgICJwYXJhbSIgPT4gImxvbmciLAotICAgICJyZXRWYWwiID0+ICJsb25nIiwKKyAg
ICAidmFyaWFibGUiID0+ICJsb25nIiwKKyAgICAiZGVmYXVsdFZhbHVlIiA9PiAiMCIsCiAgICAg
ImZvcndhcmQiID0+ICIiLAogICAgICJoZWFkZXIiID0+ICIiLAogICAgICJhY2Nlc3NvclN1ZmZp
eCIgPT4gIk51bWJlciIKIH07CiAkdHlwZVRyYW5zZm9ybXsiaW50In0gPSB7CiAgICAgInBhcmFt
IiA9PiAiaW50IiwKLSAgICAicmV0VmFsIiA9PiAiaW50IiwKKyAgICAidmFyaWFibGUiID0+ICJp
bnQiLAorICAgICJkZWZhdWx0VmFsdWUiID0+ICIwIiwKICAgICAiZm9yd2FyZCIgPT4gIiIsCiAg
ICAgImhlYWRlciIgPT4gIiIsCiAgICAgImFjY2Vzc29yU3VmZml4IiA9PiAiTnVtYmVyIiwKIH07
CiAkdHlwZVRyYW5zZm9ybXsidW5zaWduZWQgbG9uZyJ9ID0gewogICAgICJwYXJhbSIgPT4gInVu
c2lnbmVkIGxvbmciLAotICAgICJyZXRWYWwiID0+ICJ1bnNpZ25lZCBsb25nIiwKKyAgICAidmFy
aWFibGUiID0+ICJ1bnNpZ25lZCBsb25nIiwKKyAgICAiZGVmYXVsdFZhbHVlIiA9PiAiMHUiLAor
ICAgICJmb3J3YXJkIiA9PiAiIiwKKyAgICAiaGVhZGVyIiA9PiAiIiwKKyAgICAiYWNjZXNzb3JT
dWZmaXgiID0+ICJOdW1iZXIiCit9OworJHR5cGVUcmFuc2Zvcm17InVuc2lnbmVkIGludCJ9ID0g
eworICAgICJwYXJhbSIgPT4gInVuc2lnbmVkIGludCIsCisgICAgInZhcmlhYmxlIiA9PiAidW5z
aWduZWQgaW50IiwKKyAgICAiZGVmYXVsdFZhbHVlIiA9PiAiMHUiLAogICAgICJmb3J3YXJkIiA9
PiAiIiwKICAgICAiaGVhZGVyIiA9PiAiIiwKICAgICAiYWNjZXNzb3JTdWZmaXgiID0+ICJOdW1i
ZXIiCiB9OwogJHR5cGVUcmFuc2Zvcm17ImJvb2xlYW4ifSA9IHsKICAgICAicGFyYW0iID0+ICJi
b29sIiwKLSAgICAicmV0VmFsIj0+ICJib29sIiwKKyAgICAidmFyaWFibGUiPT4gImJvb2wiLAor
ICAgICJkZWZhdWx0VmFsdWUiID0+ICJmYWxzZSIsCiAgICAgImZvcndhcmQiID0+ICIiLAogICAg
ICJoZWFkZXIiID0+ICIiLAogICAgICJhY2Nlc3NvclN1ZmZpeCIgPT4gIkJvb2wiCkBAIC0xODQs
MTIgKzIwNSwxNSBAQCBzdWIgR2VuZXJhdGVJbnRlcmZhY2UKIAogICAgICRiYWNrZW5kQ2xhc3NO
YW1lID0gJGNsYXNzTmFtZSAuICJCYWNrZW5kRGlzcGF0Y2hlciI7CiAgICAgbXkgQGJhY2tlbmRI
ZWFkOwotICAgIHB1c2goQGJhY2tlbmRIZWFkLCAiICAgICR7YmFja2VuZENsYXNzTmFtZX0oSW5z
cGVjdG9yQmFja2VuZCogaW5zcGVjdG9yQmFja2VuZCkgOiBtX2luc3BlY3RvckJhY2tlbmQoaW5z
cGVjdG9yQmFja2VuZCkgeyB9Iik7CisgICAgcHVzaChAYmFja2VuZEhlYWQsICIgICAgJHtiYWNr
ZW5kQ2xhc3NOYW1lfShJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyKSA6
IG1faW5zcGVjdG9yQ29udHJvbGxlcihpbnNwZWN0b3JDb250cm9sbGVyKSB7IH0iKTsKKyAgICBw
dXNoKEBiYWNrZW5kSGVhZCwgIiAgICBSZW1vdGVJbnNwZWN0b3JGcm9udGVuZCogaW5zcGVjdG9y
RnJvbnRlbmQoKSBjb25zdCB7IHJldHVybiBtX2luc3BlY3RvckNvbnRyb2xsZXItPnJlbW90ZUlu
c3BlY3RvckZyb250ZW5kKCk7IH0iKTsKKyAgICBwdXNoKEBiYWNrZW5kSGVhZCwgIiAgICB2b2lk
IHJlcG9ydFByb3RvY29sRXJyb3IoY29uc3QgbG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0
aG9kLCBjb25zdCBTdHJpbmcmIGVycm9yVGV4dCkgY29uc3Q7Iik7CiAgICAgcHVzaChAYmFja2Vu
ZEhlYWQsICIgICAgdm9pZCBkaXNwYXRjaChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOyIpOwogICAg
IHB1c2goQGJhY2tlbmRIZWFkLCAicHJpdmF0ZToiKTsKICAgICAkYmFja2VuZENvbnN0cnVjdG9y
ID0gam9pbigiXG4iLCBAYmFja2VuZEhlYWQpOwotICAgICRiYWNrZW5kRm9vdGVyID0gIiAgICBJ
bnNwZWN0b3JCYWNrZW5kKiBtX2luc3BlY3RvckJhY2tlbmQ7IjsKLSAgICAkYmFja2VuZFR5cGVz
eyJCYWNrZW5kIn0gPSAxOworICAgICRiYWNrZW5kRm9vdGVyID0gIiAgICBJbnNwZWN0b3JDb250
cm9sbGVyKiBtX2luc3BlY3RvckNvbnRyb2xsZXI7IjsKKyAgICAkYmFja2VuZFR5cGVzeyJDb250
cm9sbGVyIn0gPSAxOworICAgICRiYWNrZW5kVHlwZXN7Ikluc3BlY3RvckNsaWVudCJ9ID0gMTsK
ICAgICAkYmFja2VuZFR5cGVzeyJQYXNzUmVmUHRyIn0gPSAxOwogICAgICRiYWNrZW5kVHlwZXN7
IkFycmF5In0gPSAxOwogCkBAIC0yMDYsNiArMjMwLDcgQEAgc3ViIGdlbmVyYXRlRnVuY3Rpb25z
CiAgICAgICAgIGdlbmVyYXRlQmFja2VuZEZ1bmN0aW9uKCRmdW5jdGlvbik7CiAgICAgfQogICAg
IHB1c2goQGJhY2tlbmRNZXRob2RzSW1wbCwgZ2VuZXJhdGVCYWNrZW5kRGlzcGF0Y2hlcigpKTsK
KyAgICBwdXNoKEBiYWNrZW5kTWV0aG9kc0ltcGwsIGdlbmVyYXRlQmFja2VuZFJlcG9ydFByb3Rv
Y29sRXJyb3IoKSk7CiB9CiAKIHN1YiBnZW5lcmF0ZUZyb250ZW5kRnVuY3Rpb24KQEAgLTI0OSwx
MiArMjc0LDEyIEBAIHN1YiBnZW5lcmF0ZUJhY2tlbmRQcml2YXRlRnVuY3Rpb25zCiAgICAgbXkg
JHByaXZhdGVGdW5jdGlvbnMgPSA8PCAiRU9GIjsKIHN0YXRpYyBTdHJpbmcgZm9ybWF0V3JvbmdB
cmd1bWVudHNDb3VudE1lc3NhZ2UodW5zaWduZWQgZXhwZWN0ZWQsIHVuc2lnbmVkIGFjdHVhbCkK
IHsKLSAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoXCJXcm9uZyBudW1iZXIgb2YgcGFyYW1ldGVy
czogJWQgKGV4cGVjdGVkOiAlZClcIiwgYWN0dWFsLCBleHBlY3RlZCk7CisgICAgcmV0dXJuIFN0
cmluZzo6Zm9ybWF0KCJXcm9uZyBudW1iZXIgb2YgcGFyYW1ldGVyczogJWQgKGV4cGVjdGVkOiAl
ZCkiLCBhY3R1YWwsIGV4cGVjdGVkKTsKIH0KIAogc3RhdGljIFN0cmluZyBmb3JtYXRXcm9uZ0Fy
Z3VtZW50VHlwZU1lc3NhZ2UodW5zaWduZWQgcG9zaXRpb24sIGNvbnN0IGNoYXIqIG5hbWUsIGNv
bnN0IGNoYXIqIGV4cGVjdGVkVHlwZSkKIHsKLSAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoXCJG
YWlsZWQgdG8gY29udmVydCBwYXJhbWV0ZXIgJWQgKCVzKSB0byAlc1wiLCBwb3NpdGlvbiwgbmFt
ZSwgZXhwZWN0ZWRUeXBlKTsKKyAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIkZhaWxlZCB0byBj
b252ZXJ0IHBhcmFtZXRlciAlZCAoJXMpIHRvICVzIiwgcG9zaXRpb24sIG5hbWUsIGV4cGVjdGVk
VHlwZSk7CiB9CiBFT0YKICAgICBwdXNoKEBiYWNrZW5kTWV0aG9kc0ltcGwsICRwcml2YXRlRnVu
Y3Rpb25zKTsKQEAgLTI2Nyw0NiArMjkyLDEwMCBAQCBzdWIgZ2VuZXJhdGVCYWNrZW5kRnVuY3Rp
b24KIAogICAgIG15ICRmdW5jdGlvbk5hbWUgPSAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZTsK
IAotICAgIG15IEBhcmdzRmlsdGVyZWQgPSBncmVwKCRfLT5kaXJlY3Rpb24gZXEgImluIiwgQHsk
ZnVuY3Rpb24tPnBhcmFtZXRlcnN9KTsKLSAgICBtYXAoJGJhY2tlbmRUeXBlc3skXy0+dHlwZX0g
PSAxLCBAYXJnc0ZpbHRlcmVkKTsgIyByZWdpc3RlciByZXF1aXJlZCB0eXBlcwotICAgIG15ICRh
cmd1bWVudHMgPSBqb2luKCIsICIsIG1hcCgkdHlwZVRyYW5zZm9ybXskXy0+dHlwZX0tPnsicGFy
YW0ifSAuICIgIiAuICRfLT5uYW1lLCBAYXJnc0ZpbHRlcmVkKSk7CisgICAgbWFwKCRiYWNrZW5k
VHlwZXN7JF8tPnR5cGV9ID0gMSwgQHskZnVuY3Rpb24tPnBhcmFtZXRlcnN9KTsgIyByZWdpc3Rl
ciByZXF1aXJlZCB0eXBlcworICAgIG15IEBpbkFyZ3MgPSBncmVwKCRfLT5kaXJlY3Rpb24gZXEg
ImluIiwgQHskZnVuY3Rpb24tPnBhcmFtZXRlcnN9KTsKKyAgICBteSBAb3V0QXJncyA9IGdyZXAo
JF8tPmRpcmVjdGlvbiBlcSAib3V0IiwgQHskZnVuY3Rpb24tPnBhcmFtZXRlcnN9KTsKIAotICAg
IG15ICRzaWduYXR1cmUgPSAiICAgIHZvaWQgJHtmdW5jdGlvbk5hbWV9KFBhc3NSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+IGFyZ3MsIFN0cmluZyogZXhjZXB0aW9uKTsiOworICAgIG15ICRzaWduYXR1
cmUgPSAiICAgIHZvaWQgJHtmdW5jdGlvbk5hbWV9KFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
IGFyZ3MpOyI7CiAgICAgISRiYWNrZW5kTWV0aG9kc3ske3NpZ25hdHVyZX19IHx8IGRpZSAiRHVw
bGljYXRlIGZ1bmN0aW9uIHdhcyBkZXRlY3RlZCBmb3Igc2lnbmF0dXJlICckc2lnbmF0dXJlJy4i
OwogICAgICRiYWNrZW5kTWV0aG9kc3ske3NpZ25hdHVyZX19ID0gJGZ1bmN0aW9uTmFtZTsKIAog
ICAgIG15IEBmdW5jdGlvbjsKLSAgICBwdXNoKEBmdW5jdGlvbiwgInZvaWQgJHtiYWNrZW5kQ2xh
c3NOYW1lfTo6JHtmdW5jdGlvbk5hbWV9KFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3Ms
IFN0cmluZyogZXhjZXB0aW9uKSIpOworICAgIHB1c2goQGZ1bmN0aW9uLCAidm9pZCAke2JhY2tl
bmRDbGFzc05hbWV9Ojoke2Z1bmN0aW9uTmFtZX0oUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4g
YXJncykiKTsKICAgICBwdXNoKEBmdW5jdGlvbiwgInsiKTsKLSAgICBteSAkaSA9IDE7ICMgemVy
byBlbGVtZW50IGlzIHRoZSBtZXRob2QgbmFtZS4KLSAgICBteSAkZXhwZWN0ZWRQYXJhbWV0ZXJz
Q291bnQgPSBzY2FsYXIoQGFyZ3NGaWx0ZXJlZCk7Ci0gICAgbXkgJGV4cGVjdGVkUGFyYW1ldGVy
c0NvdW50V2l0aE1ldGhvZE5hbWUgPSBzY2FsYXIoQGFyZ3NGaWx0ZXJlZCkgKyAxOworICAgIHB1
c2goQGZ1bmN0aW9uLCAiICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBiYWNrZW5kRnVu
Y3Rpb25OYW1lLCAoXCIkZnVuY3Rpb25OYW1lXCIpKTsiKTsKKyAgICBwdXNoKEBmdW5jdGlvbiwg
IiAgICBsb25nIGNhbGxJZCA9IDA7Iik7CisgICAgcHVzaChAZnVuY3Rpb24sICIiKTsKKworICAg
IG15ICRleHBlY3RlZFBhcmFtZXRlcnNDb3VudCA9IHNjYWxhcihAaW5BcmdzKTsKKyAgICBteSAk
ZXhwZWN0ZWRQYXJhbWV0ZXJzQ291bnRXaXRoTWV0aG9kTmFtZSA9IHNjYWxhcihAaW5BcmdzKSAr
IDE7CiAgICAgcHVzaChAZnVuY3Rpb24sICIgICAgaWYgKGFyZ3MtPmxlbmd0aCgpICE9ICRleHBl
Y3RlZFBhcmFtZXRlcnNDb3VudFdpdGhNZXRob2ROYW1lKSB7Iik7Ci0gICAgcHVzaChAZnVuY3Rp
b24sICIgICAgICAgICpleGNlcHRpb24gPSBmb3JtYXRXcm9uZ0FyZ3VtZW50c0NvdW50TWVzc2Fn
ZShhcmdzLT5sZW5ndGgoKSAtIDEsICRleHBlY3RlZFBhcmFtZXRlcnNDb3VudCk7Iik7CiAgICAg
cHVzaChAZnVuY3Rpb24sICIgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyIpOworICAgIHB1
c2goQGZ1bmN0aW9uLCAiICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2Vu
ZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudHNDb3VudE1lc3NhZ2UoYXJncy0+bGVu
Z3RoKCkgLSAxLCAkZXhwZWN0ZWRQYXJhbWV0ZXJzQ291bnQpKTsiKTsKICAgICBwdXNoKEBmdW5j
dGlvbiwgIiAgICAgICAgcmV0dXJuOyIpOwogICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgIH0iKTsK
KyAgICBwdXNoKEBmdW5jdGlvbiwgIiIpOwogCi0gICAgZm9yZWFjaCBteSAkcGFyYW1ldGVyIChA
YXJnc0ZpbHRlcmVkKSB7Ci0gICAgICAgIG15ICRwYXJhbWV0ZXJUeXBlID0gJHBhcmFtZXRlci0+
dHlwZTsKLSAgICAgICAgcHVzaChAZnVuY3Rpb24sICIgICAgIiAuICR0eXBlVHJhbnNmb3JteyRw
YXJhbWV0ZXJUeXBlfS0+eyJyZXRWYWwifSAuICIgIiAuICRwYXJhbWV0ZXItPm5hbWUgLiAiOyIp
OwotICAgICAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICBpZiAoIWFyZ3MtPmdldCgiIC4gJGkgLiAi
KS0+YXMiIC4gJHR5cGVUcmFuc2Zvcm17JHBhcmFtZXRlclR5cGV9LT57ImFjY2Vzc29yU3VmZml4
In0gLiAiKCYiIC4gJHBhcmFtZXRlci0+bmFtZSAuICIpKSB7Iik7Ci0gICAgICAgIHB1c2goQGZ1
bmN0aW9uLCAiICAgICAgICAqZXhjZXB0aW9uID0gZm9ybWF0V3JvbmdBcmd1bWVudFR5cGVNZXNz
YWdlKCRpLCBcIiIgLiAkcGFyYW1ldGVyLT5uYW1lIC4gIlwiLCBcIiRwYXJhbWV0ZXJUeXBlXCIp
OyIpOworICAgIG15ICRpID0gMTsgIyB6ZXJvIGVsZW1lbnQgaXMgdGhlIG1ldGhvZCBuYW1lLgor
ICAgIGZvcmVhY2ggbXkgJHBhcmFtZXRlciAoQGluQXJncykgeworICAgICAgICBteSAkdHlwZSA9
ICRwYXJhbWV0ZXItPnR5cGU7CisgICAgICAgIG15ICRhcmd1bWVudFR5cGUgPSAkdHlwZVRyYW5z
Zm9ybXskdHlwZX0tPnskdHlwZVRyYW5zZm9ybXskdHlwZX0tPnsicmV0VmFsIn0gPyAicmV0VmFs
IiA6ICJ2YXJpYWJsZSJ9OworICAgICAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICAkYXJndW1lbnRU
eXBlICIgLiAkcGFyYW1ldGVyLT5uYW1lIC4gIjsiKSBpZiAhKCRwYXJhbWV0ZXItPm5hbWUgZXEg
ImNhbGxJZCIpOworICAgICAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICBpZiAoIWFyZ3MtPmdldCgk
aSktPmFzIiAuICR0eXBlVHJhbnNmb3JteyR0eXBlfS0+eyJhY2Nlc3NvclN1ZmZpeCJ9IC4gIigm
IiAuICRwYXJhbWV0ZXItPm5hbWUgLiAiKSkgeyIpOwogICAgICAgICBwdXNoKEBmdW5jdGlvbiwg
IiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Iik7CisgICAgICAgIHB1c2goQGZ1bmN0aW9u
LCAiICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFt
ZSwgZm9ybWF0V3JvbmdBcmd1bWVudFR5cGVNZXNzYWdlKCRpLCBcIiIgLiAkcGFyYW1ldGVyLT5u
YW1lIC4gIlwiLCBcIiR0eXBlXCIpKTsiKTsKICAgICAgICAgcHVzaChAZnVuY3Rpb24sICIgICAg
ICAgIHJldHVybjsiKTsKICAgICAgICAgcHVzaChAZnVuY3Rpb24sICIgICAgfSIpOworICAgICAg
ICBwdXNoKEBmdW5jdGlvbiwgIiIpOwogICAgICAgICArKyRpOwogICAgIH0KLSAgICBteSAkaGFu
ZGxlciA9ICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiaGFuZGxl
ciJ9IHx8ICJCYWNrZW5kIjsKKworICAgIG15ICRoYW5kbGVyID0gJGZ1bmN0aW9uLT5zaWduYXR1
cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJoYW5kbGVyIn0gfHwgIkNvbnRyb2xsZXIiOwogICAg
IG15ICRoYW5kbGVyQWNjZXNzb3IgPSAkdHlwZVRyYW5zZm9ybXskaGFuZGxlcn0tPnsiaGFuZGxl
ckFjY2Vzc29yIn07CiAgICAgJGJhY2tlbmRUeXBlc3skaGFuZGxlcn0gPSAxOwotICAgIHB1c2go
QGZ1bmN0aW9uLCAiICAgIGlmICgkaGFuZGxlckFjY2Vzc29yKSIpOwotICAgIHB1c2goQGZ1bmN0
aW9uLCAiICAgICAgICAkaGFuZGxlckFjY2Vzc29yLT4kZnVuY3Rpb25OYW1lKCIgLiBqb2luKCIs
ICIsIG1hcCgkXy0+bmFtZSwgQGFyZ3NGaWx0ZXJlZCkpIC4gIik7Iik7CisgICAgcHVzaChAZnVu
Y3Rpb24sICIgICAgaWYgKCEkaGFuZGxlckFjY2Vzc29yKSB7Iik7CisgICAgcHVzaChAZnVuY3Rp
b24sICIgICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25O
YW1lLCBcIkVycm9yOiAkaGFuZGxlciBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuXCIpOyIpOwor
ICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgICAgICByZXR1cm47Iik7CisgICAgcHVzaChAZnVuY3Rp
b24sICIgICAgfSIpOworICAgIHB1c2goQGZ1bmN0aW9uLCAiIik7CisKKworICAgIGZvcmVhY2gg
KEBvdXRBcmdzKSB7ICMgZGVjbGFyZSBsb2NhbCB2YXJpYWJsZXMgZm9yIG91dCBhcmd1bWVudHMu
CisgICAgICAgIG15ICRpbml0aWFsaXplciA9ICR0eXBlVHJhbnNmb3JteyRfLT50eXBlfS0+eyJk
ZWZhdWx0VmFsdWUifSA/ICIgPSAiIC4gJHR5cGVUcmFuc2Zvcm17JF8tPnR5cGV9LT57ImRlZmF1
bHRWYWx1ZSJ9IDogIiI7CisgICAgICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgICIgLiAkdHlwZVRy
YW5zZm9ybXskXy0+dHlwZX0tPnsidmFyaWFibGUifSAuICIgIiAuICRfLT5uYW1lIC4gIiRpbml0
aWFsaXplcjsiKTsKKyAgICB9CisKKworICAgIG15ICRhcmdzID0gam9pbigiLCAiLCAobWFwKCRf
LT5uYW1lLCBAaW5BcmdzKSwgbWFwKCImIiAuICRfLT5uYW1lLCBAb3V0QXJncykpKTsKKyAgICBw
dXNoKEBmdW5jdGlvbiwgIiAgICAkaGFuZGxlckFjY2Vzc29yLT4kZnVuY3Rpb25OYW1lKCRhcmdz
KTsiKTsKKyAgICBwdXNoKEBmdW5jdGlvbiwgIiIpOworCisgICAgIyBUaGUgcmVzdWx0cyBvZiBm
dW5jdGlvbiBjYWxsIHNob3VsZCBiZSB0cmFuc2ZlcmVkIGJhY2sgdG8gZnJvbnRlbmQgKGV4Y2Vw
dCBhc3luYyBtZXRob2RzIC0gbmVlZCB0byBmaXggdGhhdCkuCisgICAgaWYgKHNjYWxhcihAb3V0
QXJncykgJiYgISRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiYXN5
bmMifSkgeworICAgICAgICBteSBAcHVzaEFyZ3VtZW50cyA9IG1hcCgiICAgICAgICBhcmd1bWVu
dHMtPnB1c2giIC4gJHR5cGVUcmFuc2Zvcm17JF8tPnR5cGV9LT57ImFjY2Vzc29yU3VmZml4In0g
LiAiKCIgLiAkXy0+bmFtZSAuICIpOyIsIEBvdXRBcmdzKTsKKyAgICAgICAgbXkgJGN1c3RvbVJl
c3BvbnNlID0gJGZ1bmN0aW9uLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJjdXN0
b21SZXNwb25zZSJ9OworICAgICAgICBteSAkZGlkRnVuY3Rpb25OYW1lID0gJGN1c3RvbVJlc3Bv
bnNlID8gJGN1c3RvbVJlc3BvbnNlIDogImRpZCIgLiB1Y2ZpcnN0KCRmdW5jdGlvbi0+c2lnbmF0
dXJlLT5uYW1lKTsKKworICAgICAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICBpZiAobV9pbnNwZWN0
b3JDb250cm9sbGVyLT5pbnNwZWN0b3JDbGllbnQoKSkgeyIpOworICAgICAgICBwdXNoKEBmdW5j
dGlvbiwgIiAgICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcmd1bWVudHMgPSBJbnNwZWN0
b3JBcnJheTo6Y3JlYXRlKCk7Iik7CisgICAgICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgICAgICBh
cmd1bWVudHMtPnB1c2hTdHJpbmcoXCIkZGlkRnVuY3Rpb25OYW1lXCIpOyIpOworICAgICAgICBw
dXNoKEBmdW5jdGlvbiwgIiAgICAgICAgYXJndW1lbnRzLT5wdXNoTnVtYmVyKGNhbGxJZCk7Iik7
CisgICAgICAgIHB1c2goQGZ1bmN0aW9uLCBAcHVzaEFyZ3VtZW50cyk7CisgICAgICAgIHB1c2go
QGZ1bmN0aW9uLCAiICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RvckNsaWVu
dCgpLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoYXJndW1lbnRzLT50b0pTT05TdHJpbmcoKSk7Iik7
CisgICAgICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgIH0iKTsKKyAgICB9CiAgICAgcHVzaChAZnVu
Y3Rpb24sICJ9Iik7CiAgICAgcHVzaChAZnVuY3Rpb24sICIiKTsKICAgICBwdXNoKEBiYWNrZW5k
TWV0aG9kc0ltcGwsIEBmdW5jdGlvbik7CiB9CiAKK3N1YiBnZW5lcmF0ZUJhY2tlbmRSZXBvcnRQ
cm90b2NvbEVycm9yCit7CisgICAgbXkgJHJlcG9ydFByb3RvY29sRXJyb3IgPSA8PCAiRU9GIjsK
Kwordm9pZCAke2JhY2tlbmRDbGFzc05hbWV9OjpyZXBvcnRQcm90b2NvbEVycm9yKGNvbnN0IGxv
bmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgY29uc3QgU3RyaW5nJiBlcnJvclRleHQp
IGNvbnN0Cit7CisgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcmd1bWVudHMgPSBJbnNwZWN0
b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgYXJndW1lbnRzLT5wdXNoU3RyaW5nKCJyZXBvcnRQcm90
b2NvbEVycm9yIik7CisgICAgYXJndW1lbnRzLT5wdXNoTnVtYmVyKGNhbGxJZCk7CisgICAgYXJn
dW1lbnRzLT5wdXNoU3RyaW5nKG1ldGhvZCk7CisgICAgYXJndW1lbnRzLT5wdXNoU3RyaW5nKGVy
cm9yVGV4dCk7CisgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0b3JDbGllbnQoKS0+
c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGFyZ3VtZW50cy0+dG9KU09OU3RyaW5nKCkpOworfQorRU9G
CisgICAgcmV0dXJuIHNwbGl0KCJcbiIsICRyZXBvcnRQcm90b2NvbEVycm9yKTsKK30KKwogc3Vi
IGdlbmVyYXRlQmFja2VuZERpc3BhdGNoZXIKIHsKICAgICBteSBAYm9keTsKQEAgLTMxNSw4ICsz
OTQsNyBAQCBzdWIgZ2VuZXJhdGVCYWNrZW5kRGlzcGF0Y2hlcgogCiAgICAgcHVzaChAYm9keSwg
InZvaWQgJHtiYWNrZW5kQ2xhc3NOYW1lfTo6ZGlzcGF0Y2goY29uc3QgU3RyaW5nJiBtZXNzYWdl
KSIpOwogICAgIHB1c2goQGJvZHksICJ7Iik7Ci0gICAgcHVzaChAYm9keSwgIiAgICBTdHJpbmcg
ZXhjZXB0aW9uOyIpOwotICAgIHB1c2goQGJvZHksICIgICAgdHlwZWRlZiB2b2lkICgke2JhY2tl
bmRDbGFzc05hbWV9OjoqQ2FsbEhhbmRsZXIpKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFy
Z3MsIFN0cmluZyogZXhjZXB0aW9uKTsiKTsKKyAgICBwdXNoKEBib2R5LCAiICAgIHR5cGVkZWYg
dm9pZCAoJHtiYWNrZW5kQ2xhc3NOYW1lfTo6KkNhbGxIYW5kbGVyKShQYXNzUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiBhcmdzKTsiKTsKICAgICBwdXNoKEBib2R5LCAiICAgIHR5cGVkZWYgSGFzaE1h
cDxTdHJpbmcsIENhbGxIYW5kbGVyPiBEaXNwYXRjaE1hcDsiKTsKICAgICBwdXNoKEBib2R5LCAi
ICAgIERFRklORV9TVEFUSUNfTE9DQUwoRGlzcGF0Y2hNYXAsIGRpc3BhdGNoTWFwLCApOyIpOwog
ICAgIHB1c2goQGJvZHksICIgICAgaWYgKGRpc3BhdGNoTWFwLmlzRW1wdHkoKSkgeyIpOwpAQCAt
MzI2LDM4ICs0MDQsMzggQEAgc3ViIGdlbmVyYXRlQmFja2VuZERpc3BhdGNoZXIKICAgICBwdXNo
KEBib2R5LCAiICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gcGFyc2VkTWVzc2FnZSA9IEluc3Bl
Y3RvclZhbHVlOjpwYXJzZUpTT04obWVzc2FnZSk7Iik7CiAgICAgcHVzaChAYm9keSwgIiAgICBp
ZiAoIXBhcnNlZE1lc3NhZ2UpIHsiKTsKICAgICBwdXNoKEBib2R5LCAiICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsiKTsKLSAgICBwdXNoKEBib2R5LCAiICAgICAgICBleGNlcHRpb24gPSBc
IkVycm9yOiBJbnZhbGlkIG1lc3NhZ2UgZm9ybWF0LiBNZXNzYWdlIHNob3VsZCBiZSBpbiBKU09O
IGZvcm1hdC5cIjsiKTsKKyAgICBwdXNoKEBib2R5LCAiICAgICAgICByZXBvcnRQcm90b2NvbEVy
cm9yKDAsIFwiZGlzcGF0Y2hcIiwgXCJFcnJvcjogSW52YWxpZCBtZXNzYWdlIGZvcm1hdC4gTWVz
c2FnZSBzaG91bGQgYmUgaW4gSlNPTiBmb3JtYXQuXCIpOyIpOwogICAgIHB1c2goQGJvZHksICIg
ICAgICAgIHJldHVybjsiKTsKICAgICBwdXNoKEBib2R5LCAiICAgIH0iKTsKICAgICBwdXNoKEBi
b2R5LCAiIik7CiAgICAgcHVzaChAYm9keSwgIiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IG1l
c3NhZ2VBcnJheSA9IHBhcnNlZE1lc3NhZ2UtPmFzQXJyYXkoKTsiKTsKICAgICBwdXNoKEBib2R5
LCAiICAgIGlmICghbWVzc2FnZUFycmF5KSB7Iik7CiAgICAgcHVzaChAYm9keSwgIiAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Iik7Ci0gICAgcHVzaChAYm9keSwgIiAgICAgICAgZXhjZXB0
aW9uID0gXCJFcnJvcjogSW52YWxpZCBtZXNzYWdlIGZvcm1hdC4gVGhlIG1lc3NhZ2Ugc2hvdWxk
IGJlIGEgSlNPTmlmaWVkIGFycmF5IG9mIGFyZ3VtZW50cy5cIjsiKTsKKyAgICBwdXNoKEBib2R5
LCAiICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKDAsIFwiZGlzcGF0Y2hcIiwgXCJFcnJvcjog
SW52YWxpZCBtZXNzYWdlIGZvcm1hdC4gVGhlIG1lc3NhZ2Ugc2hvdWxkIGJlIGEgSlNPTmlmaWVk
IGFycmF5IG9mIGFyZ3VtZW50cy5cIik7Iik7CiAgICAgcHVzaChAYm9keSwgIiAgICAgICAgcmV0
dXJuOyIpOwogICAgIHB1c2goQGJvZHksICIgICAgfSIpOwogICAgIHB1c2goQGJvZHksICIiKTsK
ICAgICBwdXNoKEBib2R5LCAiICAgIGlmICghbWVzc2FnZUFycmF5LT5sZW5ndGgoKSkgeyIpOwog
ICAgIHB1c2goQGJvZHksICIgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyIpOwotICAgIHB1
c2goQGJvZHksICIgICAgICAgIGV4Y2VwdGlvbiA9IFwiRXJyb3I6IEludmFsaWQgbWVzc2FnZSBm
b3JtYXQuIEVtcHR5IG1lc3NhZ2Ugd2FzIHJlY2VpdmVkLlwiOyIpOworICAgIHB1c2goQGJvZHks
ICIgICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoMCwgXCJkaXNwYXRjaFwiLCBcIkVycm9yOiBJ
bnZhbGlkIG1lc3NhZ2UgZm9ybWF0LiBFbXB0eSBtZXNzYWdlIHdhcyByZWNlaXZlZC5cIik7Iik7
CiAgICAgcHVzaChAYm9keSwgIiAgICAgICAgcmV0dXJuOyIpOwogICAgIHB1c2goQGJvZHksICIg
ICAgfSIpOwogICAgIHB1c2goQGJvZHksICIiKTsKICAgICBwdXNoKEBib2R5LCAiICAgIFN0cmlu
ZyBtZXRob2ROYW1lOyIpOwogICAgIHB1c2goQGJvZHksICIgICAgaWYgKCFtZXNzYWdlQXJyYXkt
PmdldCgwKS0+YXNTdHJpbmcoJm1ldGhvZE5hbWUpKSB7Iik7CiAgICAgcHVzaChAYm9keSwgIiAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Iik7Ci0gICAgcHVzaChAYm9keSwgIiAgICAgICAg
ZXhjZXB0aW9uID0gXCJFcnJvcjogSW52YWxpZCBtZXNzYWdlIGZvcm1hdC4gVGhlIGZpcnN0IGVs
ZW1lbnQgb2YgdGhlIG1lc3NhZ2Ugc2hvdWxkIGJlIG1ldGhvZCBuYW1lLlwiOyIpOworICAgIHB1
c2goQGJvZHksICIgICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoMCwgXCJkaXNwYXRjaFwiLCBc
IkVycm9yOiBJbnZhbGlkIG1lc3NhZ2UgZm9ybWF0LiBUaGUgZmlyc3QgZWxlbWVudCBvZiB0aGUg
bWVzc2FnZSBzaG91bGQgYmUgbWV0aG9kIG5hbWUuXCIpOyIpOwogICAgIHB1c2goQGJvZHksICIg
ICAgICAgIHJldHVybjsiKTsKICAgICBwdXNoKEBib2R5LCAiICAgIH0iKTsKICAgICBwdXNoKEBi
b2R5LCAiIik7CiAgICAgcHVzaChAYm9keSwgIiAgICBIYXNoTWFwPFN0cmluZywgQ2FsbEhhbmRs
ZXI+OjppdGVyYXRvciBpdCA9IGRpc3BhdGNoTWFwLmZpbmQobWV0aG9kTmFtZSk7Iik7CiAgICAg
cHVzaChAYm9keSwgIiAgICBpZiAoaXQgPT0gZGlzcGF0Y2hNYXAuZW5kKCkpIHsiKTsKICAgICBw
dXNoKEBib2R5LCAiICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsiKTsKLSAgICBwdXNoKEBi
b2R5LCAiICAgICAgICBleGNlcHRpb24gPSBTdHJpbmc6OmZvcm1hdChcIkVycm9yOiBJbnZhbGlk
IG1ldGhvZCBuYW1lLiAnJXMnIHdhc24ndCBmb3VuZC5cIiwgbWV0aG9kTmFtZS51dGY4KCkuZGF0
YSgpKTsiKTsKKyAgICBwdXNoKEBib2R5LCAiICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKDAs
IFwiZGlzcGF0Y2hcIiwgU3RyaW5nOjpmb3JtYXQoXCJFcnJvcjogSW52YWxpZCBtZXRob2QgbmFt
ZS4gJyVzJyB3YXNuJ3QgZm91bmQuXCIsIG1ldGhvZE5hbWUudXRmOCgpLmRhdGEoKSkpOyIpOwog
ICAgIHB1c2goQGJvZHksICIgICAgICAgIHJldHVybjsiKTsKICAgICBwdXNoKEBib2R5LCAiICAg
IH0iKTsKICAgICBwdXNoKEBib2R5LCAiIik7Ci0gICAgcHVzaChAYm9keSwgIiAgICAoKCp0aGlz
KS4qaXQtPnNlY29uZCkobWVzc2FnZUFycmF5LCAmZXhjZXB0aW9uKTsiKTsKKyAgICBwdXNoKEBi
b2R5LCAiICAgICgoKnRoaXMpLippdC0+c2Vjb25kKShtZXNzYWdlQXJyYXkpOyIpOwogICAgIHB1
c2goQGJvZHksICJ9Iik7CiAgICAgcmV0dXJuIEBib2R5OwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmlkbCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5p
ZGwKaW5kZXggY2VhNjgzYi4uYTBjODJjZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yLmlkbAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuaWRsCkBAIC04
OCw3ICs4OCw3IEBAIG1vZHVsZSBjb3JlIHsKICAgICAgICAgW2hhbmRsZXI9QmFja2VuZF0gdm9p
ZCBlbmFibGVEZWJ1Z2dlcihpbiBib29sZWFuIGFsd2F5cyk7CiAgICAgICAgIFtoYW5kbGVyPUNv
bnRyb2xsZXJdIHZvaWQgZGlzYWJsZURlYnVnZ2VyKGluIGJvb2xlYW4gYWx3YXlzKTsKIAotICAg
ICAgICBbaGFuZGxlcj1Db250cm9sbGVyXSB2b2lkIHNldEJyZWFrcG9pbnQoaW4gbG9uZyBjYWxs
SWQsIGluIFN0cmluZyBzb3VyY2VJRCwgaW4gdW5zaWduZWQgbG9uZyBsaW5lTnVtYmVyLCBpbiBi
b29sZWFuIGVuYWJsZWQsIGluIFN0cmluZyBjb25kaXRpb24pOworICAgICAgICBbaGFuZGxlcj1D
b250cm9sbGVyXSB2b2lkIHNldEJyZWFrcG9pbnQoaW4gbG9uZyBjYWxsSWQsIGluIFN0cmluZyBz
b3VyY2VJRCwgaW4gdW5zaWduZWQgaW50IGxpbmVOdW1iZXIsIGluIGJvb2xlYW4gZW5hYmxlZCwg
aW4gU3RyaW5nIGNvbmRpdGlvbiwgb3V0IGJvb2xlYW4gc3VjY2Vzcywgb3V0IHVuc2lnbmVkIGlu
dCBhY3R1YWxMaW5lTnVtYmVyKTsKICAgICAgICAgW2hhbmRsZXI9Q29udHJvbGxlcl0gdm9pZCBy
ZW1vdmVCcmVha3BvaW50KGluIFN0cmluZyBzb3VyY2VJRCwgaW4gdW5zaWduZWQgbG9uZyBsaW5l
TnVtYmVyKTsKICAgICAgICAgW2hhbmRsZXI9RGVidWddIHZvaWQgYWN0aXZhdGVCcmVha3BvaW50
cygpOwogICAgICAgICBbaGFuZGxlcj1EZWJ1Z10gdm9pZCBkZWFjdGl2YXRlQnJlYWtwb2ludHMo
KTsKQEAgLTEyMSwyMCArMTIxLDIwIEBAIG1vZHVsZSBjb3JlIHsKICAgICAgICAgW2hhbmRsZXI9
QmFja2VuZF0gdm9pZCBnZXRQcm9maWxlckxvZ0xpbmVzKGluIGxvbmcgY2FsbElkLCBpbiBsb25n
IGluUG9zaXRpb24sIG91dCBsb25nIG91dFBvc2l0aW9uLCBvdXQgU3RyaW5nIGxvZyk7CiAjZW5k
aWYKICAgICAgICAgW2hhbmRsZXI9QmFja2VuZF0gdm9pZCBzZXRJbmplY3RlZFNjcmlwdFNvdXJj
ZShpbiBTdHJpbmcgc2NyaXB0U291cmNlKTsKLSAgICAgICAgW2hhbmRsZXI9QmFja2VuZF0gdm9p
ZCBkaXNwYXRjaE9uSW5qZWN0ZWRTY3JpcHQoaW4gbG9uZyBjYWxsSWQsIGluIGxvbmcgaW5qZWN0
ZWRTY3JpcHRJZCwgaW4gU3RyaW5nIG1ldGhvZE5hbWUsIGluIFN0cmluZyBhcmd1bWVudHMsIGlu
IGJvb2xlYW4gYXN5bmMsIG91dCBWYWx1ZSByZXN1bHQsIG91dCBib29sZWFuIGlzRXhjZXB0aW9u
KTsKKyAgICAgICAgW2hhbmRsZXI9QmFja2VuZCwgYXN5bmNdIHZvaWQgZGlzcGF0Y2hPbkluamVj
dGVkU2NyaXB0KGluIGxvbmcgY2FsbElkLCBpbiBsb25nIGluamVjdGVkU2NyaXB0SWQsIGluIFN0
cmluZyBtZXRob2ROYW1lLCBpbiBTdHJpbmcgYXJndW1lbnRzLCBpbiBib29sZWFuIGFzeW5jLCBv
dXQgVmFsdWUgcmVzdWx0LCBvdXQgYm9vbGVhbiBpc0V4Y2VwdGlvbik7CiAgICAgICAgIFtoYW5k
bGVyPUNvbnRyb2xsZXJdIHZvaWQgYWRkU2NyaXB0VG9FdmFsdWF0ZU9uTG9hZChpbiBTdHJpbmcg
c2NyaXB0U291cmNlKTsKICAgICAgICAgW2hhbmRsZXI9Q29udHJvbGxlcl0gdm9pZCByZW1vdmVB
bGxTY3JpcHRzVG9FdmFsdWF0ZU9uTG9hZCgpOwogCiAgICAgICAgIFtoYW5kbGVyPURPTV0gdm9p
ZCBnZXRDaGlsZE5vZGVzKGluIGxvbmcgY2FsbElkLCBpbiBsb25nIG5vZGVJZCk7CiAgICAgICAg
IFtoYW5kbGVyPURPTSwgY3VzdG9tUmVzcG9uc2U9ZGlkQXBwbHlEb21DaGFuZ2VdIHZvaWQgc2V0
QXR0cmlidXRlKGluIGxvbmcgY2FsbElkLCBpbiBsb25nIGVsZW1lbnRJZCwgaW4gU3RyaW5nIG5h
bWUsIGluIFN0cmluZyB2YWx1ZSwgb3V0IGJvb2xlYW4gc3VjY2Vzcyk7CiAgICAgICAgIFtoYW5k
bGVyPURPTSwgY3VzdG9tUmVzcG9uc2U9ZGlkQXBwbHlEb21DaGFuZ2VdIHZvaWQgcmVtb3ZlQXR0
cmlidXRlKGluIGxvbmcgY2FsbElkLCBpbiBsb25nIGVsZW1lbnRJZCwgaW4gU3RyaW5nIG5hbWUs
IG91dCBib29sZWFuIHN1Y2Nlc3MpOwotICAgICAgICBbaGFuZGxlcj1ET01dIHZvaWQgc2V0VGV4
dE5vZGVWYWx1ZShpbiBsb25nIGNhbGxJZCwgaW4gbG9uZyBub2RlSWQsIGluIFN0cmluZyB2YWx1
ZSk7Ci0gICAgICAgIFtoYW5kbGVyPURPTV0gdm9pZCBnZXRFdmVudExpc3RlbmVyc0Zvck5vZGUo
aW4gbG9uZyBjYWxsSWQsIGluIGxvbmcgbm9kZUlkLCBvdXQgbG9uZyBub2RlSWQsIG91dCBBcnJh
eSBsaXN0ZW5lcnNBcnJheSk7CisgICAgICAgIFtoYW5kbGVyPURPTSwgY3VzdG9tUmVzcG9uc2U9
ZGlkQXBwbHlEb21DaGFuZ2VdIHZvaWQgc2V0VGV4dE5vZGVWYWx1ZShpbiBsb25nIGNhbGxJZCwg
aW4gbG9uZyBub2RlSWQsIGluIFN0cmluZyB2YWx1ZSwgb3V0IGJvb2xlYW4gc3VjY2Vzcyk7Cisg
ICAgICAgIFtoYW5kbGVyPURPTV0gdm9pZCBnZXRFdmVudExpc3RlbmVyc0Zvck5vZGUoaW4gbG9u
ZyBjYWxsSWQsIGluIGxvbmcgbm9kZUlkLCBvdXQgbG9uZyBvdXROb2RlSWQsIG91dCBBcnJheSBs
aXN0ZW5lcnNBcnJheSk7CiAgICAgICAgIFtoYW5kbGVyPURPTV0gdm9pZCBjb3B5Tm9kZShpbiBs
b25nIG5vZGVJZCk7Ci0gICAgICAgIFtoYW5kbGVyPURPTV0gdm9pZCByZW1vdmVOb2RlKGluIGxv
bmcgY2FsbElkLCBpbiBsb25nIG5vZGVJZCwgb3V0IGxvbmcgbm9kZUlkKTsKLSAgICAgICAgW2hh
bmRsZXI9RE9NXSB2b2lkIGNoYW5nZVRhZ05hbWUoaW4gbG9uZyBjYWxsSWQsIGluIGxvbmcgbm9k
ZUlkLCBpbiBTdHJpbmcgbmV3VGFnTmFtZSwgb3V0IGxvbmcgbm9kZUlkKTsKKyAgICAgICAgW2hh
bmRsZXI9RE9NXSB2b2lkIHJlbW92ZU5vZGUoaW4gbG9uZyBjYWxsSWQsIGluIGxvbmcgbm9kZUlk
LCBvdXQgbG9uZyBvdXROb2RlSWQpOworICAgICAgICBbaGFuZGxlcj1ET01dIHZvaWQgY2hhbmdl
VGFnTmFtZShpbiBsb25nIGNhbGxJZCwgaW4gbG9uZyBub2RlSWQsIGluIFN0cmluZyBuZXdUYWdO
YW1lLCBvdXQgbG9uZyBvdXROb2RlSWQpOwogICAgICAgICBbaGFuZGxlcj1ET01dIHZvaWQgZ2V0
T3V0ZXJIVE1MKGluIGxvbmcgY2FsbElkLCBpbiBsb25nIG5vZGVJZCwgb3V0IFN0cmluZyBvdXRl
ckhUTUwpOwotICAgICAgICBbaGFuZGxlcj1ET01dIHZvaWQgc2V0T3V0ZXJIVE1MKGluIGxvbmcg
Y2FsbElkLCBpbiBsb25nIG5vZGVJZCwgaW4gU3RyaW5nIG91dGVySFRNTCwgb3V0IGxvbmcgbm9k
ZUlkKTsKKyAgICAgICAgW2hhbmRsZXI9RE9NXSB2b2lkIHNldE91dGVySFRNTChpbiBsb25nIGNh
bGxJZCwgaW4gbG9uZyBub2RlSWQsIGluIFN0cmluZyBvdXRlckhUTUwsIG91dCBsb25nIG91dE5v
ZGVJZCk7CiAgICAgICAgIFtoYW5kbGVyPURPTV0gdm9pZCBhZGRJbnNwZWN0ZWROb2RlKGluIGxv
bmcgbm9kZUlkKTsKICAgICAgICAgW2hhbmRsZXI9RE9NXSB2b2lkIHBlcmZvcm1TZWFyY2goaW4g
U3RyaW5nIHF1ZXJ5LCBpbiBib29sZWFuIHJ1blN5bmNocm9ub3VzbHkpOwogICAgICAgICBbaGFu
ZGxlcj1ET01dIHZvaWQgc2VhcmNoQ2FuY2VsZWQoKTsKQEAgLTE0OSw3ICsxNDksNyBAQCBtb2R1
bGUgY29yZSB7CiAgICAgICAgIFtoYW5kbGVyPURPTV0gdm9pZCBnZXRBbGxTdHlsZXMoaW4gbG9u
ZyBjYWxsSWQsIG91dCBBcnJheSBzdHlsZXMpOwogICAgICAgICBbaGFuZGxlcj1ET01dIHZvaWQg
Z2V0SW5saW5lU3R5bGUoaW4gbG9uZyBjYWxsSWQsIGluIGxvbmcgbm9kZUlkLCBvdXQgVmFsdWUg
c3R5bGUpOwogICAgICAgICBbaGFuZGxlcj1ET01dIHZvaWQgZ2V0Q29tcHV0ZWRTdHlsZShpbiBs
b25nIGNhbGxJZCwgaW4gbG9uZyBub2RlSWQsIG91dCBWYWx1ZSBzdHlsZSk7Ci0gICAgICAgIFto
YW5kbGVyPURPTV0gdm9pZCBnZXRTdHlsZVNoZWV0KGluIGxvbmcgY2FsbElkLCBpbiBsb25nIHN0
eWxlU2hlZXRJZCwgb3V0IFZhbHVlIHN0eWxlU2hlZXQpOworICAgICAgICBbaGFuZGxlcj1ET01d
IHZvaWQgZ2V0U3R5bGVTaGVldChpbiBsb25nIGNhbGxJZCwgaW4gbG9uZyBzdHlsZVNoZWV0SWQs
IG91dCBPYmplY3Qgc3R5bGVTaGVldCk7CiAgICAgICAgIFtoYW5kbGVyPURPTV0gdm9pZCBnZXRS
dWxlUmFuZ2VzKGluIGxvbmcgY2FsbElkLCBpbiBsb25nIHN0eWxlU2hlZXRJZCwgb3V0IFZhbHVl
IHJhbmdlcyk7CiAgICAgICAgIFtoYW5kbGVyPURPTV0gdm9pZCBhcHBseVN0eWxlVGV4dChpbiBs
b25nIGNhbGxJZCwgaW4gbG9uZyBzdHlsZUlkLCBpbiBTdHJpbmcgc3R5bGVUZXh0LCBpbiBTdHJp
bmcgcHJvcGVydHlOYW1lLCBvdXQgYm9vbGVhbiBzdWNjZXNzLCBvdXQgVmFsdWUgc3R5bGUsIG91
dCBBcnJheSBjaGFuZ2VkUHJvcGVydGllcyk7CiAgICAgICAgIFtoYW5kbGVyPURPTV0gdm9pZCBz
ZXRTdHlsZVRleHQoaW4gbG9uZyBjYWxsSWQsIGluIGxvbmcgc3R5bGVJZCwgaW4gU3RyaW5nIHN0
eWxlVGV4dCwgb3V0IGJvb2xlYW4gc3VjY2Vzcyk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuY3BwIGIvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmNwcAppbmRleCBlNDM5MmY1Li5iZGE0
NDJiIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBcHBsaWNhdGlvbkNh
Y2hlQWdlbnQuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFwcGxpY2F0aW9u
Q2FjaGVBZ2VudC5jcHAKQEAgLTYxLDIxICs2MSwxNyBAQCB2b2lkIEluc3BlY3RvckFwcGxpY2F0
aW9uQ2FjaGVBZ2VudDo6dXBkYXRlTmV0d29ya1N0YXRlKGJvb2wgaXNOb3dPbmxpbmUpCiAgICAg
bV9mcm9udGVuZC0+dXBkYXRlTmV0d29ya1N0YXRlKGlzTm93T25saW5lKTsKIH0KIAotdm9pZCBJ
bnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6OmdldEFwcGxpY2F0aW9uQ2FjaGVzKGxvbmcg
Y2FsbElkKQordm9pZCBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6OmdldEFwcGxpY2F0
aW9uQ2FjaGVzKGxvbmcsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIGFwcGxpY2F0aW9uQ2FjaGVz
KQogewogICAgIERvY3VtZW50TG9hZGVyKiBkb2N1bWVudExvYWRlciA9IG1faW5zcGVjdG9yQ29u
dHJvbGxlci0+aW5zcGVjdGVkUGFnZSgpLT5tYWluRnJhbWUoKS0+bG9hZGVyKCktPmRvY3VtZW50
TG9hZGVyKCk7Ci0gICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiBhcHBsaWNhdGlvbkNhY2hlczsK
ICAgICBpZiAoZG9jdW1lbnRMb2FkZXIpIHsKICAgICAgICAgQXBwbGljYXRpb25DYWNoZUhvc3Qq
IGhvc3QgPSBkb2N1bWVudExvYWRlci0+YXBwbGljYXRpb25DYWNoZUhvc3QoKTsKICAgICAgICAg
QXBwbGljYXRpb25DYWNoZUhvc3Q6OkNhY2hlSW5mbyBpbmZvID0gaG9zdC0+YXBwbGljYXRpb25D
YWNoZUluZm8oKTsKIAogICAgICAgICBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6UmVzb3VyY2VJbmZv
TGlzdCByZXNvdXJjZXM7CiAgICAgICAgIGhvc3QtPmZpbGxSZXNvdXJjZUxpc3QoJnJlc291cmNl
cyk7Ci0gICAgICAgIGFwcGxpY2F0aW9uQ2FjaGVzID0gYnVpbGRPYmplY3RGb3JBcHBsaWNhdGlv
bkNhY2hlKHJlc291cmNlcywgaW5mbyk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGFwcGxpY2F0aW9u
Q2FjaGVzID0gSW5zcGVjdG9yVmFsdWU6Om51bGwoKTsKLQotICAgIG1fZnJvbnRlbmQtPmRpZEdl
dEFwcGxpY2F0aW9uQ2FjaGVzKGNhbGxJZCwgYXBwbGljYXRpb25DYWNoZXMpOworICAgICAgICAq
YXBwbGljYXRpb25DYWNoZXMgPSBidWlsZE9iamVjdEZvckFwcGxpY2F0aW9uQ2FjaGUocmVzb3Vy
Y2VzLCBpbmZvKTsKKyAgICB9CiB9CiAKIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNw
ZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yQXBwbGljYXRpb25DYWNo
ZShjb25zdCBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6UmVzb3VyY2VJbmZvTGlzdCYgYXBwbGljYXRp
b25DYWNoZVJlc291cmNlcywgY29uc3QgQXBwbGljYXRpb25DYWNoZUhvc3Q6OkNhY2hlSW5mbyYg
YXBwbGljYXRpb25DYWNoZUluZm8pCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5oCmluZGV4IGUwM2JhNGMuLmRkZTljNzAgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5oCisr
KyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5oCkBA
IC0zNiw2ICszNiw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEluc3BlY3RvckFycmF5
OwogY2xhc3MgSW5zcGVjdG9yQ29udHJvbGxlcjsKIGNsYXNzIEluc3BlY3Rvck9iamVjdDsKK2Ns
YXNzIEluc3BlY3RvclZhbHVlOwogY2xhc3MgUmVtb3RlSW5zcGVjdG9yRnJvbnRlbmQ7CiBjbGFz
cyBSZXNvdXJjZVJlc3BvbnNlOwogCkBAIC01MCw3ICs1MSw3IEBAIHB1YmxpYzoKICAgICB2b2lk
IHVwZGF0ZU5ldHdvcmtTdGF0ZShib29sIGlzTm93T25saW5lKTsKIAogICAgIC8vIEZyb20gRnJv
bnRlbmQKLSAgICB2b2lkIGdldEFwcGxpY2F0aW9uQ2FjaGVzKGxvbmcgY2FsbElkKTsKKyAgICB2
b2lkIGdldEFwcGxpY2F0aW9uQ2FjaGVzKGxvbmcgY2FsbElkLCBSZWZQdHI8SW5zcGVjdG9yVmFs
dWU+KiBhcHBsaWNhdGlvbkNhY2hlcyk7CiAKIHByaXZhdGU6CiAgICAgUGFzc1JlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9yQXBwbGljYXRpb25DYWNoZShjb25zdCBBcHBsaWNh
dGlvbkNhY2hlSG9zdDo6UmVzb3VyY2VJbmZvTGlzdCYsIGNvbnN0IEFwcGxpY2F0aW9uQ2FjaGVI
b3N0OjpDYWNoZUluZm8mKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckJhY2tlbmQuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5jcHAKaW5k
ZXggNDhlZjYwMi4uMmU3NWM0OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQmFja2VuZC5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5j
cHAKQEAgLTczLDI4ICs3MywyMiBAQCB2b2lkIEluc3BlY3RvckJhY2tlbmQ6OnRha2VIZWFwU25h
cHNob3QoKQogICAgIFNjcmlwdFByb2ZpbGVyOjp0YWtlSGVhcFNuYXBzaG90KCk7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yQmFja2VuZDo6Z2V0UHJvZmlsZXJMb2dMaW5lcyhsb25nIGNhbGxJZCwgbG9u
ZyBwb3NpdGlvbikKK3ZvaWQgSW5zcGVjdG9yQmFja2VuZDo6Z2V0UHJvZmlsZXJMb2dMaW5lcyhs
b25nLCBsb25nIHBvc2l0aW9uLCBsb25nKiBvdXRQb3NpdGlvbiwgU3RyaW5nKiBkYXRhKQogewog
ICAgIC8vIEZJWE1FOiB3ZSBzaG91bGQgbWFrZSBpbnNwZWN0b3IgZGlzcGF0Y2hlciBwbHVnZ2Fi
bGUsIHNvIHRoYXQgZW1iZWRkZXJzIGNvdWxkIGNvbnRyaWJ1dGUgQVBJcyBpbnN0ZWFkIG9mIHBv
bGx1dGluZyB0aGUgY29yZSBvbmUKICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDMzNTcKLSAgICBpZiAoUmVtb3RlSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250
ZW5kID0gcmVtb3RlRnJvbnRlbmQoKSkgewotICAgICAgICBTdHJpbmcgZGF0YTsKLSAgICAgICAg
aW50IG91dFBvc2l0aW9uID0gU2NyaXB0UHJvZmlsZXI6OmdldFByb2ZpbGVyTG9nTGluZXMocG9z
aXRpb24sICZkYXRhKTsKLSAgICAgICAgZnJvbnRlbmQtPmRpZEdldFByb2ZpbGVyTG9nTGluZXMo
Y2FsbElkLCBvdXRQb3NpdGlvbiwgZGF0YSk7Ci0gICAgfQorICAgICpvdXRQb3NpdGlvbiA9IFNj
cmlwdFByb2ZpbGVyOjpnZXRQcm9maWxlckxvZ0xpbmVzKHBvc2l0aW9uLCBkYXRhKTsKIH0KICNl
bmRpZgogCiB2b2lkIEluc3BlY3RvckJhY2tlbmQ6OnNldEluamVjdGVkU2NyaXB0U291cmNlKGNv
bnN0IFN0cmluZyYgc291cmNlKQogewotICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXIpCi0g
ICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5qZWN0ZWRTY3JpcHRIb3N0KCktPnNldElu
amVjdGVkU2NyaXB0U291cmNlKHNvdXJjZSk7CisgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+
aW5qZWN0ZWRTY3JpcHRIb3N0KCktPnNldEluamVjdGVkU2NyaXB0U291cmNlKHNvdXJjZSk7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yQmFja2VuZDo6ZGlzcGF0Y2hPbkluamVjdGVkU2NyaXB0KGxvbmcg
Y2FsbElkLCBsb25nIGluamVjdGVkU2NyaXB0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kTmFtZSwg
Y29uc3QgU3RyaW5nJiBhcmd1bWVudHMsIGJvb2wgYXN5bmMpCit2b2lkIEluc3BlY3RvckJhY2tl
bmQ6OmRpc3BhdGNoT25JbmplY3RlZFNjcmlwdChsb25nIGNhbGxJZCwgbG9uZyBpbmplY3RlZFNj
cmlwdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZE5hbWUsIGNvbnN0IFN0cmluZyYgYXJndW1lbnRz
LCBib29sIGFzeW5jLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiByZXN1bHQsIGJvb2wqIGhhZEV4
Y2VwdGlvbikKIHsKLSAgICBSZW1vdGVJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQgPSByZW1v
dGVGcm9udGVuZCgpOwotICAgIGlmICghZnJvbnRlbmQpCisgICAgaWYgKCFyZW1vdGVGcm9udGVu
ZCgpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBGSVhNRTogZXhwbGljaXRseSBwYXNzIGlu
amVjdGVkU2NyaXB0SWQgYWxvbmcgd2l0aCBub2RlIGlkIHRvIHRoZSBmcm9udGVuZC4KQEAgLTEw
OSwxMiArMTAzLDEwIEBAIHZvaWQgSW5zcGVjdG9yQmFja2VuZDo6ZGlzcGF0Y2hPbkluamVjdGVk
U2NyaXB0KGxvbmcgY2FsbElkLCBsb25nIGluamVjdGVkU2NyaXB0CiAgICAgaWYgKGluamVjdGVk
U2NyaXB0Lmhhc05vVmFsdWUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmUHRyPEluc3Bl
Y3RvclZhbHVlPiByZXN1bHQ7Ci0gICAgYm9vbCBoYWRFeGNlcHRpb24gPSBmYWxzZTsKLSAgICBp
bmplY3RlZFNjcmlwdC5kaXNwYXRjaChjYWxsSWQsIG1ldGhvZE5hbWUsIGFyZ3VtZW50cywgYXN5
bmMsICZyZXN1bHQsICZoYWRFeGNlcHRpb24pOworICAgIGluamVjdGVkU2NyaXB0LmRpc3BhdGNo
KGNhbGxJZCwgbWV0aG9kTmFtZSwgYXJndW1lbnRzLCBhc3luYywgcmVzdWx0LCBoYWRFeGNlcHRp
b24pOwogICAgIGlmIChhc3luYykKICAgICAgICAgcmV0dXJuOyAgLy8gSW5qZWN0ZWRTY3JpcHQg
d2lsbCByZXR1cm4gcmVzdWx0IGFzeW5jaHJvbm91c2x5IGJ5IG1lYW5zIG9mIDo6cmVwb3J0RGlk
RGlzcGF0Y2hPbkluamVjdGVkU2NyaXB0LgotICAgIGZyb250ZW5kLT5kaWREaXNwYXRjaE9uSW5q
ZWN0ZWRTY3JpcHQoY2FsbElkLCByZXN1bHQsIGhhZEV4Y2VwdGlvbik7CisgICAgcmVtb3RlRnJv
bnRlbmQoKS0+ZGlkRGlzcGF0Y2hPbkluamVjdGVkU2NyaXB0KGNhbGxJZCwgKCpyZXN1bHQpLmdl
dCgpLCAqaGFkRXhjZXB0aW9uKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JCYWNrZW5kOjpjbGVhckNv
bnNvbGVNZXNzYWdlcyhsb25nIGNhbGxJZCkKQEAgLTEyNiwzMiArMTE4LDIyIEBAIHZvaWQgSW5z
cGVjdG9yQmFja2VuZDo6Y2xlYXJDb25zb2xlTWVzc2FnZXMobG9uZyBjYWxsSWQpCiAKIHZvaWQg
SW5zcGVjdG9yQmFja2VuZDo6cmVsZWFzZVdyYXBwZXJPYmplY3RHcm91cChsb25nIGluamVjdGVk
U2NyaXB0SWQsIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXApCiB7Ci0gICAgaWYgKG1faW5zcGVj
dG9yQ29udHJvbGxlcikKLSAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbmplY3RlZFNj
cmlwdEhvc3QoKS0+cmVsZWFzZVdyYXBwZXJPYmplY3RHcm91cChpbmplY3RlZFNjcmlwdElkLCBv
YmplY3RHcm91cCk7CisgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbmplY3RlZFNjcmlwdEhv
c3QoKS0+cmVsZWFzZVdyYXBwZXJPYmplY3RHcm91cChpbmplY3RlZFNjcmlwdElkLCBvYmplY3RH
cm91cCk7CiB9CiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCi12b2lkIEluc3BlY3RvckJhY2tlbmQ6
OmdldERhdGFiYXNlVGFibGVOYW1lcyhsb25nIGNhbGxJZCwgbG9uZyBkYXRhYmFzZUlkKQordm9p
ZCBJbnNwZWN0b3JCYWNrZW5kOjpnZXREYXRhYmFzZVRhYmxlTmFtZXMobG9uZywgbG9uZyBkYXRh
YmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBuYW1lcykKIHsKLSAgICBpZiAoUmVtb3Rl
SW5zcGVjdG9yRnJvbnRlbmQqIGZyb250ZW5kID0gcmVtb3RlRnJvbnRlbmQoKSkgewotICAgICAg
ICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHJlc3VsdCA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUo
KTsKLSAgICAgICAgRGF0YWJhc2UqIGRhdGFiYXNlID0gbV9pbnNwZWN0b3JDb250cm9sbGVyLT5k
YXRhYmFzZUZvcklkKGRhdGFiYXNlSWQpOwotICAgICAgICBpZiAoZGF0YWJhc2UpIHsKLSAgICAg
ICAgICAgIFZlY3RvcjxTdHJpbmc+IHRhYmxlTmFtZXMgPSBkYXRhYmFzZS0+dGFibGVOYW1lcygp
OwotICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gdGFibGVOYW1lcy5zaXplKCk7Ci0gICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCi0gICAgICAgICAg
ICAgICAgcmVzdWx0LT5wdXNoU3RyaW5nKHRhYmxlTmFtZXNbaV0pOwotICAgICAgICB9Ci0gICAg
ICAgIGZyb250ZW5kLT5kaWRHZXREYXRhYmFzZVRhYmxlTmFtZXMoY2FsbElkLCByZXN1bHQpOwor
ICAgIERhdGFiYXNlKiBkYXRhYmFzZSA9IG1faW5zcGVjdG9yQ29udHJvbGxlci0+ZGF0YWJhc2VG
b3JJZChkYXRhYmFzZUlkKTsKKyAgICBpZiAoZGF0YWJhc2UpIHsKKyAgICAgICAgVmVjdG9yPFN0
cmluZz4gdGFibGVOYW1lcyA9IGRhdGFiYXNlLT50YWJsZU5hbWVzKCk7CisgICAgICAgIHVuc2ln
bmVkIGxlbmd0aCA9IHRhYmxlTmFtZXMuc2l6ZSgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbGVuZ3RoOyArK2kpCisgICAgICAgICAgICAoKm5hbWVzKS0+cHVzaFN0cmluZyh0
YWJsZU5hbWVzW2ldKTsKICAgICB9CiB9CiAjZW5kaWYKIAotSW5zcGVjdG9yRnJvbnRlbmQqIElu
c3BlY3RvckJhY2tlbmQ6Omluc3BlY3RvckZyb250ZW5kKCkKLXsKLSAgICByZXR1cm4gbV9pbnNw
ZWN0b3JDb250cm9sbGVyLT5tX2Zyb250ZW5kLmdldCgpOwotfQotCiBSZW1vdGVJbnNwZWN0b3JG
cm9udGVuZCogSW5zcGVjdG9yQmFja2VuZDo6cmVtb3RlRnJvbnRlbmQoKQogewogICAgIHJldHVy
biBtX2luc3BlY3RvckNvbnRyb2xsZXItPm1fcmVtb3RlRnJvbnRlbmQuZ2V0KCk7CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmggYi9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JCYWNrZW5kLmgKaW5kZXggN2Y0YjUwMC4uYmZmNGRiMCAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5oCisrKyBiL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaApAQCAtNjIsMjMgKzYyLDIyIEBAIHB1YmxpYzoKICNp
ZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKICAgICB2b2lkIGVuYWJsZURlYnVnZ2VyKGJv
b2wgYWx3YXlzKTsKICAgICB2b2lkIHRha2VIZWFwU25hcHNob3QoKTsKLSAgICB2b2lkIGdldFBy
b2ZpbGVyTG9nTGluZXMobG9uZyBjYWxsSWQsIGxvbmcgcG9zaXRpb24pOworICAgIHZvaWQgZ2V0
UHJvZmlsZXJMb2dMaW5lcyhsb25nIGNhbGxJZCwgbG9uZyBwb3NpdGlvbiwgbG9uZyogb3V0UG9z
aXRpb24sIFN0cmluZyogZGF0YSk7CiAjZW5kaWYKIAogICAgIHZvaWQgc2V0SW5qZWN0ZWRTY3Jp
cHRTb3VyY2UoY29uc3QgU3RyaW5nJiBzb3VyY2UpOwotICAgIHZvaWQgZGlzcGF0Y2hPbkluamVj
dGVkU2NyaXB0KGxvbmcgY2FsbElkLCBsb25nIGluamVjdGVkU2NyaXB0SWQsIGNvbnN0IFN0cmlu
ZyYgbWV0aG9kTmFtZSwgY29uc3QgU3RyaW5nJiBhcmd1bWVudHMsIGJvb2wgYXN5bmMpOworICAg
IHZvaWQgZGlzcGF0Y2hPbkluamVjdGVkU2NyaXB0KGxvbmcgY2FsbElkLCBsb25nIGluamVjdGVk
U2NyaXB0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kTmFtZSwgY29uc3QgU3RyaW5nJiBhcmd1bWVu
dHMsIGJvb2wgYXN5bmMsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHJlc3VsdCwgYm9vbCogaGFk
RXhjZXB0aW9uKTsKICAgICB2b2lkIGNsZWFyQ29uc29sZU1lc3NhZ2VzKGxvbmcgY2FsbElkKTsK
IAogICAgIC8vIEdlbmVyaWMgY29kZSBjYWxsZWQgZnJvbSBjdXN0b20gaW1wbGVtZW50YXRpb25z
LgogICAgIHZvaWQgcmVsZWFzZVdyYXBwZXJPYmplY3RHcm91cChsb25nIGluamVjdGVkU2NyaXB0
SWQsIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXApOwogCiAjaWYgRU5BQkxFKERBVEFCQVNFKQot
ICAgIHZvaWQgZ2V0RGF0YWJhc2VUYWJsZU5hbWVzKGxvbmcgY2FsbElkLCBsb25nIGRhdGFiYXNl
SWQpOworICAgIHZvaWQgZ2V0RGF0YWJhc2VUYWJsZU5hbWVzKGxvbmcgY2FsbElkLCBsb25nIGRh
dGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIG5hbWVzKTsKICNlbmRpZgogCiBwcml2
YXRlOgogICAgIEluc3BlY3RvckJhY2tlbmQoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9y
Q29udHJvbGxlcik7Ci0gICAgSW5zcGVjdG9yRnJvbnRlbmQqIGluc3BlY3RvckZyb250ZW5kKCk7
CiAgICAgUmVtb3RlSW5zcGVjdG9yRnJvbnRlbmQqIHJlbW90ZUZyb250ZW5kKCk7CiAKICAgICBJ
bnNwZWN0b3JDb250cm9sbGVyKiBtX2luc3BlY3RvckNvbnRyb2xsZXI7CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NTdG9yZS5jcHAgYi9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JDU1NTdG9yZS5jcHAKaW5kZXggZDA5ODIzMC4uMTZkMjUwOCAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTU3RvcmUuY3BwCisrKyBiL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckNTU1N0b3JlLmNwcApAQCAtODEsNyArODEsNyBAQCB2b2lkIElu
c3BlY3RvckNTU1N0b3JlOjpyZW1vdmVEb2N1bWVudChEb2N1bWVudCogZG9jKQogICAgIG1fZG9j
dW1lbnROb2RlVG9JbnNwZWN0b3JTdHlsZVNoZWV0TWFwLnJlbW92ZShkb2MpOwogfQogCi1DU1NT
dHlsZVNoZWV0KiBJbnNwZWN0b3JDU1NTdG9yZTo6aW5zcGVjdG9yU3R5bGVTaGVldChEb2N1bWVu
dCogb3duZXJEb2N1bWVudCwgYm9vbCBjcmVhdGVJZkFic2VudCwgbG9uZyBjYWxsSWQpCitDU1NT
dHlsZVNoZWV0KiBJbnNwZWN0b3JDU1NTdG9yZTo6aW5zcGVjdG9yU3R5bGVTaGVldChEb2N1bWVu
dCogb3duZXJEb2N1bWVudCwgYm9vbCBjcmVhdGVJZkFic2VudCkKIHsKICAgICBEb2N1bWVudFRv
U3R5bGVTaGVldE1hcDo6aXRlcmF0b3IgaXQgPSBtX2RvY3VtZW50Tm9kZVRvSW5zcGVjdG9yU3R5
bGVTaGVldE1hcC5maW5kKG93bmVyRG9jdW1lbnQpOwogICAgIGlmIChpdCAhPSBtX2RvY3VtZW50
Tm9kZVRvSW5zcGVjdG9yU3R5bGVTaGVldE1hcC5lbmQoKSkKQEAgLTk0LDE2ICs5NCwxMiBAQCBD
U1NTdHlsZVNoZWV0KiBJbnNwZWN0b3JDU1NTdG9yZTo6aW5zcGVjdG9yU3R5bGVTaGVldChEb2N1
bWVudCogb3duZXJEb2N1bWVudCwgYgogICAgICAgICBzdHlsZUVsZW1lbnQtPnNldEF0dHJpYnV0
ZSgidHlwZSIsICJ0ZXh0L2NzcyIsIGVjKTsKICAgICBpZiAoIWVjKQogICAgICAgICBvd25lckRv
Y3VtZW50LT5oZWFkKCktPmFwcGVuZENoaWxkKHN0eWxlRWxlbWVudCwgZWMpOwotICAgIGlmIChl
YykgewotICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPnJlbW90ZUluc3BlY3RvckZyb250
ZW5kKCktPmRpZEFkZFJ1bGUoY2FsbElkLCBJbnNwZWN0b3JWYWx1ZTo6bnVsbCgpLCBmYWxzZSk7
CisgICAgaWYgKGVjKQogICAgICAgICByZXR1cm4gMDsKLSAgICB9CiAgICAgU3R5bGVTaGVldExp
c3QqIHN0eWxlU2hlZXRzID0gb3duZXJEb2N1bWVudC0+c3R5bGVTaGVldHMoKTsKICAgICBTdHls
ZVNoZWV0KiBzdHlsZVNoZWV0ID0gc3R5bGVTaGVldHMtPml0ZW0oc3R5bGVTaGVldHMtPmxlbmd0
aCgpIC0gMSk7Ci0gICAgaWYgKCFzdHlsZVNoZWV0LT5pc0NTU1N0eWxlU2hlZXQoKSkgewotICAg
ICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPnJlbW90ZUluc3BlY3RvckZyb250ZW5kKCktPmRp
ZEFkZFJ1bGUoY2FsbElkLCBJbnNwZWN0b3JWYWx1ZTo6bnVsbCgpLCBmYWxzZSk7CisgICAgaWYg
KCFzdHlsZVNoZWV0LT5pc0NTU1N0eWxlU2hlZXQoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
fQogICAgIENTU1N0eWxlU2hlZXQqIGluc3BlY3RvclN0eWxlU2hlZXQgPSBzdGF0aWNfY2FzdDxD
U1NTdHlsZVNoZWV0Kj4oc3R5bGVTaGVldCk7CiAgICAgbV9kb2N1bWVudE5vZGVUb0luc3BlY3Rv
clN0eWxlU2hlZXRNYXAuc2V0KG93bmVyRG9jdW1lbnQsIGluc3BlY3RvclN0eWxlU2hlZXQpOwog
ICAgIHJldHVybiBpbnNwZWN0b3JTdHlsZVNoZWV0OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQ1NTU3RvcmUuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNT
U1N0b3JlLmgKaW5kZXggNGY3ZGYwMC4uNTY5MTIwMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQ1NTU3RvcmUuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JDU1NTdG9yZS5oCkBAIC03MSw3ICs3MSw3IEBAIHB1YmxpYzoKICAgICBDU1NTdHlsZVNoZWV0
KiBzdHlsZVNoZWV0Rm9ySWQobG9uZyBzdHlsZVNoZWV0SWQpOwogICAgIENTU1N0eWxlUnVsZSog
cnVsZUZvcklkKGxvbmcgc3R5bGVSdWxlSWQpOwogICAgIERpc2FibGVkU3R5bGVEZWNsYXJhdGlv
biogZGlzYWJsZWRTdHlsZUZvcklkKGxvbmcgc3R5bGVJZCwgYm9vbCBjcmVhdGVJZkFic2VudCk7
Ci0gICAgQ1NTU3R5bGVTaGVldCogaW5zcGVjdG9yU3R5bGVTaGVldChEb2N1bWVudCogb3duZXJE
b2N1bWVudCwgYm9vbCBjcmVhdGVJZkFic2VudCwgbG9uZyBjYWxsSWQpOworICAgIENTU1N0eWxl
U2hlZXQqIGluc3BlY3RvclN0eWxlU2hlZXQoRG9jdW1lbnQqIG93bmVyRG9jdW1lbnQsIGJvb2wg
Y3JlYXRlSWZBYnNlbnQpOwogICAgIHZvaWQgcmVtb3ZlRG9jdW1lbnQoRG9jdW1lbnQqKTsKIAog
ICAgIGxvbmcgYmluZFJ1bGUoQ1NTU3R5bGVSdWxlKiBydWxlKTsKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQ29udHJvbGxlci5jcHAKaW5kZXggMjA1MmFkYi4uNGZlYWM5OCAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKKysrIGIvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKQEAgLTE4Niw3ICsxODYsNyBAQCBJ
bnNwZWN0b3JDb250cm9sbGVyOjpJbnNwZWN0b3JDb250cm9sbGVyKFBhZ2UqIHBhZ2UsIEluc3Bl
Y3RvckNsaWVudCogY2xpZW50KQogICAgICwgbV9yZXNvdXJjZVRyYWNraW5nRW5hYmxlZChmYWxz
ZSkKICAgICAsIG1fc2V0dGluZ3NMb2FkZWQoZmFsc2UpCiAgICAgLCBtX2luc3BlY3RvckJhY2tl
bmQoSW5zcGVjdG9yQmFja2VuZDo6Y3JlYXRlKHRoaXMpKQotICAgICwgbV9pbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcihuZXcgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIobV9pbnNwZWN0b3JC
YWNrZW5kLmdldCgpKSkKKyAgICAsIG1faW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIobmV3IElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKHRoaXMpKQogICAgICwgbV9pbmplY3RlZFNjcmlwdEhv
c3QoSW5qZWN0ZWRTY3JpcHRIb3N0OjpjcmVhdGUodGhpcykpCiAjaWYgRU5BQkxFKEpBVkFTQ1JJ
UFRfREVCVUdHRVIpCiAgICAgLCBtX2RlYnVnZ2VyRW5hYmxlZChmYWxzZSkKQEAgLTEyOTgsMTEg
KzEyOTgsOCBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpZE9wZW5EYXRhYmFzZShQYXNz
UmVmUHRyPERhdGFiYXNlPiBkYXRhYmFzZSwgY29uc3QgUwogfQogI2VuZGlmCiAKLXZvaWQgSW5z
cGVjdG9yQ29udHJvbGxlcjo6Z2V0Q29va2llcyhsb25nIGNhbGxJZCkKK3ZvaWQgSW5zcGVjdG9y
Q29udHJvbGxlcjo6Z2V0Q29va2llcyhsb25nLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBjb29r
aWVzLCBXZWJDb3JlOjpTdHJpbmcqIGNvb2tpZXNTdHJpbmcpCiB7Ci0gICAgaWYgKCFtX3JlbW90
ZUZyb250ZW5kKQotICAgICAgICByZXR1cm47Ci0KICAgICAvLyBJZiB3ZSBjYW4gZ2V0IHJhdyBj
b29raWVzLgogICAgIExpc3RIYXNoU2V0PENvb2tpZT4gcmF3Q29va2llc0xpc3Q7CiAKQEAgLTEz
MzYsMTUgKzEzMzMsMTEgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpnZXRDb29raWVzKGxv
bmcgY2FsbElkKQogICAgICAgICB9CiAgICAgfQogCi0gICAgUmVmUHRyPEluc3BlY3RvckFycmF5
PiBjb29raWVzOwotICAgIFN0cmluZyBjb29raWVzU3RyaW5nOwogICAgIGlmIChyYXdDb29raWVz
SW1wbGVtZW50ZWQpCi0gICAgICAgIGNvb2tpZXMgPSBidWlsZEFycmF5Rm9yQ29va2llcyhyYXdD
b29raWVzTGlzdCk7CisgICAgICAgICpjb29raWVzID0gYnVpbGRBcnJheUZvckNvb2tpZXMocmF3
Q29va2llc0xpc3QpOwogICAgIGVsc2UgewotICAgICAgICBjb29raWVzID0gSW5zcGVjdG9yQXJy
YXk6OmNyZWF0ZSgpOwotICAgICAgICBjb29raWVzU3RyaW5nID0gc3RyaW5nQ29va2llc0xpc3Q7
CisgICAgICAgICpjb29raWVzU3RyaW5nID0gc3RyaW5nQ29va2llc0xpc3Q7CiAgICAgfQotICAg
IG1fcmVtb3RlRnJvbnRlbmQtPmRpZEdldENvb2tpZXMoY2FsbElkLCBjb29raWVzLCBjb29raWVz
U3RyaW5nKTsKIH0KIAogUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gSW5zcGVjdG9yQ29udHJv
bGxlcjo6YnVpbGRBcnJheUZvckNvb2tpZXMoTGlzdEhhc2hTZXQ8Q29va2llPiYgY29va2llc0xp
c3QpCkBAIC0xNDI2LDEyICsxNDE5LDggQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZWxl
Y3RET01TdG9yYWdlKFN0b3JhZ2UqIHN0b3JhZ2UpCiAgICAgICAgIG1fcmVtb3RlRnJvbnRlbmQt
PnNlbGVjdERPTVN0b3JhZ2Uoc3RvcmFnZVJlc291cmNlSWQpOwogfQogCi12b2lkIEluc3BlY3Rv
ckNvbnRyb2xsZXI6OmdldERPTVN0b3JhZ2VFbnRyaWVzKGxvbmcgY2FsbElkLCBsb25nIHN0b3Jh
Z2VJZCkKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6Z2V0RE9NU3RvcmFnZUVudHJpZXMobG9u
ZywgbG9uZyBzdG9yYWdlSWQsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIGVudHJpZXMpCiB7Ci0g
ICAgaWYgKCFtX3JlbW90ZUZyb250ZW5kKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+IGpzb25BcnJheSA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKICAg
ICBJbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UqIHN0b3JhZ2VSZXNvdXJjZSA9IGdldERPTVN0
b3JhZ2VSZXNvdXJjZUZvcklkKHN0b3JhZ2VJZCk7CiAgICAgaWYgKHN0b3JhZ2VSZXNvdXJjZSkg
ewogICAgICAgICBzdG9yYWdlUmVzb3VyY2UtPnN0YXJ0UmVwb3J0aW5nQ2hhbmdlc1RvRnJvbnRl
bmQoKTsKQEAgLTE0NDIsMzkgKzE0MzEsMjggQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpn
ZXRET01TdG9yYWdlRW50cmllcyhsb25nIGNhbGxJZCwgbG9uZyBzdG9yYWdlSWQpCiAgICAgICAg
ICAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGVudHJ5ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0
ZSgpOwogICAgICAgICAgICAgZW50cnktPnB1c2hTdHJpbmcobmFtZSk7CiAgICAgICAgICAgICBl
bnRyeS0+cHVzaFN0cmluZyh2YWx1ZSk7Ci0gICAgICAgICAgICBqc29uQXJyYXktPnB1c2goZW50
cnkpOworICAgICAgICAgICAgKCplbnRyaWVzKS0+cHVzaChlbnRyeSk7CiAgICAgICAgIH0KICAg
ICB9Ci0gICAgbV9yZW1vdGVGcm9udGVuZC0+ZGlkR2V0RE9NU3RvcmFnZUVudHJpZXMoY2FsbElk
LCBqc29uQXJyYXkpOwogfQogCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNldERPTVN0b3Jh
Z2VJdGVtKGxvbmcgY2FsbElkLCBsb25nIHN0b3JhZ2VJZCwgY29uc3QgU3RyaW5nJiBrZXksIGNv
bnN0IFN0cmluZyYgdmFsdWUpCit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNldERPTVN0b3Jh
Z2VJdGVtKGxvbmcsIGxvbmcgc3RvcmFnZUlkLCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3Ry
aW5nJiB2YWx1ZSwgYm9vbCogc3VjY2VzcykKIHsKLSAgICBpZiAoIW1fcmVtb3RlRnJvbnRlbmQp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOwogICAgIEluc3Bl
Y3RvckRPTVN0b3JhZ2VSZXNvdXJjZSogc3RvcmFnZVJlc291cmNlID0gZ2V0RE9NU3RvcmFnZVJl
c291cmNlRm9ySWQoc3RvcmFnZUlkKTsKICAgICBpZiAoc3RvcmFnZVJlc291cmNlKSB7CiAgICAg
ICAgIEV4Y2VwdGlvbkNvZGUgZXhjZXB0aW9uID0gMDsKICAgICAgICAgc3RvcmFnZVJlc291cmNl
LT5kb21TdG9yYWdlKCktPnNldEl0ZW0oa2V5LCB2YWx1ZSwgZXhjZXB0aW9uKTsKLSAgICAgICAg
c3VjY2VzcyA9ICFleGNlcHRpb247CisgICAgICAgICpzdWNjZXNzID0gIWV4Y2VwdGlvbjsKICAg
ICB9Ci0gICAgbV9yZW1vdGVGcm9udGVuZC0+ZGlkU2V0RE9NU3RvcmFnZUl0ZW0oY2FsbElkLCBz
dWNjZXNzKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpyZW1vdmVET01TdG9yYWdl
SXRlbShsb25nIGNhbGxJZCwgbG9uZyBzdG9yYWdlSWQsIGNvbnN0IFN0cmluZyYga2V5KQordm9p
ZCBJbnNwZWN0b3JDb250cm9sbGVyOjpyZW1vdmVET01TdG9yYWdlSXRlbShsb25nLCBsb25nIHN0
b3JhZ2VJZCwgY29uc3QgU3RyaW5nJiBrZXksIGJvb2wqIHN1Y2Nlc3MpCiB7Ci0gICAgaWYgKCFt
X3JlbW90ZUZyb250ZW5kKQotICAgICAgICByZXR1cm47Ci0KLSAgICBib29sIHN1Y2Nlc3MgPSBm
YWxzZTsKICAgICBJbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UqIHN0b3JhZ2VSZXNvdXJjZSA9
IGdldERPTVN0b3JhZ2VSZXNvdXJjZUZvcklkKHN0b3JhZ2VJZCk7CiAgICAgaWYgKHN0b3JhZ2VS
ZXNvdXJjZSkgewogICAgICAgICBzdG9yYWdlUmVzb3VyY2UtPmRvbVN0b3JhZ2UoKS0+cmVtb3Zl
SXRlbShrZXkpOwotICAgICAgICBzdWNjZXNzID0gdHJ1ZTsKKyAgICAgICAgKnN1Y2Nlc3MgPSB0
cnVlOwogICAgIH0KLSAgICBtX3JlbW90ZUZyb250ZW5kLT5kaWRSZW1vdmVET01TdG9yYWdlSXRl
bShjYWxsSWQsIHN1Y2Nlc3MpOwogfQogCiBJbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UqIElu
c3BlY3RvckNvbnRyb2xsZXI6OmdldERPTVN0b3JhZ2VSZXNvdXJjZUZvcklkKGxvbmcgc3RvcmFn
ZUlkKQpAQCAtMTUzNiwyNiArMTUxNCwxOSBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmNs
ZWFyUHJvZmlsZXMoKQogICAgIG1fbmV4dFVzZXJJbml0aWF0ZWRQcm9maWxlTnVtYmVyID0gMTsK
IH0KIAotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpnZXRQcm9maWxlSGVhZGVycyhsb25nIGNh
bGxJZCkKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6Z2V0UHJvZmlsZUhlYWRlcnMobG9uZywg
UmVmUHRyPEluc3BlY3RvckFycmF5PiogaGVhZGVycykKIHsKLSAgICBpZiAoIW1fcmVtb3RlRnJv
bnRlbmQpCi0gICAgICAgIHJldHVybjsKLSAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHJlc3Vs
dCA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKICAgICBQcm9maWxlc01hcDo6aXRlcmF0b3Ig
cHJvZmlsZXNFbmQgPSBtX3Byb2ZpbGVzLmVuZCgpOwogICAgIGZvciAoUHJvZmlsZXNNYXA6Oml0
ZXJhdG9yIGl0ID0gbV9wcm9maWxlcy5iZWdpbigpOyBpdCAhPSBwcm9maWxlc0VuZDsgKytpdCkK
LSAgICAgICAgcmVzdWx0LT5wdXNoKGNyZWF0ZVByb2ZpbGVIZWFkZXIoKml0LT5zZWNvbmQpKTsK
LSAgICBtX3JlbW90ZUZyb250ZW5kLT5kaWRHZXRQcm9maWxlSGVhZGVycyhjYWxsSWQsIHJlc3Vs
dCk7CisgICAgICAgICgqaGVhZGVycyktPnB1c2goY3JlYXRlUHJvZmlsZUhlYWRlcigqaXQtPnNl
Y29uZCkpOwogfQogCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmdldFByb2ZpbGUobG9uZyBj
YWxsSWQsIHVuc2lnbmVkIHVpZCkKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6Z2V0UHJvZmls
ZShsb25nLCB1bnNpZ25lZCB1aWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiBwcm9maWxlT2Jq
ZWN0KQogewotICAgIGlmICghbV9mcm9udGVuZCkKLSAgICAgICAgcmV0dXJuOwogICAgIFByb2Zp
bGVzTWFwOjppdGVyYXRvciBpdCA9IG1fcHJvZmlsZXMuZmluZCh1aWQpOwogICAgIGlmIChpdCAh
PSBtX3Byb2ZpbGVzLmVuZCgpKSB7Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBy
b2ZpbGVPYmplY3QgPSBjcmVhdGVQcm9maWxlSGVhZGVyKCppdC0+c2Vjb25kKTsKLSAgICAgICAg
cHJvZmlsZU9iamVjdC0+c2V0KCJoZWFkIiwgaXQtPnNlY29uZC0+YnVpbGRJbnNwZWN0b3JPYmpl
Y3RGb3JIZWFkKCkpOwotICAgICAgICBtX3JlbW90ZUZyb250ZW5kLT5kaWRHZXRQcm9maWxlKGNh
bGxJZCwgcHJvZmlsZU9iamVjdCk7CisgICAgICAgICpwcm9maWxlT2JqZWN0ID0gY3JlYXRlUHJv
ZmlsZUhlYWRlcigqaXQtPnNlY29uZCk7CisgICAgICAgICgqcHJvZmlsZU9iamVjdCktPnNldCgi
aGVhZCIsIGl0LT5zZWNvbmQtPmJ1aWxkSW5zcGVjdG9yT2JqZWN0Rm9ySGVhZCgpKTsKICAgICB9
CiB9CiAKQEAgLTE3MjMsMjIgKzE2OTQsMTUgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpk
aXNhYmxlRGVidWdnZXIoYm9vbCBhbHdheXMpCiAgICAgICAgIG1fZnJvbnRlbmQtPmRlYnVnZ2Vy
V2FzRGlzYWJsZWQoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjplZGl0U2NyaXB0
U291cmNlKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIHNvdXJjZUlELCBjb25zdCBTdHJpbmcm
IG5ld0NvbnRlbnQpCit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmVkaXRTY3JpcHRTb3VyY2Uo
bG9uZywgY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgY29uc3QgU3RyaW5nJiBuZXdDb250ZW50LCBi
b29sKiBzdWNjZXNzLCBTdHJpbmcqIHJlc3VsdCwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogbmV3
Q2FsbEZyYW1lcykKIHsKLSAgICBTdHJpbmcgcmVzdWx0OwotICAgIGJvb2wgc3VjY2VzcyA9IFNj
cmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5lZGl0U2NyaXB0U291cmNlKHNvdXJjZUlELCBuZXdD
b250ZW50LCByZXN1bHQpOwotICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gY2FsbEZyYW1lczsK
LSAgICBpZiAoc3VjY2VzcykKLSAgICAgICAgY2FsbEZyYW1lcyA9IGN1cnJlbnRDYWxsRnJhbWVz
KCk7Ci0gICAgbV9yZW1vdGVGcm9udGVuZC0+ZGlkRWRpdFNjcmlwdFNvdXJjZShjYWxsSWQsIHN1
Y2Nlc3MsIHJlc3VsdCwgY2FsbEZyYW1lcy5nZXQoKSk7CisgICAgaWYgKCpzdWNjZXNzID0gU2Ny
aXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgpLmVkaXRTY3JpcHRTb3VyY2Uoc291cmNlSUQsIG5ld0Nv
bnRlbnQsICpyZXN1bHQpKQorICAgICAgICAqbmV3Q2FsbEZyYW1lcyA9IGN1cnJlbnRDYWxsRnJh
bWVzKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6Z2V0U2NyaXB0U291cmNlKGxv
bmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIHNvdXJjZUlEKQordm9pZCBJbnNwZWN0b3JDb250cm9s
bGVyOjpnZXRTY3JpcHRTb3VyY2UobG9uZywgY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgU3RyaW5n
KiBzY3JpcHRTb3VyY2UpCiB7Ci0gICAgaWYgKCFtX2Zyb250ZW5kKQotICAgICAgICByZXR1cm47
Ci0gICAgU3RyaW5nIHNjcmlwdFNvdXJjZSA9IG1fc2NyaXB0SURUb0NvbnRlbnQuZ2V0KHNvdXJj
ZUlEKTsKLSAgICBtX3JlbW90ZUZyb250ZW5kLT5kaWRHZXRTY3JpcHRTb3VyY2UoY2FsbElkLCBz
Y3JpcHRTb3VyY2UpOworICAgICpzY3JpcHRTb3VyY2UgPSBtX3NjcmlwdElEVG9Db250ZW50Lmdl
dChzb3VyY2VJRCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6cmVzdW1lKCkKQEAg
LTE3NjcsMjcgKzE3MzEsMjUgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gSW5zcGVjdG9y
Q29udHJvbGxlcjo6Y3VycmVudENhbGxGcmFtZXMoKQogICAgIHJldHVybiBpbmplY3RlZFNjcmlw
dC5jYWxsRnJhbWVzKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0QnJlYWtw
b2ludChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgdW5zaWduZWQgbGluZU51
bWJlciwgYm9vbCBlbmFibGVkLCBjb25zdCBTdHJpbmcmIGNvbmRpdGlvbikKK3ZvaWQgSW5zcGVj
dG9yQ29udHJvbGxlcjo6c2V0QnJlYWtwb2ludChsb25nLCBjb25zdCBTdHJpbmcmIHNvdXJjZUlE
LCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBib29sIGVuYWJsZWQsIGNvbnN0IFN0cmluZyYgY29uZGl0
aW9uLCBib29sKiBzdWNjZXNzLCB1bnNpZ25lZCBpbnQqIGFjdHVhbExpbmVOdW1iZXIpCiB7CiAg
ICAgU2NyaXB0QnJlYWtwb2ludCBicmVha3BvaW50KGVuYWJsZWQsIGNvbmRpdGlvbik7Ci0gICAg
dW5zaWduZWQgYWN0dWFsTGluZU51bWJlciA9IDA7Ci0gICAgYm9vbCBzdWNjZXNzID0gU2NyaXB0
RGVidWdTZXJ2ZXI6OnNoYXJlZCgpLnNldEJyZWFrcG9pbnQoc291cmNlSUQsIGJyZWFrcG9pbnQs
IGxpbmVOdW1iZXIsICZhY3R1YWxMaW5lTnVtYmVyKTsKLSAgICBtX2Zyb250ZW5kLT5kaWRTZXRC
cmVha3BvaW50KGNhbGxJZCwgc3VjY2VzcywgYWN0dWFsTGluZU51bWJlcik7Ci0gICAgaWYgKCFz
dWNjZXNzKQorICAgICpzdWNjZXNzID0gU2NyaXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgpLnNldEJy
ZWFrcG9pbnQoc291cmNlSUQsIGJyZWFrcG9pbnQsIGxpbmVOdW1iZXIsIGFjdHVhbExpbmVOdW1i
ZXIpOworICAgIGlmICghKnN1Y2Nlc3MpCiAgICAgICAgIHJldHVybjsKIAogICAgIFN0cmluZyB1
cmwgPSBtX3NvdXJjZUlEVG9VUkwuZ2V0KHNvdXJjZUlEKTsKICAgICBpZiAodXJsLmlzRW1wdHko
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgU3RyaW5nIGJyZWFrcG9pbnRJZCA9IGZvcm1hdEJy
ZWFrcG9pbnRJZChzb3VyY2VJRCwgYWN0dWFsTGluZU51bWJlcik7Ci0gICAgbV9icmVha3BvaW50
c01hcHBpbmcuc2V0KGJyZWFrcG9pbnRJZCwgYWN0dWFsTGluZU51bWJlcik7CisgICAgU3RyaW5n
IGJyZWFrcG9pbnRJZCA9IGZvcm1hdEJyZWFrcG9pbnRJZChzb3VyY2VJRCwgKmFjdHVhbExpbmVO
dW1iZXIpOworICAgIG1fYnJlYWtwb2ludHNNYXBwaW5nLnNldChicmVha3BvaW50SWQsICphY3R1
YWxMaW5lTnVtYmVyKTsKIAogICAgIFN0cmluZyBrZXkgPSBtZDVCYXNlMTYodXJsKTsKICAgICBI
YXNoTWFwPFN0cmluZywgU291cmNlQnJlYWtwb2ludHM+OjppdGVyYXRvciBpdCA9IG1fc3RpY2t5
QnJlYWtwb2ludHMuZmluZChrZXkpOwogICAgIGlmIChpdCA9PSBtX3N0aWNreUJyZWFrcG9pbnRz
LmVuZCgpKQogICAgICAgICBpdCA9IG1fc3RpY2t5QnJlYWtwb2ludHMuc2V0KGtleSwgU291cmNl
QnJlYWtwb2ludHMoKSkuZmlyc3Q7Ci0gICAgaXQtPnNlY29uZC5zZXQoYWN0dWFsTGluZU51bWJl
ciwgYnJlYWtwb2ludCk7CisgICAgaXQtPnNlY29uZC5zZXQoKmFjdHVhbExpbmVOdW1iZXIsIGJy
ZWFrcG9pbnQpOwogICAgIHNhdmVCcmVha3BvaW50cygpOwogfQogCkBAIC0yMTYxLDE0ICsyMTIz
LDEwIEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6cmVtb3ZlQWxsU2NyaXB0c1RvRXZhbHVh
dGVPbkxvYWQoKQogICAgIG1fc2NyaXB0c1RvRXZhbHVhdGVPbkxvYWQuY2xlYXIoKTsKIH0KIAot
dm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpnZXRSZXNvdXJjZUNvbnRlbnQobG9uZyBjYWxsSWQs
IHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcikKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6Z2V0
UmVzb3VyY2VDb250ZW50KGxvbmcsIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgU3RyaW5nKiBj
b250ZW50KQogewotICAgIGlmICghbV9yZW1vdGVGcm9udGVuZCkKLSAgICAgICAgcmV0dXJuOwot
CiAgICAgUmVmUHRyPEluc3BlY3RvclJlc291cmNlPiByZXNvdXJjZSA9IG1fcmVzb3VyY2VzLmdl
dChpZGVudGlmaWVyKTsKLSAgICBTdHJpbmcgY29udGVudCA9IHJlc291cmNlID8gcmVzb3VyY2Ut
PnNvdXJjZVN0cmluZygpIDogU3RyaW5nKCk7Ci0gICAgbV9yZW1vdGVGcm9udGVuZC0+ZGlkR2V0
UmVzb3VyY2VDb250ZW50KGNhbGxJZCwgY29udGVudCk7CisgICAgKmNvbnRlbnQgPSByZXNvdXJj
ZSA/IHJlc291cmNlLT5zb3VyY2VTdHJpbmcoKSA6IFN0cmluZygpOwogfQogCiB2b2lkIEluc3Bl
Y3RvckNvbnRyb2xsZXI6OnJlbG9hZFBhZ2UoKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29u
dHJvbGxlci5oCmluZGV4IDA3YTQwZWIuLjQxNzZlMzQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JDb250cm9sbGVyLmgKQEAgLTEyMCw2ICsxMjAsNyBAQCBwdWJsaWM6CiAKICAgICBJbnNw
ZWN0b3JCYWNrZW5kKiBpbnNwZWN0b3JCYWNrZW5kKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JCYWNr
ZW5kLmdldCgpOyB9CiAgICAgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5n
ZXQoKTsgfQorICAgIEluc3BlY3RvckNsaWVudCogaW5zcGVjdG9yQ2xpZW50KCkgeyByZXR1cm4g
bV9jbGllbnQ7IH0KICAgICBJbmplY3RlZFNjcmlwdEhvc3QqIGluamVjdGVkU2NyaXB0SG9zdCgp
IHsgcmV0dXJuIG1faW5qZWN0ZWRTY3JpcHRIb3N0LmdldCgpOyB9CiAKICAgICB2b2lkIGluc3Bl
Y3RlZFBhZ2VEZXN0cm95ZWQoKTsKQEAgLTE5MCw3ICsxOTEsNyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBzdG9wVGltZWxpbmVQcm9maWxlcigpOwogICAgIEluc3BlY3RvclRpbWVsaW5lQWdlbnQqIHRp
bWVsaW5lQWdlbnQoKSB7IHJldHVybiBtX3RpbWVsaW5lQWdlbnQuZ2V0KCk7IH0KIAotICAgIHZv
aWQgZ2V0Q29va2llcyhsb25nIGNhbGxJZCk7CisgICAgdm9pZCBnZXRDb29raWVzKGxvbmcgY2Fs
bElkLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBjb29raWVzLCBXZWJDb3JlOjpTdHJpbmcqIGNv
b2tpZXNTdHJpbmcpOwogICAgIHZvaWQgZGVsZXRlQ29va2llKGNvbnN0IFN0cmluZyYgY29va2ll
TmFtZSwgY29uc3QgU3RyaW5nJiBkb21haW4pOwogCiAjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQ
UExJQ0FUSU9OUykKQEAgLTIxNyw5ICsyMTgsOSBAQCBwdWJsaWM6CiAjaWYgRU5BQkxFKERPTV9T
VE9SQUdFKQogICAgIHZvaWQgZGlkVXNlRE9NU3RvcmFnZShTdG9yYWdlQXJlYSogc3RvcmFnZUFy
ZWEsIGJvb2wgaXNMb2NhbFN0b3JhZ2UsIEZyYW1lKiBmcmFtZSk7CiAgICAgdm9pZCBzZWxlY3RE
T01TdG9yYWdlKFN0b3JhZ2UqIHN0b3JhZ2UpOwotICAgIHZvaWQgZ2V0RE9NU3RvcmFnZUVudHJp
ZXMobG9uZyBjYWxsSWQsIGxvbmcgc3RvcmFnZUlkKTsKLSAgICB2b2lkIHNldERPTVN0b3JhZ2VJ
dGVtKGxvbmcgY2FsbElkLCBsb25nIHN0b3JhZ2VJZCwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0
IFN0cmluZyYgdmFsdWUpOwotICAgIHZvaWQgcmVtb3ZlRE9NU3RvcmFnZUl0ZW0obG9uZyBjYWxs
SWQsIGxvbmcgc3RvcmFnZUlkLCBjb25zdCBTdHJpbmcmIGtleSk7CisgICAgdm9pZCBnZXRET01T
dG9yYWdlRW50cmllcyhsb25nIGNhbGxJZCwgbG9uZyBzdG9yYWdlSWQsIFJlZlB0cjxJbnNwZWN0
b3JBcnJheT4qIGVudHJpZXMpOworICAgIHZvaWQgc2V0RE9NU3RvcmFnZUl0ZW0obG9uZyBjYWxs
SWQsIGxvbmcgc3RvcmFnZUlkLCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1
ZSwgYm9vbCogc3VjY2Vzcyk7CisgICAgdm9pZCByZW1vdmVET01TdG9yYWdlSXRlbShsb25nIGNh
bGxJZCwgbG9uZyBzdG9yYWdlSWQsIGNvbnN0IFN0cmluZyYga2V5LCBib29sKiBzdWNjZXNzKTsK
ICNlbmRpZgogCiAgICAgY29uc3QgUmVzb3VyY2VzTWFwJiByZXNvdXJjZXMoKSBjb25zdCB7IHJl
dHVybiBtX3Jlc291cmNlczsgfQpAQCAtMjYyLDggKzI2Myw4IEBAIHB1YmxpYzoKICAgICB2b2lk
IGRpc2FibGVEZWJ1Z2dlcihib29sIGFsd2F5cyA9IGZhbHNlKTsKICAgICBib29sIGRlYnVnZ2Vy
RW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVidWdnZXJFbmFibGVkOyB9CiAKLSAgICB2b2lk
IGVkaXRTY3JpcHRTb3VyY2UobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgc291cmNlSUQsIGNv
bnN0IFN0cmluZyYgbmV3Q29udGVudCk7Ci0gICAgdm9pZCBnZXRTY3JpcHRTb3VyY2UobG9uZyBj
YWxsSWQsIGNvbnN0IFN0cmluZyYgc291cmNlSUQpOworICAgIHZvaWQgZWRpdFNjcmlwdFNvdXJj
ZShsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgY29uc3QgU3RyaW5nJiBuZXdD
b250ZW50LCBib29sKiBzdWNjZXNzLCBTdHJpbmcqIHJlc3VsdCwgUmVmUHRyPEluc3BlY3RvclZh
bHVlPiogbmV3Q2FsbEZyYW1lcyk7CisgICAgdm9pZCBnZXRTY3JpcHRTb3VyY2UobG9uZyBjYWxs
SWQsIGNvbnN0IFN0cmluZyYgc291cmNlSUQsIFN0cmluZyogc2NyaXB0U291cmNlKTsKIAogICAg
IHZvaWQgcmVzdW1lKCk7CiAgICAgdm9pZCBzZXRQYXVzZU9uRXhjZXB0aW9uc1N0YXRlKGxvbmcg
cGF1c2VTdGF0ZSk7CkBAIC0zMDcsNyArMzA4LDcgQEAgcHJpdmF0ZToKICNpZiBFTkFCTEUoSkFW
QVNDUklQVF9ERUJVR0dFUikKICAgICBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBjdXJyZW50
Q2FsbEZyYW1lcygpOwogCi0gICAgdm9pZCBzZXRCcmVha3BvaW50KGxvbmcgY2FsbElkLCBjb25z
dCBTdHJpbmcmIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBib29sIGVuYWJsZWQsIGNv
bnN0IFN0cmluZyYgY29uZGl0aW9uKTsKKyAgICB2b2lkIHNldEJyZWFrcG9pbnQobG9uZyBjYWxs
SWQsIGNvbnN0IFN0cmluZyYgc291cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIGJvb2wgZW5h
YmxlZCwgY29uc3QgU3RyaW5nJiBjb25kaXRpb24sIGJvb2wqIHN1Y2Nlc3MsIHVuc2lnbmVkIGlu
dCogYWN0dWFsTGluZU51bWJlcik7CiAgICAgdm9pZCByZW1vdmVCcmVha3BvaW50KGNvbnN0IFN0
cmluZyYgc291cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIpOwogCiAgICAgdHlwZWRlZiBIYXNo
TWFwPHVuc2lnbmVkIGludCwgUmVmUHRyPFNjcmlwdFByb2ZpbGU+ID4gUHJvZmlsZXNNYXA7CkBA
IC0zMTUsOCArMzE2LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIHN0YXJ0VXNlckluaXRpYXRlZFBy
b2ZpbGluZ1Nvb24oKTsKICAgICB2b2lkIHRvZ2dsZVJlY29yZEJ1dHRvbihib29sKTsKICAgICB2
b2lkIGVuYWJsZURlYnVnZ2VyRnJvbUZyb250ZW5kKGJvb2wgYWx3YXlzKTsKLSAgICB2b2lkIGdl
dFByb2ZpbGVIZWFkZXJzKGxvbmcgY2FsbElkKTsKLSAgICB2b2lkIGdldFByb2ZpbGUobG9uZyBj
YWxsSWQsIHVuc2lnbmVkIHVpZCk7CisgICAgdm9pZCBnZXRQcm9maWxlSGVhZGVycyhsb25nIGNh
bGxJZCwgUmVmUHRyPEluc3BlY3RvckFycmF5PiogaGVhZGVycyk7CisgICAgdm9pZCBnZXRQcm9m
aWxlKGxvbmcgY2FsbElkLCB1bnNpZ25lZCB1aWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiBw
cm9maWxlT2JqZWN0KTsKICAgICBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gY3JlYXRlUHJv
ZmlsZUhlYWRlcihjb25zdCBTY3JpcHRQcm9maWxlJiBwcm9maWxlKTsKICNlbmRpZgogI2lmIEVO
QUJMRShEQVRBQkFTRSkKQEAgLTMzNyw3ICszMzgsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgYWRk
UmVzb3VyY2UoSW5zcGVjdG9yUmVzb3VyY2UqKTsKICAgICB2b2lkIHJlbW92ZVJlc291cmNlKElu
c3BlY3RvclJlc291cmNlKik7CiAgICAgSW5zcGVjdG9yUmVzb3VyY2UqIGdldFRyYWNrZWRSZXNv
dXJjZSh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpOwotICAgIHZvaWQgZ2V0UmVzb3VyY2VDb250
ZW50KGxvbmcgY2FsbElkLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpOworICAgIHZvaWQgZ2V0
UmVzb3VyY2VDb250ZW50KGxvbmcgY2FsbElkLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIFN0
cmluZyogY29udGVudCk7CiAKICAgICB2b2lkIHBydW5lUmVzb3VyY2VzKFJlc291cmNlc01hcCos
IERvY3VtZW50TG9hZGVyKiBsb2FkZXJUb0tlZXAgPSAwKTsKICAgICB2b2lkIHJlbW92ZUFsbFJl
c291cmNlcyhSZXNvdXJjZXNNYXAqIG1hcCkgeyBwcnVuZVJlc291cmNlcyhtYXApOyB9CmRpZmYg
LS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAgYi9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKaW5kZXggMDc1OTQ0YS4uYmEwMGJhMCAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCisrKyBi
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcApAQCAtNDMyLDcyICs0MzIs
NTYgQEAgbG9uZyBJbnNwZWN0b3JET01BZ2VudDo6cHVzaE5vZGVQYXRoVG9Gcm9udGVuZChOb2Rl
KiBub2RlVG9QdXNoKQogICAgIHJldHVybiBtYXAtPmdldChub2RlVG9QdXNoKTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0QXR0cmlidXRlKGxvbmcgY2FsbElkLCBsb25nIGVsZW1l
bnRJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKQordm9pZCBJbnNw
ZWN0b3JET01BZ2VudDo6c2V0QXR0cmlidXRlKGxvbmcsIGxvbmcgZWxlbWVudElkLCBjb25zdCBT
dHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wqIHN1Y2Nlc3MpCiB7CiAgICAg
Tm9kZSogbm9kZSA9IG5vZGVGb3JJZChlbGVtZW50SWQpOwogICAgIGlmIChub2RlICYmIChub2Rl
LT5ub2RlVHlwZSgpID09IE5vZGU6OkVMRU1FTlRfTk9ERSkpIHsKICAgICAgICAgRWxlbWVudCog
ZWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKTsKICAgICAgICAgRXhjZXB0aW9u
Q29kZSBlYyA9IDA7CiAgICAgICAgIGVsZW1lbnQtPnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSwg
ZWMpOwotICAgICAgICBtX2Zyb250ZW5kLT5kaWRBcHBseURvbUNoYW5nZShjYWxsSWQsIGVjID09
IDApOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fZnJvbnRlbmQtPmRpZEFwcGx5RG9tQ2hhbmdl
KGNhbGxJZCwgZmFsc2UpOworICAgICAgICAqc3VjY2VzcyA9ICFlYzsKICAgICB9CiB9CiAKLXZv
aWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnJlbW92ZUF0dHJpYnV0ZShsb25nIGNhbGxJZCwgbG9uZyBl
bGVtZW50SWQsIGNvbnN0IFN0cmluZyYgbmFtZSkKK3ZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnJl
bW92ZUF0dHJpYnV0ZShsb25nLCBsb25nIGVsZW1lbnRJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBi
b29sKiBzdWNjZXNzKQogewogICAgIE5vZGUqIG5vZGUgPSBub2RlRm9ySWQoZWxlbWVudElkKTsK
ICAgICBpZiAobm9kZSAmJiAobm9kZS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpFTEVNRU5UX05PREUp
KSB7CiAgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9k
ZSk7CiAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgICAgICBlbGVtZW50LT5yZW1v
dmVBdHRyaWJ1dGUobmFtZSwgZWMpOwotICAgICAgICBtX2Zyb250ZW5kLT5kaWRBcHBseURvbUNo
YW5nZShjYWxsSWQsIGVjID09IDApOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fZnJvbnRlbmQt
PmRpZEFwcGx5RG9tQ2hhbmdlKGNhbGxJZCwgZmFsc2UpOworICAgICAgICAqc3VjY2VzcyA9ICFl
YzsKICAgICB9CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnJlbW92ZU5vZGUobG9uZyBj
YWxsSWQsIGxvbmcgbm9kZUlkKQordm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cmVtb3ZlTm9kZShs
b25nLCBsb25nIG5vZGVJZCwgbG9uZyogb3V0Tm9kZUlkKQogewogICAgIE5vZGUqIG5vZGUgPSBu
b2RlRm9ySWQobm9kZUlkKTsKLSAgICBpZiAoIW5vZGUpIHsKLSAgICAgICAgbV9mcm9udGVuZC0+
ZGlkUmVtb3ZlTm9kZShjYWxsSWQsIDApOworICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJu
OwotICAgIH0KIAogICAgIE5vZGUqIHBhcmVudE5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCk7Ci0g
ICAgaWYgKCFwYXJlbnROb2RlKSB7Ci0gICAgICAgIG1fZnJvbnRlbmQtPmRpZFJlbW92ZU5vZGUo
Y2FsbElkLCAwKTsKKyAgICBpZiAoIXBhcmVudE5vZGUpCiAgICAgICAgIHJldHVybjsKLSAgICB9
CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBwYXJlbnROb2RlLT5yZW1vdmVDaGls
ZChub2RlLCBlYyk7Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAgIG1fZnJvbnRlbmQtPmRpZFJlbW92
ZU5vZGUoY2FsbElkLCAwKTsKKyAgICBpZiAoZWMpCiAgICAgICAgIHJldHVybjsKLSAgICB9CiAK
LSAgICBtX2Zyb250ZW5kLT5kaWRSZW1vdmVOb2RlKGNhbGxJZCwgbm9kZUlkKTsKKyAgICAqb3V0
Tm9kZUlkID0gbm9kZUlkOwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpjaGFuZ2VUYWdO
YW1lKGxvbmcgY2FsbElkLCBsb25nIG5vZGVJZCwgY29uc3QgU3RyaW5nJiB0YWdOYW1lKQordm9p
ZCBJbnNwZWN0b3JET01BZ2VudDo6Y2hhbmdlVGFnTmFtZShsb25nLCBsb25nIG5vZGVJZCwgY29u
c3QgU3RyaW5nJiB0YWdOYW1lLCBsb25nKiBuZXdJZCkKIHsKICAgICBOb2RlKiBvbGROb2RlID0g
bm9kZUZvcklkKG5vZGVJZCk7Ci0gICAgaWYgKCFvbGROb2RlIHx8ICFvbGROb2RlLT5pc0VsZW1l
bnROb2RlKCkpIHsKLSAgICAgICAgbV9mcm9udGVuZC0+ZGlkQ2hhbmdlVGFnTmFtZShjYWxsSWQs
IDApOworICAgIGlmICghb2xkTm9kZSB8fCAhb2xkTm9kZS0+aXNFbGVtZW50Tm9kZSgpKQogICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYm9vbCBjaGlsZHJlblJlcXVlc3RlZCA9IG1fY2hp
bGRyZW5SZXF1ZXN0ZWQuY29udGFpbnMobm9kZUlkKTsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMg
PSAwOwogICAgIFJlZlB0cjxFbGVtZW50PiBuZXdFbGVtID0gb2xkTm9kZS0+ZG9jdW1lbnQoKS0+
Y3JlYXRlRWxlbWVudCh0YWdOYW1lLCBlYyk7Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAgIG1fZnJv
bnRlbmQtPmRpZENoYW5nZVRhZ05hbWUoY2FsbElkLCAwKTsKKyAgICBpZiAoZWMpCiAgICAgICAg
IHJldHVybjsKLSAgICB9CiAKICAgICAvLyBDb3B5IG92ZXIgdGhlIG9yaWdpbmFsIG5vZGUncyBh
dHRyaWJ1dGVzLgogICAgIEVsZW1lbnQqIG9sZEVsZW0gPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4o
b2xkTm9kZSk7CkBAIC01MTUsMzYgKzQ5OSwyOCBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50Ojpj
aGFuZ2VUYWdOYW1lKGxvbmcgY2FsbElkLCBsb25nIG5vZGVJZCwgY29uc3QgU3RyaW5nJiB0YQog
ICAgIHBhcmVudC0+aW5zZXJ0QmVmb3JlKG5ld0VsZW0sIG9sZE5vZGUtPm5leHRTaWJsaW5nKCks
IGVjKTsKICAgICBwYXJlbnQtPnJlbW92ZUNoaWxkKG9sZE5vZGUsIGVjKTsKIAotICAgIGlmIChl
YykgewotICAgICAgICBtX2Zyb250ZW5kLT5kaWRDaGFuZ2VUYWdOYW1lKGNhbGxJZCwgMCk7Cisg
ICAgaWYgKGVjKQogICAgICAgICByZXR1cm47Ci0gICAgfQogCi0gICAgbG9uZyBuZXdJZCA9IHB1
c2hOb2RlUGF0aFRvRnJvbnRlbmQobmV3RWxlbS5nZXQoKSk7Ci0gICAgaWYgKGNoaWxkcmVuUmVx
dWVzdGVkKQotICAgICAgICBwdXNoQ2hpbGROb2Rlc1RvRnJvbnRlbmQobmV3SWQpOwotICAgIG1f
ZnJvbnRlbmQtPmRpZENoYW5nZVRhZ05hbWUoY2FsbElkLCBuZXdJZCk7CisgICAgKm5ld0lkID0g
cHVzaE5vZGVQYXRoVG9Gcm9udGVuZChuZXdFbGVtLmdldCgpKTsKKyAgICBpZiAobV9jaGlsZHJl
blJlcXVlc3RlZC5jb250YWlucyhub2RlSWQpKQorICAgICAgICBwdXNoQ2hpbGROb2Rlc1RvRnJv
bnRlbmQoKm5ld0lkKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0T3V0ZXJIVE1M
KGxvbmcgY2FsbElkLCBsb25nIG5vZGVJZCkKK3ZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldE91
dGVySFRNTChsb25nLCBsb25nIG5vZGVJZCwgV2ViQ29yZTo6U3RyaW5nKiBvdXRlckhUTUwpCiB7
CiAgICAgTm9kZSogbm9kZSA9IG5vZGVGb3JJZChub2RlSWQpOwotICAgIGlmICghbm9kZSB8fCAh
bm9kZS0+aXNIVE1MRWxlbWVudCgpKSB7Ci0gICAgICAgIG1fZnJvbnRlbmQtPmRpZEdldE91dGVy
SFRNTChjYWxsSWQsICIiKTsKKyAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPmlzSFRNTEVsZW1lbnQo
KSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAotICAgIEhUTUxFbGVtZW50KiBodG1sRWxlbWVu
dCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4obm9kZSk7Ci0gICAgbV9mcm9udGVuZC0+ZGlk
R2V0T3V0ZXJIVE1MKGNhbGxJZCwgaHRtbEVsZW1lbnQtPm91dGVySFRNTCgpKTsKKyAgICAqb3V0
ZXJIVE1MID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihub2RlKS0+b3V0ZXJIVE1MKCk7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldE91dGVySFRNTChsb25nIGNhbGxJZCwgbG9u
ZyBub2RlSWQsIGNvbnN0IFN0cmluZyYgb3V0ZXJIVE1MKQordm9pZCBJbnNwZWN0b3JET01BZ2Vu
dDo6c2V0T3V0ZXJIVE1MKGxvbmcsIGxvbmcgbm9kZUlkLCBjb25zdCBTdHJpbmcmIG91dGVySFRN
TCwgbG9uZyogbmV3SWQpCiB7CiAgICAgTm9kZSogbm9kZSA9IG5vZGVGb3JJZChub2RlSWQpOwot
ICAgIGlmICghbm9kZSB8fCAhbm9kZS0+aXNIVE1MRWxlbWVudCgpKSB7Ci0gICAgICAgIG1fZnJv
bnRlbmQtPmRpZFNldE91dGVySFRNTChjYWxsSWQsIDApOworICAgIGlmICghbm9kZSB8fCAhbm9k
ZS0+aXNIVE1MRWxlbWVudCgpKQogICAgICAgICByZXR1cm47Ci0gICAgfQogCiAgICAgYm9vbCBj
aGlsZHJlblJlcXVlc3RlZCA9IG1fY2hpbGRyZW5SZXF1ZXN0ZWQuY29udGFpbnMobm9kZUlkKTsK
ICAgICBOb2RlKiBwcmV2aW91c1NpYmxpbmcgPSBub2RlLT5wcmV2aW91c1NpYmxpbmcoKTsKQEAg
LTU1NCw0MSArNTMwLDM1IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldE91dGVySFRNTChs
b25nIGNhbGxJZCwgbG9uZyBub2RlSWQsIGNvbnN0IFN0cmluZyYgb3V0CiAgICAgRXhjZXB0aW9u
Q29kZSBlYyA9IDA7CiAgICAgaHRtbEVsZW1lbnQtPnNldE91dGVySFRNTChvdXRlckhUTUwsIGVj
KTsKICAgICBpZiAoZWMpCi0gICAgICAgIG1fZnJvbnRlbmQtPmRpZFNldE91dGVySFRNTChjYWxs
SWQsIDApOworICAgICAgICByZXR1cm47CiAKICAgICBOb2RlKiBuZXdOb2RlID0gcHJldmlvdXNT
aWJsaW5nID8gcHJldmlvdXNTaWJsaW5nLT5uZXh0U2libGluZygpIDogcGFyZW50Tm9kZS0+Zmly
c3RDaGlsZCgpOwogCi0gICAgbG9uZyBuZXdJZCA9IHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQobmV3
Tm9kZSk7CisgICAgKm5ld0lkID0gcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChuZXdOb2RlKTsKICAg
ICBpZiAoY2hpbGRyZW5SZXF1ZXN0ZWQpCi0gICAgICAgIHB1c2hDaGlsZE5vZGVzVG9Gcm9udGVu
ZChuZXdJZCk7Ci0KLSAgICBtX2Zyb250ZW5kLT5kaWRTZXRPdXRlckhUTUwoY2FsbElkLCBuZXdJ
ZCk7CisgICAgICAgIHB1c2hDaGlsZE5vZGVzVG9Gcm9udGVuZCgqbmV3SWQpOwogfQogCi12b2lk
IEluc3BlY3RvckRPTUFnZW50OjpzZXRUZXh0Tm9kZVZhbHVlKGxvbmcgY2FsbElkLCBsb25nIG5v
ZGVJZCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3ZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldFRl
eHROb2RlVmFsdWUobG9uZywgbG9uZyBub2RlSWQsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wq
IHN1Y2Nlc3MpCiB7CiAgICAgTm9kZSogbm9kZSA9IG5vZGVGb3JJZChub2RlSWQpOwogICAgIGlm
IChub2RlICYmIChub2RlLT5ub2RlVHlwZSgpID09IE5vZGU6OlRFWFRfTk9ERSkpIHsKICAgICAg
ICAgVGV4dCogdGV4dF9ub2RlID0gc3RhdGljX2Nhc3Q8VGV4dCo+KG5vZGUpOwogICAgICAgICBF
eGNlcHRpb25Db2RlIGVjID0gMDsKICAgICAgICAgdGV4dF9ub2RlLT5yZXBsYWNlV2hvbGVUZXh0
KHZhbHVlLCBlYyk7Ci0gICAgICAgIG1fZnJvbnRlbmQtPmRpZEFwcGx5RG9tQ2hhbmdlKGNhbGxJ
ZCwgZWMgPT0gMCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbV9mcm9udGVuZC0+ZGlkQXBwbHlE
b21DaGFuZ2UoY2FsbElkLCBmYWxzZSk7CisgICAgICAgICpzdWNjZXNzID0gIWVjOwogICAgIH0K
IH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2RlKGxv
bmcgY2FsbElkLCBsb25nIG5vZGVJZCkKK3ZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldEV2ZW50
TGlzdGVuZXJzRm9yTm9kZShsb25nLCBsb25nIG5vZGVJZCwgbG9uZyogb3V0Tm9kZUlkLCBSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+KiBsaXN0ZW5lcnNBcnJheSkKIHsKICAgICBOb2RlKiBub2RlID0g
bm9kZUZvcklkKG5vZGVJZCk7Ci0gICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBsaXN0ZW5lcnNB
cnJheSA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKKyAgICAqb3V0Tm9kZUlkID0gbm9kZUlk
OwogICAgIEV2ZW50VGFyZ2V0RGF0YSogZDsKIAogICAgIC8vIFF1aWNrIGJyZWFrIGlmIGEgbnVs
bCBub2RlIG9yIG5vIGxpc3RlbmVycyBhdCBhbGwKLSAgICBpZiAoIW5vZGUgfHwgIShkID0gbm9k
ZS0+ZXZlbnRUYXJnZXREYXRhKCkpKSB7Ci0gICAgICAgIG1fZnJvbnRlbmQtPmRpZEdldEV2ZW50
TGlzdGVuZXJzRm9yTm9kZShjYWxsSWQsIG5vZGVJZCwgbGlzdGVuZXJzQXJyYXkucmVsZWFzZSgp
KTsKKyAgICBpZiAoIW5vZGUgfHwgIShkID0gbm9kZS0+ZXZlbnRUYXJnZXREYXRhKCkpKQogICAg
ICAgICByZXR1cm47Ci0gICAgfQogCiAgICAgLy8gR2V0IHRoZSBsaXN0IG9mIGV2ZW50IHR5cGVz
IHRoaXMgTm9kZSBpcyBjb25jZXJuZWQgd2l0aAogICAgIFZlY3RvcjxBdG9taWNTdHJpbmc+IGV2
ZW50VHlwZXM7CkBAIC01OTksMTAgKzU2OSw4IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6Omdl
dEV2ZW50TGlzdGVuZXJzRm9yTm9kZShsb25nIGNhbGxJZCwgbG9uZyBub2RlSWQpCiAKICAgICAv
LyBRdWljayBicmVhayBpZiBubyB1c2VmdWwgbGlzdGVuZXJzCiAgICAgc2l6ZV90IGV2ZW50VHlw
ZXNMZW5ndGggPSBldmVudFR5cGVzLnNpemUoKTsKLSAgICBpZiAoZXZlbnRUeXBlc0xlbmd0aCA9
PSAwKSB7Ci0gICAgICAgIG1fZnJvbnRlbmQtPmRpZEdldEV2ZW50TGlzdGVuZXJzRm9yTm9kZShj
YWxsSWQsIG5vZGVJZCwgbGlzdGVuZXJzQXJyYXkucmVsZWFzZSgpKTsKKyAgICBpZiAoIWV2ZW50
VHlwZXNMZW5ndGgpCiAgICAgICAgIHJldHVybjsKLSAgICB9CiAKICAgICAvLyBUaGUgTm9kZSdz
IEV2ZW50IEFuY2VzdG9ycyAobm90IGluY2x1ZGluZyBzZWxmKQogICAgIFZlY3RvcjxSZWZQdHI8
Q29udGFpbmVyTm9kZT4gPiBhbmNlc3RvcnM7CkBAIC02MzMsNyArNjAxLDcgQEAgdm9pZCBJbnNw
ZWN0b3JET01BZ2VudDo6Z2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2RlKGxvbmcgY2FsbElkLCBsb25n
IG5vZGVJZCkKICAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCB2ZWN0b3Iuc2l6ZSgpOyAr
K2opIHsKICAgICAgICAgICAgIGNvbnN0IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyJiBsaXN0ZW5l
ciA9IHZlY3RvcltqXTsKICAgICAgICAgICAgIGlmIChsaXN0ZW5lci51c2VDYXB0dXJlKQotICAg
ICAgICAgICAgICAgIGxpc3RlbmVyc0FycmF5LT5wdXNoKGJ1aWxkT2JqZWN0Rm9yRXZlbnRMaXN0
ZW5lcihsaXN0ZW5lciwgaW5mby5ldmVudFR5cGUsIGluZm8ubm9kZSkpOworICAgICAgICAgICAg
ICAgICgqbGlzdGVuZXJzQXJyYXkpLT5wdXNoKGJ1aWxkT2JqZWN0Rm9yRXZlbnRMaXN0ZW5lcihs
aXN0ZW5lciwgaW5mby5ldmVudFR5cGUsIGluZm8ubm9kZSkpOwogICAgICAgICB9CiAgICAgfQog
CkBAIC02NDQsMTEgKzYxMiw5IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldEV2ZW50TGlz
dGVuZXJzRm9yTm9kZShsb25nIGNhbGxJZCwgbG9uZyBub2RlSWQpCiAgICAgICAgIGZvciAoc2l6
ZV90IGogPSAwOyBqIDwgdmVjdG9yLnNpemUoKTsgKytqKSB7CiAgICAgICAgICAgICBjb25zdCBS
ZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciYgbGlzdGVuZXIgPSB2ZWN0b3Jbal07CiAgICAgICAgICAg
ICBpZiAoIWxpc3RlbmVyLnVzZUNhcHR1cmUpCi0gICAgICAgICAgICAgICAgbGlzdGVuZXJzQXJy
YXktPnB1c2goYnVpbGRPYmplY3RGb3JFdmVudExpc3RlbmVyKGxpc3RlbmVyLCBpbmZvLmV2ZW50
VHlwZSwgaW5mby5ub2RlKSk7CisgICAgICAgICAgICAgICAgKCpsaXN0ZW5lcnNBcnJheSktPnB1
c2goYnVpbGRPYmplY3RGb3JFdmVudExpc3RlbmVyKGxpc3RlbmVyLCBpbmZvLmV2ZW50VHlwZSwg
aW5mby5ub2RlKSk7CiAgICAgICAgIH0KICAgICB9Ci0KLSAgICBtX2Zyb250ZW5kLT5kaWRHZXRF
dmVudExpc3RlbmVyc0Zvck5vZGUoY2FsbElkLCBub2RlSWQsIGxpc3RlbmVyc0FycmF5LnJlbGVh
c2UoKSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmFkZEluc3BlY3RlZE5vZGUobG9u
ZyBub2RlSWQpCkBAIC0xMDA2LDE5ICs5NzIsMTUgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6
ZGlkTW9kaWZ5RE9NQXR0cihFbGVtZW50KiBlbGVtZW50KQogICAgIG1fZnJvbnRlbmQtPmF0dHJp
YnV0ZXNVcGRhdGVkKGlkLCBidWlsZEFycmF5Rm9yRWxlbWVudEF0dHJpYnV0ZXMoZWxlbWVudCkp
OwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRTdHlsZXMobG9uZyBjYWxsSWQsIGxv
bmcgbm9kZUlkLCBib29sIGF1dGhvck9ubHkpCit2b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRT
dHlsZXMobG9uZywgbG9uZyBub2RlSWQsIGJvb2wgYXV0aG9yT25seSwgUmVmUHRyPEluc3BlY3Rv
clZhbHVlPiogc3R5bGVzKQogewogICAgIE5vZGUqIG5vZGUgPSBub2RlRm9ySWQobm9kZUlkKTsK
LSAgICBpZiAoIW5vZGUgfHwgbm9kZS0+bm9kZVR5cGUoKSAhPSBOb2RlOjpFTEVNRU5UX05PREUp
IHsKLSAgICAgICAgbV9mcm9udGVuZC0+ZGlkR2V0U3R5bGVzKGNhbGxJZCwgSW5zcGVjdG9yVmFs
dWU6Om51bGwoKSk7CisgICAgaWYgKCFub2RlIHx8IG5vZGUtPm5vZGVUeXBlKCkgIT0gTm9kZTo6
RUxFTUVOVF9OT0RFKQogICAgICAgICByZXR1cm47Ci0gICAgfQogCiAgICAgRE9NV2luZG93KiBk
ZWZhdWx0VmlldyA9IG5vZGUtPm93bmVyRG9jdW1lbnQoKS0+ZGVmYXVsdFZpZXcoKTsKLSAgICBp
ZiAoIWRlZmF1bHRWaWV3KSB7Ci0gICAgICAgIG1fZnJvbnRlbmQtPmRpZEdldFN0eWxlcyhjYWxs
SWQsIEluc3BlY3RvclZhbHVlOjpudWxsKCkpOworICAgIGlmICghZGVmYXVsdFZpZXcpCiAgICAg
ICAgIHJldHVybjsKLSAgICB9CiAKICAgICBFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8
RWxlbWVudCo+KG5vZGUpOwogICAgIFJlZlB0cjxDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24+
IGNvbXB1dGVkU3R5bGVJbmZvID0gY29tcHV0ZWRTdHlsZShub2RlLCB0cnVlKTsgLy8gU3VwcG9y
dCB0aGUgdmlld2luZyBvZiA6dmlzaXRlZCBpbmZvcm1hdGlvbiBpbiBjb21wdXRlZCBzdHlsZS4K
QEAgLTEwNTAsNDEgKzEwMTIsMzUgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0U3R5bGVz
KGxvbmcgY2FsbElkLCBsb25nIG5vZGVJZCwgYm9vbCBhdXRob3JPbmx5KQogICAgICAgICBwYXJl
bnRFbGVtZW50ID0gcGFyZW50RWxlbWVudC0+cGFyZW50RWxlbWVudCgpOwogICAgICAgICBjdXJy
ZW50U3R5bGUgPSBwYXJlbnRTdHlsZTsKICAgICB9Ci0gICAgbV9mcm9udGVuZC0+ZGlkR2V0U3R5
bGVzKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSk7CisgICAgKnN0eWxlcyA9IHJlc3VsdC5yZWxl
YXNlKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldEFsbFN0eWxlcyhsb25nIGNh
bGxJZCkKK3ZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldEFsbFN0eWxlcyhsb25nLCBSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+KiBzdHlsZXMpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBy
ZXN1bHQgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CiAgICAgZm9yIChMaXN0SGFzaFNldDxS
ZWZQdHI8RG9jdW1lbnQ+ID46Oml0ZXJhdG9yIGl0ID0gbV9kb2N1bWVudHMuYmVnaW4oKTsgaXQg
IT0gbV9kb2N1bWVudHMuZW5kKCk7ICsraXQpIHsKICAgICAgICAgU3R5bGVTaGVldExpc3QqIGxp
c3QgPSAoKml0KS0+c3R5bGVTaGVldHMoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGxpc3QtPmxlbmd0aCgpOyArK2kpIHsKICAgICAgICAgICAgIFN0eWxlU2hlZXQqIHN0eWxl
U2hlZXQgPSBsaXN0LT5pdGVtKGkpOwogICAgICAgICAgICAgaWYgKHN0eWxlU2hlZXQtPmlzQ1NT
U3R5bGVTaGVldCgpKQotICAgICAgICAgICAgICAgIHJlc3VsdC0+cHVzaChidWlsZE9iamVjdEZv
clN0eWxlU2hlZXQoKCppdCkuZ2V0KCksIHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXQqPihzdHls
ZVNoZWV0KSkpOworICAgICAgICAgICAgICAgICgqc3R5bGVzKS0+cHVzaChidWlsZE9iamVjdEZv
clN0eWxlU2hlZXQoKCppdCkuZ2V0KCksIHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXQqPihzdHls
ZVNoZWV0KSkpOwogICAgICAgICB9CiAgICAgfQotICAgIG1fZnJvbnRlbmQtPmRpZEdldEFsbFN0
eWxlcyhjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCkpOwogfQogCi12b2lkIEluc3BlY3RvckRPTUFn
ZW50OjpnZXRTdHlsZVNoZWV0KGxvbmcgY2FsbElkLCBsb25nIHN0eWxlU2hlZXRJZCkKK3ZvaWQg
SW5zcGVjdG9yRE9NQWdlbnQ6OmdldFN0eWxlU2hlZXQobG9uZywgbG9uZyBzdHlsZVNoZWV0SWQs
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiBzdHlsZVNoZWV0T2JqZWN0KQogewogICAgIENTU1N0
eWxlU2hlZXQqIHN0eWxlU2hlZXQgPSBjc3NTdG9yZSgpLT5zdHlsZVNoZWV0Rm9ySWQoc3R5bGVT
aGVldElkKTsKICAgICBpZiAoc3R5bGVTaGVldCAmJiBzdHlsZVNoZWV0LT5kb2MoKSkKLSAgICAg
ICAgbV9mcm9udGVuZC0+ZGlkR2V0U3R5bGVTaGVldChjYWxsSWQsIGJ1aWxkT2JqZWN0Rm9yU3R5
bGVTaGVldChzdHlsZVNoZWV0LT5kb2MoKSwgc3R5bGVTaGVldCkpOwotICAgIGVsc2UKLSAgICAg
ICAgbV9mcm9udGVuZC0+ZGlkR2V0U3R5bGVTaGVldChjYWxsSWQsIEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCkpOworICAgICAgICAqc3R5bGVTaGVldE9iamVjdCA9IGJ1aWxkT2JqZWN0Rm9yU3R5
bGVTaGVldChzdHlsZVNoZWV0LT5kb2MoKSwgc3R5bGVTaGVldCk7CiB9CiAKLXZvaWQgSW5zcGVj
dG9yRE9NQWdlbnQ6OmdldFJ1bGVSYW5nZXMobG9uZyBjYWxsSWQsIGxvbmcgc3R5bGVTaGVldElk
KQordm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0UnVsZVJhbmdlcyhsb25nLCBsb25nIHN0eWxl
U2hlZXRJZCwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogcnVsZVJhbmdlKQogewogICAgIENTU1N0
eWxlU2hlZXQqIHN0eWxlU2hlZXQgPSBjc3NTdG9yZSgpLT5zdHlsZVNoZWV0Rm9ySWQoc3R5bGVT
aGVldElkKTsKICAgICBpZiAoc3R5bGVTaGVldCAmJiBzdHlsZVNoZWV0LT5kb2MoKSkgewogICAg
ICAgICBIYXNoTWFwPGxvbmcsIFNvdXJjZVJhbmdlPiBydWxlUmFuZ2VzID0gY3NzU3RvcmUoKS0+
Z2V0UnVsZVJhbmdlcyhzdHlsZVNoZWV0KTsKLSAgICAgICAgaWYgKCFydWxlUmFuZ2VzLnNpemUo
KSkgewotICAgICAgICAgICAgbV9mcm9udGVuZC0+ZGlkR2V0U3R5bGVTaGVldChjYWxsSWQsIElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOworICAgICAgICBpZiAoIXJ1bGVSYW5nZXMuc2l6ZSgp
KQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CiAgICAgICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgIGZv
ciAoSGFzaE1hcDxsb25nLCBTb3VyY2VSYW5nZT46Oml0ZXJhdG9yIGl0ID0gcnVsZVJhbmdlcy5i
ZWdpbigpOyBpdCAhPSBydWxlUmFuZ2VzLmVuZCgpOyArK2l0KSB7CiAgICAgICAgICAgICBpZiAo
aXQtPnNlY29uZC5zZWNvbmQpIHsKQEAgLTEwOTYsMzkgKzEwNTIsMzAgQEAgdm9pZCBJbnNwZWN0
b3JET01BZ2VudDo6Z2V0UnVsZVJhbmdlcyhsb25nIGNhbGxJZCwgbG9uZyBzdHlsZVNoZWV0SWQp
CiAgICAgICAgICAgICAgICAgYm9keVJhbmdlLT5zZXROdW1iZXIoImVuZCIsIGl0LT5zZWNvbmQu
c2Vjb25kKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBtX2Zyb250ZW5kLT5k
aWRHZXRSdWxlUmFuZ2VzKGNhbGxJZCwgcmVzdWx0KTsKLSAgICB9IGVsc2UKLSAgICAgICAgbV9m
cm9udGVuZC0+ZGlkR2V0UnVsZVJhbmdlcyhjYWxsSWQsIEluc3BlY3RvclZhbHVlOjpudWxsKCkp
OworICAgICAgICAqcnVsZVJhbmdlID0gcmVzdWx0LnJlbGVhc2UoKTsKKyAgICB9CiB9CiAKLXZv
aWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldElubGluZVN0eWxlKGxvbmcgY2FsbElkLCBsb25nIG5v
ZGVJZCkKK3ZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldElubGluZVN0eWxlKGxvbmcsIGxvbmcg
bm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiBzdHlsZSkKIHsKICAgICBOb2RlKiBub2Rl
ID0gbm9kZUZvcklkKG5vZGVJZCk7Ci0gICAgaWYgKCFub2RlIHx8IG5vZGUtPm5vZGVUeXBlKCkg
IT0gTm9kZTo6RUxFTUVOVF9OT0RFKSB7Ci0gICAgICAgIG1fZnJvbnRlbmQtPmRpZEdldElubGlu
ZVN0eWxlKGNhbGxJZCwgSW5zcGVjdG9yVmFsdWU6Om51bGwoKSk7CisgICAgaWYgKCFub2RlIHx8
IG5vZGUtPm5vZGVUeXBlKCkgIT0gTm9kZTo6RUxFTUVOVF9OT0RFKQogICAgICAgICByZXR1cm47
Ci0gICAgfQotICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9k
ZSk7Ci0gICAgbV9mcm9udGVuZC0+ZGlkR2V0SW5saW5lU3R5bGUoY2FsbElkLCBidWlsZE9iamVj
dEZvclN0eWxlKGVsZW1lbnQtPnN0eWxlKCksIHRydWUpKTsKKyAgICAqc3R5bGUgPSBidWlsZE9i
amVjdEZvclN0eWxlKHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKS0+c3R5bGUoKSwgdHJ1ZSk7
CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldENvbXB1dGVkU3R5bGUobG9uZyBjYWxs
SWQsIGxvbmcgbm9kZUlkKQordm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0Q29tcHV0ZWRTdHls
ZShsb25nLCBsb25nIG5vZGVJZCwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogc3R5bGUpCiB7CiAg
ICAgTm9kZSogbm9kZSA9IG5vZGVGb3JJZChub2RlSWQpOwotICAgIGlmICghbm9kZSB8fCBub2Rl
LT5ub2RlVHlwZSgpICE9IE5vZGU6OkVMRU1FTlRfTk9ERSkgewotICAgICAgICBtX2Zyb250ZW5k
LT5kaWRHZXRDb21wdXRlZFN0eWxlKGNhbGxJZCwgSW5zcGVjdG9yVmFsdWU6Om51bGwoKSk7Cisg
ICAgaWYgKCFub2RlIHx8IG5vZGUtPm5vZGVUeXBlKCkgIT0gTm9kZTo6RUxFTUVOVF9OT0RFKQog
ICAgICAgICByZXR1cm47Ci0gICAgfQogCiAgICAgRE9NV2luZG93KiBkZWZhdWx0VmlldyA9IG5v
ZGUtPm93bmVyRG9jdW1lbnQoKS0+ZGVmYXVsdFZpZXcoKTsKLSAgICBpZiAoIWRlZmF1bHRWaWV3
KSB7Ci0gICAgICAgIG1fZnJvbnRlbmQtPmRpZEdldENvbXB1dGVkU3R5bGUoY2FsbElkLCBJbnNw
ZWN0b3JWYWx1ZTo6bnVsbCgpKTsKKyAgICBpZiAoIWRlZmF1bHRWaWV3KQogICAgICAgICByZXR1
cm47Ci0gICAgfQogCiAgICAgRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnQq
Pihub2RlKTsKLSAgICBSZWZQdHI8Q1NTU3R5bGVEZWNsYXJhdGlvbj4gY29tcHV0ZWRTdHlsZSA9
IGRlZmF1bHRWaWV3LT5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQsICIiKTsKLSAgICBtX2Zyb250
ZW5kLT5kaWRHZXRDb21wdXRlZFN0eWxlKGNhbGxJZCwgYnVpbGRPYmplY3RGb3JTdHlsZShjb21w
dXRlZFN0eWxlLmdldCgpLCBmYWxzZSkpOworICAgICpzdHlsZSA9IGJ1aWxkT2JqZWN0Rm9yU3R5
bGUoZGVmYXVsdFZpZXctPmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCwgIiIpLmdldCgpLCBmYWxz
ZSk7CiB9CiAKIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JET01BZ2VudDo6
YnVpbGRPYmplY3RGb3JBdHRyaWJ1dGVTdHlsZXMoRWxlbWVudCogZWxlbWVudCkKQEAgLTExNzQs
MTMgKzExMjEsMTEgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gSW5zcGVjdG9yRE9NQWdl
bnQ6OmJ1aWxkQXJyYXlGb3JQc2V1ZG9FbGVtZW50cyhFbGVtZW4KICAgICByZXR1cm4gcmVzdWx0
LnJlbGVhc2UoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6YXBwbHlTdHlsZVRleHQo
bG9uZyBjYWxsSWQsIGxvbmcgc3R5bGVJZCwgY29uc3QgU3RyaW5nJiBzdHlsZVRleHQsIGNvbnN0
IFN0cmluZyYgcHJvcGVydHlOYW1lKQordm9pZCBJbnNwZWN0b3JET01BZ2VudDo6YXBwbHlTdHls
ZVRleHQobG9uZywgbG9uZyBzdHlsZUlkLCBjb25zdCBTdHJpbmcmIHN0eWxlVGV4dCwgY29uc3Qg
U3RyaW5nJiBwcm9wZXJ0eU5hbWUsIGJvb2wqIHN1Y2Nlc3MsIFJlZlB0cjxJbnNwZWN0b3JWYWx1
ZT4qIHN0eWxlT2JqZWN0LCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBjaGFuZ2VkUHJvcGVydGll
c0FycmF5KQogewogICAgIENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlID0gY3NzU3RvcmUoKS0+
c3R5bGVGb3JJZChzdHlsZUlkKTsKLSAgICBpZiAoIXN0eWxlKSB7Ci0gICAgICAgIG1fZnJvbnRl
bmQtPmRpZEFwcGx5U3R5bGVUZXh0KGNhbGxJZCwgZmFsc2UsIEluc3BlY3RvclZhbHVlOjpudWxs
KCksIEluc3BlY3RvckFycmF5OjpjcmVhdGUoKSk7CisgICAgaWYgKCFzdHlsZSkKICAgICAgICAg
cmV0dXJuOwotICAgIH0KIAogICAgIC8vIFJlbW92ZSBkaXNhYmxlZCBwcm9wZXJ0eSBlbnRyeSBm
b3IgcHJvcGVydHkgd2l0aCBnaXZlbiBuYW1lLgogICAgIERpc2FibGVkU3R5bGVEZWNsYXJhdGlv
biogZGlzYWJsZWRTdHlsZSA9IGNzc1N0b3JlKCktPmRpc2FibGVkU3R5bGVGb3JJZChzdHlsZUlk
LCBmYWxzZSk7CkBAIC0xMjA3LDI0ICsxMTUyLDE5IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6
OmFwcGx5U3R5bGVUZXh0KGxvbmcgY2FsbElkLCBsb25nIHN0eWxlSWQsIGNvbnN0IFN0cmluZyYK
ICAgICAgICAgaWYgKCFlYykKICAgICAgICAgICAgIHN0eWxlLT5yZW1vdmVQcm9wZXJ0eShwcm9w
ZXJ0eU5hbWUsIGVjKTsKIAotICAgICAgICBpZiAoZWMpIHsKLSAgICAgICAgICAgIG1fZnJvbnRl
bmQtPmRpZEFwcGx5U3R5bGVUZXh0KGNhbGxJZCwgZmFsc2UsIEluc3BlY3RvclZhbHVlOjpudWxs
KCksIEluc3BlY3RvckFycmF5OjpjcmVhdGUoKSk7CisgICAgICAgIGlmIChlYykKICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQogICAgIH0KIAogICAgIC8vIE5vdGlmeSBjYWxsZXIgdGhh
dCB0aGUgcHJvcGVydHkgd2FzIHN1Y2Nlc3NmdWxseSBkZWxldGVkLgogICAgIGlmICghc3R5bGVU
ZXh0TGVuZ3RoKSB7Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gY2hhbmdlZFByb3Bl
cnRpZXMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7Ci0gICAgICAgIGNoYW5nZWRQcm9wZXJ0
aWVzLT5wdXNoU3RyaW5nKHByb3BlcnR5TmFtZSk7Ci0gICAgICAgIG1fZnJvbnRlbmQtPmRpZEFw
cGx5U3R5bGVUZXh0KGNhbGxJZCwgdHJ1ZSwgSW5zcGVjdG9yVmFsdWU6Om51bGwoKSwgY2hhbmdl
ZFByb3BlcnRpZXMucmVsZWFzZSgpKTsKKyAgICAgICAgKCpjaGFuZ2VkUHJvcGVydGllc0FycmF5
KS0+cHVzaFN0cmluZyhwcm9wZXJ0eU5hbWUpOworICAgICAgICAqc3VjY2VzcyA9IHRydWU7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoIXRlbXBTdHlsZS0+bGVuZ3RoKCkpIHsK
LSAgICAgICAgbV9mcm9udGVuZC0+ZGlkQXBwbHlTdHlsZVRleHQoY2FsbElkLCBmYWxzZSwgSW5z
cGVjdG9yVmFsdWU6Om51bGwoKSwgSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpKTsKKyAgICBpZiAo
IXRlbXBTdHlsZS0+bGVuZ3RoKCkpCiAgICAgICAgIHJldHVybjsKLSAgICB9CiAKICAgICAvLyBJ
dGVyYXRlIG9mIHRoZSBwcm9wZXJ0aWVzIG9uIHRoZSB0ZXN0IGVsZW1lbnQncyBzdHlsZSBkZWNs
YXJhdGlvbiBhbmQKICAgICAvLyBhZGQgdGhlbSB0byB0aGUgcmVhbCBzdHlsZSBkZWNsYXJhdGlv
bi4gV2UgdGFrZSBjYXJlIHRvIG1vdmUgc2hvcnRoYW5kcy4KQEAgLTEyNTgsNDEgKzExOTgsMzcg
QEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6YXBwbHlTdHlsZVRleHQobG9uZyBjYWxsSWQsIGxv
bmcgc3R5bGVJZCwgY29uc3QgU3RyaW5nJgogICAgICAgICAgICAgZGlzYWJsZWRTdHlsZS0+cmVt
b3ZlKG5hbWUpOwogICAgICAgICBjaGFuZ2VkUHJvcGVydGllcy5hcHBlbmQobmFtZSk7CiAgICAg
fQotICAgIG1fZnJvbnRlbmQtPmRpZEFwcGx5U3R5bGVUZXh0KGNhbGxJZCwgdHJ1ZSwgYnVpbGRP
YmplY3RGb3JTdHlsZShzdHlsZSwgdHJ1ZSksIHRvQXJyYXkoY2hhbmdlZFByb3BlcnRpZXMpKTsK
KyAgICAqc3VjY2VzcyA9IHRydWU7CisgICAgKnN0eWxlT2JqZWN0ID0gYnVpbGRPYmplY3RGb3JT
dHlsZShzdHlsZSwgdHJ1ZSk7CisgICAgKmNoYW5nZWRQcm9wZXJ0aWVzQXJyYXkgPSB0b0FycmF5
KGNoYW5nZWRQcm9wZXJ0aWVzKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0U3R5
bGVUZXh0KGxvbmcgY2FsbElkLCBsb25nIHN0eWxlSWQsIGNvbnN0IFN0cmluZyYgY3NzVGV4dCkK
K3ZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldFN0eWxlVGV4dChsb25nLCBsb25nIHN0eWxlSWQs
IGNvbnN0IFN0cmluZyYgY3NzVGV4dCwgYm9vbCogc3VjY2VzcykKIHsKICAgICBDU1NTdHlsZURl
Y2xhcmF0aW9uKiBzdHlsZSA9IGNzc1N0b3JlKCktPnN0eWxlRm9ySWQoc3R5bGVJZCk7Ci0gICAg
aWYgKCFzdHlsZSkgewotICAgICAgICBtX2Zyb250ZW5kLT5kaWRTZXRTdHlsZVRleHQoY2FsbElk
LCBmYWxzZSk7CisgICAgaWYgKCFzdHlsZSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KICAgICBF
eGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBzdHlsZS0+c2V0Q3NzVGV4dChjc3NUZXh0LCBlYyk7
Ci0gICAgbV9mcm9udGVuZC0+ZGlkU2V0U3R5bGVUZXh0KGNhbGxJZCwgIWVjKTsKKyAgICAqc3Vj
Y2VzcyA9ICFlYzsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0U3R5bGVQcm9wZXJ0
eShsb25nIGNhbGxJZCwgbG9uZyBzdHlsZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0
cmluZyYgdmFsdWUpCit2b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRTdHlsZVByb3BlcnR5KGxv
bmcsIGxvbmcgc3R5bGVJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVl
LCBib29sKiBzdWNjZXNzKQogewogICAgIENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlID0gY3Nz
U3RvcmUoKS0+c3R5bGVGb3JJZChzdHlsZUlkKTsKLSAgICBpZiAoIXN0eWxlKSB7Ci0gICAgICAg
IG1fZnJvbnRlbmQtPmRpZFNldFN0eWxlUHJvcGVydHkoY2FsbElkLCBmYWxzZSk7CisgICAgaWYg
KCFzdHlsZSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMg
PSAwOwogICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShuYW1lLCB2YWx1ZSwgZWMpOwotICAgIG1fZnJv
bnRlbmQtPmRpZFNldFN0eWxlUHJvcGVydHkoY2FsbElkLCAhZWMpOworICAgICpzdWNjZXNzID0g
IWVjOwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50Ojp0b2dnbGVTdHlsZUVuYWJsZWQobG9u
ZyBjYWxsSWQsIGxvbmcgc3R5bGVJZCwgY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIGJvb2wg
ZGlzYWJsZWQpCit2b2lkIEluc3BlY3RvckRPTUFnZW50Ojp0b2dnbGVTdHlsZUVuYWJsZWQobG9u
ZywgbG9uZyBzdHlsZUlkLCBjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSwgYm9vbCBkaXNhYmxl
ZCwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogc3R5bGVPYmplY3QpCiB7CiAgICAgQ1NTU3R5bGVE
ZWNsYXJhdGlvbiogc3R5bGUgPSBjc3NTdG9yZSgpLT5zdHlsZUZvcklkKHN0eWxlSWQpOwotICAg
IGlmICghc3R5bGUpIHsKLSAgICAgICAgbV9mcm9udGVuZC0+ZGlkVG9nZ2xlU3R5bGVFbmFibGVk
KGNhbGxJZCwgSW5zcGVjdG9yVmFsdWU6Om51bGwoKSk7CisgICAgaWYgKCFzdHlsZSkKICAgICAg
ICAgcmV0dXJuOwotICAgIH0KIAogICAgIERpc2FibGVkU3R5bGVEZWNsYXJhdGlvbiogZGlzYWJs
ZWRTdHlsZSA9IGNzc1N0b3JlKCktPmRpc2FibGVkU3R5bGVGb3JJZChzdHlsZUlkLCB0cnVlKTsK
IApAQCAtMTMwOCwzMCArMTI0NCwyNCBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50Ojp0b2dnbGVT
dHlsZUVuYWJsZWQobG9uZyBjYWxsSWQsIGxvbmcgc3R5bGVJZCwgY29uc3QgU3RyaQogICAgICAg
ICBpZiAoIWVjKQogICAgICAgICAgICAgZGlzYWJsZWRTdHlsZS0+cmVtb3ZlKHByb3BlcnR5TmFt
ZSk7CiAgICAgfQotICAgIGlmIChlYykgewotICAgICAgICBtX2Zyb250ZW5kLT5kaWRUb2dnbGVT
dHlsZUVuYWJsZWQoY2FsbElkLCBJbnNwZWN0b3JWYWx1ZTo6bnVsbCgpKTsKKyAgICBpZiAoZWMp
CiAgICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV9mcm9udGVuZC0+ZGlkVG9nZ2xlU3R5bGVF
bmFibGVkKGNhbGxJZCwgYnVpbGRPYmplY3RGb3JTdHlsZShzdHlsZSwgdHJ1ZSkpOworICAgICpz
dHlsZU9iamVjdCA9IGJ1aWxkT2JqZWN0Rm9yU3R5bGUoc3R5bGUsIHRydWUpOwogfQogCi12b2lk
IEluc3BlY3RvckRPTUFnZW50OjpzZXRSdWxlU2VsZWN0b3IobG9uZyBjYWxsSWQsIGxvbmcgcnVs
ZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBsb25nIHNlbGVjdGVkTm9kZUlkKQordm9pZCBJ
bnNwZWN0b3JET01BZ2VudDo6c2V0UnVsZVNlbGVjdG9yKGxvbmcsIGxvbmcgcnVsZUlkLCBjb25z
dCBTdHJpbmcmIHNlbGVjdG9yLCBsb25nIHNlbGVjdGVkTm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9y
VmFsdWU+KiBydWxlT2JqZWN0LCBib29sKiBzZWxlY3RvckFmZmVjdHNOb2RlKQogewogICAgIENT
U1N0eWxlUnVsZSogcnVsZSA9IGNzc1N0b3JlKCktPnJ1bGVGb3JJZChydWxlSWQpOwotICAgIGlm
ICghcnVsZSkgewotICAgICAgICBtX2Zyb250ZW5kLT5kaWRTZXRSdWxlU2VsZWN0b3IoY2FsbElk
LCBJbnNwZWN0b3JWYWx1ZTo6bnVsbCgpLCBmYWxzZSk7CisgICAgaWYgKCFydWxlKQogICAgICAg
ICByZXR1cm47Ci0gICAgfQogCiAgICAgTm9kZSogbm9kZSA9IG5vZGVGb3JJZChzZWxlY3RlZE5v
ZGVJZCk7CiAKICAgICBDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0ID0gcnVsZS0+cGFyZW50U3R5
bGVTaGVldCgpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIHN0eWxlU2hlZXQtPmFk
ZFJ1bGUoc2VsZWN0b3IsIHJ1bGUtPnN0eWxlKCktPmNzc1RleHQoKSwgZWMpOwotICAgIGlmIChl
YykgewotICAgICAgICBtX2Zyb250ZW5kLT5kaWRTZXRSdWxlU2VsZWN0b3IoY2FsbElkLCBJbnNw
ZWN0b3JWYWx1ZTo6bnVsbCgpLCBmYWxzZSk7CisgICAgaWYgKGVjKQogICAgICAgICByZXR1cm47
Ci0gICAgfQogCiAgICAgQ1NTU3R5bGVSdWxlKiBuZXdSdWxlID0gc3RhdGljX2Nhc3Q8Q1NTU3R5
bGVSdWxlKj4oc3R5bGVTaGVldC0+aXRlbShzdHlsZVNoZWV0LT5sZW5ndGgoKSAtIDEpKTsKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3R5bGVTaGVldC0+bGVuZ3RoKCk7ICsraSkgewpA
QCAtMTM0MSwzNSArMTI3MSwzMSBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRSdWxlU2Vs
ZWN0b3IobG9uZyBjYWxsSWQsIGxvbmcgcnVsZUlkLCBjb25zdCBTdHJpbmcmCiAgICAgICAgIH0K
ICAgICB9CiAKLSAgICBpZiAoZWMpIHsKLSAgICAgICAgbV9mcm9udGVuZC0+ZGlkU2V0UnVsZVNl
bGVjdG9yKGNhbGxJZCwgSW5zcGVjdG9yVmFsdWU6Om51bGwoKSwgZmFsc2UpOworICAgIGlmIChl
YykKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAotICAgIG1fZnJvbnRlbmQtPmRpZFNldFJ1bGVT
ZWxlY3RvcihjYWxsSWQsIGJ1aWxkT2JqZWN0Rm9yUnVsZShub2RlLT5vd25lckRvY3VtZW50KCks
IG5ld1J1bGUpLCBydWxlQWZmZWN0c05vZGUobmV3UnVsZSwgbm9kZSkpOworICAgICpzZWxlY3Rv
ckFmZmVjdHNOb2RlID0gcnVsZUFmZmVjdHNOb2RlKG5ld1J1bGUsIG5vZGUpOworICAgICpydWxl
T2JqZWN0ID0gYnVpbGRPYmplY3RGb3JSdWxlKG5vZGUtPm93bmVyRG9jdW1lbnQoKSwgbmV3UnVs
ZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmFkZFJ1bGUobG9uZyBjYWxsSWQsIGNv
bnN0IFN0cmluZyYgc2VsZWN0b3IsIGxvbmcgc2VsZWN0ZWROb2RlSWQpCit2b2lkIEluc3BlY3Rv
ckRPTUFnZW50OjphZGRSdWxlKGxvbmcsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIGxvbmcgc2Vs
ZWN0ZWROb2RlSWQsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHJ1bGVPYmplY3QsIGJvb2wqIHNl
bGVjdG9yQWZmZWN0c05vZGUpCiB7CiAgICAgTm9kZSogbm9kZSA9IG5vZGVGb3JJZChzZWxlY3Rl
ZE5vZGVJZCk7Ci0gICAgaWYgKCFub2RlKSB7Ci0gICAgICAgIG1fZnJvbnRlbmQtPmRpZEFkZFJ1
bGUoY2FsbElkLCBJbnNwZWN0b3JWYWx1ZTo6bnVsbCgpLCBmYWxzZSk7CisgICAgaWYgKCFub2Rl
KQogICAgICAgICByZXR1cm47Ci0gICAgfQogCi0gICAgQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVl
dCA9IGNzc1N0b3JlKCktPmluc3BlY3RvclN0eWxlU2hlZXQobm9kZS0+b3duZXJEb2N1bWVudCgp
LCB0cnVlLCBjYWxsSWQpOworICAgIENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQgPSBjc3NTdG9y
ZSgpLT5pbnNwZWN0b3JTdHlsZVNoZWV0KG5vZGUtPm93bmVyRG9jdW1lbnQoKSwgdHJ1ZSk7CiAg
ICAgaWYgKCFzdHlsZVNoZWV0KQogICAgICAgICByZXR1cm47IC8vIGNvdWxkIG5vdCBhZGQgYSBz
dHlsZXNoZWV0IHRvIHRoZSBvd25lckRvY3VtZW50CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0g
MDsKICAgICBzdHlsZVNoZWV0LT5hZGRSdWxlKHNlbGVjdG9yLCAiIiwgZWMpOwotICAgIGlmIChl
YykgewotICAgICAgICBtX2Zyb250ZW5kLT5kaWRBZGRSdWxlKGNhbGxJZCwgSW5zcGVjdG9yVmFs
dWU6Om51bGwoKSwgZmFsc2UpOworICAgIGlmIChlYykKICAgICAgICAgcmV0dXJuOwotICAgIH0K
IAogICAgIENTU1N0eWxlUnVsZSogbmV3UnVsZSA9IHN0YXRpY19jYXN0PENTU1N0eWxlUnVsZSo+
KHN0eWxlU2hlZXQtPml0ZW0oc3R5bGVTaGVldC0+bGVuZ3RoKCkgLSAxKSk7Ci0gICAgbV9mcm9u
dGVuZC0+ZGlkQWRkUnVsZShjYWxsSWQsIGJ1aWxkT2JqZWN0Rm9yUnVsZShub2RlLT5vd25lckRv
Y3VtZW50KCksIG5ld1J1bGUpLCBydWxlQWZmZWN0c05vZGUobmV3UnVsZSwgbm9kZSkpOworICAg
ICpzZWxlY3RvckFmZmVjdHNOb2RlID0gcnVsZUFmZmVjdHNOb2RlKG5ld1J1bGUsIG5vZGUpOwor
ICAgICpydWxlT2JqZWN0ID0gYnVpbGRPYmplY3RGb3JSdWxlKG5vZGUtPm93bmVyRG9jdW1lbnQo
KSwgbmV3UnVsZSk7CiB9CiAKIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JE
T01BZ2VudDo6YnVpbGRPYmplY3RGb3JTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwg
Ym9vbCBiaW5kKQpAQCAtMTQ3MSw3ICsxMzk3LDcgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IEluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVjdEZvclJ1bGUoRG9jdW1lbnQqIG93bmUK
ICAgICBib29sIGlzVXNlciA9IHBhcmVudFN0eWxlU2hlZXQgJiYgcGFyZW50U3R5bGVTaGVldC0+
b3duZXJOb2RlKCkgJiYgcGFyZW50U3R5bGVTaGVldC0+b3duZXJOb2RlKCktPm5vZGVOYW1lKCkg
PT0gIiNkb2N1bWVudCI7CiAgICAgcmVzdWx0LT5zZXRCb29sKCJpc1VzZXJBZ2VudCIsIGlzVXNl
ckFnZW50KTsKICAgICByZXN1bHQtPnNldEJvb2woImlzVXNlciIsIGlzVXNlcik7Ci0gICAgcmVz
dWx0LT5zZXRCb29sKCJpc1ZpYUluc3BlY3RvciIsIHJ1bGUtPnBhcmVudFN0eWxlU2hlZXQoKSA9
PSBjc3NTdG9yZSgpLT5pbnNwZWN0b3JTdHlsZVNoZWV0KG93bmVyRG9jdW1lbnQsIGZhbHNlLCAt
MSkpOworICAgIHJlc3VsdC0+c2V0Qm9vbCgiaXNWaWFJbnNwZWN0b3IiLCBydWxlLT5wYXJlbnRT
dHlsZVNoZWV0KCkgPT0gY3NzU3RvcmUoKS0+aW5zcGVjdG9yU3R5bGVTaGVldChvd25lckRvY3Vt
ZW50LCBmYWxzZSkpOwogCiAgICAgLy8gQmluZCBlZGl0YWJsZSBzY3JpcHRzIG9ubHkuCiAgICAg
Ym9vbCBiaW5kID0gIWlzVXNlckFnZW50ICYmICFpc1VzZXI7CkBAIC0xNjQyLDE3ICsxNTY4LDEw
IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmNvcHlOb2RlKGxvbmcgbm9kZUlkKQogICAgIFBh
c3RlYm9hcmQ6OmdlbmVyYWxQYXN0ZWJvYXJkKCktPndyaXRlUGxhaW5UZXh0KG1hcmt1cCk7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnB1c2hOb2RlQnlQYXRoVG9Gcm9udGVuZChsb25n
IGNhbGxJZCwgY29uc3QgU3RyaW5nJiBwYXRoKQordm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cHVz
aE5vZGVCeVBhdGhUb0Zyb250ZW5kKGxvbmcsIGNvbnN0IFN0cmluZyYgcGF0aCwgbG9uZyogbm9k
ZUlkKQogewotICAgIGlmICghbV9mcm9udGVuZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbG9u
ZyBpZCA9IDA7Ci0gICAgTm9kZSogbm9kZSA9IG5vZGVGb3JQYXRoKHBhdGgpOwotICAgIGlmIChu
b2RlKQotICAgICAgICBpZCA9IHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQobm9kZSk7Ci0KLSAgICBt
X2Zyb250ZW5kLT5kaWRQdXNoTm9kZUJ5UGF0aFRvRnJvbnRlbmQoY2FsbElkLCBpZCk7CisgICAg
aWYgKE5vZGUqIG5vZGUgPSBub2RlRm9yUGF0aChwYXRoKSkKKyAgICAgICAgKm5vZGVJZCA9IHB1
c2hOb2RlUGF0aFRvRnJvbnRlbmQobm9kZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmggYi9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oCmluZGV4IDM4YjcwMzQuLjlmY2Y5NWQg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmgKKysrIGIv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaApAQCAtMTAxLDMxICsxMDEsMzEg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIC8vIE1ldGhvZHMgY2FsbGVkIGZyb20g
dGhlIGZyb250ZW5kIGZvciBET00gbm9kZXMgaW5zcGVjdGlvbi4KICAgICAgICAgdm9pZCBnZXRD
aGlsZE5vZGVzKGxvbmcgY2FsbElkLCBsb25nIG5vZGVJZCk7Ci0gICAgICAgIHZvaWQgc2V0QXR0
cmlidXRlKGxvbmcgY2FsbElkLCBsb25nIGVsZW1lbnRJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBj
b25zdCBTdHJpbmcmIHZhbHVlKTsKLSAgICAgICAgdm9pZCByZW1vdmVBdHRyaWJ1dGUobG9uZyBj
YWxsSWQsIGxvbmcgZWxlbWVudElkLCBjb25zdCBTdHJpbmcmIG5hbWUpOwotICAgICAgICB2b2lk
IHJlbW92ZU5vZGUobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkKTsKLSAgICAgICAgdm9pZCBjaGFu
Z2VUYWdOYW1lKGxvbmcgY2FsbElkLCBsb25nIG5vZGVJZCwgY29uc3QgU3RyaW5nJiB0YWdOYW1l
KTsKLSAgICAgICAgdm9pZCBnZXRPdXRlckhUTUwobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkKTsK
LSAgICAgICAgdm9pZCBzZXRPdXRlckhUTUwobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkLCBjb25z
dCBTdHJpbmcmIG91dGVySFRNTCk7Ci0gICAgICAgIHZvaWQgc2V0VGV4dE5vZGVWYWx1ZShsb25n
IGNhbGxJZCwgbG9uZyBub2RlSWQsIGNvbnN0IFN0cmluZyYgdmFsdWUpOwotICAgICAgICB2b2lk
IGdldEV2ZW50TGlzdGVuZXJzRm9yTm9kZShsb25nIGNhbGxJZCwgbG9uZyBub2RlSWQpOworICAg
ICAgICB2b2lkIHNldEF0dHJpYnV0ZShsb25nIGNhbGxJZCwgbG9uZyBlbGVtZW50SWQsIGNvbnN0
IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCogc3VjY2Vzcyk7CisgICAg
ICAgIHZvaWQgcmVtb3ZlQXR0cmlidXRlKGxvbmcgY2FsbElkLCBsb25nIGVsZW1lbnRJZCwgY29u
c3QgU3RyaW5nJiBuYW1lLCBib29sKiBzdWNjZXNzKTsKKyAgICAgICAgdm9pZCByZW1vdmVOb2Rl
KGxvbmcgY2FsbElkLCBsb25nIG5vZGVJZCwgbG9uZyogb3V0Tm9kZUlkKTsKKyAgICAgICAgdm9p
ZCBjaGFuZ2VUYWdOYW1lKGxvbmcgY2FsbElkLCBsb25nIG5vZGVJZCwgY29uc3QgU3RyaW5nJiB0
YWdOYW1lLCBsb25nKiBuZXdJZCk7CisgICAgICAgIHZvaWQgZ2V0T3V0ZXJIVE1MKGxvbmcgY2Fs
bElkLCBsb25nIG5vZGVJZCwgV2ViQ29yZTo6U3RyaW5nKiBvdXRlckhUTUwpOworICAgICAgICB2
b2lkIHNldE91dGVySFRNTChsb25nIGNhbGxJZCwgbG9uZyBub2RlSWQsIGNvbnN0IFN0cmluZyYg
b3V0ZXJIVE1MLCBsb25nKiBuZXdJZCk7CisgICAgICAgIHZvaWQgc2V0VGV4dE5vZGVWYWx1ZShs
b25nIGNhbGxJZCwgbG9uZyBub2RlSWQsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wqIHN1Y2Nl
c3MpOworICAgICAgICB2b2lkIGdldEV2ZW50TGlzdGVuZXJzRm9yTm9kZShsb25nIGNhbGxJZCwg
bG9uZyBub2RlSWQsIGxvbmcqIG91dE5vZGVJZCwgUmVmUHRyPEluc3BlY3RvckFycmF5PiogbGlz
dGVuZXJzQXJyYXkpOwogICAgICAgICB2b2lkIGFkZEluc3BlY3RlZE5vZGUobG9uZyBub2RlSWQp
OwogICAgICAgICB2b2lkIHBlcmZvcm1TZWFyY2goY29uc3QgU3RyaW5nJiB3aGl0ZXNwYWNlVHJp
bW1lZFF1ZXJ5LCBib29sIHJ1blN5bmNocm9ub3VzbHkpOwogICAgICAgICB2b2lkIHNlYXJjaENh
bmNlbGVkKCk7CiAKICAgICAgICAgLy8gTWV0aG9kcyBjYWxsZWQgZnJvbSB0aGUgZnJvbnRlbmQg
Zm9yIENTUyBzdHlsZXMgaW5zcGVjdGlvbi4KLSAgICAgICAgdm9pZCBnZXRTdHlsZXMobG9uZyBj
YWxsSWQsIGxvbmcgbm9kZUlkLCBib29sIGF1dGhvck9ubHkpOwotICAgICAgICB2b2lkIGdldEFs
bFN0eWxlcyhsb25nIGNhbGxJZCk7Ci0gICAgICAgIHZvaWQgZ2V0SW5saW5lU3R5bGUobG9uZyBj
YWxsSWQsIGxvbmcgbm9kZUlkKTsKLSAgICAgICAgdm9pZCBnZXRDb21wdXRlZFN0eWxlKGxvbmcg
Y2FsbElkLCBsb25nIG5vZGVJZCk7Ci0gICAgICAgIHZvaWQgZ2V0U3R5bGVTaGVldChsb25nIGNh
bGxJZCwgbG9uZyBzdHlsZVNoZWV0SWQpOwotICAgICAgICB2b2lkIGdldFJ1bGVSYW5nZXMobG9u
ZyBjYWxsSWQsIGxvbmcgc3R5bGVTaGVldElkKTsKLSAgICAgICAgdm9pZCBhcHBseVN0eWxlVGV4
dChsb25nIGNhbGxJZCwgbG9uZyBzdHlsZUlkLCBjb25zdCBTdHJpbmcmIHN0eWxlVGV4dCwgY29u
c3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpOwotICAgICAgICB2b2lkIHNldFN0eWxlVGV4dChsb25n
IGNhbGxJZCwgbG9uZyBzdHlsZUlkLCBjb25zdCBTdHJpbmcmIGNzc1RleHQpOwotICAgICAgICB2
b2lkIHNldFN0eWxlUHJvcGVydHkobG9uZyBjYWxsSWQsIGxvbmcgc3R5bGVJZCwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKLSAgICAgICAgdm9pZCB0b2dnbGVTdHls
ZUVuYWJsZWQobG9uZyBjYWxsSWQsIGxvbmcgc3R5bGVJZCwgY29uc3QgU3RyaW5nJiBwcm9wZXJ0
eU5hbWUsIGJvb2wgZGlzYWJsZWQpOwotICAgICAgICB2b2lkIHNldFJ1bGVTZWxlY3Rvcihsb25n
IGNhbGxJZCwgbG9uZyBydWxlSWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIGxvbmcgc2VsZWN0
ZWROb2RlSWQpOwotICAgICAgICB2b2lkIGFkZFJ1bGUobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmlu
ZyYgc2VsZWN0b3IsIGxvbmcgc2VsZWN0ZWROb2RlSWQpOworICAgICAgICB2b2lkIGdldFN0eWxl
cyhsb25nIGNhbGxJZCwgbG9uZyBub2RlSWQsIGJvb2wgYXV0aG9yT25seSwgUmVmUHRyPEluc3Bl
Y3RvclZhbHVlPiogc3R5bGVzKTsKKyAgICAgICAgdm9pZCBnZXRBbGxTdHlsZXMobG9uZyBjYWxs
SWQsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIHN0eWxlcyk7CisgICAgICAgIHZvaWQgZ2V0SW5s
aW5lU3R5bGUobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+
KiBzdHlsZXMpOworICAgICAgICB2b2lkIGdldENvbXB1dGVkU3R5bGUobG9uZyBjYWxsSWQsIGxv
bmcgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiBzdHlsZXMpOworICAgICAgICB2b2lk
IGdldFN0eWxlU2hlZXQobG9uZyBjYWxsSWQsIGxvbmcgc3R5bGVTaGVldElkLCBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0Piogc3R5bGVTaGVldE9iamVjdCk7CisgICAgICAgIHZvaWQgZ2V0UnVsZVJh
bmdlcyhsb25nIGNhbGxJZCwgbG9uZyBzdHlsZVNoZWV0SWQsIFJlZlB0cjxJbnNwZWN0b3JWYWx1
ZT4qIHJ1bGVSYW5nZSk7CisgICAgICAgIHZvaWQgYXBwbHlTdHlsZVRleHQobG9uZyBjYWxsSWQs
IGxvbmcgc3R5bGVJZCwgY29uc3QgU3RyaW5nJiBzdHlsZVRleHQsIGNvbnN0IFN0cmluZyYgcHJv
cGVydHlOYW1lLCBib29sKiBzdWNjZXNzLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiBzdHlsZU9i
amVjdCwgUmVmUHRyPEluc3BlY3RvckFycmF5PiogY2hhbmdlZFByb3BlcnRpZXMpOworICAgICAg
ICB2b2lkIHNldFN0eWxlVGV4dChsb25nIGNhbGxJZCwgbG9uZyBzdHlsZUlkLCBjb25zdCBTdHJp
bmcmIGNzc1RleHQsIGJvb2wqIHN1Y2Nlc3MpOworICAgICAgICB2b2lkIHNldFN0eWxlUHJvcGVy
dHkobG9uZyBjYWxsSWQsIGxvbmcgc3R5bGVJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBT
dHJpbmcmIHZhbHVlLCBib29sKiBzdWNjZXNzKTsKKyAgICAgICAgdm9pZCB0b2dnbGVTdHlsZUVu
YWJsZWQobG9uZyBjYWxsSWQsIGxvbmcgc3R5bGVJZCwgY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5h
bWUsIGJvb2wgZGlzYWJsZWQsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHN0eWxlT2JqZWN0KTsK
KyAgICAgICAgdm9pZCBzZXRSdWxlU2VsZWN0b3IobG9uZyBjYWxsSWQsIGxvbmcgcnVsZUlkLCBj
b25zdCBTdHJpbmcmIHNlbGVjdG9yLCBsb25nIHNlbGVjdGVkTm9kZUlkLCBSZWZQdHI8SW5zcGVj
dG9yVmFsdWU+KiBydWxlT2JqZWN0LCBib29sKiBzZWxlY3RvckFmZmVjdHNOb2RlKTsKKyAgICAg
ICAgdm9pZCBhZGRSdWxlKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBsb25n
IHNlbGVjdGVkTm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiBydWxlT2JqZWN0LCBib29s
KiBzZWxlY3RvckFmZmVjdHNOb2RlKTsKIAogICAgICAgICAvLyBNZXRob2RzIGNhbGxlZCBmcm9t
IHRoZSBJbnNwZWN0b3JDb250cm9sbGVyLgogICAgICAgICB2b2lkIHNldERvY3VtZW50KERvY3Vt
ZW50KiBkb2N1bWVudCk7CkBAIC0xMzgsNyArMTM4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICBOb2RlKiBub2RlRm9ySWQobG9uZyBub2RlSWQpOwogICAgICAgICBsb25nIHB1c2hO
b2RlUGF0aFRvRnJvbnRlbmQoTm9kZSogbm9kZSk7CiAgICAgICAgIHZvaWQgcHVzaENoaWxkTm9k
ZXNUb0Zyb250ZW5kKGxvbmcgbm9kZUlkKTsKLSAgICAgICAgdm9pZCBwdXNoTm9kZUJ5UGF0aFRv
RnJvbnRlbmQobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgcGF0aCk7CisgICAgICAgIHZvaWQg
cHVzaE5vZGVCeVBhdGhUb0Zyb250ZW5kKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIHBhdGgs
IGxvbmcqIG5vZGVJZCk7CiAgICAgICAgIGxvbmcgaW5zcGVjdGVkTm9kZSh1bnNpZ25lZCBsb25n
IG51bSk7CiAgICAgICAgIHZvaWQgY29weU5vZGUobG9uZyBub2RlSWQpOwogCmRpZmYgLS1naXQg
YS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwIGIvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yVmFsdWVzLmNwcAppbmRleCBkNDg4YjUwLi5kYWQ4NGFjIDEwMDY0NAotLS0g
YS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwCisrKyBiL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHAKQEAgLTQ5NCw2ICs0OTQsMTEgQEAgYm9vbCBJbnNw
ZWN0b3JWYWx1ZTo6YXNOdW1iZXIodW5zaWduZWQgbG9uZyopIGNvbnN0CiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCitib29sIEluc3BlY3RvclZhbHVlOjphc051bWJlcih1bnNpZ25lZCBpbnQqKSBj
b25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKwogYm9vbCBJbnNwZWN0b3JWYWx1ZTo6YXNT
dHJpbmcoU3RyaW5nKikgY29uc3QKIHsKICAgICByZXR1cm4gZmFsc2U7CkBAIC01NjYsNiArNTcx
LDEzIEBAIGJvb2wgSW5zcGVjdG9yQmFzaWNWYWx1ZTo6YXNOdW1iZXIodW5zaWduZWQgbG9uZyog
b3V0cHV0KSBjb25zdAogICAgIHJldHVybiB0cnVlOwogfQogCitib29sIEluc3BlY3RvckJhc2lj
VmFsdWU6OmFzTnVtYmVyKHVuc2lnbmVkIGludCogb3V0cHV0KSBjb25zdAoreworICAgIGlmICh0
eXBlKCkgIT0gVHlwZURvdWJsZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICpvdXRwdXQg
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KG1fZG91YmxlVmFsdWUpOworICAgIHJldHVybiB0
cnVlOworfQogCiB2b2lkIEluc3BlY3RvckJhc2ljVmFsdWU6OndyaXRlSlNPTihWZWN0b3I8VUNo
YXI+KiBvdXRwdXQpIGNvbnN0CiB7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JWYWx1ZXMuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oCmluZGV4
IDk0MGJhYjkuLjY0MmYwOTMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
clZhbHVlcy5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oCkBAIC03
MSw2ICs3MSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgYXNOdW1iZXIoZG91YmxlKiBv
dXRwdXQpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBhc051bWJlcihsb25nKiBvdXRwdXQpIGNv
bnN0OwogICAgIHZpcnR1YWwgYm9vbCBhc051bWJlcih1bnNpZ25lZCBsb25nKiBvdXRwdXQpIGNv
bnN0OworICAgIHZpcnR1YWwgYm9vbCBhc051bWJlcih1bnNpZ25lZCBpbnQqIG91dHB1dCkgY29u
c3Q7CiAgICAgdmlydHVhbCBib29sIGFzU3RyaW5nKFN0cmluZyogb3V0cHV0KSBjb25zdDsKICAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBhc09iamVjdCgpOwogICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXNBcnJheSgpOwpAQCAtMTA5LDYgKzEx
MCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgYXNOdW1iZXIoZG91YmxlKiBvdXRwdXQp
IGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBhc051bWJlcihsb25nKiBvdXRwdXQpIGNvbnN0Owog
ICAgIHZpcnR1YWwgYm9vbCBhc051bWJlcih1bnNpZ25lZCBsb25nKiBvdXRwdXQpIGNvbnN0Owor
ICAgIHZpcnR1YWwgYm9vbCBhc051bWJlcih1bnNpZ25lZCBpbnQqIG91dHB1dCkgY29uc3Q7CiAK
ICAgICB2aXJ0dWFsIHZvaWQgd3JpdGVKU09OKFZlY3RvcjxVQ2hhcj4qIG91dHB1dCkgY29uc3Q7
CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9DYWxsYmFjay5qcyBi
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9DYWxsYmFjay5qcwppbmRleCA4YWU3Zjk1Li5j
OGFlMDNlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ2FsbGJhY2su
anMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NhbGxiYWNrLmpzCkBAIC00OCw5
ICs0OCwxNSBAQCBXZWJJbnNwZWN0b3IuQ2FsbGJhY2sucHJvdG90eXBlID0gewogICAgICAgICB2
YXIgY2FsbGJhY2sgPSB0aGlzLl9jYWxsYmFja3NbY2FsbGJhY2tJZF07CiAgICAgICAgIGNhbGxi
YWNrLmFwcGx5KG51bGwsIGFyZ3MpOwogICAgICAgICBkZWxldGUgdGhpcy5fY2FsbGJhY2tzW2Nh
bGxiYWNrSWRdOworICAgIH0sCisKKyAgICByZW1vdmVDYWxsYmFja0VudHJ5OiBmdW5jdGlvbihj
YWxsYmFja0lkKQorICAgIHsKKyAgICAgICAgZGVsZXRlIHRoaXMuX2NhbGxiYWNrc1tjYWxsYmFj
a0lkXTsKICAgICB9CiB9CiAKIFdlYkluc3BlY3Rvci5DYWxsYmFjay5fSU5TVEFOQ0UgPSBuZXcg
V2ViSW5zcGVjdG9yLkNhbGxiYWNrKCk7CiBXZWJJbnNwZWN0b3IuQ2FsbGJhY2sud3JhcCA9IFdl
Ykluc3BlY3Rvci5DYWxsYmFjay5fSU5TVEFOQ0Uud3JhcC5iaW5kKFdlYkluc3BlY3Rvci5DYWxs
YmFjay5fSU5TVEFOQ0UpOwogV2ViSW5zcGVjdG9yLkNhbGxiYWNrLnByb2Nlc3NDYWxsYmFjayA9
IFdlYkluc3BlY3Rvci5DYWxsYmFjay5fSU5TVEFOQ0UucHJvY2Vzc0NhbGxiYWNrLmJpbmQoV2Vi
SW5zcGVjdG9yLkNhbGxiYWNrLl9JTlNUQU5DRSk7CitXZWJJbnNwZWN0b3IuQ2FsbGJhY2sucmVt
b3ZlQ2FsbGJhY2tFbnRyeSA9IFdlYkluc3BlY3Rvci5DYWxsYmFjay5fSU5TVEFOQ0UucmVtb3Zl
Q2FsbGJhY2tFbnRyeS5iaW5kKFdlYkluc3BlY3Rvci5DYWxsYmFjay5fSU5TVEFOQ0UpOwpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0VsZW1lbnRzUGFuZWwuanMgYi9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRWxlbWVudHNQYW5lbC5qcwppbmRleCAwOWE4NGY3
Li42NzEzZGRjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRWxlbWVu
dHNQYW5lbC5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRWxlbWVudHNQYW5l
bC5qcwpAQCAtMTc5LDEyICsxNzksMTIgQEAgV2ViSW5zcGVjdG9yLkVsZW1lbnRzUGFuZWwucHJv
dG90eXBlID0gewogICAgICAgICB0aGlzLnJlY2VudGx5TW9kaWZpZWROb2RlcyA9IFtdOwogCiAg
ICAgICAgIGRlbGV0ZSB0aGlzLmN1cnJlbnRRdWVyeTsKLSAgICAgICAgdGhpcy5zZWFyY2hDYW5j
ZWxlZCgpOwogICAgIH0sCiAKICAgICBzZXREb2N1bWVudDogZnVuY3Rpb24oaW5zcGVjdGVkUm9v
dERvY3VtZW50KQogICAgIHsKICAgICAgICAgdGhpcy5yZXNldCgpOworICAgICAgICB0aGlzLnNl
YXJjaENhbmNlbGVkKCk7CiAKICAgICAgICAgaWYgKCFpbnNwZWN0ZWRSb290RG9jdW1lbnQpCiAg
ICAgICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvaW5zcGVjdG9yLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5q
cwppbmRleCA5ZDQxNzY2Li45ODZlNTM0IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvaW5zcGVjdG9yLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9p
bnNwZWN0b3IuanMKQEAgLTU4Niw2ICs1ODYsMTEgQEAgV2ViSW5zcGVjdG9yLmRpc3BhdGNoTWVz
c2FnZUZyb21CYWNrZW5kID0gZnVuY3Rpb24oYXJndW1lbnRzKQogICAgIFdlYkluc3BlY3Rvci5k
aXNwYXRjaC5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwogfQogCitXZWJJbnNwZWN0b3IucHJvdG9j
b2xFcnJvciA9IGZ1bmN0aW9uKGNhbGxJZCwgbWV0aG9kTmFtZSwgZXJyb3JUZXh0KQoreworICAg
IFdlYkluc3BlY3Rvci5sb2coIkluc3BlY3RvckJhY2tlbmQuIiArIG1ldGhvZE5hbWUgKyAiIGZh
aWxlZCB3aXRoIGVycm9yIHRleHQ6ICciICsgZXJyb3JUZXh0ICsgIiciKTsKKyAgICBXZWJJbnNw
ZWN0b3IuQ2FsbGJhY2sucmVtb3ZlQ2FsbGJhY2tFbnRyeShjYWxsSWQpOworfQogCiBXZWJJbnNw
ZWN0b3Iud2luZG93UmVzaXplID0gZnVuY3Rpb24oZXZlbnQpCiB7Cg==
</data>
<flag name="review"
          id="51974"
          type_id="1"
          status="+"
          setter="yurys"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>63592</attachid>
            <date>2010-08-05 07:50:39 -0700</date>
            <delta_ts>2010-08-05 07:50:39 -0700</delta_ts>
            <desc>sample: InspectorBackendDispatcher.cpp</desc>
            <filename>InspectorBackendDispatcher.cpp</filename>
            <type>application/octet-stream</type>
            <size>102058</size>
            <attacher name="Ilya Tikhonovsky">loislo</attacher>
            
              <data encoding="base64">Ly8gQ29weXJpZ2h0IChjKSAyMDEwIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgovLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgoK
I2luY2x1ZGUgImNvbmZpZy5oIgojaW5jbHVkZSAiSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIu
aCIKCiNpZiBFTkFCTEUoSU5TUEVDVE9SKQoKI2luY2x1ZGUgIkluc3BlY3RvckFwcGxpY2F0aW9u
Q2FjaGVBZ2VudC5oIgojaW5jbHVkZSAiSW5zcGVjdG9yQmFja2VuZC5oIgojaW5jbHVkZSAiSW5z
cGVjdG9yQ2xpZW50LmgiCiNpbmNsdWRlICJJbnNwZWN0b3JET01BZ2VudC5oIgojaW5jbHVkZSAi
SW5zcGVjdG9yVmFsdWVzLmgiCiNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgojaW5jbHVkZSAi
U2NyaXB0RGVidWdTZXJ2ZXIuaCIKCm5hbWVzcGFjZSBXZWJDb3JlIHsKCnN0YXRpYyBTdHJpbmcg
Zm9ybWF0V3JvbmdBcmd1bWVudHNDb3VudE1lc3NhZ2UodW5zaWduZWQgZXhwZWN0ZWQsIHVuc2ln
bmVkIGFjdHVhbCkKewogICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCJXcm9uZyBudW1iZXIgb2Yg
cGFyYW1ldGVyczogJWQgKGV4cGVjdGVkOiAlZCkiLCBhY3R1YWwsIGV4cGVjdGVkKTsKfQoKc3Rh
dGljIFN0cmluZyBmb3JtYXRXcm9uZ0FyZ3VtZW50VHlwZU1lc3NhZ2UodW5zaWduZWQgcG9zaXRp
b24sIGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IGNoYXIqIGV4cGVjdGVkVHlwZSkKewogICAgcmV0
dXJuIFN0cmluZzo6Zm9ybWF0KCJGYWlsZWQgdG8gY29udmVydCBwYXJhbWV0ZXIgJWQgKCVzKSB0
byAlcyIsIHBvc2l0aW9uLCBuYW1lLCBleHBlY3RlZFR5cGUpOwp9Cgp2b2lkIEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyOjpzdG9yZUxhc3RBY3RpdmVQYW5lbChQYXNzUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiBhcmdzKQp7CiAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgYmFja2VuZEZ1
bmN0aW9uTmFtZSwgKCJzdG9yZUxhc3RBY3RpdmVQYW5lbCIpKTsKICAgIGxvbmcgY2FsbElkID0g
MDsKCiAgICBpZiAoYXJncy0+bGVuZ3RoKCkgIT0gMikgewogICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rp
b25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50c0NvdW50TWVzc2FnZShhcmdzLT5sZW5ndGgoKSAt
IDEsIDEpKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgU3RyaW5nIHBhbmVsTmFtZTsKICAg
IGlmICghYXJncy0+Z2V0KDEpLT5hc1N0cmluZygmcGFuZWxOYW1lKSkgewogICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNr
ZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50VHlwZU1lc3NhZ2UoMSwgInBhbmVs
TmFtZSIsICJTdHJpbmciKSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmICghbV9pbnNw
ZWN0b3JDb250cm9sbGVyKSB7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIGJh
Y2tlbmRGdW5jdGlvbk5hbWUsICJFcnJvcjogQ29udHJvbGxlciBoYW5kbGVyIGlzIG5vdCBhdmFp
bGFibGUuIik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIG1faW5zcGVjdG9yQ29udHJvbGxl
ci0+c3RvcmVMYXN0QWN0aXZlUGFuZWwocGFuZWxOYW1lKTsKCn0KCnZvaWQgSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI6OnNhdmVBcHBsaWNhdGlvblNldHRpbmdzKFBhc3NSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+IGFyZ3MpCnsKICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBiYWNrZW5k
RnVuY3Rpb25OYW1lLCAoInNhdmVBcHBsaWNhdGlvblNldHRpbmdzIikpOwogICAgbG9uZyBjYWxs
SWQgPSAwOwoKICAgIGlmIChhcmdzLT5sZW5ndGgoKSAhPSAyKSB7CiAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRG
dW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRzQ291bnRNZXNzYWdlKGFyZ3MtPmxlbmd0
aCgpIC0gMSwgMSkpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBTdHJpbmcgc2V0dGluZ3M7
CiAgICBpZiAoIWFyZ3MtPmdldCgxKS0+YXNTdHJpbmcoJnNldHRpbmdzKSkgewogICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBi
YWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50VHlwZU1lc3NhZ2UoMSwgInNl
dHRpbmdzIiwgIlN0cmluZyIpKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKCFtX2lu
c3BlY3RvckNvbnRyb2xsZXIpIHsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwg
YmFja2VuZEZ1bmN0aW9uTmFtZSwgIkVycm9yOiBDb250cm9sbGVyIGhhbmRsZXIgaXMgbm90IGF2
YWlsYWJsZS4iKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgbV9pbnNwZWN0b3JDb250cm9s
bGVyLT5zYXZlQXBwbGljYXRpb25TZXR0aW5ncyhzZXR0aW5ncyk7Cgp9Cgp2b2lkIEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyOjpzYXZlU2Vzc2lvblNldHRpbmdzKFBhc3NSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+IGFyZ3MpCnsKICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBiYWNrZW5k
RnVuY3Rpb25OYW1lLCAoInNhdmVTZXNzaW9uU2V0dGluZ3MiKSk7CiAgICBsb25nIGNhbGxJZCA9
IDA7CgogICAgaWYgKGFyZ3MtPmxlbmd0aCgpICE9IDIpIHsKICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0
aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudHNDb3VudE1lc3NhZ2UoYXJncy0+bGVuZ3RoKCkg
LSAxLCAxKSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIFN0cmluZyBzZXR0aW5nczsKICAg
IGlmICghYXJncy0+Z2V0KDEpLT5hc1N0cmluZygmc2V0dGluZ3MpKSB7CiAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tl
bmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRUeXBlTWVzc2FnZSgxLCAic2V0dGlu
Z3MiLCAiU3RyaW5nIikpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoIW1faW5zcGVj
dG9yQ29udHJvbGxlcikgewogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNr
ZW5kRnVuY3Rpb25OYW1lLCAiRXJyb3I6IENvbnRyb2xsZXIgaGFuZGxlciBpcyBub3QgYXZhaWxh
YmxlLiIpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBtX2luc3BlY3RvckNvbnRyb2xsZXIt
PnNhdmVTZXNzaW9uU2V0dGluZ3Moc2V0dGluZ3MpOwoKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlcjo6ZW5hYmxlU2VhcmNoaW5nRm9yTm9kZShQYXNzUmVmUHRyPEluc3BlY3RvckFy
cmF5PiBhcmdzKQp7CiAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgYmFja2VuZEZ1bmN0
aW9uTmFtZSwgKCJlbmFibGVTZWFyY2hpbmdGb3JOb2RlIikpOwogICAgbG9uZyBjYWxsSWQgPSAw
OwoKICAgIGlmIChhcmdzLT5sZW5ndGgoKSAhPSAxKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlv
bk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRzQ291bnRNZXNzYWdlKGFyZ3MtPmxlbmd0aCgpIC0g
MSwgMCkpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoIW1faW5zcGVjdG9yQ29udHJv
bGxlcikgewogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rp
b25OYW1lLCAiRXJyb3I6IENvbnRyb2xsZXIgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwog
ICAgICAgIHJldHVybjsKICAgIH0KCiAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmVuYWJsZVNl
YXJjaGluZ0Zvck5vZGUoKTsKCn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmRp
c2FibGVTZWFyY2hpbmdGb3JOb2RlKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3MpCnsK
ICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAoImRp
c2FibGVTZWFyY2hpbmdGb3JOb2RlIikpOwogICAgbG9uZyBjYWxsSWQgPSAwOwoKICAgIGlmIChh
cmdzLT5sZW5ndGgoKSAhPSAxKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
ICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1h
dFdyb25nQXJndW1lbnRzQ291bnRNZXNzYWdlKGFyZ3MtPmxlbmd0aCgpIC0gMSwgMCkpOwogICAg
ICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoIW1faW5zcGVjdG9yQ29udHJvbGxlcikgewogICAg
ICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAiRXJy
b3I6IENvbnRyb2xsZXIgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwogICAgICAgIHJldHVy
bjsKICAgIH0KCiAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmRpc2FibGVTZWFyY2hpbmdGb3JO
b2RlKCk7Cgp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjplbmFibGVNb25pdG9y
aW5nWEhSKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3MpCnsKICAgIERFRklORV9TVEFU
SUNfTE9DQUwoU3RyaW5nLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAoImVuYWJsZU1vbml0b3JpbmdY
SFIiKSk7CiAgICBsb25nIGNhbGxJZCA9IDA7CgogICAgaWYgKGFyZ3MtPmxlbmd0aCgpICE9IDEp
IHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICByZXBvcnRQcm90b2NvbEVy
cm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudHNDb3Vu
dE1lc3NhZ2UoYXJncy0+bGVuZ3RoKCkgLSAxLCAwKSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoK
ICAgIGlmICghbV9pbnNwZWN0b3JDb250cm9sbGVyKSB7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xF
cnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICJFcnJvcjogQ29udHJvbGxlciBoYW5k
bGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIG1faW5z
cGVjdG9yQ29udHJvbGxlci0+ZW5hYmxlTW9uaXRvcmluZ1hIUigpOwoKfQoKdm9pZCBJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzYWJsZU1vbml0b3JpbmdYSFIoUGFzc1JlZlB0cjxJbnNw
ZWN0b3JBcnJheT4gYXJncykKewogICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGJhY2tl
bmRGdW5jdGlvbk5hbWUsICgiZGlzYWJsZU1vbml0b3JpbmdYSFIiKSk7CiAgICBsb25nIGNhbGxJ
ZCA9IDA7CgogICAgaWYgKGFyZ3MtPmxlbmd0aCgpICE9IDEpIHsKICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1
bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudHNDb3VudE1lc3NhZ2UoYXJncy0+bGVuZ3Ro
KCkgLSAxLCAwKSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmICghbV9pbnNwZWN0b3JD
b250cm9sbGVyKSB7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRG
dW5jdGlvbk5hbWUsICJFcnJvcjogQ29udHJvbGxlciBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUu
Iik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+ZGlz
YWJsZU1vbml0b3JpbmdYSFIoKTsKCn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6
OmVuYWJsZVJlc291cmNlVHJhY2tpbmcoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJncykK
ewogICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICgi
ZW5hYmxlUmVzb3VyY2VUcmFja2luZyIpKTsKICAgIGxvbmcgY2FsbElkID0gMDsKCiAgICBpZiAo
YXJncy0+bGVuZ3RoKCkgIT0gMikgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
ICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3Jt
YXRXcm9uZ0FyZ3VtZW50c0NvdW50TWVzc2FnZShhcmdzLT5sZW5ndGgoKSAtIDEsIDEpKTsKICAg
ICAgICByZXR1cm47CiAgICB9CgogICAgYm9vbCBhbHdheXM7CiAgICBpZiAoIWFyZ3MtPmdldCgx
KS0+YXNCb29sKCZhbHdheXMpKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
ICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1h
dFdyb25nQXJndW1lbnRUeXBlTWVzc2FnZSgxLCAiYWx3YXlzIiwgImJvb2xlYW4iKSk7CiAgICAg
ICAgcmV0dXJuOwogICAgfQoKICAgIGlmICghbV9pbnNwZWN0b3JDb250cm9sbGVyKSB7CiAgICAg
ICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICJFcnJv
cjogQ29udHJvbGxlciBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CiAgICAgICAgcmV0dXJu
OwogICAgfQoKICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+ZW5hYmxlUmVzb3VyY2VUcmFja2lu
ZyhhbHdheXMpOwoKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzYWJsZVJl
c291cmNlVHJhY2tpbmcoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJncykKewogICAgREVG
SU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICgiZGlzYWJsZVJl
c291cmNlVHJhY2tpbmciKSk7CiAgICBsb25nIGNhbGxJZCA9IDA7CgogICAgaWYgKGFyZ3MtPmxl
bmd0aCgpICE9IDIpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICByZXBv
cnRQcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdB
cmd1bWVudHNDb3VudE1lc3NhZ2UoYXJncy0+bGVuZ3RoKCkgLSAxLCAxKSk7CiAgICAgICAgcmV0
dXJuOwogICAgfQoKICAgIGJvb2wgYWx3YXlzOwogICAgaWYgKCFhcmdzLT5nZXQoMSktPmFzQm9v
bCgmYWx3YXlzKSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHJlcG9y
dFByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0Fy
Z3VtZW50VHlwZU1lc3NhZ2UoMSwgImFsd2F5cyIsICJib29sZWFuIikpOwogICAgICAgIHJldHVy
bjsKICAgIH0KCiAgICBpZiAoIW1faW5zcGVjdG9yQ29udHJvbGxlcikgewogICAgICAgIHJlcG9y
dFByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAiRXJyb3I6IENvbnRy
b2xsZXIgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwogICAgICAgIHJldHVybjsKICAgIH0K
CiAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmRpc2FibGVSZXNvdXJjZVRyYWNraW5nKGFsd2F5
cyk7Cgp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRSZXNvdXJjZUNvbnRl
bnQoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJncykKewogICAgREVGSU5FX1NUQVRJQ19M
T0NBTChTdHJpbmcsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICgiZ2V0UmVzb3VyY2VDb250ZW50Iikp
OwogICAgbG9uZyBjYWxsSWQgPSAwOwoKICAgIGlmIChhcmdzLT5sZW5ndGgoKSAhPSAzKSB7CiAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihj
YWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRzQ291bnRNZXNz
YWdlKGFyZ3MtPmxlbmd0aCgpIC0gMSwgMikpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBp
ZiAoIWFyZ3MtPmdldCgxKS0+YXNOdW1iZXIoJmNhbGxJZCkpIHsKICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1
bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudFR5cGVNZXNzYWdlKDEsICJjYWxsSWQiLCAi
bG9uZyIpKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgdW5zaWduZWQgbG9uZyBpZGVudGlm
aWVyOwogICAgaWYgKCFhcmdzLT5nZXQoMiktPmFzTnVtYmVyKCZpZGVudGlmaWVyKSkgewogICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2Fs
bElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50VHlwZU1lc3NhZ2Uo
MiwgImlkZW50aWZpZXIiLCAidW5zaWduZWQgbG9uZyIpKTsKICAgICAgICByZXR1cm47CiAgICB9
CgogICAgaWYgKCFtX2luc3BlY3RvckNvbnRyb2xsZXIpIHsKICAgICAgICByZXBvcnRQcm90b2Nv
bEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgIkVycm9yOiBDb250cm9sbGVyIGhh
bmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgU3Ry
aW5nIGNvbnRlbnQ7CiAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmdldFJlc291cmNlQ29udGVu
dChjYWxsSWQsIGlkZW50aWZpZXIsICZjb250ZW50KTsKCiAgICBpZiAobV9pbnNwZWN0b3JDb250
cm9sbGVyLT5pbnNwZWN0b3JDbGllbnQoKSkgewogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJh
eT4gYXJndW1lbnRzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwogICAgICAgIGFyZ3VtZW50
cy0+cHVzaFN0cmluZygiZGlkR2V0UmVzb3VyY2VDb250ZW50Iik7CiAgICAgICAgYXJndW1lbnRz
LT5wdXNoTnVtYmVyKGNhbGxJZCk7CiAgICAgICAgYXJndW1lbnRzLT5wdXNoU3RyaW5nKGNvbnRl
bnQpOwogICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdG9yQ2xpZW50KCktPnNl
bmRNZXNzYWdlVG9Gcm9udGVuZChhcmd1bWVudHMtPnRvSlNPTlN0cmluZygpKTsKICAgIH0KfQoK
dm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6cmVsb2FkUGFnZShQYXNzUmVmUHRyPElu
c3BlY3RvckFycmF5PiBhcmdzKQp7CiAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgYmFj
a2VuZEZ1bmN0aW9uTmFtZSwgKCJyZWxvYWRQYWdlIikpOwogICAgbG9uZyBjYWxsSWQgPSAwOwoK
ICAgIGlmIChhcmdzLT5sZW5ndGgoKSAhPSAxKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5h
bWUsIGZvcm1hdFdyb25nQXJndW1lbnRzQ291bnRNZXNzYWdlKGFyZ3MtPmxlbmd0aCgpIC0gMSwg
MCkpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoIW1faW5zcGVjdG9yQ29udHJvbGxl
cikgewogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25O
YW1lLCAiRXJyb3I6IENvbnRyb2xsZXIgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwogICAg
ICAgIHJldHVybjsKICAgIH0KCiAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPnJlbG9hZFBhZ2Uo
KTsKCn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnN0YXJ0VGltZWxpbmVQcm9m
aWxlcihQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcmdzKQp7CiAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKFN0cmluZywgYmFja2VuZEZ1bmN0aW9uTmFtZSwgKCJzdGFydFRpbWVsaW5lUHJvZmls
ZXIiKSk7CiAgICBsb25nIGNhbGxJZCA9IDA7CgogICAgaWYgKGFyZ3MtPmxlbmd0aCgpICE9IDEp
IHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICByZXBvcnRQcm90b2NvbEVy
cm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudHNDb3Vu
dE1lc3NhZ2UoYXJncy0+bGVuZ3RoKCkgLSAxLCAwKSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoK
ICAgIGlmICghbV9pbnNwZWN0b3JDb250cm9sbGVyKSB7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xF
cnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICJFcnJvcjogQ29udHJvbGxlciBoYW5k
bGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIG1faW5z
cGVjdG9yQ29udHJvbGxlci0+c3RhcnRUaW1lbGluZVByb2ZpbGVyKCk7Cgp9Cgp2b2lkIEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyOjpzdG9wVGltZWxpbmVQcm9maWxlcihQYXNzUmVmUHRyPElu
c3BlY3RvckFycmF5PiBhcmdzKQp7CiAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgYmFj
a2VuZEZ1bmN0aW9uTmFtZSwgKCJzdG9wVGltZWxpbmVQcm9maWxlciIpKTsKICAgIGxvbmcgY2Fs
bElkID0gMDsKCiAgICBpZiAoYXJncy0+bGVuZ3RoKCkgIT0gMSkgewogICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5k
RnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50c0NvdW50TWVzc2FnZShhcmdzLT5sZW5n
dGgoKSAtIDEsIDApKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKCFtX2luc3BlY3Rv
ckNvbnRyb2xsZXIpIHsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2Vu
ZEZ1bmN0aW9uTmFtZSwgIkVycm9yOiBDb250cm9sbGVyIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJs
ZS4iKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5z
dG9wVGltZWxpbmVQcm9maWxlcigpOwoKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cjo6ZW5hYmxlRGVidWdnZXIoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJncykKewogICAg
REVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICgiZW5hYmxl
RGVidWdnZXIiKSk7CiAgICBsb25nIGNhbGxJZCA9IDA7CgogICAgaWYgKGFyZ3MtPmxlbmd0aCgp
ICE9IDIpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICByZXBvcnRQcm90
b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVu
dHNDb3VudE1lc3NhZ2UoYXJncy0+bGVuZ3RoKCkgLSAxLCAxKSk7CiAgICAgICAgcmV0dXJuOwog
ICAgfQoKICAgIGJvb2wgYWx3YXlzOwogICAgaWYgKCFhcmdzLT5nZXQoMSktPmFzQm9vbCgmYWx3
YXlzKSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHJlcG9ydFByb3Rv
Y29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50
VHlwZU1lc3NhZ2UoMSwgImFsd2F5cyIsICJib29sZWFuIikpOwogICAgICAgIHJldHVybjsKICAg
IH0KCiAgICBpZiAoIW1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdG9yQmFja2VuZCgpKSB7
CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUs
ICJFcnJvcjogQmFja2VuZCBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CiAgICAgICAgcmV0
dXJuOwogICAgfQoKICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdG9yQmFja2VuZCgp
LT5lbmFibGVEZWJ1Z2dlcihhbHdheXMpOwoKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcjo6ZGlzYWJsZURlYnVnZ2VyKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3MpCnsK
ICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAoImRp
c2FibGVEZWJ1Z2dlciIpKTsKICAgIGxvbmcgY2FsbElkID0gMDsKCiAgICBpZiAoYXJncy0+bGVu
Z3RoKCkgIT0gMikgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHJlcG9y
dFByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0Fy
Z3VtZW50c0NvdW50TWVzc2FnZShhcmdzLT5sZW5ndGgoKSAtIDEsIDEpKTsKICAgICAgICByZXR1
cm47CiAgICB9CgogICAgYm9vbCBhbHdheXM7CiAgICBpZiAoIWFyZ3MtPmdldCgxKS0+YXNCb29s
KCZhbHdheXMpKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcmVwb3J0
UHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJn
dW1lbnRUeXBlTWVzc2FnZSgxLCAiYWx3YXlzIiwgImJvb2xlYW4iKSk7CiAgICAgICAgcmV0dXJu
OwogICAgfQoKICAgIGlmICghbV9pbnNwZWN0b3JDb250cm9sbGVyKSB7CiAgICAgICAgcmVwb3J0
UHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICJFcnJvcjogQ29udHJv
bGxlciBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CiAgICAgICAgcmV0dXJuOwogICAgfQoK
ICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+ZGlzYWJsZURlYnVnZ2VyKGFsd2F5cyk7Cgp9Cgp2
b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpzZXRCcmVha3BvaW50KFBhc3NSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+IGFyZ3MpCnsKICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBi
YWNrZW5kRnVuY3Rpb25OYW1lLCAoInNldEJyZWFrcG9pbnQiKSk7CiAgICBsb25nIGNhbGxJZCA9
IDA7CgogICAgaWYgKGFyZ3MtPmxlbmd0aCgpICE9IDYpIHsKICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0
aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudHNDb3VudE1lc3NhZ2UoYXJncy0+bGVuZ3RoKCkg
LSAxLCA1KSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmICghYXJncy0+Z2V0KDEpLT5h
c051bWJlcigmY2FsbElkKSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAg
IHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRX
cm9uZ0FyZ3VtZW50VHlwZU1lc3NhZ2UoMSwgImNhbGxJZCIsICJsb25nIikpOwogICAgICAgIHJl
dHVybjsKICAgIH0KCiAgICBTdHJpbmcgc291cmNlSUQ7CiAgICBpZiAoIWFyZ3MtPmdldCgyKS0+
YXNTdHJpbmcoJnNvdXJjZUlEKSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
ICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3Jt
YXRXcm9uZ0FyZ3VtZW50VHlwZU1lc3NhZ2UoMiwgInNvdXJjZUlEIiwgIlN0cmluZyIpKTsKICAg
ICAgICByZXR1cm47CiAgICB9CgogICAgdW5zaWduZWQgaW50IGxpbmVOdW1iZXI7CiAgICBpZiAo
IWFyZ3MtPmdldCgzKS0+YXNOdW1iZXIoJmxpbmVOdW1iZXIpKSB7CiAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRG
dW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRUeXBlTWVzc2FnZSgzLCAibGluZU51bWJl
ciIsICJ1bnNpZ25lZCBpbnQiKSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGJvb2wgZW5h
YmxlZDsKICAgIGlmICghYXJncy0+Z2V0KDQpLT5hc0Jvb2woJmVuYWJsZWQpKSB7CiAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQs
IGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRUeXBlTWVzc2FnZSg0LCAi
ZW5hYmxlZCIsICJib29sZWFuIikpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBTdHJpbmcg
Y29uZGl0aW9uOwogICAgaWYgKCFhcmdzLT5nZXQoNSktPmFzU3RyaW5nKCZjb25kaXRpb24pKSB7
CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJv
cihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRUeXBlTWVz
c2FnZSg1LCAiY29uZGl0aW9uIiwgIlN0cmluZyIpKTsKICAgICAgICByZXR1cm47CiAgICB9Cgog
ICAgaWYgKCFtX2luc3BlY3RvckNvbnRyb2xsZXIpIHsKICAgICAgICByZXBvcnRQcm90b2NvbEVy
cm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgIkVycm9yOiBDb250cm9sbGVyIGhhbmRs
ZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgYm9vbCBz
dWNjZXNzID0gZmFsc2U7CiAgICB1bnNpZ25lZCBpbnQgYWN0dWFsTGluZU51bWJlciA9IDB1Owog
ICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5zZXRCcmVha3BvaW50KGNhbGxJZCwgc291cmNlSUQs
IGxpbmVOdW1iZXIsIGVuYWJsZWQsIGNvbmRpdGlvbiwgJnN1Y2Nlc3MsICZhY3R1YWxMaW5lTnVt
YmVyKTsKCiAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0b3JDbGllbnQoKSkg
ewogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJndW1lbnRzID0gSW5zcGVjdG9yQXJy
YXk6OmNyZWF0ZSgpOwogICAgICAgIGFyZ3VtZW50cy0+cHVzaFN0cmluZygiZGlkU2V0QnJlYWtw
b2ludCIpOwogICAgICAgIGFyZ3VtZW50cy0+cHVzaE51bWJlcihjYWxsSWQpOwogICAgICAgIGFy
Z3VtZW50cy0+cHVzaEJvb2woc3VjY2Vzcyk7CiAgICAgICAgYXJndW1lbnRzLT5wdXNoTnVtYmVy
KGFjdHVhbExpbmVOdW1iZXIpOwogICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVj
dG9yQ2xpZW50KCktPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChhcmd1bWVudHMtPnRvSlNPTlN0cmlu
ZygpKTsKICAgIH0KfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6cmVtb3ZlQnJl
YWtwb2ludChQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcmdzKQp7CiAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKFN0cmluZywgYmFja2VuZEZ1bmN0aW9uTmFtZSwgKCJyZW1vdmVCcmVha3BvaW50
IikpOwogICAgbG9uZyBjYWxsSWQgPSAwOwoKICAgIGlmIChhcmdzLT5sZW5ndGgoKSAhPSAzKSB7
CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJv
cihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRzQ291bnRN
ZXNzYWdlKGFyZ3MtPmxlbmd0aCgpIC0gMSwgMikpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAg
ICBTdHJpbmcgc291cmNlSUQ7CiAgICBpZiAoIWFyZ3MtPmdldCgxKS0+YXNTdHJpbmcoJnNvdXJj
ZUlEKSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHJlcG9ydFByb3Rv
Y29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50
VHlwZU1lc3NhZ2UoMSwgInNvdXJjZUlEIiwgIlN0cmluZyIpKTsKICAgICAgICByZXR1cm47CiAg
ICB9CgogICAgdW5zaWduZWQgbG9uZyBsaW5lTnVtYmVyOwogICAgaWYgKCFhcmdzLT5nZXQoMikt
PmFzTnVtYmVyKCZsaW5lTnVtYmVyKSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBm
b3JtYXRXcm9uZ0FyZ3VtZW50VHlwZU1lc3NhZ2UoMiwgImxpbmVOdW1iZXIiLCAidW5zaWduZWQg
bG9uZyIpKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKCFtX2luc3BlY3RvckNvbnRy
b2xsZXIpIHsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0
aW9uTmFtZSwgIkVycm9yOiBDb250cm9sbGVyIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsK
ICAgICAgICByZXR1cm47CiAgICB9CgogICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5yZW1vdmVC
cmVha3BvaW50KHNvdXJjZUlELCBsaW5lTnVtYmVyKTsKCn0KCnZvaWQgSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXI6OmFjdGl2YXRlQnJlYWtwb2ludHMoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJh
eT4gYXJncykKewogICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGJhY2tlbmRGdW5jdGlv
bk5hbWUsICgiYWN0aXZhdGVCcmVha3BvaW50cyIpKTsKICAgIGxvbmcgY2FsbElkID0gMDsKCiAg
ICBpZiAoYXJncy0+bGVuZ3RoKCkgIT0gMSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1l
LCBmb3JtYXRXcm9uZ0FyZ3VtZW50c0NvdW50TWVzc2FnZShhcmdzLT5sZW5ndGgoKSAtIDEsIDAp
KTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKCEoJlNjcmlwdERlYnVnU2VydmVyOjpz
aGFyZWQoKSkpIHsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1
bmN0aW9uTmFtZSwgIkVycm9yOiBEZWJ1ZyBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CiAg
ICAgICAgcmV0dXJuOwogICAgfQoKICAgICgmU2NyaXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgpKS0+
YWN0aXZhdGVCcmVha3BvaW50cygpOwoKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cjo6ZGVhY3RpdmF0ZUJyZWFrcG9pbnRzKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3Mp
CnsKICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAo
ImRlYWN0aXZhdGVCcmVha3BvaW50cyIpKTsKICAgIGxvbmcgY2FsbElkID0gMDsKCiAgICBpZiAo
YXJncy0+bGVuZ3RoKCkgIT0gMSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
ICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3Jt
YXRXcm9uZ0FyZ3VtZW50c0NvdW50TWVzc2FnZShhcmdzLT5sZW5ndGgoKSAtIDEsIDApKTsKICAg
ICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKCEoJlNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQo
KSkpIHsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9u
TmFtZSwgIkVycm9yOiBEZWJ1ZyBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CiAgICAgICAg
cmV0dXJuOwogICAgfQoKICAgICgmU2NyaXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgpKS0+ZGVhY3Rp
dmF0ZUJyZWFrcG9pbnRzKCk7Cgp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpw
YXVzZShQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcmdzKQp7CiAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKFN0cmluZywgYmFja2VuZEZ1bmN0aW9uTmFtZSwgKCJwYXVzZSIpKTsKICAgIGxvbmcg
Y2FsbElkID0gMDsKCiAgICBpZiAoYXJncy0+bGVuZ3RoKCkgIT0gMSkgewogICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNr
ZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50c0NvdW50TWVzc2FnZShhcmdzLT5s
ZW5ndGgoKSAtIDEsIDApKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKCEoJlNjcmlw
dERlYnVnU2VydmVyOjpzaGFyZWQoKSkpIHsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNh
bGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgIkVycm9yOiBEZWJ1ZyBoYW5kbGVyIGlzIG5vdCBh
dmFpbGFibGUuIik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICgmU2NyaXB0RGVidWdTZXJ2
ZXI6OnNoYXJlZCgpKS0+cGF1c2UoKTsKCn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI6OnJlc3VtZShQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcmdzKQp7CiAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKFN0cmluZywgYmFja2VuZEZ1bmN0aW9uTmFtZSwgKCJyZXN1bWUiKSk7CiAg
ICBsb25nIGNhbGxJZCA9IDA7CgogICAgaWYgKGFyZ3MtPmxlbmd0aCgpICE9IDEpIHsKICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJ
ZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudHNDb3VudE1lc3NhZ2Uo
YXJncy0+bGVuZ3RoKCkgLSAxLCAwKSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmICgh
bV9pbnNwZWN0b3JDb250cm9sbGVyKSB7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxs
SWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICJFcnJvcjogQ29udHJvbGxlciBoYW5kbGVyIGlzIG5v
dCBhdmFpbGFibGUuIik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIG1faW5zcGVjdG9yQ29u
dHJvbGxlci0+cmVzdW1lKCk7Cgp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpz
dGVwT3ZlclN0YXRlbWVudChQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcmdzKQp7CiAgICBE
RUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgYmFja2VuZEZ1bmN0aW9uTmFtZSwgKCJzdGVwT3Zl
clN0YXRlbWVudCIpKTsKICAgIGxvbmcgY2FsbElkID0gMDsKCiAgICBpZiAoYXJncy0+bGVuZ3Ro
KCkgIT0gMSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHJlcG9ydFBy
b3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3Vt
ZW50c0NvdW50TWVzc2FnZShhcmdzLT5sZW5ndGgoKSAtIDEsIDApKTsKICAgICAgICByZXR1cm47
CiAgICB9CgogICAgaWYgKCEoJlNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKSkpIHsKICAgICAg
ICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgIkVycm9y
OiBEZWJ1ZyBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CiAgICAgICAgcmV0dXJuOwogICAg
fQoKICAgICgmU2NyaXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgpKS0+c3RlcE92ZXJTdGF0ZW1lbnQo
KTsKCn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnN0ZXBJbnRvU3RhdGVtZW50
KFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3MpCnsKICAgIERFRklORV9TVEFUSUNfTE9D
QUwoU3RyaW5nLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAoInN0ZXBJbnRvU3RhdGVtZW50IikpOwog
ICAgbG9uZyBjYWxsSWQgPSAwOwoKICAgIGlmIChhcmdzLT5sZW5ndGgoKSAhPSAxKSB7CiAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxs
SWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRzQ291bnRNZXNzYWdl
KGFyZ3MtPmxlbmd0aCgpIC0gMSwgMCkpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAo
ISgmU2NyaXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgpKSkgewogICAgICAgIHJlcG9ydFByb3RvY29s
RXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAiRXJyb3I6IERlYnVnIGhhbmRsZXIg
aXMgbm90IGF2YWlsYWJsZS4iKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgKCZTY3JpcHRE
ZWJ1Z1NlcnZlcjo6c2hhcmVkKCkpLT5zdGVwSW50b1N0YXRlbWVudCgpOwoKfQoKdm9pZCBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6c3RlcE91dE9mRnVuY3Rpb24oUGFzc1JlZlB0cjxJbnNw
ZWN0b3JBcnJheT4gYXJncykKewogICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGJhY2tl
bmRGdW5jdGlvbk5hbWUsICgic3RlcE91dE9mRnVuY3Rpb24iKSk7CiAgICBsb25nIGNhbGxJZCA9
IDA7CgogICAgaWYgKGFyZ3MtPmxlbmd0aCgpICE9IDEpIHsKICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0
aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudHNDb3VudE1lc3NhZ2UoYXJncy0+bGVuZ3RoKCkg
LSAxLCAwKSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmICghKCZTY3JpcHREZWJ1Z1Nl
cnZlcjo6c2hhcmVkKCkpKSB7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIGJh
Y2tlbmRGdW5jdGlvbk5hbWUsICJFcnJvcjogRGVidWcgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxl
LiIpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAoJlNjcmlwdERlYnVnU2VydmVyOjpzaGFy
ZWQoKSktPnN0ZXBPdXRPZkZ1bmN0aW9uKCk7Cgp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyOjpzZXRQYXVzZU9uRXhjZXB0aW9uc1N0YXRlKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJy
YXk+IGFyZ3MpCnsKICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBiYWNrZW5kRnVuY3Rp
b25OYW1lLCAoInNldFBhdXNlT25FeGNlcHRpb25zU3RhdGUiKSk7CiAgICBsb25nIGNhbGxJZCA9
IDA7CgogICAgaWYgKGFyZ3MtPmxlbmd0aCgpICE9IDIpIHsKICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0
aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudHNDb3VudE1lc3NhZ2UoYXJncy0+bGVuZ3RoKCkg
LSAxLCAxKSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGxvbmcgcGF1c2VPbkV4Y2VwdGlv
bnNTdGF0ZTsKICAgIGlmICghYXJncy0+Z2V0KDEpLT5hc051bWJlcigmcGF1c2VPbkV4Y2VwdGlv
bnNTdGF0ZSkpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICByZXBvcnRQ
cm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1
bWVudFR5cGVNZXNzYWdlKDEsICJwYXVzZU9uRXhjZXB0aW9uc1N0YXRlIiwgImxvbmciKSk7CiAg
ICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmICghbV9pbnNwZWN0b3JDb250cm9sbGVyKSB7CiAg
ICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICJF
cnJvcjogQ29udHJvbGxlciBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CiAgICAgICAgcmV0
dXJuOwogICAgfQoKICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+c2V0UGF1c2VPbkV4Y2VwdGlv
bnNTdGF0ZShwYXVzZU9uRXhjZXB0aW9uc1N0YXRlKTsKCn0KCnZvaWQgSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXI6OmVkaXRTY3JpcHRTb3VyY2UoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4g
YXJncykKewogICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGJhY2tlbmRGdW5jdGlvbk5h
bWUsICgiZWRpdFNjcmlwdFNvdXJjZSIpKTsKICAgIGxvbmcgY2FsbElkID0gMDsKCiAgICBpZiAo
YXJncy0+bGVuZ3RoKCkgIT0gNCkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
ICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3Jt
YXRXcm9uZ0FyZ3VtZW50c0NvdW50TWVzc2FnZShhcmdzLT5sZW5ndGgoKSAtIDEsIDMpKTsKICAg
ICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKCFhcmdzLT5nZXQoMSktPmFzTnVtYmVyKCZjYWxs
SWQpKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcmVwb3J0UHJvdG9j
b2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRU
eXBlTWVzc2FnZSgxLCAiY2FsbElkIiwgImxvbmciKSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoK
ICAgIFN0cmluZyBzb3VyY2VJRDsKICAgIGlmICghYXJncy0+Z2V0KDIpLT5hc1N0cmluZygmc291
cmNlSUQpKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcmVwb3J0UHJv
dG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1l
bnRUeXBlTWVzc2FnZSgyLCAic291cmNlSUQiLCAiU3RyaW5nIikpOwogICAgICAgIHJldHVybjsK
ICAgIH0KCiAgICBTdHJpbmcgbmV3Q29udGVudDsKICAgIGlmICghYXJncy0+Z2V0KDMpLT5hc1N0
cmluZygmbmV3Q29udGVudCkpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0
V3JvbmdBcmd1bWVudFR5cGVNZXNzYWdlKDMsICJuZXdDb250ZW50IiwgIlN0cmluZyIpKTsKICAg
ICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKCFtX2luc3BlY3RvckNvbnRyb2xsZXIpIHsKICAg
ICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgIkVy
cm9yOiBDb250cm9sbGVyIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKICAgICAgICByZXR1
cm47CiAgICB9CgogICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7CiAgICBTdHJpbmcgcmVzdWx0Owog
ICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiBuZXdDYWxsRnJhbWVzID0gSW5zcGVjdG9yVmFsdWU6
Om51bGwoKTsKICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+ZWRpdFNjcmlwdFNvdXJjZShjYWxs
SWQsIHNvdXJjZUlELCBuZXdDb250ZW50LCAmc3VjY2VzcywgJnJlc3VsdCwgJm5ld0NhbGxGcmFt
ZXMpOwoKICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RvckNsaWVudCgpKSB7
CiAgICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcmd1bWVudHMgPSBJbnNwZWN0b3JBcnJh
eTo6Y3JlYXRlKCk7CiAgICAgICAgYXJndW1lbnRzLT5wdXNoU3RyaW5nKCJkaWRFZGl0U2NyaXB0
U291cmNlIik7CiAgICAgICAgYXJndW1lbnRzLT5wdXNoTnVtYmVyKGNhbGxJZCk7CiAgICAgICAg
YXJndW1lbnRzLT5wdXNoQm9vbChzdWNjZXNzKTsKICAgICAgICBhcmd1bWVudHMtPnB1c2hTdHJp
bmcocmVzdWx0KTsKICAgICAgICBhcmd1bWVudHMtPnB1c2gobmV3Q2FsbEZyYW1lcyk7CiAgICAg
ICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0b3JDbGllbnQoKS0+c2VuZE1lc3NhZ2VU
b0Zyb250ZW5kKGFyZ3VtZW50cy0+dG9KU09OU3RyaW5nKCkpOwogICAgfQp9Cgp2b2lkIEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRTY3JpcHRTb3VyY2UoUGFzc1JlZlB0cjxJbnNwZWN0
b3JBcnJheT4gYXJncykKewogICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGJhY2tlbmRG
dW5jdGlvbk5hbWUsICgiZ2V0U2NyaXB0U291cmNlIikpOwogICAgbG9uZyBjYWxsSWQgPSAwOwoK
ICAgIGlmIChhcmdzLT5sZW5ndGgoKSAhPSAzKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5h
bWUsIGZvcm1hdFdyb25nQXJndW1lbnRzQ291bnRNZXNzYWdlKGFyZ3MtPmxlbmd0aCgpIC0gMSwg
MikpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoIWFyZ3MtPmdldCgxKS0+YXNOdW1i
ZXIoJmNhbGxJZCkpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICByZXBv
cnRQcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdB
cmd1bWVudFR5cGVNZXNzYWdlKDEsICJjYWxsSWQiLCAibG9uZyIpKTsKICAgICAgICByZXR1cm47
CiAgICB9CgogICAgU3RyaW5nIHNvdXJjZUlEOwogICAgaWYgKCFhcmdzLT5nZXQoMiktPmFzU3Ry
aW5nKCZzb3VyY2VJRCkpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBy
ZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3Jv
bmdBcmd1bWVudFR5cGVNZXNzYWdlKDIsICJzb3VyY2VJRCIsICJTdHJpbmciKSk7CiAgICAgICAg
cmV0dXJuOwogICAgfQoKICAgIGlmICghbV9pbnNwZWN0b3JDb250cm9sbGVyKSB7CiAgICAgICAg
cmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICJFcnJvcjog
Q29udHJvbGxlciBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CiAgICAgICAgcmV0dXJuOwog
ICAgfQoKICAgIFN0cmluZyBzY3JpcHRTb3VyY2U7CiAgICBtX2luc3BlY3RvckNvbnRyb2xsZXIt
PmdldFNjcmlwdFNvdXJjZShjYWxsSWQsIHNvdXJjZUlELCAmc2NyaXB0U291cmNlKTsKCiAgICBp
ZiAobV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0b3JDbGllbnQoKSkgewogICAgICAgIFJl
ZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJndW1lbnRzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgp
OwogICAgICAgIGFyZ3VtZW50cy0+cHVzaFN0cmluZygiZGlkR2V0U2NyaXB0U291cmNlIik7CiAg
ICAgICAgYXJndW1lbnRzLT5wdXNoTnVtYmVyKGNhbGxJZCk7CiAgICAgICAgYXJndW1lbnRzLT5w
dXNoU3RyaW5nKHNjcmlwdFNvdXJjZSk7CiAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5p
bnNwZWN0b3JDbGllbnQoKS0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGFyZ3VtZW50cy0+dG9KU09O
U3RyaW5nKCkpOwogICAgfQp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjplbmFi
bGVQcm9maWxlcihQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcmdzKQp7CiAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKFN0cmluZywgYmFja2VuZEZ1bmN0aW9uTmFtZSwgKCJlbmFibGVQcm9maWxl
ciIpKTsKICAgIGxvbmcgY2FsbElkID0gMDsKCiAgICBpZiAoYXJncy0+bGVuZ3RoKCkgIT0gMikg
ewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHJlcG9ydFByb3RvY29sRXJy
b3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50c0NvdW50
TWVzc2FnZShhcmdzLT5sZW5ndGgoKSAtIDEsIDEpKTsKICAgICAgICByZXR1cm47CiAgICB9Cgog
ICAgYm9vbCBhbHdheXM7CiAgICBpZiAoIWFyZ3MtPmdldCgxKS0+YXNCb29sKCZhbHdheXMpKSB7
CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJv
cihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRUeXBlTWVz
c2FnZSgxLCAiYWx3YXlzIiwgImJvb2xlYW4iKSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAg
IGlmICghbV9pbnNwZWN0b3JDb250cm9sbGVyKSB7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJv
cihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICJFcnJvcjogQ29udHJvbGxlciBoYW5kbGVy
IGlzIG5vdCBhdmFpbGFibGUuIik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIG1faW5zcGVj
dG9yQ29udHJvbGxlci0+ZW5hYmxlUHJvZmlsZXIoYWx3YXlzKTsKCn0KCnZvaWQgSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXI6OmRpc2FibGVQcm9maWxlcihQYXNzUmVmUHRyPEluc3BlY3RvckFy
cmF5PiBhcmdzKQp7CiAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgYmFja2VuZEZ1bmN0
aW9uTmFtZSwgKCJkaXNhYmxlUHJvZmlsZXIiKSk7CiAgICBsb25nIGNhbGxJZCA9IDA7CgogICAg
aWYgKGFyZ3MtPmxlbmd0aCgpICE9IDIpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwg
Zm9ybWF0V3JvbmdBcmd1bWVudHNDb3VudE1lc3NhZ2UoYXJncy0+bGVuZ3RoKCkgLSAxLCAxKSk7
CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGJvb2wgYWx3YXlzOwogICAgaWYgKCFhcmdzLT5n
ZXQoMSktPmFzQm9vbCgmYWx3YXlzKSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBm
b3JtYXRXcm9uZ0FyZ3VtZW50VHlwZU1lc3NhZ2UoMSwgImFsd2F5cyIsICJib29sZWFuIikpOwog
ICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoIW1faW5zcGVjdG9yQ29udHJvbGxlcikgewog
ICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAi
RXJyb3I6IENvbnRyb2xsZXIgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwogICAgICAgIHJl
dHVybjsKICAgIH0KCiAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmRpc2FibGVQcm9maWxlcihh
bHdheXMpOwoKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6c3RhcnRQcm9maWxp
bmcoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJncykKewogICAgREVGSU5FX1NUQVRJQ19M
T0NBTChTdHJpbmcsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICgic3RhcnRQcm9maWxpbmciKSk7CiAg
ICBsb25nIGNhbGxJZCA9IDA7CgogICAgaWYgKGFyZ3MtPmxlbmd0aCgpICE9IDEpIHsKICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJ
ZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudHNDb3VudE1lc3NhZ2Uo
YXJncy0+bGVuZ3RoKCkgLSAxLCAwKSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmICgh
bV9pbnNwZWN0b3JDb250cm9sbGVyKSB7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxs
SWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICJFcnJvcjogQ29udHJvbGxlciBoYW5kbGVyIGlzIG5v
dCBhdmFpbGFibGUuIik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIG1faW5zcGVjdG9yQ29u
dHJvbGxlci0+c3RhcnRQcm9maWxpbmcoKTsKCn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXI6OnN0b3BQcm9maWxpbmcoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJncykKewog
ICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICgic3Rv
cFByb2ZpbGluZyIpKTsKICAgIGxvbmcgY2FsbElkID0gMDsKCiAgICBpZiAoYXJncy0+bGVuZ3Ro
KCkgIT0gMSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHJlcG9ydFBy
b3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3Vt
ZW50c0NvdW50TWVzc2FnZShhcmdzLT5sZW5ndGgoKSAtIDEsIDApKTsKICAgICAgICByZXR1cm47
CiAgICB9CgogICAgaWYgKCFtX2luc3BlY3RvckNvbnRyb2xsZXIpIHsKICAgICAgICByZXBvcnRQ
cm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgIkVycm9yOiBDb250cm9s
bGVyIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKICAgICAgICByZXR1cm47CiAgICB9Cgog
ICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5zdG9wUHJvZmlsaW5nKCk7Cgp9Cgp2b2lkIEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRQcm9maWxlSGVhZGVycyhQYXNzUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiBhcmdzKQp7CiAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgYmFja2Vu
ZEZ1bmN0aW9uTmFtZSwgKCJnZXRQcm9maWxlSGVhZGVycyIpKTsKICAgIGxvbmcgY2FsbElkID0g
MDsKCiAgICBpZiAoYXJncy0+bGVuZ3RoKCkgIT0gMikgewogICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rp
b25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50c0NvdW50TWVzc2FnZShhcmdzLT5sZW5ndGgoKSAt
IDEsIDEpKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKCFhcmdzLT5nZXQoMSktPmFz
TnVtYmVyKCZjYWxsSWQpKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAg
cmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdy
b25nQXJndW1lbnRUeXBlTWVzc2FnZSgxLCAiY2FsbElkIiwgImxvbmciKSk7CiAgICAgICAgcmV0
dXJuOwogICAgfQoKICAgIGlmICghbV9pbnNwZWN0b3JDb250cm9sbGVyKSB7CiAgICAgICAgcmVw
b3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICJFcnJvcjogQ29u
dHJvbGxlciBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CiAgICAgICAgcmV0dXJuOwogICAg
fQoKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gaGVhZGVycyA9IEluc3BlY3RvckFycmF5Ojpj
cmVhdGUoKTsKICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+Z2V0UHJvZmlsZUhlYWRlcnMoY2Fs
bElkLCAmaGVhZGVycyk7CgogICAgaWYgKG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdG9y
Q2xpZW50KCkpIHsKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3VtZW50cyA9IElu
c3BlY3RvckFycmF5OjpjcmVhdGUoKTsKICAgICAgICBhcmd1bWVudHMtPnB1c2hTdHJpbmcoImRp
ZEdldFByb2ZpbGVIZWFkZXJzIik7CiAgICAgICAgYXJndW1lbnRzLT5wdXNoTnVtYmVyKGNhbGxJ
ZCk7CiAgICAgICAgYXJndW1lbnRzLT5wdXNoKGhlYWRlcnMpOwogICAgICAgIG1faW5zcGVjdG9y
Q29udHJvbGxlci0+aW5zcGVjdG9yQ2xpZW50KCktPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChhcmd1
bWVudHMtPnRvSlNPTlN0cmluZygpKTsKICAgIH0KfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcjo6Z2V0UHJvZmlsZShQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcmdzKQp7CiAg
ICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgYmFja2VuZEZ1bmN0aW9uTmFtZSwgKCJnZXRQ
cm9maWxlIikpOwogICAgbG9uZyBjYWxsSWQgPSAwOwoKICAgIGlmIChhcmdzLT5sZW5ndGgoKSAh
PSAzKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcmVwb3J0UHJvdG9j
b2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRz
Q291bnRNZXNzYWdlKGFyZ3MtPmxlbmd0aCgpIC0gMSwgMikpOwogICAgICAgIHJldHVybjsKICAg
IH0KCiAgICBpZiAoIWFyZ3MtPmdldCgxKS0+YXNOdW1iZXIoJmNhbGxJZCkpIHsKICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwg
YmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudFR5cGVNZXNzYWdlKDEsICJj
YWxsSWQiLCAibG9uZyIpKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgdW5zaWduZWQgbG9u
ZyB1aWQ7CiAgICBpZiAoIWFyZ3MtPmdldCgyKS0+YXNOdW1iZXIoJnVpZCkpIHsKICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwg
YmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudFR5cGVNZXNzYWdlKDIsICJ1
aWQiLCAidW5zaWduZWQgbG9uZyIpKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKCFt
X2luc3BlY3RvckNvbnRyb2xsZXIpIHsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJ
ZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgIkVycm9yOiBDb250cm9sbGVyIGhhbmRsZXIgaXMgbm90
IGF2YWlsYWJsZS4iKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gcHJvZmlsZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBtX2luc3Bl
Y3RvckNvbnRyb2xsZXItPmdldFByb2ZpbGUoY2FsbElkLCB1aWQsICZwcm9maWxlKTsKCiAgICBp
ZiAobV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0b3JDbGllbnQoKSkgewogICAgICAgIFJl
ZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJndW1lbnRzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgp
OwogICAgICAgIGFyZ3VtZW50cy0+cHVzaFN0cmluZygiZGlkR2V0UHJvZmlsZSIpOwogICAgICAg
IGFyZ3VtZW50cy0+cHVzaE51bWJlcihjYWxsSWQpOwogICAgICAgIGFyZ3VtZW50cy0+cHVzaChw
cm9maWxlKTsKICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RvckNsaWVudCgp
LT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoYXJndW1lbnRzLT50b0pTT05TdHJpbmcoKSk7CiAgICB9
Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnJlbW92ZVByb2ZpbGUoUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJncykKewogICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJp
bmcsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICgicmVtb3ZlUHJvZmlsZSIpKTsKICAgIGxvbmcgY2Fs
bElkID0gMDsKCiAgICBpZiAoYXJncy0+bGVuZ3RoKCkgIT0gMikgewogICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5k
RnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50c0NvdW50TWVzc2FnZShhcmdzLT5sZW5n
dGgoKSAtIDEsIDEpKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgdW5zaWduZWQgbG9uZyB1
aWQ7CiAgICBpZiAoIWFyZ3MtPmdldCgxKS0+YXNOdW1iZXIoJnVpZCkpIHsKICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgYmFj
a2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudFR5cGVNZXNzYWdlKDEsICJ1aWQi
LCAidW5zaWduZWQgbG9uZyIpKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKCFtX2lu
c3BlY3RvckNvbnRyb2xsZXIpIHsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwg
YmFja2VuZEZ1bmN0aW9uTmFtZSwgIkVycm9yOiBDb250cm9sbGVyIGhhbmRsZXIgaXMgbm90IGF2
YWlsYWJsZS4iKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgbV9pbnNwZWN0b3JDb250cm9s
bGVyLT5yZW1vdmVQcm9maWxlKHVpZCk7Cgp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyOjpjbGVhclByb2ZpbGVzKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3MpCnsKICAg
IERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAoImNsZWFy
UHJvZmlsZXMiKSk7CiAgICBsb25nIGNhbGxJZCA9IDA7CgogICAgaWYgKGFyZ3MtPmxlbmd0aCgp
ICE9IDEpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICByZXBvcnRQcm90
b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVu
dHNDb3VudE1lc3NhZ2UoYXJncy0+bGVuZ3RoKCkgLSAxLCAwKSk7CiAgICAgICAgcmV0dXJuOwog
ICAgfQoKICAgIGlmICghbV9pbnNwZWN0b3JDb250cm9sbGVyKSB7CiAgICAgICAgcmVwb3J0UHJv
dG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICJFcnJvcjogQ29udHJvbGxl
ciBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAg
IG1faW5zcGVjdG9yQ29udHJvbGxlci0+Y2xlYXJQcm9maWxlcygpOwoKfQoKdm9pZCBJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcjo6dGFrZUhlYXBTbmFwc2hvdChQYXNzUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiBhcmdzKQp7CiAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgYmFja2VuZEZ1
bmN0aW9uTmFtZSwgKCJ0YWtlSGVhcFNuYXBzaG90IikpOwogICAgbG9uZyBjYWxsSWQgPSAwOwoK
ICAgIGlmIChhcmdzLT5sZW5ndGgoKSAhPSAxKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5h
bWUsIGZvcm1hdFdyb25nQXJndW1lbnRzQ291bnRNZXNzYWdlKGFyZ3MtPmxlbmd0aCgpIC0gMSwg
MCkpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoIW1faW5zcGVjdG9yQ29udHJvbGxl
ci0+aW5zcGVjdG9yQmFja2VuZCgpKSB7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxs
SWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICJFcnJvcjogQmFja2VuZCBoYW5kbGVyIGlzIG5vdCBh
dmFpbGFibGUuIik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIG1faW5zcGVjdG9yQ29udHJv
bGxlci0+aW5zcGVjdG9yQmFja2VuZCgpLT50YWtlSGVhcFNuYXBzaG90KCk7Cgp9Cgp2b2lkIElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRQcm9maWxlckxvZ0xpbmVzKFBhc3NSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+IGFyZ3MpCnsKICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBi
YWNrZW5kRnVuY3Rpb25OYW1lLCAoImdldFByb2ZpbGVyTG9nTGluZXMiKSk7CiAgICBsb25nIGNh
bGxJZCA9IDA7CgogICAgaWYgKGFyZ3MtPmxlbmd0aCgpICE9IDMpIHsKICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2Vu
ZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudHNDb3VudE1lc3NhZ2UoYXJncy0+bGVu
Z3RoKCkgLSAxLCAyKSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmICghYXJncy0+Z2V0
KDEpLT5hc051bWJlcigmY2FsbElkKSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBm
b3JtYXRXcm9uZ0FyZ3VtZW50VHlwZU1lc3NhZ2UoMSwgImNhbGxJZCIsICJsb25nIikpOwogICAg
ICAgIHJldHVybjsKICAgIH0KCiAgICBsb25nIGluUG9zaXRpb247CiAgICBpZiAoIWFyZ3MtPmdl
dCgyKS0+YXNOdW1iZXIoJmluUG9zaXRpb24pKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5h
bWUsIGZvcm1hdFdyb25nQXJndW1lbnRUeXBlTWVzc2FnZSgyLCAiaW5Qb3NpdGlvbiIsICJsb25n
IikpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoIW1faW5zcGVjdG9yQ29udHJvbGxl
ci0+aW5zcGVjdG9yQmFja2VuZCgpKSB7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxs
SWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICJFcnJvcjogQmFja2VuZCBoYW5kbGVyIGlzIG5vdCBh
dmFpbGFibGUuIik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGxvbmcgb3V0UG9zaXRpb247
CiAgICBTdHJpbmcgbG9nOwogICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0b3JCYWNr
ZW5kKCktPmdldFByb2ZpbGVyTG9nTGluZXMoY2FsbElkLCBpblBvc2l0aW9uLCAmb3V0UG9zaXRp
b24sICZsb2cpOwoKICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RvckNsaWVu
dCgpKSB7CiAgICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcmd1bWVudHMgPSBJbnNwZWN0
b3JBcnJheTo6Y3JlYXRlKCk7CiAgICAgICAgYXJndW1lbnRzLT5wdXNoU3RyaW5nKCJkaWRHZXRQ
cm9maWxlckxvZ0xpbmVzIik7CiAgICAgICAgYXJndW1lbnRzLT5wdXNoTnVtYmVyKGNhbGxJZCk7
CiAgICAgICAgYXJndW1lbnRzLT5wdXNoTnVtYmVyKG91dFBvc2l0aW9uKTsKICAgICAgICBhcmd1
bWVudHMtPnB1c2hTdHJpbmcobG9nKTsKICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmlu
c3BlY3RvckNsaWVudCgpLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoYXJndW1lbnRzLT50b0pTT05T
dHJpbmcoKSk7CiAgICB9Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnNldElu
amVjdGVkU2NyaXB0U291cmNlKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3MpCnsKICAg
IERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAoInNldElu
amVjdGVkU2NyaXB0U291cmNlIikpOwogICAgbG9uZyBjYWxsSWQgPSAwOwoKICAgIGlmIChhcmdz
LT5sZW5ndGgoKSAhPSAyKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAg
cmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdy
b25nQXJndW1lbnRzQ291bnRNZXNzYWdlKGFyZ3MtPmxlbmd0aCgpIC0gMSwgMSkpOwogICAgICAg
IHJldHVybjsKICAgIH0KCiAgICBTdHJpbmcgc2NyaXB0U291cmNlOwogICAgaWYgKCFhcmdzLT5n
ZXQoMSktPmFzU3RyaW5nKCZzY3JpcHRTb3VyY2UpKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlv
bk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRUeXBlTWVzc2FnZSgxLCAic2NyaXB0U291cmNlIiwg
IlN0cmluZyIpKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKCFtX2luc3BlY3RvckNv
bnRyb2xsZXItPmluc3BlY3RvckJhY2tlbmQoKSkgewogICAgICAgIHJlcG9ydFByb3RvY29sRXJy
b3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAiRXJyb3I6IEJhY2tlbmQgaGFuZGxlciBp
cyBub3QgYXZhaWxhYmxlLiIpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBtX2luc3BlY3Rv
ckNvbnRyb2xsZXItPmluc3BlY3RvckJhY2tlbmQoKS0+c2V0SW5qZWN0ZWRTY3JpcHRTb3VyY2Uo
c2NyaXB0U291cmNlKTsKCn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmRpc3Bh
dGNoT25JbmplY3RlZFNjcmlwdChQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcmdzKQp7CiAg
ICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgYmFja2VuZEZ1bmN0aW9uTmFtZSwgKCJkaXNw
YXRjaE9uSW5qZWN0ZWRTY3JpcHQiKSk7CiAgICBsb25nIGNhbGxJZCA9IDA7CgogICAgaWYgKGFy
Z3MtPmxlbmd0aCgpICE9IDYpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0
V3JvbmdBcmd1bWVudHNDb3VudE1lc3NhZ2UoYXJncy0+bGVuZ3RoKCkgLSAxLCA1KSk7CiAgICAg
ICAgcmV0dXJuOwogICAgfQoKICAgIGlmICghYXJncy0+Z2V0KDEpLT5hc051bWJlcigmY2FsbElk
KSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHJlcG9ydFByb3RvY29s
RXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50VHlw
ZU1lc3NhZ2UoMSwgImNhbGxJZCIsICJsb25nIikpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAg
ICBsb25nIGluamVjdGVkU2NyaXB0SWQ7CiAgICBpZiAoIWFyZ3MtPmdldCgyKS0+YXNOdW1iZXIo
JmluamVjdGVkU2NyaXB0SWQpKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
ICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1h
dFdyb25nQXJndW1lbnRUeXBlTWVzc2FnZSgyLCAiaW5qZWN0ZWRTY3JpcHRJZCIsICJsb25nIikp
OwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBTdHJpbmcgbWV0aG9kTmFtZTsKICAgIGlmICgh
YXJncy0+Z2V0KDMpLT5hc1N0cmluZygmbWV0aG9kTmFtZSkpIHsKICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1
bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudFR5cGVNZXNzYWdlKDMsICJtZXRob2ROYW1l
IiwgIlN0cmluZyIpKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgU3RyaW5nIGFyZ3VtZW50
czsKICAgIGlmICghYXJncy0+Z2V0KDQpLT5hc1N0cmluZygmYXJndW1lbnRzKSkgewogICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElk
LCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50VHlwZU1lc3NhZ2UoNCwg
ImFyZ3VtZW50cyIsICJTdHJpbmciKSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGJvb2wg
YXN5bmM7CiAgICBpZiAoIWFyZ3MtPmdldCg1KS0+YXNCb29sKCZhc3luYykpIHsKICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwg
YmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudFR5cGVNZXNzYWdlKDUsICJh
c3luYyIsICJib29sZWFuIikpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoIW1faW5z
cGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdG9yQmFja2VuZCgpKSB7CiAgICAgICAgcmVwb3J0UHJv
dG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICJFcnJvcjogQmFja2VuZCBo
YW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIFJl
ZlB0cjxJbnNwZWN0b3JWYWx1ZT4gcmVzdWx0ID0gSW5zcGVjdG9yVmFsdWU6Om51bGwoKTsKICAg
IGJvb2wgaXNFeGNlcHRpb24gPSBmYWxzZTsKICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5z
cGVjdG9yQmFja2VuZCgpLT5kaXNwYXRjaE9uSW5qZWN0ZWRTY3JpcHQoY2FsbElkLCBpbmplY3Rl
ZFNjcmlwdElkLCBtZXRob2ROYW1lLCBhcmd1bWVudHMsIGFzeW5jLCAmcmVzdWx0LCAmaXNFeGNl
cHRpb24pOwoKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6YWRkU2NyaXB0VG9F
dmFsdWF0ZU9uTG9hZChQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcmdzKQp7CiAgICBERUZJ
TkVfU1RBVElDX0xPQ0FMKFN0cmluZywgYmFja2VuZEZ1bmN0aW9uTmFtZSwgKCJhZGRTY3JpcHRU
b0V2YWx1YXRlT25Mb2FkIikpOwogICAgbG9uZyBjYWxsSWQgPSAwOwoKICAgIGlmIChhcmdzLT5s
ZW5ndGgoKSAhPSAyKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcmVw
b3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25n
QXJndW1lbnRzQ291bnRNZXNzYWdlKGFyZ3MtPmxlbmd0aCgpIC0gMSwgMSkpOwogICAgICAgIHJl
dHVybjsKICAgIH0KCiAgICBTdHJpbmcgc2NyaXB0U291cmNlOwogICAgaWYgKCFhcmdzLT5nZXQo
MSktPmFzU3RyaW5nKCZzY3JpcHRTb3VyY2UpKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5h
bWUsIGZvcm1hdFdyb25nQXJndW1lbnRUeXBlTWVzc2FnZSgxLCAic2NyaXB0U291cmNlIiwgIlN0
cmluZyIpKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKCFtX2luc3BlY3RvckNvbnRy
b2xsZXIpIHsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0
aW9uTmFtZSwgIkVycm9yOiBDb250cm9sbGVyIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsK
ICAgICAgICByZXR1cm47CiAgICB9CgogICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5hZGRTY3Jp
cHRUb0V2YWx1YXRlT25Mb2FkKHNjcmlwdFNvdXJjZSk7Cgp9Cgp2b2lkIEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyOjpyZW1vdmVBbGxTY3JpcHRzVG9FdmFsdWF0ZU9uTG9hZChQYXNzUmVmUHRy
PEluc3BlY3RvckFycmF5PiBhcmdzKQp7CiAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywg
YmFja2VuZEZ1bmN0aW9uTmFtZSwgKCJyZW1vdmVBbGxTY3JpcHRzVG9FdmFsdWF0ZU9uTG9hZCIp
KTsKICAgIGxvbmcgY2FsbElkID0gMDsKCiAgICBpZiAoYXJncy0+bGVuZ3RoKCkgIT0gMSkgewog
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3Io
Y2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50c0NvdW50TWVz
c2FnZShhcmdzLT5sZW5ndGgoKSAtIDEsIDApKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAg
aWYgKCFtX2luc3BlY3RvckNvbnRyb2xsZXIpIHsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9y
KGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgIkVycm9yOiBDb250cm9sbGVyIGhhbmRsZXIg
aXMgbm90IGF2YWlsYWJsZS4iKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgbV9pbnNwZWN0
b3JDb250cm9sbGVyLT5yZW1vdmVBbGxTY3JpcHRzVG9FdmFsdWF0ZU9uTG9hZCgpOwoKfQoKdm9p
ZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0Q2hpbGROb2RlcyhQYXNzUmVmUHRyPElu
c3BlY3RvckFycmF5PiBhcmdzKQp7CiAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgYmFj
a2VuZEZ1bmN0aW9uTmFtZSwgKCJnZXRDaGlsZE5vZGVzIikpOwogICAgbG9uZyBjYWxsSWQgPSAw
OwoKICAgIGlmIChhcmdzLT5sZW5ndGgoKSAhPSAzKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlv
bk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRzQ291bnRNZXNzYWdlKGFyZ3MtPmxlbmd0aCgpIC0g
MSwgMikpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoIWFyZ3MtPmdldCgxKS0+YXNO
dW1iZXIoJmNhbGxJZCkpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBy
ZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3Jv
bmdBcmd1bWVudFR5cGVNZXNzYWdlKDEsICJjYWxsSWQiLCAibG9uZyIpKTsKICAgICAgICByZXR1
cm47CiAgICB9CgogICAgbG9uZyBub2RlSWQ7CiAgICBpZiAoIWFyZ3MtPmdldCgyKS0+YXNOdW1i
ZXIoJm5vZGVJZCkpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICByZXBv
cnRQcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdB
cmd1bWVudFR5cGVNZXNzYWdlKDIsICJub2RlSWQiLCAibG9uZyIpKTsKICAgICAgICByZXR1cm47
CiAgICB9CgogICAgaWYgKCFtX2luc3BlY3RvckNvbnRyb2xsZXItPmRvbUFnZW50KCkpIHsKICAg
ICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgIkVy
cm9yOiBET00gaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwogICAgICAgIHJldHVybjsKICAg
IH0KCiAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmRvbUFnZW50KCktPmdldENoaWxkTm9kZXMo
Y2FsbElkLCBub2RlSWQpOwoKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6c2V0
QXR0cmlidXRlKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3MpCnsKICAgIERFRklORV9T
VEFUSUNfTE9DQUwoU3RyaW5nLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAoInNldEF0dHJpYnV0ZSIp
KTsKICAgIGxvbmcgY2FsbElkID0gMDsKCiAgICBpZiAoYXJncy0+bGVuZ3RoKCkgIT0gNSkgewog
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3Io
Y2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50c0NvdW50TWVz
c2FnZShhcmdzLT5sZW5ndGgoKSAtIDEsIDQpKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAg
aWYgKCFhcmdzLT5nZXQoMSktPmFzTnVtYmVyKCZjYWxsSWQpKSB7CiAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRG
dW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRUeXBlTWVzc2FnZSgxLCAiY2FsbElkIiwg
ImxvbmciKSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGxvbmcgZWxlbWVudElkOwogICAg
aWYgKCFhcmdzLT5nZXQoMiktPmFzTnVtYmVyKCZlbGVtZW50SWQpKSB7CiAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tl
bmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRUeXBlTWVzc2FnZSgyLCAiZWxlbWVu
dElkIiwgImxvbmciKSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIFN0cmluZyBuYW1lOwog
ICAgaWYgKCFhcmdzLT5nZXQoMyktPmFzU3RyaW5nKCZuYW1lKSkgewogICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5k
RnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50VHlwZU1lc3NhZ2UoMywgIm5hbWUiLCAi
U3RyaW5nIikpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBTdHJpbmcgdmFsdWU7CiAgICBp
ZiAoIWFyZ3MtPmdldCg0KS0+YXNTdHJpbmcoJnZhbHVlKSkgewogICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVu
Y3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50VHlwZU1lc3NhZ2UoNCwgInZhbHVlIiwgIlN0
cmluZyIpKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKCFtX2luc3BlY3RvckNvbnRy
b2xsZXItPmRvbUFnZW50KCkpIHsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwg
YmFja2VuZEZ1bmN0aW9uTmFtZSwgIkVycm9yOiBET00gaGFuZGxlciBpcyBub3QgYXZhaWxhYmxl
LiIpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKICAg
IG1faW5zcGVjdG9yQ29udHJvbGxlci0+ZG9tQWdlbnQoKS0+c2V0QXR0cmlidXRlKGNhbGxJZCwg
ZWxlbWVudElkLCBuYW1lLCB2YWx1ZSwgJnN1Y2Nlc3MpOwoKICAgIGlmIChtX2luc3BlY3RvckNv
bnRyb2xsZXItPmluc3BlY3RvckNsaWVudCgpKSB7CiAgICAgICAgUmVmUHRyPEluc3BlY3RvckFy
cmF5PiBhcmd1bWVudHMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CiAgICAgICAgYXJndW1l
bnRzLT5wdXNoU3RyaW5nKCJkaWRBcHBseURvbUNoYW5nZSIpOwogICAgICAgIGFyZ3VtZW50cy0+
cHVzaE51bWJlcihjYWxsSWQpOwogICAgICAgIGFyZ3VtZW50cy0+cHVzaEJvb2woc3VjY2Vzcyk7
CiAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0b3JDbGllbnQoKS0+c2VuZE1l
c3NhZ2VUb0Zyb250ZW5kKGFyZ3VtZW50cy0+dG9KU09OU3RyaW5nKCkpOwogICAgfQp9Cgp2b2lk
IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpyZW1vdmVBdHRyaWJ1dGUoUGFzc1JlZlB0cjxJ
bnNwZWN0b3JBcnJheT4gYXJncykKewogICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGJh
Y2tlbmRGdW5jdGlvbk5hbWUsICgicmVtb3ZlQXR0cmlidXRlIikpOwogICAgbG9uZyBjYWxsSWQg
PSAwOwoKICAgIGlmIChhcmdzLT5sZW5ndGgoKSAhPSA0KSB7CiAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5j
dGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRzQ291bnRNZXNzYWdlKGFyZ3MtPmxlbmd0aCgp
IC0gMSwgMykpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoIWFyZ3MtPmdldCgxKS0+
YXNOdW1iZXIoJmNhbGxJZCkpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0
V3JvbmdBcmd1bWVudFR5cGVNZXNzYWdlKDEsICJjYWxsSWQiLCAibG9uZyIpKTsKICAgICAgICBy
ZXR1cm47CiAgICB9CgogICAgbG9uZyBlbGVtZW50SWQ7CiAgICBpZiAoIWFyZ3MtPmdldCgyKS0+
YXNOdW1iZXIoJmVsZW1lbnRJZCkpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9y
bWF0V3JvbmdBcmd1bWVudFR5cGVNZXNzYWdlKDIsICJlbGVtZW50SWQiLCAibG9uZyIpKTsKICAg
ICAgICByZXR1cm47CiAgICB9CgogICAgU3RyaW5nIG5hbWU7CiAgICBpZiAoIWFyZ3MtPmdldCgz
KS0+YXNTdHJpbmcoJm5hbWUpKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
ICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1h
dFdyb25nQXJndW1lbnRUeXBlTWVzc2FnZSgzLCAibmFtZSIsICJTdHJpbmciKSk7CiAgICAgICAg
cmV0dXJuOwogICAgfQoKICAgIGlmICghbV9pbnNwZWN0b3JDb250cm9sbGVyLT5kb21BZ2VudCgp
KSB7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5h
bWUsICJFcnJvcjogRE9NIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKICAgICAgICByZXR1
cm47CiAgICB9CgogICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7CiAgICBtX2luc3BlY3RvckNvbnRy
b2xsZXItPmRvbUFnZW50KCktPnJlbW92ZUF0dHJpYnV0ZShjYWxsSWQsIGVsZW1lbnRJZCwgbmFt
ZSwgJnN1Y2Nlc3MpOwoKICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RvckNs
aWVudCgpKSB7CiAgICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcmd1bWVudHMgPSBJbnNw
ZWN0b3JBcnJheTo6Y3JlYXRlKCk7CiAgICAgICAgYXJndW1lbnRzLT5wdXNoU3RyaW5nKCJkaWRB
cHBseURvbUNoYW5nZSIpOwogICAgICAgIGFyZ3VtZW50cy0+cHVzaE51bWJlcihjYWxsSWQpOwog
ICAgICAgIGFyZ3VtZW50cy0+cHVzaEJvb2woc3VjY2Vzcyk7CiAgICAgICAgbV9pbnNwZWN0b3JD
b250cm9sbGVyLT5pbnNwZWN0b3JDbGllbnQoKS0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGFyZ3Vt
ZW50cy0+dG9KU09OU3RyaW5nKCkpOwogICAgfQp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyOjpzZXRUZXh0Tm9kZVZhbHVlKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3Mp
CnsKICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAo
InNldFRleHROb2RlVmFsdWUiKSk7CiAgICBsb25nIGNhbGxJZCA9IDA7CgogICAgaWYgKGFyZ3Mt
Pmxlbmd0aCgpICE9IDQpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBy
ZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3Jv
bmdBcmd1bWVudHNDb3VudE1lc3NhZ2UoYXJncy0+bGVuZ3RoKCkgLSAxLCAzKSk7CiAgICAgICAg
cmV0dXJuOwogICAgfQoKICAgIGlmICghYXJncy0+Z2V0KDEpLT5hc051bWJlcigmY2FsbElkKSkg
ewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHJlcG9ydFByb3RvY29sRXJy
b3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50VHlwZU1l
c3NhZ2UoMSwgImNhbGxJZCIsICJsb25nIikpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBs
b25nIG5vZGVJZDsKICAgIGlmICghYXJncy0+Z2V0KDIpLT5hc051bWJlcigmbm9kZUlkKSkgewog
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3Io
Y2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50VHlwZU1lc3Nh
Z2UoMiwgIm5vZGVJZCIsICJsb25nIikpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBTdHJp
bmcgdmFsdWU7CiAgICBpZiAoIWFyZ3MtPmdldCgzKS0+YXNTdHJpbmcoJnZhbHVlKSkgewogICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2Fs
bElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50VHlwZU1lc3NhZ2Uo
MywgInZhbHVlIiwgIlN0cmluZyIpKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKCFt
X2luc3BlY3RvckNvbnRyb2xsZXItPmRvbUFnZW50KCkpIHsKICAgICAgICByZXBvcnRQcm90b2Nv
bEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgIkVycm9yOiBET00gaGFuZGxlciBp
cyBub3QgYXZhaWxhYmxlLiIpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBib29sIHN1Y2Nl
c3MgPSBmYWxzZTsKICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+ZG9tQWdlbnQoKS0+c2V0VGV4
dE5vZGVWYWx1ZShjYWxsSWQsIG5vZGVJZCwgdmFsdWUsICZzdWNjZXNzKTsKCiAgICBpZiAobV9p
bnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0b3JDbGllbnQoKSkgewogICAgICAgIFJlZlB0cjxJ
bnNwZWN0b3JBcnJheT4gYXJndW1lbnRzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwogICAg
ICAgIGFyZ3VtZW50cy0+cHVzaFN0cmluZygiZGlkQXBwbHlEb21DaGFuZ2UiKTsKICAgICAgICBh
cmd1bWVudHMtPnB1c2hOdW1iZXIoY2FsbElkKTsKICAgICAgICBhcmd1bWVudHMtPnB1c2hCb29s
KHN1Y2Nlc3MpOwogICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdG9yQ2xpZW50
KCktPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChhcmd1bWVudHMtPnRvSlNPTlN0cmluZygpKTsKICAg
IH0KfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0RXZlbnRMaXN0ZW5lcnNG
b3JOb2RlKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3MpCnsKICAgIERFRklORV9TVEFU
SUNfTE9DQUwoU3RyaW5nLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAoImdldEV2ZW50TGlzdGVuZXJz
Rm9yTm9kZSIpKTsKICAgIGxvbmcgY2FsbElkID0gMDsKCiAgICBpZiAoYXJncy0+bGVuZ3RoKCkg
IT0gMykgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHJlcG9ydFByb3Rv
Y29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50
c0NvdW50TWVzc2FnZShhcmdzLT5sZW5ndGgoKSAtIDEsIDIpKTsKICAgICAgICByZXR1cm47CiAg
ICB9CgogICAgaWYgKCFhcmdzLT5nZXQoMSktPmFzTnVtYmVyKCZjYWxsSWQpKSB7CiAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQs
IGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRUeXBlTWVzc2FnZSgxLCAi
Y2FsbElkIiwgImxvbmciKSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGxvbmcgbm9kZUlk
OwogICAgaWYgKCFhcmdzLT5nZXQoMiktPmFzTnVtYmVyKCZub2RlSWQpKSB7CiAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIGJh
Y2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRUeXBlTWVzc2FnZSgyLCAibm9k
ZUlkIiwgImxvbmciKSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmICghbV9pbnNwZWN0
b3JDb250cm9sbGVyLT5kb21BZ2VudCgpKSB7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihj
YWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICJFcnJvcjogRE9NIGhhbmRsZXIgaXMgbm90IGF2
YWlsYWJsZS4iKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgbG9uZyBvdXROb2RlSWQ7CiAg
ICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGxpc3RlbmVyc0FycmF5ID0gSW5zcGVjdG9yQXJyYXk6
OmNyZWF0ZSgpOwogICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5kb21BZ2VudCgpLT5nZXRFdmVu
dExpc3RlbmVyc0Zvck5vZGUoY2FsbElkLCBub2RlSWQsICZvdXROb2RlSWQsICZsaXN0ZW5lcnNB
cnJheSk7CgogICAgaWYgKG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdG9yQ2xpZW50KCkp
IHsKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3VtZW50cyA9IEluc3BlY3RvckFy
cmF5OjpjcmVhdGUoKTsKICAgICAgICBhcmd1bWVudHMtPnB1c2hTdHJpbmcoImRpZEdldEV2ZW50
TGlzdGVuZXJzRm9yTm9kZSIpOwogICAgICAgIGFyZ3VtZW50cy0+cHVzaE51bWJlcihjYWxsSWQp
OwogICAgICAgIGFyZ3VtZW50cy0+cHVzaE51bWJlcihvdXROb2RlSWQpOwogICAgICAgIGFyZ3Vt
ZW50cy0+cHVzaChsaXN0ZW5lcnNBcnJheSk7CiAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVy
LT5pbnNwZWN0b3JDbGllbnQoKS0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGFyZ3VtZW50cy0+dG9K
U09OU3RyaW5nKCkpOwogICAgfQp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpj
b3B5Tm9kZShQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcmdzKQp7CiAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKFN0cmluZywgYmFja2VuZEZ1bmN0aW9uTmFtZSwgKCJjb3B5Tm9kZSIpKTsKICAg
IGxvbmcgY2FsbElkID0gMDsKCiAgICBpZiAoYXJncy0+bGVuZ3RoKCkgIT0gMikgewogICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElk
LCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50c0NvdW50TWVzc2FnZShh
cmdzLT5sZW5ndGgoKSAtIDEsIDEpKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgbG9uZyBu
b2RlSWQ7CiAgICBpZiAoIWFyZ3MtPmdldCgxKS0+YXNOdW1iZXIoJm5vZGVJZCkpIHsKICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJ
ZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudFR5cGVNZXNzYWdlKDEs
ICJub2RlSWQiLCAibG9uZyIpKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKCFtX2lu
c3BlY3RvckNvbnRyb2xsZXItPmRvbUFnZW50KCkpIHsKICAgICAgICByZXBvcnRQcm90b2NvbEVy
cm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgIkVycm9yOiBET00gaGFuZGxlciBpcyBu
b3QgYXZhaWxhYmxlLiIpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBtX2luc3BlY3RvckNv
bnRyb2xsZXItPmRvbUFnZW50KCktPmNvcHlOb2RlKG5vZGVJZCk7Cgp9Cgp2b2lkIEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyOjpyZW1vdmVOb2RlKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
IGFyZ3MpCnsKICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBiYWNrZW5kRnVuY3Rpb25O
YW1lLCAoInJlbW92ZU5vZGUiKSk7CiAgICBsb25nIGNhbGxJZCA9IDA7CgogICAgaWYgKGFyZ3Mt
Pmxlbmd0aCgpICE9IDMpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBy
ZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3Jv
bmdBcmd1bWVudHNDb3VudE1lc3NhZ2UoYXJncy0+bGVuZ3RoKCkgLSAxLCAyKSk7CiAgICAgICAg
cmV0dXJuOwogICAgfQoKICAgIGlmICghYXJncy0+Z2V0KDEpLT5hc051bWJlcigmY2FsbElkKSkg
ewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHJlcG9ydFByb3RvY29sRXJy
b3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50VHlwZU1l
c3NhZ2UoMSwgImNhbGxJZCIsICJsb25nIikpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBs
b25nIG5vZGVJZDsKICAgIGlmICghYXJncy0+Z2V0KDIpLT5hc051bWJlcigmbm9kZUlkKSkgewog
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3Io
Y2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50VHlwZU1lc3Nh
Z2UoMiwgIm5vZGVJZCIsICJsb25nIikpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAo
IW1faW5zcGVjdG9yQ29udHJvbGxlci0+ZG9tQWdlbnQoKSkgewogICAgICAgIHJlcG9ydFByb3Rv
Y29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAiRXJyb3I6IERPTSBoYW5kbGVy
IGlzIG5vdCBhdmFpbGFibGUuIik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGxvbmcgb3V0
Tm9kZUlkOwogICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5kb21BZ2VudCgpLT5yZW1vdmVOb2Rl
KGNhbGxJZCwgbm9kZUlkLCAmb3V0Tm9kZUlkKTsKCiAgICBpZiAobV9pbnNwZWN0b3JDb250cm9s
bGVyLT5pbnNwZWN0b3JDbGllbnQoKSkgewogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4g
YXJndW1lbnRzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwogICAgICAgIGFyZ3VtZW50cy0+
cHVzaFN0cmluZygiZGlkUmVtb3ZlTm9kZSIpOwogICAgICAgIGFyZ3VtZW50cy0+cHVzaE51bWJl
cihjYWxsSWQpOwogICAgICAgIGFyZ3VtZW50cy0+cHVzaE51bWJlcihvdXROb2RlSWQpOwogICAg
ICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdG9yQ2xpZW50KCktPnNlbmRNZXNzYWdl
VG9Gcm9udGVuZChhcmd1bWVudHMtPnRvSlNPTlN0cmluZygpKTsKICAgIH0KfQoKdm9pZCBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Y2hhbmdlVGFnTmFtZShQYXNzUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiBhcmdzKQp7CiAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgYmFja2VuZEZ1
bmN0aW9uTmFtZSwgKCJjaGFuZ2VUYWdOYW1lIikpOwogICAgbG9uZyBjYWxsSWQgPSAwOwoKICAg
IGlmIChhcmdzLT5sZW5ndGgoKSAhPSA0KSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUs
IGZvcm1hdFdyb25nQXJndW1lbnRzQ291bnRNZXNzYWdlKGFyZ3MtPmxlbmd0aCgpIC0gMSwgMykp
OwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoIWFyZ3MtPmdldCgxKS0+YXNOdW1iZXIo
JmNhbGxJZCkpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICByZXBvcnRQ
cm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1
bWVudFR5cGVNZXNzYWdlKDEsICJjYWxsSWQiLCAibG9uZyIpKTsKICAgICAgICByZXR1cm47CiAg
ICB9CgogICAgbG9uZyBub2RlSWQ7CiAgICBpZiAoIWFyZ3MtPmdldCgyKS0+YXNOdW1iZXIoJm5v
ZGVJZCkpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICByZXBvcnRQcm90
b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVu
dFR5cGVNZXNzYWdlKDIsICJub2RlSWQiLCAibG9uZyIpKTsKICAgICAgICByZXR1cm47CiAgICB9
CgogICAgU3RyaW5nIG5ld1RhZ05hbWU7CiAgICBpZiAoIWFyZ3MtPmdldCgzKS0+YXNTdHJpbmco
Jm5ld1RhZ05hbWUpKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcmVw
b3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25n
QXJndW1lbnRUeXBlTWVzc2FnZSgzLCAibmV3VGFnTmFtZSIsICJTdHJpbmciKSk7CiAgICAgICAg
cmV0dXJuOwogICAgfQoKICAgIGlmICghbV9pbnNwZWN0b3JDb250cm9sbGVyLT5kb21BZ2VudCgp
KSB7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5h
bWUsICJFcnJvcjogRE9NIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKICAgICAgICByZXR1
cm47CiAgICB9CgogICAgbG9uZyBvdXROb2RlSWQ7CiAgICBtX2luc3BlY3RvckNvbnRyb2xsZXIt
PmRvbUFnZW50KCktPmNoYW5nZVRhZ05hbWUoY2FsbElkLCBub2RlSWQsIG5ld1RhZ05hbWUsICZv
dXROb2RlSWQpOwoKICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RvckNsaWVu
dCgpKSB7CiAgICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcmd1bWVudHMgPSBJbnNwZWN0
b3JBcnJheTo6Y3JlYXRlKCk7CiAgICAgICAgYXJndW1lbnRzLT5wdXNoU3RyaW5nKCJkaWRDaGFu
Z2VUYWdOYW1lIik7CiAgICAgICAgYXJndW1lbnRzLT5wdXNoTnVtYmVyKGNhbGxJZCk7CiAgICAg
ICAgYXJndW1lbnRzLT5wdXNoTnVtYmVyKG91dE5vZGVJZCk7CiAgICAgICAgbV9pbnNwZWN0b3JD
b250cm9sbGVyLT5pbnNwZWN0b3JDbGllbnQoKS0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGFyZ3Vt
ZW50cy0+dG9KU09OU3RyaW5nKCkpOwogICAgfQp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyOjpnZXRPdXRlckhUTUwoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJncykKewog
ICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICgiZ2V0
T3V0ZXJIVE1MIikpOwogICAgbG9uZyBjYWxsSWQgPSAwOwoKICAgIGlmIChhcmdzLT5sZW5ndGgo
KSAhPSAzKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcmVwb3J0UHJv
dG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1l
bnRzQ291bnRNZXNzYWdlKGFyZ3MtPmxlbmd0aCgpIC0gMSwgMikpOwogICAgICAgIHJldHVybjsK
ICAgIH0KCiAgICBpZiAoIWFyZ3MtPmdldCgxKS0+YXNOdW1iZXIoJmNhbGxJZCkpIHsKICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJ
ZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudFR5cGVNZXNzYWdlKDEs
ICJjYWxsSWQiLCAibG9uZyIpKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgbG9uZyBub2Rl
SWQ7CiAgICBpZiAoIWFyZ3MtPmdldCgyKS0+YXNOdW1iZXIoJm5vZGVJZCkpIHsKICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwg
YmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudFR5cGVNZXNzYWdlKDIsICJu
b2RlSWQiLCAibG9uZyIpKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKCFtX2luc3Bl
Y3RvckNvbnRyb2xsZXItPmRvbUFnZW50KCkpIHsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9y
KGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgIkVycm9yOiBET00gaGFuZGxlciBpcyBub3Qg
YXZhaWxhYmxlLiIpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBTdHJpbmcgb3V0ZXJIVE1M
OwogICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5kb21BZ2VudCgpLT5nZXRPdXRlckhUTUwoY2Fs
bElkLCBub2RlSWQsICZvdXRlckhUTUwpOwoKICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXIt
Pmluc3BlY3RvckNsaWVudCgpKSB7CiAgICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcmd1
bWVudHMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CiAgICAgICAgYXJndW1lbnRzLT5wdXNo
U3RyaW5nKCJkaWRHZXRPdXRlckhUTUwiKTsKICAgICAgICBhcmd1bWVudHMtPnB1c2hOdW1iZXIo
Y2FsbElkKTsKICAgICAgICBhcmd1bWVudHMtPnB1c2hTdHJpbmcob3V0ZXJIVE1MKTsKICAgICAg
ICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RvckNsaWVudCgpLT5zZW5kTWVzc2FnZVRv
RnJvbnRlbmQoYXJndW1lbnRzLT50b0pTT05TdHJpbmcoKSk7CiAgICB9Cn0KCnZvaWQgSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXI6OnNldE91dGVySFRNTChQYXNzUmVmUHRyPEluc3BlY3RvckFy
cmF5PiBhcmdzKQp7CiAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgYmFja2VuZEZ1bmN0
aW9uTmFtZSwgKCJzZXRPdXRlckhUTUwiKSk7CiAgICBsb25nIGNhbGxJZCA9IDA7CgogICAgaWYg
KGFyZ3MtPmxlbmd0aCgpICE9IDQpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9y
bWF0V3JvbmdBcmd1bWVudHNDb3VudE1lc3NhZ2UoYXJncy0+bGVuZ3RoKCkgLSAxLCAzKSk7CiAg
ICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmICghYXJncy0+Z2V0KDEpLT5hc051bWJlcigmY2Fs
bElkKSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHJlcG9ydFByb3Rv
Y29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50
VHlwZU1lc3NhZ2UoMSwgImNhbGxJZCIsICJsb25nIikpOwogICAgICAgIHJldHVybjsKICAgIH0K
CiAgICBsb25nIG5vZGVJZDsKICAgIGlmICghYXJncy0+Z2V0KDIpLT5hc051bWJlcigmbm9kZUlk
KSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHJlcG9ydFByb3RvY29s
RXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50VHlw
ZU1lc3NhZ2UoMiwgIm5vZGVJZCIsICJsb25nIikpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAg
ICBTdHJpbmcgb3V0ZXJIVE1MOwogICAgaWYgKCFhcmdzLT5nZXQoMyktPmFzU3RyaW5nKCZvdXRl
ckhUTUwpKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcmVwb3J0UHJv
dG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1l
bnRUeXBlTWVzc2FnZSgzLCAib3V0ZXJIVE1MIiwgIlN0cmluZyIpKTsKICAgICAgICByZXR1cm47
CiAgICB9CgogICAgaWYgKCFtX2luc3BlY3RvckNvbnRyb2xsZXItPmRvbUFnZW50KCkpIHsKICAg
ICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgIkVy
cm9yOiBET00gaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwogICAgICAgIHJldHVybjsKICAg
IH0KCiAgICBsb25nIG91dE5vZGVJZDsKICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+ZG9tQWdl
bnQoKS0+c2V0T3V0ZXJIVE1MKGNhbGxJZCwgbm9kZUlkLCBvdXRlckhUTUwsICZvdXROb2RlSWQp
OwoKICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RvckNsaWVudCgpKSB7CiAg
ICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcmd1bWVudHMgPSBJbnNwZWN0b3JBcnJheTo6
Y3JlYXRlKCk7CiAgICAgICAgYXJndW1lbnRzLT5wdXNoU3RyaW5nKCJkaWRTZXRPdXRlckhUTUwi
KTsKICAgICAgICBhcmd1bWVudHMtPnB1c2hOdW1iZXIoY2FsbElkKTsKICAgICAgICBhcmd1bWVu
dHMtPnB1c2hOdW1iZXIob3V0Tm9kZUlkKTsKICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXIt
Pmluc3BlY3RvckNsaWVudCgpLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoYXJndW1lbnRzLT50b0pT
T05TdHJpbmcoKSk7CiAgICB9Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmFk
ZEluc3BlY3RlZE5vZGUoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJncykKewogICAgREVG
SU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICgiYWRkSW5zcGVj
dGVkTm9kZSIpKTsKICAgIGxvbmcgY2FsbElkID0gMDsKCiAgICBpZiAoYXJncy0+bGVuZ3RoKCkg
IT0gMikgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHJlcG9ydFByb3Rv
Y29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50
c0NvdW50TWVzc2FnZShhcmdzLT5sZW5ndGgoKSAtIDEsIDEpKTsKICAgICAgICByZXR1cm47CiAg
ICB9CgogICAgbG9uZyBub2RlSWQ7CiAgICBpZiAoIWFyZ3MtPmdldCgxKS0+YXNOdW1iZXIoJm5v
ZGVJZCkpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICByZXBvcnRQcm90
b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVu
dFR5cGVNZXNzYWdlKDEsICJub2RlSWQiLCAibG9uZyIpKTsKICAgICAgICByZXR1cm47CiAgICB9
CgogICAgaWYgKCFtX2luc3BlY3RvckNvbnRyb2xsZXItPmRvbUFnZW50KCkpIHsKICAgICAgICBy
ZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgIkVycm9yOiBE
T00gaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAg
ICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmRvbUFnZW50KCktPmFkZEluc3BlY3RlZE5vZGUobm9k
ZUlkKTsKCn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnBlcmZvcm1TZWFyY2go
UGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJncykKewogICAgREVGSU5FX1NUQVRJQ19MT0NB
TChTdHJpbmcsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICgicGVyZm9ybVNlYXJjaCIpKTsKICAgIGxv
bmcgY2FsbElkID0gMDsKCiAgICBpZiAoYXJncy0+bGVuZ3RoKCkgIT0gMykgewogICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBi
YWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50c0NvdW50TWVzc2FnZShhcmdz
LT5sZW5ndGgoKSAtIDEsIDIpKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgU3RyaW5nIHF1
ZXJ5OwogICAgaWYgKCFhcmdzLT5nZXQoMSktPmFzU3RyaW5nKCZxdWVyeSkpIHsKICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwg
YmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudFR5cGVNZXNzYWdlKDEsICJx
dWVyeSIsICJTdHJpbmciKSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGJvb2wgcnVuU3lu
Y2hyb25vdXNseTsKICAgIGlmICghYXJncy0+Z2V0KDIpLT5hc0Jvb2woJnJ1blN5bmNocm9ub3Vz
bHkpKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcmVwb3J0UHJvdG9j
b2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRU
eXBlTWVzc2FnZSgyLCAicnVuU3luY2hyb25vdXNseSIsICJib29sZWFuIikpOwogICAgICAgIHJl
dHVybjsKICAgIH0KCiAgICBpZiAoIW1faW5zcGVjdG9yQ29udHJvbGxlci0+ZG9tQWdlbnQoKSkg
ewogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1l
LCAiRXJyb3I6IERPTSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CiAgICAgICAgcmV0dXJu
OwogICAgfQoKICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+ZG9tQWdlbnQoKS0+cGVyZm9ybVNl
YXJjaChxdWVyeSwgcnVuU3luY2hyb25vdXNseSk7Cgp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyOjpzZWFyY2hDYW5jZWxlZChQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcmdz
KQp7CiAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgYmFja2VuZEZ1bmN0aW9uTmFtZSwg
KCJzZWFyY2hDYW5jZWxlZCIpKTsKICAgIGxvbmcgY2FsbElkID0gMDsKCiAgICBpZiAoYXJncy0+
bGVuZ3RoKCkgIT0gMSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHJl
cG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9u
Z0FyZ3VtZW50c0NvdW50TWVzc2FnZShhcmdzLT5sZW5ndGgoKSAtIDEsIDApKTsKICAgICAgICBy
ZXR1cm47CiAgICB9CgogICAgaWYgKCFtX2luc3BlY3RvckNvbnRyb2xsZXItPmRvbUFnZW50KCkp
IHsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFt
ZSwgIkVycm9yOiBET00gaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwogICAgICAgIHJldHVy
bjsKICAgIH0KCiAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmRvbUFnZW50KCktPnNlYXJjaENh
bmNlbGVkKCk7Cgp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpwdXNoTm9kZUJ5
UGF0aFRvRnJvbnRlbmQoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJncykKewogICAgREVG
SU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICgicHVzaE5vZGVC
eVBhdGhUb0Zyb250ZW5kIikpOwogICAgbG9uZyBjYWxsSWQgPSAwOwoKICAgIGlmIChhcmdzLT5s
ZW5ndGgoKSAhPSAzKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcmVw
b3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25n
QXJndW1lbnRzQ291bnRNZXNzYWdlKGFyZ3MtPmxlbmd0aCgpIC0gMSwgMikpOwogICAgICAgIHJl
dHVybjsKICAgIH0KCiAgICBpZiAoIWFyZ3MtPmdldCgxKS0+YXNOdW1iZXIoJmNhbGxJZCkpIHsK
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9y
KGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudFR5cGVNZXNz
YWdlKDEsICJjYWxsSWQiLCAibG9uZyIpKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgU3Ry
aW5nIHBhdGg7CiAgICBpZiAoIWFyZ3MtPmdldCgyKS0+YXNTdHJpbmcoJnBhdGgpKSB7CiAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxs
SWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRUeXBlTWVzc2FnZSgy
LCAicGF0aCIsICJTdHJpbmciKSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmICghbV9p
bnNwZWN0b3JDb250cm9sbGVyLT5kb21BZ2VudCgpKSB7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xF
cnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICJFcnJvcjogRE9NIGhhbmRsZXIgaXMg
bm90IGF2YWlsYWJsZS4iKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgbG9uZyBub2RlSWQ7
CiAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmRvbUFnZW50KCktPnB1c2hOb2RlQnlQYXRoVG9G
cm9udGVuZChjYWxsSWQsIHBhdGgsICZub2RlSWQpOwoKICAgIGlmIChtX2luc3BlY3RvckNvbnRy
b2xsZXItPmluc3BlY3RvckNsaWVudCgpKSB7CiAgICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5
PiBhcmd1bWVudHMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CiAgICAgICAgYXJndW1lbnRz
LT5wdXNoU3RyaW5nKCJkaWRQdXNoTm9kZUJ5UGF0aFRvRnJvbnRlbmQiKTsKICAgICAgICBhcmd1
bWVudHMtPnB1c2hOdW1iZXIoY2FsbElkKTsKICAgICAgICBhcmd1bWVudHMtPnB1c2hOdW1iZXIo
bm9kZUlkKTsKICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RvckNsaWVudCgp
LT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoYXJndW1lbnRzLT50b0pTT05TdHJpbmcoKSk7CiAgICB9
Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmNsZWFyQ29uc29sZU1lc3NhZ2Vz
KFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3MpCnsKICAgIERFRklORV9TVEFUSUNfTE9D
QUwoU3RyaW5nLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAoImNsZWFyQ29uc29sZU1lc3NhZ2VzIikp
OwogICAgbG9uZyBjYWxsSWQgPSAwOwoKICAgIGlmIChhcmdzLT5sZW5ndGgoKSAhPSAyKSB7CiAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihj
YWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRzQ291bnRNZXNz
YWdlKGFyZ3MtPmxlbmd0aCgpIC0gMSwgMSkpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBp
ZiAoIWFyZ3MtPmdldCgxKS0+YXNOdW1iZXIoJmNhbGxJZCkpIHsKICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1
bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudFR5cGVNZXNzYWdlKDEsICJjYWxsSWQiLCAi
bG9uZyIpKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKCFtX2luc3BlY3RvckNvbnRy
b2xsZXItPmluc3BlY3RvckJhY2tlbmQoKSkgewogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3Io
Y2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAiRXJyb3I6IEJhY2tlbmQgaGFuZGxlciBpcyBu
b3QgYXZhaWxhYmxlLiIpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBtX2luc3BlY3RvckNv
bnRyb2xsZXItPmluc3BlY3RvckJhY2tlbmQoKS0+Y2xlYXJDb25zb2xlTWVzc2FnZXMoY2FsbElk
KTsKCn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmhpZ2hsaWdodERPTU5vZGUo
UGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJncykKewogICAgREVGSU5FX1NUQVRJQ19MT0NB
TChTdHJpbmcsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICgiaGlnaGxpZ2h0RE9NTm9kZSIpKTsKICAg
IGxvbmcgY2FsbElkID0gMDsKCiAgICBpZiAoYXJncy0+bGVuZ3RoKCkgIT0gMikgewogICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElk
LCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50c0NvdW50TWVzc2FnZShh
cmdzLT5sZW5ndGgoKSAtIDEsIDEpKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgbG9uZyBu
b2RlSWQ7CiAgICBpZiAoIWFyZ3MtPmdldCgxKS0+YXNOdW1iZXIoJm5vZGVJZCkpIHsKICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJ
ZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudFR5cGVNZXNzYWdlKDEs
ICJub2RlSWQiLCAibG9uZyIpKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKCFtX2lu
c3BlY3RvckNvbnRyb2xsZXIpIHsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwg
YmFja2VuZEZ1bmN0aW9uTmFtZSwgIkVycm9yOiBDb250cm9sbGVyIGhhbmRsZXIgaXMgbm90IGF2
YWlsYWJsZS4iKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgbV9pbnNwZWN0b3JDb250cm9s
bGVyLT5oaWdobGlnaHRET01Ob2RlKG5vZGVJZCk7Cgp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyOjpoaWRlRE9NTm9kZUhpZ2hsaWdodChQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5
PiBhcmdzKQp7CiAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgYmFja2VuZEZ1bmN0aW9u
TmFtZSwgKCJoaWRlRE9NTm9kZUhpZ2hsaWdodCIpKTsKICAgIGxvbmcgY2FsbElkID0gMDsKCiAg
ICBpZiAoYXJncy0+bGVuZ3RoKCkgIT0gMSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1l
LCBmb3JtYXRXcm9uZ0FyZ3VtZW50c0NvdW50TWVzc2FnZShhcmdzLT5sZW5ndGgoKSAtIDEsIDAp
KTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKCFtX2luc3BlY3RvckNvbnRyb2xsZXIp
IHsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFt
ZSwgIkVycm9yOiBDb250cm9sbGVyIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKICAgICAg
ICByZXR1cm47CiAgICB9CgogICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5oaWRlRE9NTm9kZUhp
Z2hsaWdodCgpOwoKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3R5bGVz
KFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3MpCnsKICAgIERFRklORV9TVEFUSUNfTE9D
QUwoU3RyaW5nLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAoImdldFN0eWxlcyIpKTsKICAgIGxvbmcg
Y2FsbElkID0gMDsKCiAgICBpZiAoYXJncy0+bGVuZ3RoKCkgIT0gNCkgewogICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNr
ZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50c0NvdW50TWVzc2FnZShhcmdzLT5s
ZW5ndGgoKSAtIDEsIDMpKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKCFhcmdzLT5n
ZXQoMSktPmFzTnVtYmVyKCZjYWxsSWQpKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUs
IGZvcm1hdFdyb25nQXJndW1lbnRUeXBlTWVzc2FnZSgxLCAiY2FsbElkIiwgImxvbmciKSk7CiAg
ICAgICAgcmV0dXJuOwogICAgfQoKICAgIGxvbmcgbm9kZUlkOwogICAgaWYgKCFhcmdzLT5nZXQo
MiktPmFzTnVtYmVyKCZub2RlSWQpKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZv
cm1hdFdyb25nQXJndW1lbnRUeXBlTWVzc2FnZSgyLCAibm9kZUlkIiwgImxvbmciKSk7CiAgICAg
ICAgcmV0dXJuOwogICAgfQoKICAgIGJvb2wgYXV0aE9ubHk7CiAgICBpZiAoIWFyZ3MtPmdldCgz
KS0+YXNCb29sKCZhdXRoT25seSkpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9y
bWF0V3JvbmdBcmd1bWVudFR5cGVNZXNzYWdlKDMsICJhdXRoT25seSIsICJib29sZWFuIikpOwog
ICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoIW1faW5zcGVjdG9yQ29udHJvbGxlci0+ZG9t
QWdlbnQoKSkgewogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVu
Y3Rpb25OYW1lLCAiRXJyb3I6IERPTSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CiAgICAg
ICAgcmV0dXJuOwogICAgfQoKICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gc3R5bGVzID0gSW5z
cGVjdG9yVmFsdWU6Om51bGwoKTsKICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+ZG9tQWdlbnQo
KS0+Z2V0U3R5bGVzKGNhbGxJZCwgbm9kZUlkLCBhdXRoT25seSwgJnN0eWxlcyk7CgogICAgaWYg
KG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdG9yQ2xpZW50KCkpIHsKICAgICAgICBSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3VtZW50cyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsK
ICAgICAgICBhcmd1bWVudHMtPnB1c2hTdHJpbmcoImRpZEdldFN0eWxlcyIpOwogICAgICAgIGFy
Z3VtZW50cy0+cHVzaE51bWJlcihjYWxsSWQpOwogICAgICAgIGFyZ3VtZW50cy0+cHVzaChzdHls
ZXMpOwogICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdG9yQ2xpZW50KCktPnNl
bmRNZXNzYWdlVG9Gcm9udGVuZChhcmd1bWVudHMtPnRvSlNPTlN0cmluZygpKTsKICAgIH0KfQoK
dm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0QWxsU3R5bGVzKFBhc3NSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+IGFyZ3MpCnsKICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBi
YWNrZW5kRnVuY3Rpb25OYW1lLCAoImdldEFsbFN0eWxlcyIpKTsKICAgIGxvbmcgY2FsbElkID0g
MDsKCiAgICBpZiAoYXJncy0+bGVuZ3RoKCkgIT0gMikgewogICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rp
b25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50c0NvdW50TWVzc2FnZShhcmdzLT5sZW5ndGgoKSAt
IDEsIDEpKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKCFhcmdzLT5nZXQoMSktPmFz
TnVtYmVyKCZjYWxsSWQpKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAg
cmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdy
b25nQXJndW1lbnRUeXBlTWVzc2FnZSgxLCAiY2FsbElkIiwgImxvbmciKSk7CiAgICAgICAgcmV0
dXJuOwogICAgfQoKICAgIGlmICghbV9pbnNwZWN0b3JDb250cm9sbGVyLT5kb21BZ2VudCgpKSB7
CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUs
ICJFcnJvcjogRE9NIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKICAgICAgICByZXR1cm47
CiAgICB9CgogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBzdHlsZXMgPSBJbnNwZWN0b3JBcnJh
eTo6Y3JlYXRlKCk7CiAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmRvbUFnZW50KCktPmdldEFs
bFN0eWxlcyhjYWxsSWQsICZzdHlsZXMpOwoKICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXIt
Pmluc3BlY3RvckNsaWVudCgpKSB7CiAgICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcmd1
bWVudHMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CiAgICAgICAgYXJndW1lbnRzLT5wdXNo
U3RyaW5nKCJkaWRHZXRBbGxTdHlsZXMiKTsKICAgICAgICBhcmd1bWVudHMtPnB1c2hOdW1iZXIo
Y2FsbElkKTsKICAgICAgICBhcmd1bWVudHMtPnB1c2goc3R5bGVzKTsKICAgICAgICBtX2luc3Bl
Y3RvckNvbnRyb2xsZXItPmluc3BlY3RvckNsaWVudCgpLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQo
YXJndW1lbnRzLT50b0pTT05TdHJpbmcoKSk7CiAgICB9Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXI6OmdldElubGluZVN0eWxlKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFy
Z3MpCnsKICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBiYWNrZW5kRnVuY3Rpb25OYW1l
LCAoImdldElubGluZVN0eWxlIikpOwogICAgbG9uZyBjYWxsSWQgPSAwOwoKICAgIGlmIChhcmdz
LT5sZW5ndGgoKSAhPSAzKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAg
cmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdy
b25nQXJndW1lbnRzQ291bnRNZXNzYWdlKGFyZ3MtPmxlbmd0aCgpIC0gMSwgMikpOwogICAgICAg
IHJldHVybjsKICAgIH0KCiAgICBpZiAoIWFyZ3MtPmdldCgxKS0+YXNOdW1iZXIoJmNhbGxJZCkp
IHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICByZXBvcnRQcm90b2NvbEVy
cm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudFR5cGVN
ZXNzYWdlKDEsICJjYWxsSWQiLCAibG9uZyIpKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAg
bG9uZyBub2RlSWQ7CiAgICBpZiAoIWFyZ3MtPmdldCgyKS0+YXNOdW1iZXIoJm5vZGVJZCkpIHsK
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9y
KGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudFR5cGVNZXNz
YWdlKDIsICJub2RlSWQiLCAibG9uZyIpKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYg
KCFtX2luc3BlY3RvckNvbnRyb2xsZXItPmRvbUFnZW50KCkpIHsKICAgICAgICByZXBvcnRQcm90
b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgIkVycm9yOiBET00gaGFuZGxl
ciBpcyBub3QgYXZhaWxhYmxlLiIpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBSZWZQdHI8
SW5zcGVjdG9yVmFsdWU+IHN0eWxlID0gSW5zcGVjdG9yVmFsdWU6Om51bGwoKTsKICAgIG1faW5z
cGVjdG9yQ29udHJvbGxlci0+ZG9tQWdlbnQoKS0+Z2V0SW5saW5lU3R5bGUoY2FsbElkLCBub2Rl
SWQsICZzdHlsZSk7CgogICAgaWYgKG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdG9yQ2xp
ZW50KCkpIHsKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3VtZW50cyA9IEluc3Bl
Y3RvckFycmF5OjpjcmVhdGUoKTsKICAgICAgICBhcmd1bWVudHMtPnB1c2hTdHJpbmcoImRpZEdl
dElubGluZVN0eWxlIik7CiAgICAgICAgYXJndW1lbnRzLT5wdXNoTnVtYmVyKGNhbGxJZCk7CiAg
ICAgICAgYXJndW1lbnRzLT5wdXNoKHN0eWxlKTsKICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xs
ZXItPmluc3BlY3RvckNsaWVudCgpLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoYXJndW1lbnRzLT50
b0pTT05TdHJpbmcoKSk7CiAgICB9Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6
OmdldENvbXB1dGVkU3R5bGUoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJncykKewogICAg
REVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICgiZ2V0Q29t
cHV0ZWRTdHlsZSIpKTsKICAgIGxvbmcgY2FsbElkID0gMDsKCiAgICBpZiAoYXJncy0+bGVuZ3Ro
KCkgIT0gMykgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHJlcG9ydFBy
b3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3Vt
ZW50c0NvdW50TWVzc2FnZShhcmdzLT5sZW5ndGgoKSAtIDEsIDIpKTsKICAgICAgICByZXR1cm47
CiAgICB9CgogICAgaWYgKCFhcmdzLT5nZXQoMSktPmFzTnVtYmVyKCZjYWxsSWQpKSB7CiAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxs
SWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRUeXBlTWVzc2FnZSgx
LCAiY2FsbElkIiwgImxvbmciKSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGxvbmcgbm9k
ZUlkOwogICAgaWYgKCFhcmdzLT5nZXQoMiktPmFzTnVtYmVyKCZub2RlSWQpKSB7CiAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQs
IGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRUeXBlTWVzc2FnZSgyLCAi
bm9kZUlkIiwgImxvbmciKSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmICghbV9pbnNw
ZWN0b3JDb250cm9sbGVyLT5kb21BZ2VudCgpKSB7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJv
cihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICJFcnJvcjogRE9NIGhhbmRsZXIgaXMgbm90
IGF2YWlsYWJsZS4iKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgUmVmUHRyPEluc3BlY3Rv
clZhbHVlPiBzdHlsZSA9IEluc3BlY3RvclZhbHVlOjpudWxsKCk7CiAgICBtX2luc3BlY3RvckNv
bnRyb2xsZXItPmRvbUFnZW50KCktPmdldENvbXB1dGVkU3R5bGUoY2FsbElkLCBub2RlSWQsICZz
dHlsZSk7CgogICAgaWYgKG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdG9yQ2xpZW50KCkp
IHsKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3VtZW50cyA9IEluc3BlY3RvckFy
cmF5OjpjcmVhdGUoKTsKICAgICAgICBhcmd1bWVudHMtPnB1c2hTdHJpbmcoImRpZEdldENvbXB1
dGVkU3R5bGUiKTsKICAgICAgICBhcmd1bWVudHMtPnB1c2hOdW1iZXIoY2FsbElkKTsKICAgICAg
ICBhcmd1bWVudHMtPnB1c2goc3R5bGUpOwogICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+
aW5zcGVjdG9yQ2xpZW50KCktPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChhcmd1bWVudHMtPnRvSlNP
TlN0cmluZygpKTsKICAgIH0KfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0
U3R5bGVTaGVldChQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcmdzKQp7CiAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKFN0cmluZywgYmFja2VuZEZ1bmN0aW9uTmFtZSwgKCJnZXRTdHlsZVNoZWV0
IikpOwogICAgbG9uZyBjYWxsSWQgPSAwOwoKICAgIGlmIChhcmdzLT5sZW5ndGgoKSAhPSAzKSB7
CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJv
cihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRzQ291bnRN
ZXNzYWdlKGFyZ3MtPmxlbmd0aCgpIC0gMSwgMikpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAg
ICBpZiAoIWFyZ3MtPmdldCgxKS0+YXNOdW1iZXIoJmNhbGxJZCkpIHsKICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2Vu
ZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudFR5cGVNZXNzYWdlKDEsICJjYWxsSWQi
LCAibG9uZyIpKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgbG9uZyBzdHlsZVNoZWV0SWQ7
CiAgICBpZiAoIWFyZ3MtPmdldCgyKS0+YXNOdW1iZXIoJnN0eWxlU2hlZXRJZCkpIHsKICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJ
ZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudFR5cGVNZXNzYWdlKDIs
ICJzdHlsZVNoZWV0SWQiLCAibG9uZyIpKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYg
KCFtX2luc3BlY3RvckNvbnRyb2xsZXItPmRvbUFnZW50KCkpIHsKICAgICAgICByZXBvcnRQcm90
b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgIkVycm9yOiBET00gaGFuZGxl
ciBpcyBub3QgYXZhaWxhYmxlLiIpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBzdHlsZVNoZWV0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
ICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+ZG9tQWdlbnQoKS0+Z2V0U3R5bGVTaGVldChjYWxs
SWQsIHN0eWxlU2hlZXRJZCwgJnN0eWxlU2hlZXQpOwoKICAgIGlmIChtX2luc3BlY3RvckNvbnRy
b2xsZXItPmluc3BlY3RvckNsaWVudCgpKSB7CiAgICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5
PiBhcmd1bWVudHMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CiAgICAgICAgYXJndW1lbnRz
LT5wdXNoU3RyaW5nKCJkaWRHZXRTdHlsZVNoZWV0Iik7CiAgICAgICAgYXJndW1lbnRzLT5wdXNo
TnVtYmVyKGNhbGxJZCk7CiAgICAgICAgYXJndW1lbnRzLT5wdXNoKHN0eWxlU2hlZXQpOwogICAg
ICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdG9yQ2xpZW50KCktPnNlbmRNZXNzYWdl
VG9Gcm9udGVuZChhcmd1bWVudHMtPnRvSlNPTlN0cmluZygpKTsKICAgIH0KfQoKdm9pZCBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0UnVsZVJhbmdlcyhQYXNzUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiBhcmdzKQp7CiAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgYmFja2VuZEZ1
bmN0aW9uTmFtZSwgKCJnZXRSdWxlUmFuZ2VzIikpOwogICAgbG9uZyBjYWxsSWQgPSAwOwoKICAg
IGlmIChhcmdzLT5sZW5ndGgoKSAhPSAzKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUs
IGZvcm1hdFdyb25nQXJndW1lbnRzQ291bnRNZXNzYWdlKGFyZ3MtPmxlbmd0aCgpIC0gMSwgMikp
OwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoIWFyZ3MtPmdldCgxKS0+YXNOdW1iZXIo
JmNhbGxJZCkpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICByZXBvcnRQ
cm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1
bWVudFR5cGVNZXNzYWdlKDEsICJjYWxsSWQiLCAibG9uZyIpKTsKICAgICAgICByZXR1cm47CiAg
ICB9CgogICAgbG9uZyBzdHlsZVNoZWV0SWQ7CiAgICBpZiAoIWFyZ3MtPmdldCgyKS0+YXNOdW1i
ZXIoJnN0eWxlU2hlZXRJZCkpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0
V3JvbmdBcmd1bWVudFR5cGVNZXNzYWdlKDIsICJzdHlsZVNoZWV0SWQiLCAibG9uZyIpKTsKICAg
ICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKCFtX2luc3BlY3RvckNvbnRyb2xsZXItPmRvbUFn
ZW50KCkpIHsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0
aW9uTmFtZSwgIkVycm9yOiBET00gaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwogICAgICAg
IHJldHVybjsKICAgIH0KCiAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHJhbmdlcyA9IEluc3Bl
Y3RvclZhbHVlOjpudWxsKCk7CiAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmRvbUFnZW50KCkt
PmdldFJ1bGVSYW5nZXMoY2FsbElkLCBzdHlsZVNoZWV0SWQsICZyYW5nZXMpOwoKICAgIGlmICht
X2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RvckNsaWVudCgpKSB7CiAgICAgICAgUmVmUHRy
PEluc3BlY3RvckFycmF5PiBhcmd1bWVudHMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CiAg
ICAgICAgYXJndW1lbnRzLT5wdXNoU3RyaW5nKCJkaWRHZXRSdWxlUmFuZ2VzIik7CiAgICAgICAg
YXJndW1lbnRzLT5wdXNoTnVtYmVyKGNhbGxJZCk7CiAgICAgICAgYXJndW1lbnRzLT5wdXNoKHJh
bmdlcyk7CiAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0b3JDbGllbnQoKS0+
c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGFyZ3VtZW50cy0+dG9KU09OU3RyaW5nKCkpOwogICAgfQp9
Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjphcHBseVN0eWxlVGV4dChQYXNzUmVm
UHRyPEluc3BlY3RvckFycmF5PiBhcmdzKQp7CiAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmlu
ZywgYmFja2VuZEZ1bmN0aW9uTmFtZSwgKCJhcHBseVN0eWxlVGV4dCIpKTsKICAgIGxvbmcgY2Fs
bElkID0gMDsKCiAgICBpZiAoYXJncy0+bGVuZ3RoKCkgIT0gNSkgewogICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5k
RnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50c0NvdW50TWVzc2FnZShhcmdzLT5sZW5n
dGgoKSAtIDEsIDQpKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKCFhcmdzLT5nZXQo
MSktPmFzTnVtYmVyKCZjYWxsSWQpKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZv
cm1hdFdyb25nQXJndW1lbnRUeXBlTWVzc2FnZSgxLCAiY2FsbElkIiwgImxvbmciKSk7CiAgICAg
ICAgcmV0dXJuOwogICAgfQoKICAgIGxvbmcgc3R5bGVJZDsKICAgIGlmICghYXJncy0+Z2V0KDIp
LT5hc051bWJlcigmc3R5bGVJZCkpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9y
bWF0V3JvbmdBcmd1bWVudFR5cGVNZXNzYWdlKDIsICJzdHlsZUlkIiwgImxvbmciKSk7CiAgICAg
ICAgcmV0dXJuOwogICAgfQoKICAgIFN0cmluZyBzdHlsZVRleHQ7CiAgICBpZiAoIWFyZ3MtPmdl
dCgzKS0+YXNTdHJpbmcoJnN0eWxlVGV4dCkpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFt
ZSwgZm9ybWF0V3JvbmdBcmd1bWVudFR5cGVNZXNzYWdlKDMsICJzdHlsZVRleHQiLCAiU3RyaW5n
IikpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBTdHJpbmcgcHJvcGVydHlOYW1lOwogICAg
aWYgKCFhcmdzLT5nZXQoNCktPmFzU3RyaW5nKCZwcm9wZXJ0eU5hbWUpKSB7CiAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIGJh
Y2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRUeXBlTWVzc2FnZSg0LCAicHJv
cGVydHlOYW1lIiwgIlN0cmluZyIpKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKCFt
X2luc3BlY3RvckNvbnRyb2xsZXItPmRvbUFnZW50KCkpIHsKICAgICAgICByZXBvcnRQcm90b2Nv
bEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgIkVycm9yOiBET00gaGFuZGxlciBp
cyBub3QgYXZhaWxhYmxlLiIpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBib29sIHN1Y2Nl
c3MgPSBmYWxzZTsKICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gc3R5bGUgPSBJbnNwZWN0b3JW
YWx1ZTo6bnVsbCgpOwogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBjaGFuZ2VkUHJvcGVydGll
cyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+
ZG9tQWdlbnQoKS0+YXBwbHlTdHlsZVRleHQoY2FsbElkLCBzdHlsZUlkLCBzdHlsZVRleHQsIHBy
b3BlcnR5TmFtZSwgJnN1Y2Nlc3MsICZzdHlsZSwgJmNoYW5nZWRQcm9wZXJ0aWVzKTsKCiAgICBp
ZiAobV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0b3JDbGllbnQoKSkgewogICAgICAgIFJl
ZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJndW1lbnRzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgp
OwogICAgICAgIGFyZ3VtZW50cy0+cHVzaFN0cmluZygiZGlkQXBwbHlTdHlsZVRleHQiKTsKICAg
ICAgICBhcmd1bWVudHMtPnB1c2hOdW1iZXIoY2FsbElkKTsKICAgICAgICBhcmd1bWVudHMtPnB1
c2hCb29sKHN1Y2Nlc3MpOwogICAgICAgIGFyZ3VtZW50cy0+cHVzaChzdHlsZSk7CiAgICAgICAg
YXJndW1lbnRzLT5wdXNoKGNoYW5nZWRQcm9wZXJ0aWVzKTsKICAgICAgICBtX2luc3BlY3RvckNv
bnRyb2xsZXItPmluc3BlY3RvckNsaWVudCgpLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoYXJndW1l
bnRzLT50b0pTT05TdHJpbmcoKSk7CiAgICB9Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXI6OnNldFN0eWxlVGV4dChQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcmdzKQp7CiAg
ICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgYmFja2VuZEZ1bmN0aW9uTmFtZSwgKCJzZXRT
dHlsZVRleHQiKSk7CiAgICBsb25nIGNhbGxJZCA9IDA7CgogICAgaWYgKGFyZ3MtPmxlbmd0aCgp
ICE9IDQpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICByZXBvcnRQcm90
b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVu
dHNDb3VudE1lc3NhZ2UoYXJncy0+bGVuZ3RoKCkgLSAxLCAzKSk7CiAgICAgICAgcmV0dXJuOwog
ICAgfQoKICAgIGlmICghYXJncy0+Z2V0KDEpLT5hc051bWJlcigmY2FsbElkKSkgewogICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElk
LCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50VHlwZU1lc3NhZ2UoMSwg
ImNhbGxJZCIsICJsb25nIikpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBsb25nIHN0eWxl
SWQ7CiAgICBpZiAoIWFyZ3MtPmdldCgyKS0+YXNOdW1iZXIoJnN0eWxlSWQpKSB7CiAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQs
IGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRUeXBlTWVzc2FnZSgyLCAi
c3R5bGVJZCIsICJsb25nIikpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBTdHJpbmcgc3R5
bGVUZXh0OwogICAgaWYgKCFhcmdzLT5nZXQoMyktPmFzU3RyaW5nKCZzdHlsZVRleHQpKSB7CiAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihj
YWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRUeXBlTWVzc2Fn
ZSgzLCAic3R5bGVUZXh0IiwgIlN0cmluZyIpKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAg
aWYgKCFtX2luc3BlY3RvckNvbnRyb2xsZXItPmRvbUFnZW50KCkpIHsKICAgICAgICByZXBvcnRQ
cm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgIkVycm9yOiBET00gaGFu
ZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBib29s
IHN1Y2Nlc3MgPSBmYWxzZTsKICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+ZG9tQWdlbnQoKS0+
c2V0U3R5bGVUZXh0KGNhbGxJZCwgc3R5bGVJZCwgc3R5bGVUZXh0LCAmc3VjY2Vzcyk7CgogICAg
aWYgKG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdG9yQ2xpZW50KCkpIHsKICAgICAgICBS
ZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3VtZW50cyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUo
KTsKICAgICAgICBhcmd1bWVudHMtPnB1c2hTdHJpbmcoImRpZFNldFN0eWxlVGV4dCIpOwogICAg
ICAgIGFyZ3VtZW50cy0+cHVzaE51bWJlcihjYWxsSWQpOwogICAgICAgIGFyZ3VtZW50cy0+cHVz
aEJvb2woc3VjY2Vzcyk7CiAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0b3JD
bGllbnQoKS0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGFyZ3VtZW50cy0+dG9KU09OU3RyaW5nKCkp
OwogICAgfQp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpzZXRTdHlsZVByb3Bl
cnR5KFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3MpCnsKICAgIERFRklORV9TVEFUSUNf
TE9DQUwoU3RyaW5nLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAoInNldFN0eWxlUHJvcGVydHkiKSk7
CiAgICBsb25nIGNhbGxJZCA9IDA7CgogICAgaWYgKGFyZ3MtPmxlbmd0aCgpICE9IDUpIHsKICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNh
bGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudHNDb3VudE1lc3Nh
Z2UoYXJncy0+bGVuZ3RoKCkgLSAxLCA0KSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlm
ICghYXJncy0+Z2V0KDEpLT5hc051bWJlcigmY2FsbElkKSkgewogICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVu
Y3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50VHlwZU1lc3NhZ2UoMSwgImNhbGxJZCIsICJs
b25nIikpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBsb25nIHN0eWxlSWQ7CiAgICBpZiAo
IWFyZ3MtPmdldCgyKS0+YXNOdW1iZXIoJnN0eWxlSWQpKSB7CiAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5j
dGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRUeXBlTWVzc2FnZSgyLCAic3R5bGVJZCIsICJs
b25nIikpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBTdHJpbmcgbmFtZTsKICAgIGlmICgh
YXJncy0+Z2V0KDMpLT5hc1N0cmluZygmbmFtZSkpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9u
TmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudFR5cGVNZXNzYWdlKDMsICJuYW1lIiwgIlN0cmluZyIp
KTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgU3RyaW5nIHZhbHVlOwogICAgaWYgKCFhcmdz
LT5nZXQoNCktPmFzU3RyaW5nKCZ2YWx1ZSkpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFt
ZSwgZm9ybWF0V3JvbmdBcmd1bWVudFR5cGVNZXNzYWdlKDQsICJ2YWx1ZSIsICJTdHJpbmciKSk7
CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmICghbV9pbnNwZWN0b3JDb250cm9sbGVyLT5k
b21BZ2VudCgpKSB7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRG
dW5jdGlvbk5hbWUsICJFcnJvcjogRE9NIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKICAg
ICAgICByZXR1cm47CiAgICB9CgogICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7CiAgICBtX2luc3Bl
Y3RvckNvbnRyb2xsZXItPmRvbUFnZW50KCktPnNldFN0eWxlUHJvcGVydHkoY2FsbElkLCBzdHls
ZUlkLCBuYW1lLCB2YWx1ZSwgJnN1Y2Nlc3MpOwoKICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xs
ZXItPmluc3BlY3RvckNsaWVudCgpKSB7CiAgICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBh
cmd1bWVudHMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CiAgICAgICAgYXJndW1lbnRzLT5w
dXNoU3RyaW5nKCJkaWRTZXRTdHlsZVByb3BlcnR5Iik7CiAgICAgICAgYXJndW1lbnRzLT5wdXNo
TnVtYmVyKGNhbGxJZCk7CiAgICAgICAgYXJndW1lbnRzLT5wdXNoQm9vbChzdWNjZXNzKTsKICAg
ICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RvckNsaWVudCgpLT5zZW5kTWVzc2Fn
ZVRvRnJvbnRlbmQoYXJndW1lbnRzLT50b0pTT05TdHJpbmcoKSk7CiAgICB9Cn0KCnZvaWQgSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnRvZ2dsZVN0eWxlRW5hYmxlZChQYXNzUmVmUHRyPElu
c3BlY3RvckFycmF5PiBhcmdzKQp7CiAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgYmFj
a2VuZEZ1bmN0aW9uTmFtZSwgKCJ0b2dnbGVTdHlsZUVuYWJsZWQiKSk7CiAgICBsb25nIGNhbGxJ
ZCA9IDA7CgogICAgaWYgKGFyZ3MtPmxlbmd0aCgpICE9IDUpIHsKICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1
bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudHNDb3VudE1lc3NhZ2UoYXJncy0+bGVuZ3Ro
KCkgLSAxLCA0KSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmICghYXJncy0+Z2V0KDEp
LT5hc051bWJlcigmY2FsbElkKSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
ICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3Jt
YXRXcm9uZ0FyZ3VtZW50VHlwZU1lc3NhZ2UoMSwgImNhbGxJZCIsICJsb25nIikpOwogICAgICAg
IHJldHVybjsKICAgIH0KCiAgICBsb25nIHN0eWxlSWQ7CiAgICBpZiAoIWFyZ3MtPmdldCgyKS0+
YXNOdW1iZXIoJnN0eWxlSWQpKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
ICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1h
dFdyb25nQXJndW1lbnRUeXBlTWVzc2FnZSgyLCAic3R5bGVJZCIsICJsb25nIikpOwogICAgICAg
IHJldHVybjsKICAgIH0KCiAgICBTdHJpbmcgcHJvcGVydHlOYW1lOwogICAgaWYgKCFhcmdzLT5n
ZXQoMyktPmFzU3RyaW5nKCZwcm9wZXJ0eU5hbWUpKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlv
bk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRUeXBlTWVzc2FnZSgzLCAicHJvcGVydHlOYW1lIiwg
IlN0cmluZyIpKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgYm9vbCBkaXNhYmxlZDsKICAg
IGlmICghYXJncy0+Z2V0KDQpLT5hc0Jvb2woJmRpc2FibGVkKSkgewogICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5k
RnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50VHlwZU1lc3NhZ2UoNCwgImRpc2FibGVk
IiwgImJvb2xlYW4iKSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmICghbV9pbnNwZWN0
b3JDb250cm9sbGVyLT5kb21BZ2VudCgpKSB7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihj
YWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICJFcnJvcjogRE9NIGhhbmRsZXIgaXMgbm90IGF2
YWlsYWJsZS4iKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgUmVmUHRyPEluc3BlY3RvclZh
bHVlPiBzdHlsZSA9IEluc3BlY3RvclZhbHVlOjpudWxsKCk7CiAgICBtX2luc3BlY3RvckNvbnRy
b2xsZXItPmRvbUFnZW50KCktPnRvZ2dsZVN0eWxlRW5hYmxlZChjYWxsSWQsIHN0eWxlSWQsIHBy
b3BlcnR5TmFtZSwgZGlzYWJsZWQsICZzdHlsZSk7CgogICAgaWYgKG1faW5zcGVjdG9yQ29udHJv
bGxlci0+aW5zcGVjdG9yQ2xpZW50KCkpIHsKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
IGFyZ3VtZW50cyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKICAgICAgICBhcmd1bWVudHMt
PnB1c2hTdHJpbmcoImRpZFRvZ2dsZVN0eWxlRW5hYmxlZCIpOwogICAgICAgIGFyZ3VtZW50cy0+
cHVzaE51bWJlcihjYWxsSWQpOwogICAgICAgIGFyZ3VtZW50cy0+cHVzaChzdHlsZSk7CiAgICAg
ICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0b3JDbGllbnQoKS0+c2VuZE1lc3NhZ2VU
b0Zyb250ZW5kKGFyZ3VtZW50cy0+dG9KU09OU3RyaW5nKCkpOwogICAgfQp9Cgp2b2lkIEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyOjpzZXRSdWxlU2VsZWN0b3IoUGFzc1JlZlB0cjxJbnNwZWN0
b3JBcnJheT4gYXJncykKewogICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGJhY2tlbmRG
dW5jdGlvbk5hbWUsICgic2V0UnVsZVNlbGVjdG9yIikpOwogICAgbG9uZyBjYWxsSWQgPSAwOwoK
ICAgIGlmIChhcmdzLT5sZW5ndGgoKSAhPSA1KSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5h
bWUsIGZvcm1hdFdyb25nQXJndW1lbnRzQ291bnRNZXNzYWdlKGFyZ3MtPmxlbmd0aCgpIC0gMSwg
NCkpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoIWFyZ3MtPmdldCgxKS0+YXNOdW1i
ZXIoJmNhbGxJZCkpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICByZXBv
cnRQcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdB
cmd1bWVudFR5cGVNZXNzYWdlKDEsICJjYWxsSWQiLCAibG9uZyIpKTsKICAgICAgICByZXR1cm47
CiAgICB9CgogICAgbG9uZyBydWxlSWQ7CiAgICBpZiAoIWFyZ3MtPmdldCgyKS0+YXNOdW1iZXIo
JnJ1bGVJZCkpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICByZXBvcnRQ
cm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1
bWVudFR5cGVNZXNzYWdlKDIsICJydWxlSWQiLCAibG9uZyIpKTsKICAgICAgICByZXR1cm47CiAg
ICB9CgogICAgU3RyaW5nIHNlbGVjdG9yOwogICAgaWYgKCFhcmdzLT5nZXQoMyktPmFzU3RyaW5n
KCZzZWxlY3RvcikpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICByZXBv
cnRQcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdB
cmd1bWVudFR5cGVNZXNzYWdlKDMsICJzZWxlY3RvciIsICJTdHJpbmciKSk7CiAgICAgICAgcmV0
dXJuOwogICAgfQoKICAgIGxvbmcgc2VsZWN0ZWROb2RlSWQ7CiAgICBpZiAoIWFyZ3MtPmdldCg0
KS0+YXNOdW1iZXIoJnNlbGVjdGVkTm9kZUlkKSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25O
YW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50VHlwZU1lc3NhZ2UoNCwgInNlbGVjdGVkTm9kZUlkIiwg
ImxvbmciKSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmICghbV9pbnNwZWN0b3JDb250
cm9sbGVyLT5kb21BZ2VudCgpKSB7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQs
IGJhY2tlbmRGdW5jdGlvbk5hbWUsICJFcnJvcjogRE9NIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJs
ZS4iKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiBy
dWxlID0gSW5zcGVjdG9yVmFsdWU6Om51bGwoKTsKICAgIGJvb2wgc2VsZWN0b3JBZmZlY3RzTm9k
ZSA9IGZhbHNlOwogICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5kb21BZ2VudCgpLT5zZXRSdWxl
U2VsZWN0b3IoY2FsbElkLCBydWxlSWQsIHNlbGVjdG9yLCBzZWxlY3RlZE5vZGVJZCwgJnJ1bGUs
ICZzZWxlY3RvckFmZmVjdHNOb2RlKTsKCiAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyLT5p
bnNwZWN0b3JDbGllbnQoKSkgewogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJndW1l
bnRzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwogICAgICAgIGFyZ3VtZW50cy0+cHVzaFN0
cmluZygiZGlkU2V0UnVsZVNlbGVjdG9yIik7CiAgICAgICAgYXJndW1lbnRzLT5wdXNoTnVtYmVy
KGNhbGxJZCk7CiAgICAgICAgYXJndW1lbnRzLT5wdXNoKHJ1bGUpOwogICAgICAgIGFyZ3VtZW50
cy0+cHVzaEJvb2woc2VsZWN0b3JBZmZlY3RzTm9kZSk7CiAgICAgICAgbV9pbnNwZWN0b3JDb250
cm9sbGVyLT5pbnNwZWN0b3JDbGllbnQoKS0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGFyZ3VtZW50
cy0+dG9KU09OU3RyaW5nKCkpOwogICAgfQp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyOjphZGRSdWxlKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3MpCnsKICAgIERFRklO
RV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAoImFkZFJ1bGUiKSk7
CiAgICBsb25nIGNhbGxJZCA9IDA7CgogICAgaWYgKGFyZ3MtPmxlbmd0aCgpICE9IDQpIHsKICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNh
bGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudHNDb3VudE1lc3Nh
Z2UoYXJncy0+bGVuZ3RoKCkgLSAxLCAzKSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlm
ICghYXJncy0+Z2V0KDEpLT5hc051bWJlcigmY2FsbElkKSkgewogICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVu
Y3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50VHlwZU1lc3NhZ2UoMSwgImNhbGxJZCIsICJs
b25nIikpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBTdHJpbmcgc2VsZWN0b3I7CiAgICBp
ZiAoIWFyZ3MtPmdldCgyKS0+YXNTdHJpbmcoJnNlbGVjdG9yKSkgewogICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5k
RnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50VHlwZU1lc3NhZ2UoMiwgInNlbGVjdG9y
IiwgIlN0cmluZyIpKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgbG9uZyBzZWxlY3RlZE5v
ZGVJZDsKICAgIGlmICghYXJncy0+Z2V0KDMpLT5hc051bWJlcigmc2VsZWN0ZWROb2RlSWQpKSB7
CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJv
cihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRUeXBlTWVz
c2FnZSgzLCAic2VsZWN0ZWROb2RlSWQiLCAibG9uZyIpKTsKICAgICAgICByZXR1cm47CiAgICB9
CgogICAgaWYgKCFtX2luc3BlY3RvckNvbnRyb2xsZXItPmRvbUFnZW50KCkpIHsKICAgICAgICBy
ZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgIkVycm9yOiBE
T00gaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAg
ICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHJ1bGUgPSBJbnNwZWN0b3JWYWx1ZTo6bnVsbCgpOwog
ICAgYm9vbCBzZWxlY3RvckFmZmVjdHNOb2RlID0gZmFsc2U7CiAgICBtX2luc3BlY3RvckNvbnRy
b2xsZXItPmRvbUFnZW50KCktPmFkZFJ1bGUoY2FsbElkLCBzZWxlY3Rvciwgc2VsZWN0ZWROb2Rl
SWQsICZydWxlLCAmc2VsZWN0b3JBZmZlY3RzTm9kZSk7CgogICAgaWYgKG1faW5zcGVjdG9yQ29u
dHJvbGxlci0+aW5zcGVjdG9yQ2xpZW50KCkpIHsKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yQXJy
YXk+IGFyZ3VtZW50cyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKICAgICAgICBhcmd1bWVu
dHMtPnB1c2hTdHJpbmcoImRpZEFkZFJ1bGUiKTsKICAgICAgICBhcmd1bWVudHMtPnB1c2hOdW1i
ZXIoY2FsbElkKTsKICAgICAgICBhcmd1bWVudHMtPnB1c2gocnVsZSk7CiAgICAgICAgYXJndW1l
bnRzLT5wdXNoQm9vbChzZWxlY3RvckFmZmVjdHNOb2RlKTsKICAgICAgICBtX2luc3BlY3RvckNv
bnRyb2xsZXItPmluc3BlY3RvckNsaWVudCgpLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoYXJndW1l
bnRzLT50b0pTT05TdHJpbmcoKSk7CiAgICB9Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXI6OmdldENvb2tpZXMoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJncykKewogICAg
REVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICgiZ2V0Q29v
a2llcyIpKTsKICAgIGxvbmcgY2FsbElkID0gMDsKCiAgICBpZiAoYXJncy0+bGVuZ3RoKCkgIT0g
MikgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHJlcG9ydFByb3RvY29s
RXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50c0Nv
dW50TWVzc2FnZShhcmdzLT5sZW5ndGgoKSAtIDEsIDEpKTsKICAgICAgICByZXR1cm47CiAgICB9
CgogICAgaWYgKCFhcmdzLT5nZXQoMSktPmFzTnVtYmVyKCZjYWxsSWQpKSB7CiAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIGJh
Y2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRUeXBlTWVzc2FnZSgxLCAiY2Fs
bElkIiwgImxvbmciKSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmICghbV9pbnNwZWN0
b3JDb250cm9sbGVyKSB7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tl
bmRGdW5jdGlvbk5hbWUsICJFcnJvcjogQ29udHJvbGxlciBoYW5kbGVyIGlzIG5vdCBhdmFpbGFi
bGUuIik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4g
Y29va2llcyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKICAgIFN0cmluZyBjb29raWVzU3Ry
aW5nOwogICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5nZXRDb29raWVzKGNhbGxJZCwgJmNvb2tp
ZXMsICZjb29raWVzU3RyaW5nKTsKCiAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNw
ZWN0b3JDbGllbnQoKSkgewogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJndW1lbnRz
ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwogICAgICAgIGFyZ3VtZW50cy0+cHVzaFN0cmlu
ZygiZGlkR2V0Q29va2llcyIpOwogICAgICAgIGFyZ3VtZW50cy0+cHVzaE51bWJlcihjYWxsSWQp
OwogICAgICAgIGFyZ3VtZW50cy0+cHVzaChjb29raWVzKTsKICAgICAgICBhcmd1bWVudHMtPnB1
c2hTdHJpbmcoY29va2llc1N0cmluZyk7CiAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5p
bnNwZWN0b3JDbGllbnQoKS0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGFyZ3VtZW50cy0+dG9KU09O
U3RyaW5nKCkpOwogICAgfQp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpkZWxl
dGVDb29raWUoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJncykKewogICAgREVGSU5FX1NU
QVRJQ19MT0NBTChTdHJpbmcsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICgiZGVsZXRlQ29va2llIikp
OwogICAgbG9uZyBjYWxsSWQgPSAwOwoKICAgIGlmIChhcmdzLT5sZW5ndGgoKSAhPSAzKSB7CiAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihj
YWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRzQ291bnRNZXNz
YWdlKGFyZ3MtPmxlbmd0aCgpIC0gMSwgMikpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBT
dHJpbmcgY29va2llTmFtZTsKICAgIGlmICghYXJncy0+Z2V0KDEpLT5hc1N0cmluZygmY29va2ll
TmFtZSkpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICByZXBvcnRQcm90
b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVu
dFR5cGVNZXNzYWdlKDEsICJjb29raWVOYW1lIiwgIlN0cmluZyIpKTsKICAgICAgICByZXR1cm47
CiAgICB9CgogICAgU3RyaW5nIGRvbWFpbjsKICAgIGlmICghYXJncy0+Z2V0KDIpLT5hc1N0cmlu
ZygmZG9tYWluKSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHJlcG9y
dFByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0Fy
Z3VtZW50VHlwZU1lc3NhZ2UoMiwgImRvbWFpbiIsICJTdHJpbmciKSk7CiAgICAgICAgcmV0dXJu
OwogICAgfQoKICAgIGlmICghbV9pbnNwZWN0b3JDb250cm9sbGVyKSB7CiAgICAgICAgcmVwb3J0
UHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICJFcnJvcjogQ29udHJv
bGxlciBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CiAgICAgICAgcmV0dXJuOwogICAgfQoK
ICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+ZGVsZXRlQ29va2llKGNvb2tpZU5hbWUsIGRvbWFp
bik7Cgp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRBcHBsaWNhdGlvbkNh
Y2hlcyhQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcmdzKQp7CiAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKFN0cmluZywgYmFja2VuZEZ1bmN0aW9uTmFtZSwgKCJnZXRBcHBsaWNhdGlvbkNhY2hl
cyIpKTsKICAgIGxvbmcgY2FsbElkID0gMDsKCiAgICBpZiAoYXJncy0+bGVuZ3RoKCkgIT0gMikg
ewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHJlcG9ydFByb3RvY29sRXJy
b3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50c0NvdW50
TWVzc2FnZShhcmdzLT5sZW5ndGgoKSAtIDEsIDEpKTsKICAgICAgICByZXR1cm47CiAgICB9Cgog
ICAgaWYgKCFhcmdzLT5nZXQoMSktPmFzTnVtYmVyKCZjYWxsSWQpKSB7CiAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tl
bmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRUeXBlTWVzc2FnZSgxLCAiY2FsbElk
IiwgImxvbmciKSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmICghbV9pbnNwZWN0b3JD
b250cm9sbGVyLT5hcHBsaWNhdGlvbkNhY2hlQWdlbnQoKSkgewogICAgICAgIHJlcG9ydFByb3Rv
Y29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCAiRXJyb3I6IEFwcGxpY2F0aW9u
Q2FjaGUgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwogICAgICAgIHJldHVybjsKICAgIH0K
CiAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGFwcGxpY2F0aW9uQ2FjaGVzID0gSW5zcGVjdG9y
VmFsdWU6Om51bGwoKTsKICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+YXBwbGljYXRpb25DYWNo
ZUFnZW50KCktPmdldEFwcGxpY2F0aW9uQ2FjaGVzKGNhbGxJZCwgJmFwcGxpY2F0aW9uQ2FjaGVz
KTsKCiAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0b3JDbGllbnQoKSkgewog
ICAgICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJndW1lbnRzID0gSW5zcGVjdG9yQXJyYXk6
OmNyZWF0ZSgpOwogICAgICAgIGFyZ3VtZW50cy0+cHVzaFN0cmluZygiZGlkR2V0QXBwbGljYXRp
b25DYWNoZXMiKTsKICAgICAgICBhcmd1bWVudHMtPnB1c2hOdW1iZXIoY2FsbElkKTsKICAgICAg
ICBhcmd1bWVudHMtPnB1c2goYXBwbGljYXRpb25DYWNoZXMpOwogICAgICAgIG1faW5zcGVjdG9y
Q29udHJvbGxlci0+aW5zcGVjdG9yQ2xpZW50KCktPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChhcmd1
bWVudHMtPnRvSlNPTlN0cmluZygpKTsKICAgIH0KfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcjo6cmVsZWFzZVdyYXBwZXJPYmplY3RHcm91cChQYXNzUmVmUHRyPEluc3BlY3RvckFy
cmF5PiBhcmdzKQp7CiAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgYmFja2VuZEZ1bmN0
aW9uTmFtZSwgKCJyZWxlYXNlV3JhcHBlck9iamVjdEdyb3VwIikpOwogICAgbG9uZyBjYWxsSWQg
PSAwOwoKICAgIGlmIChhcmdzLT5sZW5ndGgoKSAhPSAzKSB7CiAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5j
dGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRzQ291bnRNZXNzYWdlKGFyZ3MtPmxlbmd0aCgp
IC0gMSwgMikpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBsb25nIGluamVjdGVkU2NyaXB0
SWQ7CiAgICBpZiAoIWFyZ3MtPmdldCgxKS0+YXNOdW1iZXIoJmluamVjdGVkU2NyaXB0SWQpKSB7
CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJv
cihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRUeXBlTWVz
c2FnZSgxLCAiaW5qZWN0ZWRTY3JpcHRJZCIsICJsb25nIikpOwogICAgICAgIHJldHVybjsKICAg
IH0KCiAgICBTdHJpbmcgb2JqZWN0R3JvdXA7CiAgICBpZiAoIWFyZ3MtPmdldCgyKS0+YXNTdHJp
bmcoJm9iamVjdEdyb3VwKSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAg
IHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRX
cm9uZ0FyZ3VtZW50VHlwZU1lc3NhZ2UoMiwgIm9iamVjdEdyb3VwIiwgIlN0cmluZyIpKTsKICAg
ICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKCFtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3Bl
Y3RvckJhY2tlbmQoKSkgewogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNr
ZW5kRnVuY3Rpb25OYW1lLCAiRXJyb3I6IEJhY2tlbmQgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxl
LiIpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmlu
c3BlY3RvckJhY2tlbmQoKS0+cmVsZWFzZVdyYXBwZXJPYmplY3RHcm91cChpbmplY3RlZFNjcmlw
dElkLCBvYmplY3RHcm91cCk7Cgp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpk
aWRFdmFsdWF0ZUZvclRlc3RJbkZyb250ZW5kKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFy
Z3MpCnsKICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBiYWNrZW5kRnVuY3Rpb25OYW1l
LCAoImRpZEV2YWx1YXRlRm9yVGVzdEluRnJvbnRlbmQiKSk7CiAgICBsb25nIGNhbGxJZCA9IDA7
CgogICAgaWYgKGFyZ3MtPmxlbmd0aCgpICE9IDMpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9u
TmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudHNDb3VudE1lc3NhZ2UoYXJncy0+bGVuZ3RoKCkgLSAx
LCAyKSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmICghYXJncy0+Z2V0KDEpLT5hc051
bWJlcigmY2FsbElkKSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHJl
cG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9u
Z0FyZ3VtZW50VHlwZU1lc3NhZ2UoMSwgImNhbGxJZCIsICJsb25nIikpOwogICAgICAgIHJldHVy
bjsKICAgIH0KCiAgICBTdHJpbmcganNvblJlc3VsdDsKICAgIGlmICghYXJncy0+Z2V0KDIpLT5h
c1N0cmluZygmanNvblJlc3VsdCkpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9y
bWF0V3JvbmdBcmd1bWVudFR5cGVNZXNzYWdlKDIsICJqc29uUmVzdWx0IiwgIlN0cmluZyIpKTsK
ICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKCFtX2luc3BlY3RvckNvbnRyb2xsZXIpIHsK
ICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwg
IkVycm9yOiBDb250cm9sbGVyIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKICAgICAgICBy
ZXR1cm47CiAgICB9CgogICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5kaWRFdmFsdWF0ZUZvclRl
c3RJbkZyb250ZW5kKGNhbGxJZCwganNvblJlc3VsdCk7Cgp9Cgp2b2lkIEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyOjpnZXREYXRhYmFzZVRhYmxlTmFtZXMoUGFzc1JlZlB0cjxJbnNwZWN0b3JB
cnJheT4gYXJncykKewogICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGJhY2tlbmRGdW5j
dGlvbk5hbWUsICgiZ2V0RGF0YWJhc2VUYWJsZU5hbWVzIikpOwogICAgbG9uZyBjYWxsSWQgPSAw
OwoKICAgIGlmIChhcmdzLT5sZW5ndGgoKSAhPSAzKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlv
bk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRzQ291bnRNZXNzYWdlKGFyZ3MtPmxlbmd0aCgpIC0g
MSwgMikpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoIWFyZ3MtPmdldCgxKS0+YXNO
dW1iZXIoJmNhbGxJZCkpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBy
ZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3Jv
bmdBcmd1bWVudFR5cGVNZXNzYWdlKDEsICJjYWxsSWQiLCAibG9uZyIpKTsKICAgICAgICByZXR1
cm47CiAgICB9CgogICAgbG9uZyBkYXRhYmFzZUlkOwogICAgaWYgKCFhcmdzLT5nZXQoMiktPmFz
TnVtYmVyKCZkYXRhYmFzZUlkKSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
ICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3Jt
YXRXcm9uZ0FyZ3VtZW50VHlwZU1lc3NhZ2UoMiwgImRhdGFiYXNlSWQiLCAibG9uZyIpKTsKICAg
ICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKCFtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3Bl
Y3RvckJhY2tlbmQoKSkgewogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNr
ZW5kRnVuY3Rpb25OYW1lLCAiRXJyb3I6IEJhY2tlbmQgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxl
LiIpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHRh
YmxlTmFtZXMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CiAgICBtX2luc3BlY3RvckNvbnRy
b2xsZXItPmluc3BlY3RvckJhY2tlbmQoKS0+Z2V0RGF0YWJhc2VUYWJsZU5hbWVzKGNhbGxJZCwg
ZGF0YWJhc2VJZCwgJnRhYmxlTmFtZXMpOwoKICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXIt
Pmluc3BlY3RvckNsaWVudCgpKSB7CiAgICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcmd1
bWVudHMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CiAgICAgICAgYXJndW1lbnRzLT5wdXNo
U3RyaW5nKCJkaWRHZXREYXRhYmFzZVRhYmxlTmFtZXMiKTsKICAgICAgICBhcmd1bWVudHMtPnB1
c2hOdW1iZXIoY2FsbElkKTsKICAgICAgICBhcmd1bWVudHMtPnB1c2godGFibGVOYW1lcyk7CiAg
ICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0b3JDbGllbnQoKS0+c2VuZE1lc3Nh
Z2VUb0Zyb250ZW5kKGFyZ3VtZW50cy0+dG9KU09OU3RyaW5nKCkpOwogICAgfQp9Cgp2b2lkIElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRET01TdG9yYWdlRW50cmllcyhQYXNzUmVmUHRy
PEluc3BlY3RvckFycmF5PiBhcmdzKQp7CiAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywg
YmFja2VuZEZ1bmN0aW9uTmFtZSwgKCJnZXRET01TdG9yYWdlRW50cmllcyIpKTsKICAgIGxvbmcg
Y2FsbElkID0gMDsKCiAgICBpZiAoYXJncy0+bGVuZ3RoKCkgIT0gMykgewogICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNr
ZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50c0NvdW50TWVzc2FnZShhcmdzLT5s
ZW5ndGgoKSAtIDEsIDIpKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKCFhcmdzLT5n
ZXQoMSktPmFzTnVtYmVyKCZjYWxsSWQpKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUs
IGZvcm1hdFdyb25nQXJndW1lbnRUeXBlTWVzc2FnZSgxLCAiY2FsbElkIiwgImxvbmciKSk7CiAg
ICAgICAgcmV0dXJuOwogICAgfQoKICAgIGxvbmcgc3RvcmFnZUlkOwogICAgaWYgKCFhcmdzLT5n
ZXQoMiktPmFzTnVtYmVyKCZzdG9yYWdlSWQpKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5h
bWUsIGZvcm1hdFdyb25nQXJndW1lbnRUeXBlTWVzc2FnZSgyLCAic3RvcmFnZUlkIiwgImxvbmci
KSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmICghbV9pbnNwZWN0b3JDb250cm9sbGVy
KSB7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5h
bWUsICJFcnJvcjogQ29udHJvbGxlciBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CiAgICAg
ICAgcmV0dXJuOwogICAgfQoKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gZW50cmllcyA9IElu
c3BlY3RvckFycmF5OjpjcmVhdGUoKTsKICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+Z2V0RE9N
U3RvcmFnZUVudHJpZXMoY2FsbElkLCBzdG9yYWdlSWQsICZlbnRyaWVzKTsKCiAgICBpZiAobV9p
bnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0b3JDbGllbnQoKSkgewogICAgICAgIFJlZlB0cjxJ
bnNwZWN0b3JBcnJheT4gYXJndW1lbnRzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwogICAg
ICAgIGFyZ3VtZW50cy0+cHVzaFN0cmluZygiZGlkR2V0RE9NU3RvcmFnZUVudHJpZXMiKTsKICAg
ICAgICBhcmd1bWVudHMtPnB1c2hOdW1iZXIoY2FsbElkKTsKICAgICAgICBhcmd1bWVudHMtPnB1
c2goZW50cmllcyk7CiAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0b3JDbGll
bnQoKS0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGFyZ3VtZW50cy0+dG9KU09OU3RyaW5nKCkpOwog
ICAgfQp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpzZXRET01TdG9yYWdlSXRl
bShQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcmdzKQp7CiAgICBERUZJTkVfU1RBVElDX0xP
Q0FMKFN0cmluZywgYmFja2VuZEZ1bmN0aW9uTmFtZSwgKCJzZXRET01TdG9yYWdlSXRlbSIpKTsK
ICAgIGxvbmcgY2FsbElkID0gMDsKCiAgICBpZiAoYXJncy0+bGVuZ3RoKCkgIT0gNSkgewogICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2Fs
bElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50c0NvdW50TWVzc2Fn
ZShhcmdzLT5sZW5ndGgoKSAtIDEsIDQpKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYg
KCFhcmdzLT5nZXQoMSktPmFzTnVtYmVyKCZjYWxsSWQpKSB7CiAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5j
dGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRUeXBlTWVzc2FnZSgxLCAiY2FsbElkIiwgImxv
bmciKSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGxvbmcgc3RvcmFnZUlkOwogICAgaWYg
KCFhcmdzLT5nZXQoMiktPmFzTnVtYmVyKCZzdG9yYWdlSWQpKSB7CiAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRG
dW5jdGlvbk5hbWUsIGZvcm1hdFdyb25nQXJndW1lbnRUeXBlTWVzc2FnZSgyLCAic3RvcmFnZUlk
IiwgImxvbmciKSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIFN0cmluZyBrZXk7CiAgICBp
ZiAoIWFyZ3MtPmdldCgzKS0+YXNTdHJpbmcoJmtleSkpIHsKICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0
aW9uTmFtZSwgZm9ybWF0V3JvbmdBcmd1bWVudFR5cGVNZXNzYWdlKDMsICJrZXkiLCAiU3RyaW5n
IikpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBTdHJpbmcgdmFsdWU7CiAgICBpZiAoIWFy
Z3MtPmdldCg0KS0+YXNTdHJpbmcoJnZhbHVlKSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25O
YW1lLCBmb3JtYXRXcm9uZ0FyZ3VtZW50VHlwZU1lc3NhZ2UoNCwgInZhbHVlIiwgIlN0cmluZyIp
KTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKCFtX2luc3BlY3RvckNvbnRyb2xsZXIp
IHsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFt
ZSwgIkVycm9yOiBDb250cm9sbGVyIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKICAgICAg
ICByZXR1cm47CiAgICB9CgogICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7CiAgICBtX2luc3BlY3Rv
ckNvbnRyb2xsZXItPnNldERPTVN0b3JhZ2VJdGVtKGNhbGxJZCwgc3RvcmFnZUlkLCBrZXksIHZh
bHVlLCAmc3VjY2Vzcyk7CgogICAgaWYgKG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdG9y
Q2xpZW50KCkpIHsKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3VtZW50cyA9IElu
c3BlY3RvckFycmF5OjpjcmVhdGUoKTsKICAgICAgICBhcmd1bWVudHMtPnB1c2hTdHJpbmcoImRp
ZFNldERPTVN0b3JhZ2VJdGVtIik7CiAgICAgICAgYXJndW1lbnRzLT5wdXNoTnVtYmVyKGNhbGxJ
ZCk7CiAgICAgICAgYXJndW1lbnRzLT5wdXNoQm9vbChzdWNjZXNzKTsKICAgICAgICBtX2luc3Bl
Y3RvckNvbnRyb2xsZXItPmluc3BlY3RvckNsaWVudCgpLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQo
YXJndW1lbnRzLT50b0pTT05TdHJpbmcoKSk7CiAgICB9Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXI6OnJlbW92ZURPTVN0b3JhZ2VJdGVtKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJy
YXk+IGFyZ3MpCnsKICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBiYWNrZW5kRnVuY3Rp
b25OYW1lLCAoInJlbW92ZURPTVN0b3JhZ2VJdGVtIikpOwogICAgbG9uZyBjYWxsSWQgPSAwOwoK
ICAgIGlmIChhcmdzLT5sZW5ndGgoKSAhPSA0KSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5h
bWUsIGZvcm1hdFdyb25nQXJndW1lbnRzQ291bnRNZXNzYWdlKGFyZ3MtPmxlbmd0aCgpIC0gMSwg
MykpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoIWFyZ3MtPmdldCgxKS0+YXNOdW1i
ZXIoJmNhbGxJZCkpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICByZXBv
cnRQcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3JvbmdB
cmd1bWVudFR5cGVNZXNzYWdlKDEsICJjYWxsSWQiLCAibG9uZyIpKTsKICAgICAgICByZXR1cm47
CiAgICB9CgogICAgbG9uZyBzdG9yYWdlSWQ7CiAgICBpZiAoIWFyZ3MtPmdldCgyKS0+YXNOdW1i
ZXIoJnN0b3JhZ2VJZCkpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBy
ZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgYmFja2VuZEZ1bmN0aW9uTmFtZSwgZm9ybWF0V3Jv
bmdBcmd1bWVudFR5cGVNZXNzYWdlKDIsICJzdG9yYWdlSWQiLCAibG9uZyIpKTsKICAgICAgICBy
ZXR1cm47CiAgICB9CgogICAgU3RyaW5nIGtleTsKICAgIGlmICghYXJncy0+Z2V0KDMpLT5hc1N0
cmluZygma2V5KSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgIHJlcG9y
dFByb3RvY29sRXJyb3IoY2FsbElkLCBiYWNrZW5kRnVuY3Rpb25OYW1lLCBmb3JtYXRXcm9uZ0Fy
Z3VtZW50VHlwZU1lc3NhZ2UoMywgImtleSIsICJTdHJpbmciKSk7CiAgICAgICAgcmV0dXJuOwog
ICAgfQoKICAgIGlmICghbV9pbnNwZWN0b3JDb250cm9sbGVyKSB7CiAgICAgICAgcmVwb3J0UHJv
dG9jb2xFcnJvcihjYWxsSWQsIGJhY2tlbmRGdW5jdGlvbk5hbWUsICJFcnJvcjogQ29udHJvbGxl
ciBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAg
IGJvb2wgc3VjY2VzcyA9IGZhbHNlOwogICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5yZW1vdmVE
T01TdG9yYWdlSXRlbShjYWxsSWQsIHN0b3JhZ2VJZCwga2V5LCAmc3VjY2Vzcyk7CgogICAgaWYg
KG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdG9yQ2xpZW50KCkpIHsKICAgICAgICBSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3VtZW50cyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsK
ICAgICAgICBhcmd1bWVudHMtPnB1c2hTdHJpbmcoImRpZFJlbW92ZURPTVN0b3JhZ2VJdGVtIik7
CiAgICAgICAgYXJndW1lbnRzLT5wdXNoTnVtYmVyKGNhbGxJZCk7CiAgICAgICAgYXJndW1lbnRz
LT5wdXNoQm9vbChzdWNjZXNzKTsKICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3Bl
Y3RvckNsaWVudCgpLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoYXJndW1lbnRzLT50b0pTT05TdHJp
bmcoKSk7CiAgICB9Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNo
KGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKewogICAgdHlwZWRlZiB2b2lkIChJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcjo6KkNhbGxIYW5kbGVyKShQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBh
cmdzKTsKICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIENhbGxIYW5kbGVyPiBEaXNwYXRjaE1h
cDsKICAgIERFRklORV9TVEFUSUNfTE9DQUwoRGlzcGF0Y2hNYXAsIGRpc3BhdGNoTWFwLCApOwog
ICAgaWYgKGRpc3BhdGNoTWFwLmlzRW1wdHkoKSkgewogICAgICAgIGRpc3BhdGNoTWFwLmFkZCgi
Z2V0Q2hpbGROb2RlcyIsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0Q2hpbGROb2Rl
cyk7CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKCJwYXVzZSIsICZJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcjo6cGF1c2UpOwogICAgICAgIGRpc3BhdGNoTWFwLmFkZCgiYWN0aXZhdGVCcmVha3Bv
aW50cyIsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6YWN0aXZhdGVCcmVha3BvaW50cyk7
CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKCJkaXNhYmxlTW9uaXRvcmluZ1hIUiIsICZJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzYWJsZU1vbml0b3JpbmdYSFIpOwogICAgICAgIGRpc3Bh
dGNoTWFwLmFkZCgiYXBwbHlTdHlsZVRleHQiLCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6
OmFwcGx5U3R5bGVUZXh0KTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoInN0ZXBPdXRPZkZ1bmN0
aW9uIiwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpzdGVwT3V0T2ZGdW5jdGlvbik7CiAg
ICAgICAgZGlzcGF0Y2hNYXAuYWRkKCJoaWRlRE9NTm9kZUhpZ2hsaWdodCIsICZJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcjo6aGlkZURPTU5vZGVIaWdobGlnaHQpOwogICAgICAgIGRpc3BhdGNo
TWFwLmFkZCgic2V0QXR0cmlidXRlIiwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpzZXRB
dHRyaWJ1dGUpOwogICAgICAgIGRpc3BhdGNoTWFwLmFkZCgicmVzdW1lIiwgJkluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyOjpyZXN1bWUpOwogICAgICAgIGRpc3BhdGNoTWFwLmFkZCgiY29weU5v
ZGUiLCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmNvcHlOb2RlKTsKICAgICAgICBkaXNw
YXRjaE1hcC5hZGQoImRpZEV2YWx1YXRlRm9yVGVzdEluRnJvbnRlbmQiLCAmSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI6OmRpZEV2YWx1YXRlRm9yVGVzdEluRnJvbnRlbmQpOwogICAgICAgIGRp
c3BhdGNoTWFwLmFkZCgic2V0UnVsZVNlbGVjdG9yIiwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyOjpzZXRSdWxlU2VsZWN0b3IpOwogICAgICAgIGRpc3BhdGNoTWFwLmFkZCgiZGlzcGF0Y2hP
bkluamVjdGVkU2NyaXB0IiwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaE9u
SW5qZWN0ZWRTY3JpcHQpOwogICAgICAgIGRpc3BhdGNoTWFwLmFkZCgiZ2V0UHJvZmlsZUhlYWRl
cnMiLCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFByb2ZpbGVIZWFkZXJzKTsKICAg
ICAgICBkaXNwYXRjaE1hcC5hZGQoImVuYWJsZURlYnVnZ2VyIiwgJkluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyOjplbmFibGVEZWJ1Z2dlcik7CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKCJzZXRJ
bmplY3RlZFNjcmlwdFNvdXJjZSIsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6c2V0SW5q
ZWN0ZWRTY3JpcHRTb3VyY2UpOwogICAgICAgIGRpc3BhdGNoTWFwLmFkZCgic3RhcnRUaW1lbGlu
ZVByb2ZpbGVyIiwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpzdGFydFRpbWVsaW5lUHJv
ZmlsZXIpOwogICAgICAgIGRpc3BhdGNoTWFwLmFkZCgiYWRkSW5zcGVjdGVkTm9kZSIsICZJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6YWRkSW5zcGVjdGVkTm9kZSk7CiAgICAgICAgZGlzcGF0
Y2hNYXAuYWRkKCJzZXRUZXh0Tm9kZVZhbHVlIiwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
OjpzZXRUZXh0Tm9kZVZhbHVlKTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoInNldEJyZWFrcG9p
bnQiLCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnNldEJyZWFrcG9pbnQpOwogICAgICAg
IGRpc3BhdGNoTWFwLmFkZCgiZ2V0U2NyaXB0U291cmNlIiwgJkluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyOjpnZXRTY3JpcHRTb3VyY2UpOwogICAgICAgIGRpc3BhdGNoTWFwLmFkZCgic2V0UGF1
c2VPbkV4Y2VwdGlvbnNTdGF0ZSIsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6c2V0UGF1
c2VPbkV4Y2VwdGlvbnNTdGF0ZSk7CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKCJzdG9wUHJvZmls
aW5nIiwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpzdG9wUHJvZmlsaW5nKTsKICAgICAg
ICBkaXNwYXRjaE1hcC5hZGQoImdldERhdGFiYXNlVGFibGVOYW1lcyIsICZJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcjo6Z2V0RGF0YWJhc2VUYWJsZU5hbWVzKTsKICAgICAgICBkaXNwYXRjaE1h
cC5hZGQoImRpc2FibGVTZWFyY2hpbmdGb3JOb2RlIiwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyOjpkaXNhYmxlU2VhcmNoaW5nRm9yTm9kZSk7CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKCJ0
b2dnbGVTdHlsZUVuYWJsZWQiLCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnRvZ2dsZVN0
eWxlRW5hYmxlZCk7CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKCJoaWdobGlnaHRET01Ob2RlIiwg
Jkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpoaWdobGlnaHRET01Ob2RlKTsKICAgICAgICBk
aXNwYXRjaE1hcC5hZGQoInNhdmVBcHBsaWNhdGlvblNldHRpbmdzIiwgJkluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyOjpzYXZlQXBwbGljYXRpb25TZXR0aW5ncyk7CiAgICAgICAgZGlzcGF0Y2hN
YXAuYWRkKCJkaXNhYmxlUmVzb3VyY2VUcmFja2luZyIsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcjo6ZGlzYWJsZVJlc291cmNlVHJhY2tpbmcpOwogICAgICAgIGRpc3BhdGNoTWFwLmFkZCgi
c2V0T3V0ZXJIVE1MIiwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpzZXRPdXRlckhUTUwp
OwogICAgICAgIGRpc3BhdGNoTWFwLmFkZCgiZGlzYWJsZURlYnVnZ2VyIiwgJkluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyOjpkaXNhYmxlRGVidWdnZXIpOwogICAgICAgIGRpc3BhdGNoTWFwLmFk
ZCgic3RlcEludG9TdGF0ZW1lbnQiLCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnN0ZXBJ
bnRvU3RhdGVtZW50KTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoInN0ZXBPdmVyU3RhdGVtZW50
IiwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpzdGVwT3ZlclN0YXRlbWVudCk7CiAgICAg
ICAgZGlzcGF0Y2hNYXAuYWRkKCJnZXRTdHlsZVNoZWV0IiwgJkluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyOjpnZXRTdHlsZVNoZWV0KTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoInJlbW92ZUJy
ZWFrcG9pbnQiLCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnJlbW92ZUJyZWFrcG9pbnQp
OwogICAgICAgIGRpc3BhdGNoTWFwLmFkZCgic2F2ZVNlc3Npb25TZXR0aW5ncyIsICZJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcjo6c2F2ZVNlc3Npb25TZXR0aW5ncyk7CiAgICAgICAgZGlzcGF0
Y2hNYXAuYWRkKCJyZW1vdmVET01TdG9yYWdlSXRlbSIsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcjo6cmVtb3ZlRE9NU3RvcmFnZUl0ZW0pOwogICAgICAgIGRpc3BhdGNoTWFwLmFkZCgiZW5h
YmxlU2VhcmNoaW5nRm9yTm9kZSIsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6ZW5hYmxl
U2VhcmNoaW5nRm9yTm9kZSk7CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKCJnZXRDb29raWVzIiwg
Jkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRDb29raWVzKTsKICAgICAgICBkaXNwYXRj
aE1hcC5hZGQoImRpc2FibGVQcm9maWxlciIsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6
ZGlzYWJsZVByb2ZpbGVyKTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoImFkZFNjcmlwdFRvRXZh
bHVhdGVPbkxvYWQiLCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmFkZFNjcmlwdFRvRXZh
bHVhdGVPbkxvYWQpOwogICAgICAgIGRpc3BhdGNoTWFwLmFkZCgic2V0U3R5bGVQcm9wZXJ0eSIs
ICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6c2V0U3R5bGVQcm9wZXJ0eSk7CiAgICAgICAg
ZGlzcGF0Y2hNYXAuYWRkKCJ0YWtlSGVhcFNuYXBzaG90IiwgJkluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyOjp0YWtlSGVhcFNuYXBzaG90KTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoInNldFN0
eWxlVGV4dCIsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6c2V0U3R5bGVUZXh0KTsKICAg
ICAgICBkaXNwYXRjaE1hcC5hZGQoInJlbW92ZUF0dHJpYnV0ZSIsICZJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlcjo6cmVtb3ZlQXR0cmlidXRlKTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoImdl
dEV2ZW50TGlzdGVuZXJzRm9yTm9kZSIsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0
RXZlbnRMaXN0ZW5lcnNGb3JOb2RlKTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoInBlcmZvcm1T
ZWFyY2giLCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnBlcmZvcm1TZWFyY2gpOwogICAg
ICAgIGRpc3BhdGNoTWFwLmFkZCgiY2hhbmdlVGFnTmFtZSIsICZJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcjo6Y2hhbmdlVGFnTmFtZSk7CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKCJjbGVhclBy
b2ZpbGVzIiwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpjbGVhclByb2ZpbGVzKTsKICAg
ICAgICBkaXNwYXRjaE1hcC5hZGQoInJlbW92ZUFsbFNjcmlwdHNUb0V2YWx1YXRlT25Mb2FkIiwg
Jkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpyZW1vdmVBbGxTY3JpcHRzVG9FdmFsdWF0ZU9u
TG9hZCk7CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKCJnZXRQcm9maWxlckxvZ0xpbmVzIiwgJklu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRQcm9maWxlckxvZ0xpbmVzKTsKICAgICAgICBk
aXNwYXRjaE1hcC5hZGQoInJlbW92ZVByb2ZpbGUiLCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI6OnJlbW92ZVByb2ZpbGUpOwogICAgICAgIGRpc3BhdGNoTWFwLmFkZCgicHVzaE5vZGVCeVBh
dGhUb0Zyb250ZW5kIiwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpwdXNoTm9kZUJ5UGF0
aFRvRnJvbnRlbmQpOwogICAgICAgIGRpc3BhdGNoTWFwLmFkZCgicmVsZWFzZVdyYXBwZXJPYmpl
Y3RHcm91cCIsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6cmVsZWFzZVdyYXBwZXJPYmpl
Y3RHcm91cCk7CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKCJhZGRSdWxlIiwgJkluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyOjphZGRSdWxlKTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoInNldERP
TVN0b3JhZ2VJdGVtIiwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpzZXRET01TdG9yYWdl
SXRlbSk7CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKCJnZXRBcHBsaWNhdGlvbkNhY2hlcyIsICZJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0QXBwbGljYXRpb25DYWNoZXMpOwogICAgICAg
IGRpc3BhdGNoTWFwLmFkZCgiZWRpdFNjcmlwdFNvdXJjZSIsICZJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcjo6ZWRpdFNjcmlwdFNvdXJjZSk7CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKCJzdG9w
VGltZWxpbmVQcm9maWxlciIsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6c3RvcFRpbWVs
aW5lUHJvZmlsZXIpOwogICAgICAgIGRpc3BhdGNoTWFwLmFkZCgiZW5hYmxlTW9uaXRvcmluZ1hI
UiIsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6ZW5hYmxlTW9uaXRvcmluZ1hIUik7CiAg
ICAgICAgZGlzcGF0Y2hNYXAuYWRkKCJzZWFyY2hDYW5jZWxlZCIsICZJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlcjo6c2VhcmNoQ2FuY2VsZWQpOwogICAgICAgIGRpc3BhdGNoTWFwLmFkZCgic3Rh
cnRQcm9maWxpbmciLCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnN0YXJ0UHJvZmlsaW5n
KTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoImVuYWJsZVJlc291cmNlVHJhY2tpbmciLCAmSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmVuYWJsZVJlc291cmNlVHJhY2tpbmcpOwogICAgICAg
IGRpc3BhdGNoTWFwLmFkZCgiY2xlYXJDb25zb2xlTWVzc2FnZXMiLCAmSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXI6OmNsZWFyQ29uc29sZU1lc3NhZ2VzKTsKICAgICAgICBkaXNwYXRjaE1hcC5h
ZGQoImdldElubGluZVN0eWxlIiwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRJbmxp
bmVTdHlsZSk7CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKCJnZXRPdXRlckhUTUwiLCAmSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXI6OmdldE91dGVySFRNTCk7CiAgICAgICAgZGlzcGF0Y2hNYXAu
YWRkKCJnZXRDb21wdXRlZFN0eWxlIiwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRD
b21wdXRlZFN0eWxlKTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoImRlYWN0aXZhdGVCcmVha3Bv
aW50cyIsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6ZGVhY3RpdmF0ZUJyZWFrcG9pbnRz
KTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoImdldFJ1bGVSYW5nZXMiLCAmSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI6OmdldFJ1bGVSYW5nZXMpOwogICAgICAgIGRpc3BhdGNoTWFwLmFkZCgi
Z2V0UmVzb3VyY2VDb250ZW50IiwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRSZXNv
dXJjZUNvbnRlbnQpOwogICAgICAgIGRpc3BhdGNoTWFwLmFkZCgiZ2V0RE9NU3RvcmFnZUVudHJp
ZXMiLCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldERPTVN0b3JhZ2VFbnRyaWVzKTsK
ICAgICAgICBkaXNwYXRjaE1hcC5hZGQoInJlbW92ZU5vZGUiLCAmSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXI6OnJlbW92ZU5vZGUpOwogICAgICAgIGRpc3BhdGNoTWFwLmFkZCgiZ2V0U3R5bGVz
IiwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRTdHlsZXMpOwogICAgICAgIGRpc3Bh
dGNoTWFwLmFkZCgiZW5hYmxlUHJvZmlsZXIiLCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6
OmVuYWJsZVByb2ZpbGVyKTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoImdldEFsbFN0eWxlcyIs
ICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0QWxsU3R5bGVzKTsKICAgICAgICBkaXNw
YXRjaE1hcC5hZGQoImRlbGV0ZUNvb2tpZSIsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6
ZGVsZXRlQ29va2llKTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoInN0b3JlTGFzdEFjdGl2ZVBh
bmVsIiwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpzdG9yZUxhc3RBY3RpdmVQYW5lbCk7
CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKCJnZXRQcm9maWxlIiwgJkluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyOjpnZXRQcm9maWxlKTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoInJlbG9hZFBh
Z2UiLCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnJlbG9hZFBhZ2UpOwogICAgfQoKICAg
IFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gcGFyc2VkTWVzc2FnZSA9IEluc3BlY3RvclZhbHVlOjpw
YXJzZUpTT04obWVzc2FnZSk7CiAgICBpZiAoIXBhcnNlZE1lc3NhZ2UpIHsKICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKDAsICJkaXNwYXRj
aCIsICJFcnJvcjogSW52YWxpZCBtZXNzYWdlIGZvcm1hdC4gTWVzc2FnZSBzaG91bGQgYmUgaW4g
SlNPTiBmb3JtYXQuIik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIFJlZlB0cjxJbnNwZWN0
b3JBcnJheT4gbWVzc2FnZUFycmF5ID0gcGFyc2VkTWVzc2FnZS0+YXNBcnJheSgpOwogICAgaWYg
KCFtZXNzYWdlQXJyYXkpIHsKICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICBy
ZXBvcnRQcm90b2NvbEVycm9yKDAsICJkaXNwYXRjaCIsICJFcnJvcjogSW52YWxpZCBtZXNzYWdl
IGZvcm1hdC4gVGhlIG1lc3NhZ2Ugc2hvdWxkIGJlIGEgSlNPTmlmaWVkIGFycmF5IG9mIGFyZ3Vt
ZW50cy4iKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKCFtZXNzYWdlQXJyYXktPmxl
bmd0aCgpKSB7CiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgcmVwb3J0UHJv
dG9jb2xFcnJvcigwLCAiZGlzcGF0Y2giLCAiRXJyb3I6IEludmFsaWQgbWVzc2FnZSBmb3JtYXQu
IEVtcHR5IG1lc3NhZ2Ugd2FzIHJlY2VpdmVkLiIpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAg
ICBTdHJpbmcgbWV0aG9kTmFtZTsKICAgIGlmICghbWVzc2FnZUFycmF5LT5nZXQoMCktPmFzU3Ry
aW5nKCZtZXRob2ROYW1lKSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAg
IHJlcG9ydFByb3RvY29sRXJyb3IoMCwgImRpc3BhdGNoIiwgIkVycm9yOiBJbnZhbGlkIG1lc3Nh
Z2UgZm9ybWF0LiBUaGUgZmlyc3QgZWxlbWVudCBvZiB0aGUgbWVzc2FnZSBzaG91bGQgYmUgbWV0
aG9kIG5hbWUuIik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIEhhc2hNYXA8U3RyaW5nLCBD
YWxsSGFuZGxlcj46Oml0ZXJhdG9yIGl0ID0gZGlzcGF0Y2hNYXAuZmluZChtZXRob2ROYW1lKTsK
ICAgIGlmIChpdCA9PSBkaXNwYXRjaE1hcC5lbmQoKSkgewogICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoMCwgImRpc3BhdGNoIiwgU3RyaW5n
Ojpmb3JtYXQoIkVycm9yOiBJbnZhbGlkIG1ldGhvZCBuYW1lLiAnJXMnIHdhc24ndCBmb3VuZC4i
LCBtZXRob2ROYW1lLnV0ZjgoKS5kYXRhKCkpKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAg
KCgqdGhpcykuKml0LT5zZWNvbmQpKG1lc3NhZ2VBcnJheSk7Cn0KCnZvaWQgSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI6OnJlcG9ydFByb3RvY29sRXJyb3IoY29uc3QgbG9uZyBjYWxsSWQsIGNv
bnN0IFN0cmluZyYgbWV0aG9kLCBjb25zdCBTdHJpbmcmIGVycm9yVGV4dCkgY29uc3QKewogICAg
UmVmUHRyPEluc3BlY3RvckFycmF5PiBhcmd1bWVudHMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRl
KCk7CiAgICBhcmd1bWVudHMtPnB1c2hTdHJpbmcoInJlcG9ydFByb3RvY29sRXJyb3IiKTsKICAg
IGFyZ3VtZW50cy0+cHVzaE51bWJlcihjYWxsSWQpOwogICAgYXJndW1lbnRzLT5wdXNoU3RyaW5n
KG1ldGhvZCk7CiAgICBhcmd1bWVudHMtPnB1c2hTdHJpbmcoZXJyb3JUZXh0KTsKICAgIG1faW5z
cGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdG9yQ2xpZW50KCktPnNlbmRNZXNzYWdlVG9Gcm9udGVu
ZChhcmd1bWVudHMtPnRvSlNPTlN0cmluZygpKTsKfQoKfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQoK
I2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>