<?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>137636</bug_id>
          
          <creation_ts>2014-10-11 10:00:00 -0700</creation_ts>
          <short_desc>Web Inspector: move unchecked InspectorValues into Protocol namespace</short_desc>
          <delta_ts>2018-01-24 14:47:19 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>INVALID</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brian Burg">burg</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bburg</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>graouts</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>inspector-bugzilla-changes</cc>
    
    <cc>joepeck</cc>
    
    <cc>mkwst</cc>
    
    <cc>rakuco</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1041135</commentid>
    <comment_count>0</comment_count>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-10-11 10:00:00 -0700</bug_when>
    <thetext>In efforts to use unchecked inspector objects less, these are moved into the Protocol namespace. Subsequent patches will start converting agents to use Protocol::Domain::Object instances instead of unchecked objects.

Renamings:

Inspector{Object, Value, Array} -&gt; Protocol::Unchecked{Object, Value, Array}
InspectorString, InspectorBasicValue -&gt; Protocol::ScalarValue

Refactor:
* Remove ArrayItemHelper
* Combine InspectorValues.h and InspectorProtocolTypes.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1041136</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2014-10-11 10:00:37 -0700</bug_when>
    <thetext>&lt;rdar://problem/18623109&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1041137</commentid>
    <comment_count>2</comment_count>
      <attachid>239678</attachid>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-10-11 10:16:13 -0700</bug_when>
    <thetext>Created attachment 239678
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1041138</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-10-11 10:16:59 -0700</bug_when>
    <thetext>This patch modifies the WEB_REPLAY inputs generator. Please ensure that you have rebaselined any generator test results (i.e., by running `Tools/Scripts/run-input-generator-tests --reset-results`)

This patch modifies the inspector protocol generator. Please ensure that you have rebaselined any generator test results (i.e., by running `Tools/Scripts/run-inspector-generator-tests --reset-results`)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1041139</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-10-11 10:17:25 -0700</bug_when>
    <thetext>Attachment 239678 did not pass style-queue:


ERROR: Source/JavaScriptCore/inspector/InspectorProtocolTypes.cpp:48:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Source/JavaScriptCore/inspector/InspectorProtocolTypes.cpp:49:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Source/JavaScriptCore/inspector/InspectorProtocolTypes.cpp:50:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Source/JavaScriptCore/inspector/InspectorProtocolTypes.cpp:51:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Source/JavaScriptCore/inspector/InspectorProtocolTypes.cpp:52:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Source/JavaScriptCore/inspector/InspectorProtocolTypes.cpp:53:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Source/JavaScriptCore/inspector/InspectorProtocolTypes.cpp:54:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Source/JavaScriptCore/inspector/InspectorProtocolTypes.cpp:55:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Source/JavaScriptCore/inspector/InspectorProtocolTypes.cpp:56:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Source/JavaScriptCore/inspector/InspectorProtocolTypes.cpp:57:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Source/JavaScriptCore/inspector/InspectorProtocolTypes.cpp:58:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Source/JavaScriptCore/inspector/InspectorProtocolTypes.cpp:59:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Source/JavaScriptCore/inspector/InspectorProtocolTypes.cpp:101:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/inspector/InspectorProtocolTypes.cpp:408:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/inspector/InspectorProtocolTypes.cpp:446:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/inspector/InspectorProtocolTypes.cpp:449:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/inspector/InspectorProtocolTypes.cpp:492:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/inspector/InspectorProtocolTypes.cpp:761:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
ERROR: Source/JavaScriptCore/inspector/InspectorProtocolTypes.cpp:772:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
ERROR: Source/JavaScriptCore/inspector/InspectorProtocolTypes.h:97:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/inspector/InspectorProtocolTypes.h:445:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/inspector/InspectorProtocolTypes.h:450:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/inspector/InspectorProtocolTypes.h:455:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/inspector/InspectorProtocolTypes.h:460:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/inspector/InspectorProtocolTypes.h:465:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/inspector/InspectorProtocolTypes.h:470:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/inspector/InspectorProtocolTypes.h:475:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/inspector/InspectorProtocolTypes.h:480:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/inspector/InspectorProtocolTypes.h:485:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/inspector/InspectorStyleSheet.h:66:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generator.py:47:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generator_templates.py:253:  whitespace before &apos;)&apos;  [pep8/E202] [5]
Total errors found: 32 in 92 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1041153</commentid>
    <comment_count>5</comment_count>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-10-11 11:33:22 -0700</bug_when>
    <thetext>Looks like I will need to revert the InspectorString -&gt; ScalarValue change. It&apos;s not safe to put WTF::String inside a union.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1041164</commentid>
    <comment_count>6</comment_count>
      <attachid>239688</attachid>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-10-11 15:29:08 -0700</bug_when>
    <thetext>Created attachment 239688
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1041166</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-10-11 15:30:46 -0700</bug_when>
    <thetext>Attachment 239688 did not pass style-queue:


ERROR: Source/JavaScriptCore/inspector/InspectorProtocolTypes.cpp:48:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Source/JavaScriptCore/inspector/InspectorProtocolTypes.cpp:49:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Source/JavaScriptCore/inspector/InspectorProtocolTypes.cpp:50:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Source/JavaScriptCore/inspector/InspectorProtocolTypes.cpp:51:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Source/JavaScriptCore/inspector/InspectorProtocolTypes.cpp:52:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Source/JavaScriptCore/inspector/InspectorProtocolTypes.cpp:53:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Source/JavaScriptCore/inspector/InspectorProtocolTypes.cpp:54:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Source/JavaScriptCore/inspector/InspectorProtocolTypes.cpp:55:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Source/JavaScriptCore/inspector/InspectorProtocolTypes.cpp:56:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Source/JavaScriptCore/inspector/InspectorProtocolTypes.cpp:57:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Source/JavaScriptCore/inspector/InspectorProtocolTypes.cpp:58:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Source/JavaScriptCore/inspector/InspectorProtocolTypes.cpp:59:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generator.py:47:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generator_templates.py:253:  whitespace before &apos;)&apos;  [pep8/E202] [5]
Total errors found: 14 in 92 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042149</commentid>
    <comment_count>8</comment_count>
      <attachid>239688</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2014-10-16 12:09:37 -0700</bug_when>
    <thetext>Comment on attachment 239688
Patch

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

Looks good to me. Despite my initial aversion to the name it actually is reasonable and a keen naming choice.

&gt; Source/JavaScriptCore/ChangeLog:11
&gt; +        whose fields are shape-checked when going across the channel to or from the frontend&gt;

Typo: &apos;&gt;&apos;

&gt; Source/JavaScriptCore/inspector/ConsoleMessage.cpp:227
&gt; -        jsonObj-&gt;setStackTrace(m_callStack-&gt;buildInspectorArray());
&gt; +        jsonObj-&gt;setStackTrace(m_callStack-&gt;buildUncheckedArray());

Maybe it is just me, but I find &quot;buildInspectorArray&quot; to be clearer than &quot;buildUncheckedArray&quot;.

&gt; Source/WebCore/inspector/InspectorApplicationCacheAgent.h:39
&gt; +class UncheckedObject;
&gt; +class UncheckedValue;

In the wrong namespace. Needs namespace Protocol {}

&gt; Source/WebCore/inspector/InspectorPageAgent.h:47
&gt; +class UncheckedArray;

Namespace.

&gt; Source/WebCore/inspector/InspectorResourceAgent.h:45
&gt; +class UncheckedArray;

Namespace.

&gt; Source/WebCore/inspector/InspectorWorkerAgent.h:40
&gt; +class UncheckedObject;

Namespace. Given that these are in the wrong namespace maybe they are unnecessary forward declarations due to the includes. So maybe they can just be removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1392777</commentid>
    <comment_count>9</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2018-01-24 14:42:51 -0800</bug_when>
    <thetext>I don&apos;t think this is applicable anymore, right?</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>239678</attachid>
            <date>2014-10-11 10:16:13 -0700</date>
            <delta_ts>2014-10-11 15:29:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137636-20141011101616.patch</filename>
            <type>text/plain</type>
            <size>440956</size>
            <attacher name="Brian Burg">burg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc0NTU4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA3
YTAzOTIzZDQzMzRhNDdlYTUyZGFlZTQyODdmYTQ3NDRhNTJlMWFiLi45YTUwOTUzMWYxMWU2MDQz
NjEzYTYzNzVhNDUzMTA2YzFkMDAxODhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMjggQEAKKzIwMTQtMTAtMTEgIEJyaWFuIEouIEJ1cmcgIDxidXJnQGNzLndhc2hpbmd0
b24uZWR1PgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IG1vdmUgdW5jaGVja2VkIEluc3BlY3Rv
clZhbHVlcyBpbnRvIFByb3RvY29sIG5hbWVzcGFjZQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3NjM2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgSW4gZWZmb3J0cyB0byByZWR1Y2UgdXNlcyBvZiAicmF3
IiBpbnNwZWN0b3Igb2JqZWN0cyB0aHJvdWdob3V0IHRoZSBjb2RlYmFzZSwKKyAgICAgICAgdGhp
cyBwYXRjaCBtb3ZlcyBJbnNwZWN0b3JWYWx1ZXMgaW50byB0aGUgUHJvdG9jb2wgbmFtZXNwYWNl
LiBTdWJzZXF1ZW50IHdvcmsKKyAgICAgICAgd2lsbCBjb252ZXJ0IHVzZXMgb2YgdW5jaGVja2Vk
IG9iamVjdHMgdG8gUHJvdG9jb2w6OkRvbWFpbjo6T2JqZWN0IGluc3RhbmNlcywKKyAgICAgICAg
d2hvc2UgZmllbGRzIGFyZSBzaGFwZS1jaGVja2VkIHdoZW4gZ29pbmcgYWNyb3NzIHRoZSBjaGFu
bmVsIHRvIG9yIGZyb20gdGhlIGZyb250ZW5kPgorCisgICAgICAgIFJlbmFtaW5nczoKKworICAg
ICAgICBJbnNwZWN0b3J7T2JqZWN0LCBWYWx1ZSwgQXJyYXl9IC0+IFByb3RvY29sOjpVbmNoZWNr
ZWR7T2JqZWN0LCBWYWx1ZSwgQXJyYXl9CisgICAgICAgIEluc3BlY3RvclN0cmluZywgSW5zcGVj
dG9yQmFzaWNWYWx1ZSAtPiBQcm90b2NvbDo6U2NhbGFyVmFsdWUKKworICAgICAgICBUaGlzIHBh
dGNoIGFsc28gcmVtb3ZlcyB0aGUgdW5uZWNlc3NhcnkgaW5kaXJlY3Rpb24gZnJvbSBBcnJheUl0
ZW1IZWxwZXIgYW5kCisgICAgICAgIG1vdmVzIEluc3BlY3RvclZhbHVlIHN1YmNsYXNzZXMgKG5v
dyBuYW1lZCBVbmNoZWNrZWRWYWx1ZSkgdG8gSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oCisKKyAg
ICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9q
L0phdmFTY3JpcHRDb3JlLnZjeHByb2o6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJv
ai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnM6CisgICAgICAgICogSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiaW5kaW5ncy9TY3JpcHRW
YWx1ZS5jcHA6CisgICAgICAgIChEZXByZWNhdGVkOjpqc1RvVW5jaGVja2VkVmFsdWUpOgorICAg
ICAgICAoRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWU6OnRvVW5jaGVja2VkVmFsdWUpOgorICAgICAg
ICAoRGVwcmVjYXRlZDo6anNUb0luc3BlY3RvclZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKERl
cHJlY2F0ZWQ6OlNjcmlwdFZhbHVlOjp0b0luc3BlY3RvclZhbHVlKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBiaW5kaW5ncy9TY3JpcHRWYWx1ZS5oOgorICAgICAgICAqIGluc3BlY3Rvci9Db25zb2xl
TWVzc2FnZS5jcHA6CisgICAgICAgIChJbnNwZWN0b3I6OkNvbnNvbGVNZXNzYWdlOjphZGRUb0Zy
b250ZW5kKToKKyAgICAgICAgKiBpbnNwZWN0b3IvQ29udGVudFNlYXJjaFV0aWxpdGllcy5jcHA6
CisgICAgICAgICogaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0LmNwcDoKKyAgICAgICAgKEluc3Bl
Y3Rvcjo6SW5qZWN0ZWRTY3JpcHQ6OmdldEZ1bmN0aW9uRGV0YWlscyk6CisgICAgICAgIChJbnNw
ZWN0b3I6OkluamVjdGVkU2NyaXB0OjpnZXRQcm9wZXJ0aWVzKToKKyAgICAgICAgKEluc3BlY3Rv
cjo6SW5qZWN0ZWRTY3JpcHQ6OmdldEludGVybmFsUHJvcGVydGllcyk6CisgICAgICAgIChJbnNw
ZWN0b3I6OkluamVjdGVkU2NyaXB0Ojp3cmFwQ2FsbEZyYW1lcyk6CisgICAgICAgIChJbnNwZWN0
b3I6OkluamVjdGVkU2NyaXB0Ojp3cmFwT2JqZWN0KToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5q
ZWN0ZWRTY3JpcHQ6OndyYXBUYWJsZSk6CisgICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2Ny
aXB0OjppbnNwZWN0T2JqZWN0KToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQ6
OnJlbGVhc2VPYmplY3QpOgorICAgICAgICAqIGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdEJhc2Uu
Y3BwOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdEJhc2U6Om1ha2VDYWxsKToK
KyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHRCYXNlOjptYWtlRXZhbENhbGwpOgor
ICAgICAgICAqIGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdEJhc2UuaDoKKyAgICAgICAgKiBpbnNw
ZWN0b3IvSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5q
ZWN0ZWRTY3JpcHRNYW5hZ2VyOjppbmplY3RlZFNjcmlwdEZvck9iamVjdElkKToKKyAgICAgICAg
KiBpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuY3BwOgorICAgICAgICAoSW5z
cGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlOjpzZW5kSWZB
Y3RpdmUpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6
ZGlzcGF0Y2gpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cjo6c2VuZFJlc3BvbnNlKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXI6OnJlcG9ydFByb3RvY29sRXJyb3IpOgorICAgICAgICAoSW5zcGVjdG9yOjpnZXRQ
cm9wZXJ0eVZhbHVlKToKKyAgICAgICAgKEluc3BlY3Rvcjo6QXNNZXRob2RCcmlkZ2VzOjphc0lu
dGVnZXIpOgorICAgICAgICAoSW5zcGVjdG9yOjpBc01ldGhvZEJyaWRnZXM6OmFzRG91YmxlKToK
KyAgICAgICAgKEluc3BlY3Rvcjo6QXNNZXRob2RCcmlkZ2VzOjphc1N0cmluZyk6CisgICAgICAg
IChJbnNwZWN0b3I6OkFzTWV0aG9kQnJpZGdlczo6YXNCb29sZWFuKToKKyAgICAgICAgKEluc3Bl
Y3Rvcjo6QXNNZXRob2RCcmlkZ2VzOjphc09iamVjdCk6CisgICAgICAgIChJbnNwZWN0b3I6OkFz
TWV0aG9kQnJpZGdlczo6YXNBcnJheSk6CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyOjpnZXRJbnRlZ2VyKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXI6OmdldERvdWJsZSk6CisgICAgICAgIChJbnNwZWN0b3I6Oklu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRTdHJpbmcpOgorICAgICAgICAoSW5zcGVjdG9y
OjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0Qm9vbGVhbik6CisgICAgICAgIChJbnNw
ZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRPYmplY3QpOgorICAgICAgICAo
SW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0QXJyYXkpOgorICAgICAg
ICAqIGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oOgorICAgICAgICAqIGlu
c3BlY3Rvci9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcC4KKyAgICAgICAgKElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlByb3RvY29sOjpVbmNoZWNrZWRWYWx1ZTo6YXNCb29sZWFuKToK
KyAgICAgICAgKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlByb3RvY29sOjpVbmNoZWNrZWRWYWx1ZTo6
YXNEb3VibGUpOgorICAgICAgICAoSW5zcGVjdG9yOjpQcm90b2NvbDo6UHJvdG9jb2w6OlVuY2hl
Y2tlZFZhbHVlOjphc0ludGVnZXIpOgorICAgICAgICAoSW5zcGVjdG9yOjpQcm90b2NvbDo6UHJv
dG9jb2w6OlVuY2hlY2tlZFZhbHVlOjphc1N0cmluZyk6CisgICAgICAgIChJbnNwZWN0b3I6OlBy
b3RvY29sOjpQcm90b2NvbDo6VW5jaGVja2VkVmFsdWU6OmFzVmFsdWUpOgorICAgICAgICAoSW5z
cGVjdG9yOjpQcm90b2NvbDo6UHJvdG9jb2w6OlVuY2hlY2tlZFZhbHVlOjphc09iamVjdCk6Cisg
ICAgICAgIChJbnNwZWN0b3I6OlByb3RvY29sOjpQcm90b2NvbDo6VW5jaGVja2VkVmFsdWU6OmFz
QXJyYXkpOgorICAgICAgICAoSW5zcGVjdG9yOjpQcm90b2NvbDo6UHJvdG9jb2w6OlVuY2hlY2tl
ZFZhbHVlOjpwYXJzZUpTT04pOgorICAgICAgICAoSW5zcGVjdG9yOjpQcm90b2NvbDo6UHJvdG9j
b2w6OlVuY2hlY2tlZFZhbHVlOjp0b0pTT05TdHJpbmcpOgorICAgICAgICAoSW5zcGVjdG9yOjpQ
cm90b2NvbDo6UHJvdG9jb2w6OlVuY2hlY2tlZFZhbHVlOjp3cml0ZUpTT04pOgorICAgICAgICAo
SW5zcGVjdG9yOjpQcm90b2NvbDo6U2NhbGFyVmFsdWU6OmFzQm9vbGVhbik6CisgICAgICAgIChJ
bnNwZWN0b3I6OlByb3RvY29sOjpTY2FsYXJWYWx1ZTo6YXNEb3VibGUpOgorICAgICAgICAoSW5z
cGVjdG9yOjpQcm90b2NvbDo6U2NhbGFyVmFsdWU6OmFzSW50ZWdlcik6CisgICAgICAgIChJbnNw
ZWN0b3I6OlByb3RvY29sOjpTY2FsYXJWYWx1ZTo6YXNTdHJpbmcpOgorICAgICAgICAoSW5zcGVj
dG9yOjpQcm90b2NvbDo6U2NhbGFyVmFsdWU6OndyaXRlSlNPTik6CisgICAgICAgIChJbnNwZWN0
b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3RCYXNlOjp+VW5jaGVja2VkT2JqZWN0QmFzZSk6
CisgICAgICAgIChJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3RCYXNlOjphc09i
amVjdCk6CisgICAgICAgIChJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3RCYXNl
OjpvcGVuQWNjZXNzb3JzKToKKyAgICAgICAgKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tl
ZE9iamVjdEJhc2U6OmdldEJvb2xlYW4pOgorICAgICAgICAoSW5zcGVjdG9yOjpQcm90b2NvbDo6
VW5jaGVja2VkT2JqZWN0QmFzZTo6Z2V0U3RyaW5nKToKKyAgICAgICAgKEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlVuY2hlY2tlZE9iamVjdEJhc2U6OmdldE9iamVjdCk6CisgICAgICAgIChJbnNwZWN0
b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3RCYXNlOjpnZXRBcnJheSk6CisgICAgICAgIChJ
bnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3RCYXNlOjpnZXQpOgorICAgICAgICAo
SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0QmFzZTo6cmVtb3ZlKToKKyAgICAg
ICAgKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdEJhc2U6OndyaXRlSlNPTik6
CisgICAgICAgIChJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3RCYXNlOjpVbmNo
ZWNrZWRPYmplY3RCYXNlKToKKyAgICAgICAgKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tl
ZEFycmF5QmFzZTo6flVuY2hlY2tlZEFycmF5QmFzZSk6CisgICAgICAgIChJbnNwZWN0b3I6OlBy
b3RvY29sOjpVbmNoZWNrZWRBcnJheUJhc2U6OmFzQXJyYXkpOgorICAgICAgICAoSW5zcGVjdG9y
OjpQcm90b2NvbDo6VW5jaGVja2VkQXJyYXlCYXNlOjp3cml0ZUpTT04pOgorICAgICAgICAoSW5z
cGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkQXJyYXlCYXNlOjpVbmNoZWNrZWRBcnJheUJhc2Up
OgorICAgICAgICAoSW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkQXJyYXlCYXNlOjpnZXQp
OgorICAgICAgICAoSW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0OjpjcmVhdGUp
OgorICAgICAgICAoSW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkQXJyYXk6OmNyZWF0ZSk6
CisgICAgICAgIChJbnNwZWN0b3I6OlByb3RvY29sOjpQcm90b2NvbDo6VW5jaGVja2VkVmFsdWU6
Om51bGwpOgorICAgICAgICAoSW5zcGVjdG9yOjpQcm90b2NvbDo6U2NhbGFyVmFsdWU6OmNyZWF0
ZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclByb3RvY29sVHlwZXMuaDoKKyAgICAg
ICAgKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdEJhc2U6OmZpbmQpOgorICAg
ICAgICAoSW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0QmFzZTo6c2V0Qm9vbGVh
bik6CisgICAgICAgIChJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3RCYXNlOjpz
ZXRJbnRlZ2VyKToKKyAgICAgICAgKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVj
dEJhc2U6OnNldERvdWJsZSk6CisgICAgICAgIChJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNr
ZWRPYmplY3RCYXNlOjpzZXRTdHJpbmcpOgorICAgICAgICAoSW5zcGVjdG9yOjpQcm90b2NvbDo6
VW5jaGVja2VkT2JqZWN0QmFzZTo6c2V0VmFsdWUpOgorICAgICAgICAoSW5zcGVjdG9yOjpQcm90
b2NvbDo6VW5jaGVja2VkT2JqZWN0QmFzZTo6c2V0T2JqZWN0KToKKyAgICAgICAgKEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdEJhc2U6OnNldEFycmF5KToKKyAgICAgICAgKElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZEFycmF5QmFzZTo6cHVzaEJvb2xlYW4pOgorICAg
ICAgICAoSW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkQXJyYXlCYXNlOjpwdXNoSW50ZWdl
cik6CisgICAgICAgIChJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRBcnJheUJhc2U6OnB1
c2hEb3VibGUpOgorICAgICAgICAoSW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkQXJyYXlC
YXNlOjpwdXNoU3RyaW5nKToKKyAgICAgICAgKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tl
ZEFycmF5QmFzZTo6cHVzaFZhbHVlKToKKyAgICAgICAgKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVu
Y2hlY2tlZEFycmF5QmFzZTo6cHVzaE9iamVjdCk6CisgICAgICAgIChJbnNwZWN0b3I6OlByb3Rv
Y29sOjpVbmNoZWNrZWRBcnJheUJhc2U6OnB1c2hBcnJheSk6CisgICAgICAgIChJbnNwZWN0b3I6
OlByb3RvY29sOjpBcnJheTxTdHJpbmc+OjphZGRJdGVtKToKKyAgICAgICAgKEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkFycmF5PGludD46OmFkZEl0ZW0pOgorICAgICAgICAoSW5zcGVjdG9yOjpQcm90
b2NvbDo6QXJyYXk8ZG91YmxlPjo6YWRkSXRlbSk6CisgICAgICAgIChJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBcnJheTxib29sPjo6YWRkSXRlbSk6CisgICAgICAgIChJbnNwZWN0b3I6OlByb3RvY29s
OjpBcnJheTxQcm90b2NvbDo6VW5jaGVja2VkVmFsdWU+OjphZGRJdGVtKToKKyAgICAgICAgKElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+OjphZGRJ
dGVtKToKKyAgICAgICAgKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFByb3RvY29sOjpVbmNo
ZWNrZWRBcnJheT46OmFkZEl0ZW0pOgorICAgICAgICAoSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJy
YXk8VD46OmFkZEl0ZW0pOgorICAgICAgICAoSW5zcGVjdG9yOjpQcm90b2NvbDo6UHJpbWl0aXZl
QmluZGluZ1RyYWl0czo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUpOgorICAgICAgICAoSW5z
cGVjdG9yOjpQcm90b2NvbDo6QmluZGluZ1RyYWl0czxBcnJheTxUPj46OnJ1bnRpbWVDYXN0KToK
KyAgICAgICAgKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkJpbmRpbmdUcmFpdHM8QXJyYXk8VD4+Ojph
c3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZSk6CisgICAgICAgIChJbnNwZWN0b3I6OlByb3RvY29s
OjpCaW5kaW5nVHJhaXRzPFByb3RvY29sOjpVbmNoZWNrZWRWYWx1ZT46OmFzc2VydFZhbHVlSGFz
RXhwZWN0ZWRUeXBlKToKKyAgICAgICAgKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5OjpvcGVu
QWNjZXNzb3JzKTogRGVsZXRlZC4KKyAgICAgICAgKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5
OjphZGRJdGVtKTogRGVsZXRlZC4KKyAgICAgICAgKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlN0cnVj
dEl0ZW1UcmFpdHM6OnB1c2hSZWZQdHIpOiBEZWxldGVkLgorICAgICAgICAoSW5zcGVjdG9yOjpQ
cm90b2NvbDo6QXJyYXlJdGVtSGVscGVyPFN0cmluZz46OlRyYWl0czo6cHVzaFJhdyk6IERlbGV0
ZWQuCisgICAgICAgIChJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheUl0ZW1IZWxwZXI8aW50Pjo6
VHJhaXRzOjpwdXNoUmF3KTogRGVsZXRlZC4KKyAgICAgICAgKEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkFycmF5SXRlbUhlbHBlcjxkb3VibGU+OjpUcmFpdHM6OnB1c2hSYXcpOiBEZWxldGVkLgorICAg
ICAgICAoSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXlJdGVtSGVscGVyPGJvb2w+OjpUcmFpdHM6
OnB1c2hSYXcpOiBEZWxldGVkLgorICAgICAgICAoSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXlJ
dGVtSGVscGVyPEluc3BlY3RvclZhbHVlPjo6VHJhaXRzOjpwdXNoUmVmUHRyKTogRGVsZXRlZC4K
KyAgICAgICAgKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5SXRlbUhlbHBlcjxJbnNwZWN0b3JP
YmplY3Q+OjpUcmFpdHM6OnB1c2hSZWZQdHIpOiBEZWxldGVkLgorICAgICAgICAoSW5zcGVjdG9y
OjpQcm90b2NvbDo6QXJyYXlJdGVtSGVscGVyPEluc3BlY3RvckFycmF5Pjo6VHJhaXRzOjpwdXNo
UmVmUHRyKTogRGVsZXRlZC4KKyAgICAgICAgKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5SXRl
bUhlbHBlcjxQcm90b2NvbDo6QXJyYXk8VD4+OjpUcmFpdHM6OnB1c2hSZWZQdHIpOiBEZWxldGVk
LgorICAgICAgICAoSW5zcGVjdG9yOjpQcm90b2NvbDo6QmluZGluZ1RyYWl0czxQcm90b2NvbDo6
QXJyYXk8VD4+OjpydW50aW1lQ2FzdCk6IERlbGV0ZWQuCisgICAgICAgIChJbnNwZWN0b3I6OlBy
b3RvY29sOjpCaW5kaW5nVHJhaXRzPFByb3RvY29sOjpBcnJheTxUPj46OmFzc2VydFZhbHVlSGFz
RXhwZWN0ZWRUeXBlKTogRGVsZXRlZC4KKyAgICAgICAgKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkJp
bmRpbmdUcmFpdHM8SW5zcGVjdG9yVmFsdWU+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZSk6
IERlbGV0ZWQuCisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oOiBSZW1vdmVk
LgorICAgICAgICAqIGluc3BlY3Rvci9TY3JpcHRDYWxsRnJhbWUuY3BwOgorICAgICAgICAoSW5z
cGVjdG9yOjpTY3JpcHRDYWxsRnJhbWU6OmJ1aWxkVW5jaGVja2VkT2JqZWN0KToKKyAgICAgICAg
KEluc3BlY3Rvcjo6U2NyaXB0Q2FsbEZyYW1lOjpidWlsZEluc3BlY3Rvck9iamVjdCk6IERlbGV0
ZWQuCisgICAgICAgICogaW5zcGVjdG9yL1NjcmlwdENhbGxGcmFtZS5oOgorICAgICAgICAqIGlu
c3BlY3Rvci9TY3JpcHRDYWxsU3RhY2suY3BwOgorICAgICAgICAoSW5zcGVjdG9yOjpTY3JpcHRD
YWxsU3RhY2s6OmJ1aWxkVW5jaGVja2VkQXJyYXkpOgorICAgICAgICAoSW5zcGVjdG9yOjpTY3Jp
cHRDYWxsU3RhY2s6OmJ1aWxkSW5zcGVjdG9yQXJyYXkpOiBEZWxldGVkLgorICAgICAgICAqIGlu
c3BlY3Rvci9TY3JpcHRDYWxsU3RhY2suaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0lu
c3BlY3RvckFnZW50LmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yQWdlbnQ6Omlu
c3BlY3QpOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQWdlbnQuaDoKKyAg
ICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwOgorICAg
ICAgICAoSW5zcGVjdG9yOjpidWlsZE9iamVjdEZvckJyZWFrcG9pbnRDb29raWUpOgorICAgICAg
ICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpicmVha3BvaW50QWN0aW9uc0Zy
b21Qcm90b2NvbCk6CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6
OnNldEJyZWFrcG9pbnRCeVVybCk6CisgICAgICAgIChJbnNwZWN0b3I6OnBhcnNlTG9jYXRpb24p
OgorICAgICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRCcmVha3Bv
aW50KToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Y29udGlu
dWVUb0xvY2F0aW9uKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dDo6c2NoZWR1bGVQYXVzZU9uTmV4dFN0YXRlbWVudCk6CisgICAgICAgIChJbnNwZWN0b3I6Oklu
c3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNjcmlwdEV4ZWN1dGlvbkJsb2NrZWRCeUNTUCk6CisgICAg
ICAgIChJbnNwZWN0b3I6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZFBhcnNlU291cmNlKToK
KyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6YnJlYWtQcm9ncmFt
KToKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaDoK
KyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5jcHA6Cisg
ICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvclJ1bnRpbWVBZ2VudDo6Y2FsbEZ1bmN0aW9uT24p
OgorICAgICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmdldFJ1bnRpbWVU
eXBlc0ZvclZhcmlhYmxlc0F0T2Zmc2V0cyk6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JSdW50aW1lQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2Rl
Z2VuL2dlbmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHk6CisgICAgICAgIChCYWNr
ZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfZGlzcGF0Y2hlcl9kZWNsYXJh
dGlvbl9mb3JfY29tbWFuZCk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9n
ZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHk6CisgICAgICAgIChC
YWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLmdlbmVyYXRlX291dHB1dCk6
CisgICAgICAgIChCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5l
cmF0ZV9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uX2Zvcl9jb21tYW5kKToKKyAgICAgICAgKiBp
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVh
ZGVyLnB5OgorICAgICAgICAoRnJvbnRlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLmdlbmVy
YXRlX291dHB1dCk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0
ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5OgorICAgICAgICAoRnJvbnRl
bmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2Rpc3BhdGNoZXJf
aW1wbGVtZW50YXRpb25fZm9yX2V2ZW50KToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9j
b2RlZ2VuL2dlbmVyYXRlX3Byb3RvY29sX3R5cGVzX2hlYWRlci5weToKKyAgICAgICAgKF9nZW5l
cmF0ZV9jbGFzc19mb3Jfb2JqZWN0X2RlY2xhcmF0aW9uKToKKyAgICAgICAgKF9nZW5lcmF0ZV91
bmNoZWNrZWRfc2V0dGVyX2Zvcl9tZW1iZXIpOgorICAgICAgICAoX2dlbmVyYXRlX2ZvcndhcmRf
ZGVjbGFyYXRpb25zX2Zvcl9iaW5kaW5nX3RyYWl0cyk6CisgICAgICAgICogaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weToK
KyAgICAgICAgKFByb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVf
YXNzZXJ0aW9uX2Zvcl9vYmplY3RfZGVjbGFyYXRpb24pOgorICAgICAgICAoUHJvdG9jb2xUeXBl
c0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yKToKKyAgICAgICAgKFByb3RvY29sVHlwZXNJbXBsZW1l
bnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfYXNzZXJ0aW9uX2Zvcl9lbnVtKToKKyAgICAgICAg
KiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRvci5weToKKyAgICAgICAgKEdlbmVy
YXRvci5wcm90b2NvbF90eXBlX3N0cmluZ19mb3JfdHlwZSk6CisgICAgICAgIChHZW5lcmF0b3Iu
dHlwZV9zdHJpbmdfZm9yX3VuY2hlY2tlZF9mb3JtYWxfaW5fcGFyYW1ldGVyKToKKyAgICAgICAg
KEdlbmVyYXRvci50eXBlX3N0cmluZ19mb3JfdHlwZV93aXRoX25hbWUpOgorICAgICAgICAoR2Vu
ZXJhdG9yKToKKyAgICAgICAgKEdlbmVyYXRvci50eXBlX3N0cmluZ19mb3Jfc3RhY2tfaW5fcGFy
YW1ldGVyKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRvcl90
ZW1wbGF0ZXMucHk6CisgICAgICAgICh2b2lkKToKKyAgICAgICAgKEluc3BlY3Rvcik6IERlbGV0
ZWQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMt
d2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1w
YXJhbWV0ZXJzLmpzb24tcmVzdWx0OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2V4cGVjdGVkL2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbi1yZXN1bHQ6
CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZXZlbnRzLXdpdGgt
b3B0aW9uYWwtcGFyYW1ldGVycy5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9leHBlY3RlZC9nZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMu
anNvbi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
c2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbi1yZXN1bHQ6CisgICAgICAgICogaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0
ZXJzLmpzb24tcmVzdWx0OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVj
dGVkL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uLXJlc3VsdDoK
KyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0
aW9uLWFycmF5LXR5cGUuanNvbi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbi1yZXN1bHQ6Cisg
ICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlv
bi1vYmplY3QtdHlwZS5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC90eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24tcmVzdWx0Ogor
ICAgICAgICAqIHJlcGxheS9FbmNvZGVkVmFsdWUuY3BwOgorICAgICAgICAoSlNDOjpFbmNvZGVk
VmFsdWU6OmFzT2JqZWN0KToKKyAgICAgICAgKEpTQzo6RW5jb2RlZFZhbHVlOjphc0FycmF5KToK
KyAgICAgICAgKEpTQzo6U2NhbGFyRW5jb2RpbmdUcmFpdHM8Ym9vbD46OmVuY29kZVZhbHVlKToK
KyAgICAgICAgKEpTQzo6U2NhbGFyRW5jb2RpbmdUcmFpdHM8ZG91YmxlPjo6ZW5jb2RlVmFsdWUp
OgorICAgICAgICAoSlNDOjpTY2FsYXJFbmNvZGluZ1RyYWl0czxmbG9hdD46OmVuY29kZVZhbHVl
KToKKyAgICAgICAgKEpTQzo6U2NhbGFyRW5jb2RpbmdUcmFpdHM8aW50MzJfdD46OmVuY29kZVZh
bHVlKToKKyAgICAgICAgKEpTQzo6U2NhbGFyRW5jb2RpbmdUcmFpdHM8aW50NjRfdD46OmVuY29k
ZVZhbHVlKToKKyAgICAgICAgKEpTQzo6U2NhbGFyRW5jb2RpbmdUcmFpdHM8dWludDMyX3Q+Ojpl
bmNvZGVWYWx1ZSk6CisgICAgICAgIChKU0M6OlNjYWxhckVuY29kaW5nVHJhaXRzPHVpbnQ2NF90
Pjo6ZW5jb2RlVmFsdWUpOgorICAgICAgICAoSlNDOjpFbmNvZGVkVmFsdWU6OmdldDxFbmNvZGVk
VmFsdWU+KToKKyAgICAgICAgKiByZXBsYXkvRW5jb2RlZFZhbHVlLmg6CisgICAgICAgICogcmVw
bGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvclJlcGxheUlucHV0cy5weToKKwogMjAxNC0xMC0wOSAg
RGVhbiBKYWNrc29uICA8ZGlub0BhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIEVOQUJMRV9D
U1MzX0NPTkRJVElPTkFMX1JVTEVTCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmQxNWEyNjRiNDg0YWVmNjI3ZWZm
NDU0OGJhYjMwNTNmZWY3NDVjZS4uY2QxYWRhYjU3NWRiYWE4ZDdiOTg5YzhlODE5Y2RjYzg4N2Uw
MWYxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4NCBAQAorMjAxNC0xMC0xMSAgQnJpYW4gSi4g
QnVyZyAgPGJ1cmdAY3Mud2FzaGluZ3Rvbi5lZHU+CisKKyAgICAgICAgV2ViIEluc3BlY3Rvcjog
bW92ZSB1bmNoZWNrZWQgSW5zcGVjdG9yVmFsdWVzIGludG8gUHJvdG9jb2wgbmFtZXNwYWNlCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzc2MzYKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDaGFuZ2UgdXNl
cyBvZiBJbnNwZWN0b3JWYWx1ZSBzdWJjbGFzc2VzIHRvIFVuY2hlY2tlZFZhbHVlIHN1YmNsYXNz
ZXMuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBiZWhhdmlvciBjaGFuZ2VkLgorCisgICAg
ICAgICogRm9yd2FyZGluZ0hlYWRlcnMvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oOiBSZW1v
dmVkLgorICAgICAgICAqIFdlYkNvcmUub3JkZXI6CisgICAgICAgICogV2ViQ29yZS52Y3hwcm9q
L1dlYkNvcmUudmN4cHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hw
cm9qLmZpbHRlcnM6CisgICAgICAgICogYmluZGluZ3MvanMvSlNDb21tYW5kTGluZUFQSUhvc3RD
dXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNDb21tYW5kTGluZUFQSUhvc3Q6Omluc3Bl
Y3QpOgorICAgICAgICAqIGh0bWwvcGFyc2VyL1hTU0F1ZGl0b3JEZWxlZ2F0ZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpYU1NBdWRpdG9yRGVsZWdhdGU6OmdlbmVyYXRlVmlvbGF0aW9uUmVwb3J0
KToKKyAgICAgICAgKiBpbnNwZWN0b3IvQ29tbWFuZExpbmVBUElIb3N0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNvbW1hbmRMaW5lQVBJSG9zdDo6aW5zcGVjdEltcGwpOgorICAgICAgICAqIGlu
c3BlY3Rvci9Db21tYW5kTGluZUFQSUhvc3QuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVj
dG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVj
dG9yQXBwbGljYXRpb25DYWNoZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rv
ckNTU0FnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVQc2V1ZG9DbGFzc01hc2sp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OnNldFN0eWxlVGV4dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6c2V0UHJvcGVydHlUZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50Ojp0b2dnbGVQcm9wZXJ0eSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6c2V0UnVsZVNlbGVjdG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50Ojpmb3JjZVBzZXVkb1N0YXRlKToKKyAgICAg
ICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SW5zcGVjdG9yQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250
cm9sbGVyOjpidWlsZE9iamVjdEZvckhpZ2hsaWdodGVkTm9kZSk6CisgICAgICAgICogaW5zcGVj
dG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9y
RE9NQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VDb2xvcik6CisgICAgICAgIChX
ZWJDb3JlOjpwYXJzZUNvbmZpZ0NvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlUXVhZCk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6cGVyZm9ybVNlYXJjaCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6c2V0U2VhcmNoaW5nRm9yTm9kZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0Q29uZmlnRnJv
bVVuY2hlY2tlZE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6
c2V0SW5zcGVjdE1vZGVFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFn
ZW50OjpoaWdobGlnaHRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50
OjpoaWdobGlnaHRRdWFkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50Ojpp
bm5lckhpZ2hsaWdodFF1YWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6
OmhpZ2hsaWdodE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6Omhp
Z2hsaWdodEZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpoaWdo
bGlnaHRDb25maWdGcm9tSW5zcGVjdG9yT2JqZWN0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5z
cGVjdG9yRE9NQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRE9NRGVidWdn
ZXJBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50
OjpkaWRJbnZhbGlkYXRlU3R5bGVBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRP
TURlYnVnZ2VyQWdlbnQ6OndpbGxJbnNlcnRET01Ob2RlKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OndpbGxSZW1vdmVET01Ob2RlKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OndpbGxNb2RpZnlET01BdHRyKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OmRlc2NyaXB0aW9uRm9y
RE9NRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6
cGF1c2VPbk5hdGl2ZUV2ZW50SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
RE9NRGVidWdnZXJBZ2VudDo6d2lsbFNlbmRYTUxIdHRwUmVxdWVzdCk6CisgICAgICAgICogaW5z
cGVjdG9yL0luc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckRPTVN0b3JhZ2VBZ2VudDo6Z2V0RE9NU3RvcmFnZUl0ZW1zKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6c2V0RE9NU3RvcmFnZUl0ZW0pOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpyZW1vdmVET01TdG9yYWdlSXRlbSk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OmZpbmRTdG9yYWdl
QXJlYSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5oOgor
ICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZUFnZW50LmNwcDoKKyAgICAgICAg
KiBpbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rv
ci9JbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5z
cGVjdG9ySW5kZXhlZERCQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5k
ZXhlZERCQWdlbnQ6OnJlcXVlc3REYXRhKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9y
SW5kZXhlZERCQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpidWlsZE9iamVjdEZvclBvaW50KToKKyAgICAgICAgKFdl
YkNvcmU6OmJ1aWxkT2JqZWN0Rm9yUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpidWlsZEFycmF5
Rm9yUXVhZCk6CisgICAgICAgIChXZWJDb3JlOjpidWlsZE9iamVjdEZvckhpZ2hsaWdodCk6Cisg
ICAgICAgIChXZWJDb3JlOjpidWlsZE9iamVjdEZvclJlZ2lvbkhpZ2hsaWdodCk6CisgICAgICAg
IChXZWJDb3JlOjpidWlsZE9iamVjdEZvckNTU1JlZ2lvbnNIaWdobGlnaHQpOgorICAgICAgICAo
V2ViQ29yZTo6YnVpbGRPYmplY3RGb3JTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OmJ1aWxkT2Jq
ZWN0Rm9yQ1NTUmVnaW9uQ29udGVudENsaXApOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
T3ZlcmxheTo6ZHJhd1BhaW50UmVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRPYmplY3RG
b3JSZW5kZXJlckZyYWdtZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpidWlsZE9iamVjdEZvclNo
YXBlT3V0c2lkZSk6CisgICAgICAgIChXZWJDb3JlOjpidWlsZE9iamVjdEZvckVsZW1lbnRJbmZv
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OmJ1aWxkT2JqZWN0Rm9ySGln
aGxpZ2h0ZWROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OmRyYXdO
b2RlSGlnaGxpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OnJlc2V0
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OmV2YWx1YXRlSW5PdmVybGF5
KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5oOgorICAgICAgICAqIGlu
c3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yUGFnZUFnZW50OjphZGRTY3JpcHRUb0V2YWx1YXRlT25Mb2FkKToKKyAgICAgICAgKiBpbnNw
ZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rv
clJlcGxheUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmJ1aWxkVW5jaGVja2VkT2JqZWN0
Rm9yUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRVbmNoZWNrZWRPYmplY3RGb3JJ
bnB1dCk6CisgICAgICAgIChXZWJDb3JlOjpidWlsZFVuY2hlY2tlZE9iamVjdEZvclNlc3Npb24p
OgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRVbmNoZWNrZWRPYmplY3RGb3JTZXNzaW9uU3RhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRVbmNoZWNrZWRPYmplY3RGb3JTZWdtZW50U3RhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXplSW5wdXRUb0pTT05GdW5jdG9yOjpvcGVyYXRv
cigpKToKKyAgICAgICAgKFdlYkNvcmU6OmJ1aWxkVW5jaGVja2VkT2JqZWN0Rm9yU2VnbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSZXBsYXlBZ2VudDo6cGxheWJhY2tQYXVzZWQp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnBsYXliYWNrSGl0UG9z
aXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnJlcGxheVRv
UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVwbGF5QWdlbnQ6OmN1cnJl
bnRSZXBsYXlTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSZXBsYXlBZ2VudDo6
Z2V0U2Vzc2lvbkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVwbGF5QWdlbnQ6
OmdldFNlZ21lbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OmJ1aWxkSW5zcGVjdG9yT2JqZWN0
Rm9yUG9zaXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRJbnNwZWN0b3JP
YmplY3RGb3JJbnB1dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpidWlsZEluc3BlY3Rv
ck9iamVjdEZvclNlc3Npb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRJbnNw
ZWN0b3JPYmplY3RGb3JTZXNzaW9uU3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
YnVpbGRJbnNwZWN0b3JPYmplY3RGb3JTZWdtZW50U3RhdGUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6YnVpbGRJbnNwZWN0b3JPYmplY3RGb3JTZWdtZW50KTogRGVsZXRlZC4KKyAgICAg
ICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yUmVwbGF5QWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0
b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpidWlsZE9i
amVjdEZvckhlYWRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRPYmplY3RGb3JSZXNvdXJj
ZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclJlc291cmNlQWdlbnQ6Ondp
bGxTZW5kUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSZXNvdXJjZUFnZW50
OjpidWlsZEluaXRpYXRvck9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSZXNv
dXJjZUFnZW50OjpzZXRFeHRyYUhUVFBIZWFkZXJzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5z
cGVjdG9yUmVzb3VyY2VBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JTdHls
ZVNoZWV0LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5oOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTSWQ6Okluc3BlY3RvckNTU0lkKToKKyAgICAg
ICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpkaWRJbnZhbGlkYXRlTGF5b3V0KToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmRpZFNjaGVkdWxlU3R5bGVSZWNh
bGN1bGF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclRpbWVsaW5lQWdlbnQ6Ondp
bGxSZWNhbGN1bGF0ZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclRpbWVsaW5l
QWdlbnQ6OndpbGxQYWludCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JUaW1lbGluZUFn
ZW50Ojp3aWxsU2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclRpbWVsaW5lQWdl
bnQ6OmFkZFJlY29yZFRvVGltZWxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yVGlt
ZWxpbmVBZ2VudDo6c2V0RnJhbWVJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvclRpbWVsaW5lQWdlbnQ6OmFwcGVuZFJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JUaW1lbGluZUFnZW50OjpzZW5kRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yVGltZWxpbmVBZ2VudDo6Y3JlYXRlUmVjb3JkRW50cnkpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6cHVzaEN1cnJlbnRSZWNvcmQpOgorICAgICAgICAqIGlu
c3BlY3Rvci9JbnNwZWN0b3JUaW1lbGluZUFnZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JUaW1lbGluZUFnZW50OjpUaW1lbGluZVJlY29yZEVudHJ5OjpUaW1lbGluZVJlY29yZEVu
dHJ5KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yV29ya2VyQWdlbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yV29ya2VyQWdlbnQ6OnNlbmRNZXNzYWdlVG9Xb3JrZXIp
OgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JXb3JrZXJBZ2VudC5oOgorICAgICAgICAq
IGluc3BlY3Rvci9UaW1lbGluZVJlY29yZEZhY3RvcnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
VGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVHZW5lcmljUmVjb3JkKToKKyAgICAgICAgKFdl
YkNvcmU6OlRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlQmFja2dyb3VuZFJlY29yZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZUdDRXZlbnREYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OlRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlRnVuY3Rp
b25DYWxsRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNy
ZWF0ZUNvbnNvbGVQcm9maWxlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpUaW1lbGluZVJlY29y
ZEZhY3Rvcnk6OmNyZWF0ZVByb2JlU2FtcGxlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpUaW1l
bGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZUV2ZW50RGlzcGF0Y2hEYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OlRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlR2VuZXJpY1RpbWVyRGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZVRpbWVySW5zdGFs
bERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVY
SFJSZWFkeVN0YXRlQ2hhbmdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpUaW1lbGluZVJlY29y
ZEZhY3Rvcnk6OmNyZWF0ZVhIUkxvYWREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbWVsaW5l
UmVjb3JkRmFjdG9yeTo6Y3JlYXRlRXZhbHVhdGVTY3JpcHREYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OlRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlVGltZVN0YW1wRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZVNjaGVkdWxlUmVzb3VyY2VS
ZXF1ZXN0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNy
ZWF0ZVJlc291cmNlU2VuZFJlcXVlc3REYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbWVsaW5l
UmVjb3JkRmFjdG9yeTo6Y3JlYXRlUmVzb3VyY2VSZWNlaXZlUmVzcG9uc2VEYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlUmVzb3VyY2VGaW5pc2hE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlUmVj
ZWl2ZVJlc291cmNlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpUaW1lbGluZVJlY29yZEZhY3Rv
cnk6OmNyZWF0ZUxheW91dERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VGltZWxpbmVSZWNvcmRG
YWN0b3J5OjpjcmVhdGVEZWNvZGVJbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VGltZWxp
bmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVSZXNpemVJbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6VGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVNYXJrRGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZVBhcnNlSFRNTERhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6VGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVBbmltYXRpb25GcmFtZURh
dGEpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlUXVhZCk6CisgICAgICAgIChXZWJDb3JlOjpU
aW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZVBhaW50RGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmFwcGVuZExheW91dFJvb3QpOgorICAgICAgICAoV2Vi
Q29yZTo6YnVpbGRVbmNoZWNrZWRPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRQcm9m
aWxlVW5jaGVja2VkT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRpbWVsaW5lUmVjb3JkRmFj
dG9yeTo6YXBwZW5kUHJvZmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpidWlsZEluc3BlY3Rvck9i
amVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpidWlsZFByb2ZpbGVJbnNwZWN0b3JP
YmplY3QpOiBEZWxldGVkLgorICAgICAgICAqIGluc3BlY3Rvci9UaW1lbGluZVJlY29yZEZhY3Rv
cnkuaDoKKyAgICAgICAgKFdlYkNvcmU6OlRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlV2Vi
U29ja2V0Q3JlYXRlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpUaW1lbGluZVJlY29yZEZhY3Rv
cnk6OmNyZWF0ZUdlbmVyaWNXZWJTb2NrZXREYXRhKToKKyAgICAgICAgKiBwYWdlL0NvbnRlbnRT
ZWN1cml0eVBvbGljeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xp
Y3k6OnJlcG9ydFZpb2xhdGlvbik6CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjppbnNwZWN0b3JIaWdobGlnaHRPYmplY3QpOgor
CiAyMDE0LTEwLTA5ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAg
VXNlIGlzPD4oKSAvIGRvd25jYXN0PD4oKSBmb3IgRm9udERhdGEgc3ViY2xhc3NlcwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDhiYzU0ZDBkZDA5MGYyOWUyNzIwMDk0ZmVj
ZTE1NjQ0ODI5ODAwMWIuLmNkYzlhYTNjOTkyODMzZjI5YTcxZWIzN2I4NmJlYWE5ZDZlMjc0MDMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTI5Miw3ICsyOTIsNyBAQCBz
ZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdE1v
ZHVsZS5jcHAKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yQWdlbnRSZWdpc3RyeS5jcHAKICAgICBp
bnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuY3BwCi0gICAgaW5zcGVjdG9yL0lu
c3BlY3RvclZhbHVlcy5jcHAKKyAgICBpbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5j
cHAKICAgICBpbnNwZWN0b3IvSlNJbmplY3RlZFNjcmlwdEhvc3QuY3BwCiAgICAgaW5zcGVjdG9y
L0pTSW5qZWN0ZWRTY3JpcHRIb3N0UHJvdG90eXBlLmNwcAogICAgIGluc3BlY3Rvci9KU0dsb2Jh
bE9iamVjdENvbnNvbGVDbGllbnQuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4
cHJvagppbmRleCBhOGNjNDUyY2I1ZDM1Y2Q0MDA3YjYyMjczM2ZhMjg5NWE3Njk4YjExLi40YjVh
NmE0MGJjMGVhZmQ2MDk3ZDFjMmUxNmYyMmRhNTdiOWY3YzVkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hw
cm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0ph
dmFTY3JpcHRDb3JlLnZjeHByb2oKQEAgLTU3Myw3ICs1NzMsNyBAQAogICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5caW5zcGVjdG9yXEluamVjdGVkU2NyaXB0TW9kdWxlLmNwcCIgLz4KICAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxJbnNwZWN0b3JBZ2VudFJlZ2lzdHJ5LmNw
cCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlci5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxpbnNwZWN0
b3JcSW5zcGVjdG9yVmFsdWVzLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGlu
c3BlY3RvclxJbnNwZWN0b3JQcm90b2NvbFR5cGVzLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXGluc3BlY3RvclxKU0luamVjdGVkU2NyaXB0SG9zdC5jcHAiIC8+CiAgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcSlNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5
cGUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXEpTSmF2YVNj
cmlwdENhbGxGcmFtZS5jcHAiIC8+CkBAIC0xMjkxLDcgKzEyOTEsNiBAQAogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXEluc3BlY3RvckVudmlyb25tZW50LmgiIC8+CiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcSW5zcGVjdG9yUHJv
dG9jb2xUeXBlcy5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXElu
c3BlY3RvclZhbHVlcy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caW5zcGVjdG9y
XEpTSW5qZWN0ZWRTY3JpcHRIb3N0LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxp
bnNwZWN0b3JcSlNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5cGUuaCIgLz4KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxKU0phdmFTY3JpcHRDYWxsRnJhbWUuaCIgLz4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0ph
dmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycwppbmRleCAw
NDljZTBhZmM0NGY1ZTkzZjFiY2Q5ZGIwN2UzYjliYTA1YjRjODhlLi4yMTQ4ZGFjNjA4YTgwYzI2
ZmY2MGUzYmU0MTA5ZTIxMGI4NDQyMDMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNj
cmlwdENvcmUudmN4cHJvai5maWx0ZXJzCkBAIC0zMzMsNyArMzMzLDcgQEAg77u/PD94bWwgdmVy
c2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XGluc3BlY3RvclxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAiPgogICAgICAgPEZpbHRl
cj5pbnNwZWN0b3I8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXGluc3BlY3RvclxJbnNwZWN0b3JWYWx1ZXMuY3BwIj4KKyAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGluc3BlY3RvclxJbnNwZWN0b3JQcm90b2NvbFR5cGVzLmNwcCI+CiAgICAg
ICA8RmlsdGVyPmluc3BlY3RvcjwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGFnZW50c1xJbnNwZWN0b3JBZ2VudC5jcHAiPgpA
QCAtMjIzNyw5ICsyMjM3LDYgQEAg77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRm
LTgiPz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxJbnNwZWN0b3JQcm90
b2NvbFR5cGVzLmgiPgogICAgICAgPEZpbHRlcj5pbnNwZWN0b3I8L0ZpbHRlcj4KICAgICA8L0Ns
SW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxJbnNwZWN0b3JW
YWx1ZXMuaCI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3RvcjwvRmlsdGVyPgotICAgIDwvQ2xJbmNs
dWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGFnZW50c1xJbnNwZWN0
b3JBZ2VudC5oIj4KICAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yPC9GaWx0ZXI+CiAgICAgPC9DbElu
Y2x1ZGU+CkBAIC00MzUwLDQgKzQzNDcsNCBAQCDvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29k
aW5nPSJ1dGYtOCI/PgogICAgICAgPEZpbHRlcj5qaXQ8L0ZpbHRlcj4KICAgICA8L01BU00+CiAg
IDwvSXRlbUdyb3VwPgotPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKzwv
UHJvamVjdD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZDFjMDc3NzllOTEzN2Qz
OTRmMTYyZGY0NWUxYjI0NWVmNWMzMzE1Ny4uMjRlZTMwZDM1YzQwNTczZTZlOTE4NzMwMzZmYTA0
MTk4ODE1ZGZmOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTExNjMsOCArMTE2
Myw3IEBACiAJCUE1OTNDRjdDMTg0MDM2MDMwMEJGQ0UyNyAvKiBJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBNTkzQ0Y3QTE4NDAzNjAzMDBCRkNFMjcgLyogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIu
Y3BwICovOyB9OwogCQlBNTkzQ0Y3RDE4NDAzNjAzMDBCRkNFMjcgLyogSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEE1OTNDRjdCMTg0MDM2MDMwMEJGQ0UyNyAvKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE1
OTNDRjdGMTg0MDM2MkMwMEJGQ0UyNyAvKiBJbnNwZWN0b3JBZ2VudEJhc2UuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1OTNDRjdFMTg0MDM2MkMwMEJG
Q0UyNyAvKiBJbnNwZWN0b3JBZ2VudEJhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwotCQlBNTkzQ0Y4MjE4NDAzNzcxMDBCRkNFMjcgLyogSW5zcGVj
dG9yVmFsdWVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEE1OTNDRjgwMTg0MDM3NzEwMEJGQ0UyNyAvKiBJbnNwZWN0b3JWYWx1ZXMuY3BwICovOyB9
OwotCQlBNTkzQ0Y4MzE4NDAzNzcxMDBCRkNFMjcgLyogSW5zcGVjdG9yVmFsdWVzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNTkzQ0Y4MTE4NDAzNzcx
MDBCRkNFMjcgLyogSW5zcGVjdG9yVmFsdWVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQTU5M0NGODIxODQwMzc3MTAwQkZDRTI3IC8qIEluc3Bl
Y3RvclByb3RvY29sVHlwZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTU5M0NGODAxODQwMzc3MTAwQkZDRTI3IC8qIEluc3BlY3RvclByb3RvY29s
VHlwZXMuY3BwICovOyB9OwogCQlBNTkzQ0Y4NjE4NDAzOENBMDBCRkNFMjcgLyogSW5zcGVjdG9y
QWdlbnRSZWdpc3RyeS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBNTkzQ0Y4NDE4NDAzOENBMDBCRkNFMjcgLyogSW5zcGVjdG9yQWdlbnRSZWdpc3Ry
eS5jcHAgKi87IH07CiAJCUE1OTNDRjg3MTg0MDM4Q0EwMEJGQ0UyNyAvKiBJbnNwZWN0b3JBZ2Vu
dFJlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBNTkzQ0Y4NTE4NDAzOENBMDBCRkNFMjcgLyogSW5zcGVjdG9yQWdlbnRSZWdpc3RyeS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE1OTQ1NThG
MTgyNDVFRkQwMENDMzg0MyAvKiBSZW1vdGVJbnNwZWN0b3JEZWJ1Z2dhYmxlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1OTQ1NThFMTgyNDVFREUw
MENDMzg0MyAvKiBSZW1vdGVJbnNwZWN0b3JEZWJ1Z2dhYmxlLmNwcCAqLzsgfTsKQEAgLTI4MzEs
OCArMjgzMCw3IEBACiAJCUE1OTNDRjdBMTg0MDM2MDMwMEJGQ0UyNyAvKiBJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUE1OTNDRjdCMTg0MDM2MDMwMEJGQ0UyNyAvKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNTkzQ0Y3RTE4NDAzNjJD
MDBCRkNFMjcgLyogSW5zcGVjdG9yQWdlbnRCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEluc3BlY3RvckFnZW50QmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlBNTkzQ0Y4MDE4NDAzNzcxMDBCRkNFMjcgLyogSW5zcGVjdG9yVmFsdWVzLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluc3BlY3RvclZhbHVlcy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE1OTNDRjgxMTg0MDM3NzEwMEJGQ0UyNyAvKiBJ
bnNwZWN0b3JWYWx1ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5zcGVj
dG9yVmFsdWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE1OTNDRjgwMTg0MDM3
NzEwMEJGQ0UyNyAvKiBJbnNwZWN0b3JQcm90b2NvbFR5cGVzLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluc3BlY3RvclByb3RvY29sVHlwZXMuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlBNTkzQ0Y4NDE4NDAzOENBMDBCRkNFMjcgLyogSW5zcGVj
dG9yQWdlbnRSZWdpc3RyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBJbnNwZWN0b3JBZ2VudFJlZ2lzdHJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQTU5M0NGODUxODQwMzhDQTAwQkZDRTI3IC8qIEluc3BlY3RvckFnZW50UmVnaXN0cnkuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5zcGVjdG9yQWdlbnRSZWdpc3RyeS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNTk0NTU4RTE4MjQ1RURFMDBDQzM4NDMg
LyogUmVtb3RlSW5zcGVjdG9yRGVidWdnYWJsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBSZW1vdGVJbnNwZWN0b3JEZWJ1Z2dhYmxlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTUxNzIsOSArNTE3MCw4IEBACiAJCQkJQTU5M0NGN0IxODQwMzYw
MzAwQkZDRTI3IC8qIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmggKi8sCiAJCQkJQTVEMEEx
QkExODYyMzAxQjAwQzdCNDk2IC8qIEluc3BlY3RvckVudmlyb25tZW50LmggKi8sCiAJCQkJQTU5
NDU1OTQxODI0NzlFQjAwQ0MzODQzIC8qIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oICovLAor
CQkJCUE1OTNDRjgwMTg0MDM3NzEwMEJGQ0UyNyAvKiBJbnNwZWN0b3JQcm90b2NvbFR5cGVzLmNw
cCAqLywKIAkJCQlBNTVEOTNBQjE4NTE0Rjc5MDA0MDBERUQgLyogSW5zcGVjdG9yUHJvdG9jb2xU
eXBlcy5oICovLAotCQkJCUE1OTNDRjgwMTg0MDM3NzEwMEJGQ0UyNyAvKiBJbnNwZWN0b3JWYWx1
ZXMuY3BwICovLAotCQkJCUE1OTNDRjgxMTg0MDM3NzEwMEJGQ0UyNyAvKiBJbnNwZWN0b3JWYWx1
ZXMuaCAqLywKIAkJCQlBNTAzRkExMzE4OEUwRkFGMDAxMTBGMTQgLyogSmF2YVNjcmlwdENhbGxG
cmFtZS5jcHAgKi8sCiAJCQkJQTUwM0ZBMTQxODhFMEZBRjAwMTEwRjE0IC8qIEphdmFTY3JpcHRD
YWxsRnJhbWUuaCAqLywKIAkJCQlBNUMzQTFBMzE4QzA0OTAyMDBDOTU5M0EgLyogSlNHbG9iYWxP
YmplY3RDb25zb2xlQ2xpZW50LmNwcCAqLywKQEAgLTU3MTYsNyArNTcxMyw2IEBACiAJCQkJQTUw
RTRCNjIxODgwOURENTAwNjhBNDZEIC8qIEluc3BlY3RvclJ1bnRpbWVBZ2VudC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZCRkREMDUxOTZDOTJCRjAwN0E1QkZBIC8qIERGR1BoYW50b21SZW1vdmFs
UGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1NUQ5M0FDMTg1MTRGNzkwMDQwMERFRCAvKiBJ
bnNwZWN0b3JQcm90b2NvbFR5cGVzLmggaW4gSGVhZGVycyAqLywKLQkJCQlBNTkzQ0Y4MzE4NDAz
NzcxMDBCRkNFMjcgLyogSW5zcGVjdG9yVmFsdWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NjlB
MDc5OTBFRDFEM0FFMDBGMUY2ODEgLyogSW5zdHJ1Y3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE3QThBRjNCMTdBREI1RjMwMDVBQjE3NCAvKiBJbnQxNkFycmF5LmggaW4gSGVhZGVycyAqLywK
IAkJCQlBN0E4QUYzQzE3QURCNUYzMDA1QUIxNzQgLyogSW50MzJBcnJheS5oIGluIEhlYWRlcnMg
Ki8sCkBAIC02OTE5LDcgKzY5MTUsNyBAQAogCQkJCUE1MzI0Mzg5MTg1NjgzMzUwMDJFRDY5MiAv
KiBJbnNwZWN0b3JKU0Zyb250ZW5kRGlzcGF0Y2hlcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTUzMjQzOEIxODU2ODMzNTAwMkVENjkyIC8qIEluc3BlY3RvckpTUHJvdG9jb2xUeXBlcy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBNTBFNEI2MTE4ODA5REQ1MDA2OEE0NkQgLyogSW5zcGVjdG9y
UnVudGltZUFnZW50LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUE1OTNDRjgyMTg0MDM3NzEwMEJG
Q0UyNyAvKiBJbnNwZWN0b3JWYWx1ZXMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTU5M0NGODIx
ODQwMzc3MTAwQkZDRTI3IC8qIEluc3BlY3RvclByb3RvY29sVHlwZXMuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTc4ODUzRjkxNzk3MjYyOTAwMTQ0MEU0IC8qIEludGVuZGVkU3RydWN0dXJlQ2hh
aW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5Q0YxMDdFQzM3NjAwNDI3QTQ4IC8qIElu
dGVybmFsRnVuY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyOUQ3RDQwRUQyMTI4MjAw
Qjg5NjE5IC8qIEludGVycHJldGVyLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL1NjcmlwdFZhbHVlLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iaW5kaW5ncy9TY3JpcHRWYWx1ZS5jcHAKaW5kZXggZDA0NmFiMmE1Y2IyYWMx
OWY5ODU3NjMyNWY4OTEyYjQ5MGQ0OGFhZi4uNTA4ZjBiYTZjMWI4MTA0NGZkNWZhZGVjMTAxYWJi
YjdiMmM2YzM0NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL1Nj
cmlwdFZhbHVlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvU2NyaXB0
VmFsdWUuY3BwCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSAiU2NyaXB0VmFsdWUuaCIKIAog
I2luY2x1ZGUgIkFQSUNhc3QuaCIKLSNpbmNsdWRlICJJbnNwZWN0b3JWYWx1ZXMuaCIKKyNpbmNs
dWRlICJJbnNwZWN0b3JQcm90b2NvbFR5cGVzLmgiCiAjaW5jbHVkZSAiSlNMb2NrLmgiCiAjaW5j
bHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgogCkBAIC05OCw3ICs5OCw3IEBAIGJvb2wgU2NyaXB0
VmFsdWU6OmlzRnVuY3Rpb24oKSBjb25zdAogfQogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKLXN0
YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBqc1RvSW5zcGVjdG9yVmFsdWUoRXhlY1N0
YXRlKiBzY3JpcHRTdGF0ZSwgSlNWYWx1ZSB2YWx1ZSwgaW50IG1heERlcHRoKQorc3RhdGljIFBh
c3NSZWZQdHI8UHJvdG9jb2w6OlVuY2hlY2tlZFZhbHVlPiBqc1RvVW5jaGVja2VkVmFsdWUoRXhl
Y1N0YXRlKiBzY3JpcHRTdGF0ZSwgSlNWYWx1ZSB2YWx1ZSwgaW50IG1heERlcHRoKQogewogICAg
IGlmICghdmFsdWUpIHsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0xMTEsMzgg
KzExMSwzOCBAQCBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4ganNUb0luc3BlY3Rv
clZhbHVlKEV4ZWNTdGF0ZSogc2NyaXB0U3RhdGUsIEpTVgogICAgIG1heERlcHRoLS07CiAKICAg
ICBpZiAodmFsdWUuaXNOdWxsKCkgfHwgdmFsdWUuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgcmV0
dXJuIEluc3BlY3RvclZhbHVlOjpudWxsKCk7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6VW5j
aGVja2VkVmFsdWU6Om51bGwoKTsKICAgICBpZiAodmFsdWUuaXNCb29sZWFuKCkpCi0gICAgICAg
IHJldHVybiBJbnNwZWN0b3JCYXNpY1ZhbHVlOjpjcmVhdGUodmFsdWUuYXNCb29sZWFuKCkpOwor
ICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlNjYWxhclZhbHVlOjpjcmVhdGUodmFsdWUuYXNCb29s
ZWFuKCkpOwogICAgIGlmICh2YWx1ZS5pc051bWJlcigpICYmIHZhbHVlLmlzRG91YmxlKCkpCi0g
ICAgICAgIHJldHVybiBJbnNwZWN0b3JCYXNpY1ZhbHVlOjpjcmVhdGUodmFsdWUuYXNOdW1iZXIo
KSk7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6U2NhbGFyVmFsdWU6OmNyZWF0ZSh2YWx1ZS5h
c051bWJlcigpKTsKICAgICBpZiAodmFsdWUuaXNOdW1iZXIoKSAmJiB2YWx1ZS5pc01hY2hpbmVJ
bnQoKSkKLSAgICAgICAgcmV0dXJuIEluc3BlY3RvckJhc2ljVmFsdWU6OmNyZWF0ZShzdGF0aWNf
Y2FzdDxpbnQ+KHZhbHVlLmFzTWFjaGluZUludCgpKSk7CisgICAgICAgIHJldHVybiBQcm90b2Nv
bDo6U2NhbGFyVmFsdWU6OmNyZWF0ZShzdGF0aWNfY2FzdDxpbnQ+KHZhbHVlLmFzTWFjaGluZUlu
dCgpKSk7CiAgICAgaWYgKHZhbHVlLmlzU3RyaW5nKCkpCi0gICAgICAgIHJldHVybiBJbnNwZWN0
b3JTdHJpbmc6OmNyZWF0ZSh2YWx1ZS5nZXRTdHJpbmcoc2NyaXB0U3RhdGUpKTsKKyAgICAgICAg
cmV0dXJuIFByb3RvY29sOjpTY2FsYXJWYWx1ZTo6Y3JlYXRlKHZhbHVlLmdldFN0cmluZyhzY3Jp
cHRTdGF0ZSkpOwogCiAgICAgaWYgKHZhbHVlLmlzT2JqZWN0KCkpIHsKICAgICAgICAgaWYgKGlz
SlNBcnJheSh2YWx1ZSkpIHsKLSAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gaW5z
cGVjdG9yQXJyYXkgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgICAgICAgICBSZWZQ
dHI8UHJvdG9jb2w6OlVuY2hlY2tlZEFycmF5PiBpbnNwZWN0b3JBcnJheSA9IFByb3RvY29sOjpV
bmNoZWNrZWRBcnJheTo6Y3JlYXRlKCk7CiAgICAgICAgICAgICBKU0FycmF5KiBhcnJheSA9IGFz
QXJyYXkodmFsdWUpOwogICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gYXJyYXktPmxlbmd0
aCgpOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7
CiAgICAgICAgICAgICAgICAgSlNWYWx1ZSBlbGVtZW50ID0gYXJyYXktPmdldEluZGV4KHNjcmlw
dFN0YXRlLCBpKTsKLSAgICAgICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGVsZW1l
bnRWYWx1ZSA9IGpzVG9JbnNwZWN0b3JWYWx1ZShzY3JpcHRTdGF0ZSwgZWxlbWVudCwgbWF4RGVw
dGgpOworICAgICAgICAgICAgICAgIFJlZlB0cjxQcm90b2NvbDo6VW5jaGVja2VkVmFsdWU+IGVs
ZW1lbnRWYWx1ZSA9IGpzVG9VbmNoZWNrZWRWYWx1ZShzY3JpcHRTdGF0ZSwgZWxlbWVudCwgbWF4
RGVwdGgpOwogICAgICAgICAgICAgICAgIGlmICghZWxlbWVudFZhbHVlKQogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgICAgICAgICBpbnNwZWN0b3JBcnJheS0+
cHVzaFZhbHVlKGVsZW1lbnRWYWx1ZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1
cm4gaW5zcGVjdG9yQXJyYXk7CiAgICAgICAgIH0KLSAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gaW5zcGVjdG9yT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICAg
ICAgUmVmUHRyPFByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IGluc3BlY3Rvck9iamVjdCA9IFBy
b3RvY29sOjpVbmNoZWNrZWRPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICBKU09iamVjdCogb2Jq
ZWN0ID0gdmFsdWUuZ2V0T2JqZWN0KCk7CiAgICAgICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3Bl
cnR5TmFtZXMoc2NyaXB0U3RhdGUpOwogICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPmdl
dE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBzY3JpcHRTdGF0ZSwgcHJvcGVydHlOYW1lcywgRXhj
bHVkZURvbnRFbnVtUHJvcGVydGllcyk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
cHJvcGVydHlOYW1lcy5zaXplKCk7IGkrKykgewogICAgICAgICAgICAgY29uc3QgSWRlbnRpZmll
ciYgbmFtZSA9IHByb3BlcnR5TmFtZXNbaV07CiAgICAgICAgICAgICBKU1ZhbHVlIHByb3BlcnR5
VmFsdWUgPSBvYmplY3QtPmdldChzY3JpcHRTdGF0ZSwgbmFtZSk7Ci0gICAgICAgICAgICBSZWZQ
dHI8SW5zcGVjdG9yVmFsdWU+IGluc3BlY3RvclZhbHVlID0ganNUb0luc3BlY3RvclZhbHVlKHNj
cmlwdFN0YXRlLCBwcm9wZXJ0eVZhbHVlLCBtYXhEZXB0aCk7CisgICAgICAgICAgICBSZWZQdHI8
UHJvdG9jb2w6OlVuY2hlY2tlZFZhbHVlPiBpbnNwZWN0b3JWYWx1ZSA9IGpzVG9VbmNoZWNrZWRW
YWx1ZShzY3JpcHRTdGF0ZSwgcHJvcGVydHlWYWx1ZSwgbWF4RGVwdGgpOwogICAgICAgICAgICAg
aWYgKCFpbnNwZWN0b3JWYWx1ZSkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICAgICAgICAgIGluc3BlY3Rvck9iamVjdC0+c2V0VmFsdWUobmFtZS5zdHJpbmcoKSwgaW5zcGVj
dG9yVmFsdWUpOwpAQCAtMTU0LDEwICsxNTQsMTAgQEAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVj
dG9yVmFsdWU+IGpzVG9JbnNwZWN0b3JWYWx1ZShFeGVjU3RhdGUqIHNjcmlwdFN0YXRlLCBKU1YK
ICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gU2Ny
aXB0VmFsdWU6OnRvSW5zcGVjdG9yVmFsdWUoRXhlY1N0YXRlKiBzY3JpcHRTdGF0ZSkgY29uc3QK
K1Bhc3NSZWZQdHI8UHJvdG9jb2w6OlVuY2hlY2tlZFZhbHVlPiBTY3JpcHRWYWx1ZTo6dG9VbmNo
ZWNrZWRWYWx1ZShFeGVjU3RhdGUqIHNjcmlwdFN0YXRlKSBjb25zdAogewogICAgIEpTTG9ja0hv
bGRlciBob2xkZXIoc2NyaXB0U3RhdGUpOwotICAgIHJldHVybiBqc1RvSW5zcGVjdG9yVmFsdWUo
c2NyaXB0U3RhdGUsIG1fdmFsdWUuZ2V0KCksIEluc3BlY3RvclZhbHVlOjptYXhEZXB0aCk7Cisg
ICAgcmV0dXJuIGpzVG9VbmNoZWNrZWRWYWx1ZShzY3JpcHRTdGF0ZSwgbV92YWx1ZS5nZXQoKSwg
UHJvdG9jb2w6OlVuY2hlY2tlZFZhbHVlOjptYXhEZXB0aCk7CiB9CiAjZW5kaWYgLy8gRU5BQkxF
KElOU1BFQ1RPUikKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2JpbmRpbmdz
L1NjcmlwdFZhbHVlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvU2NyaXB0VmFs
dWUuaAppbmRleCBkNWZhZGU5MGIxNmUzNDdmZDgzMmI5Y2I5YjUyZDMwMGY1ZDljYTQwLi5kMTZm
ZGIzM2UzZTg3YmU2YWI1MzA4NjI5ZTllNTUzYThjZTBlMTI3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYmluZGluZ3MvU2NyaXB0VmFsdWUuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYmluZGluZ3MvU2NyaXB0VmFsdWUuaApAQCAtNDAsNyArNDAsOSBAQAogI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKLWNsYXNz
IEluc3BlY3RvclZhbHVlOworbmFtZXNwYWNlIFByb3RvY29sIHsKK2NsYXNzIFVuY2hlY2tlZFZh
bHVlOworfQogfQogCiBuYW1lc3BhY2UgRGVwcmVjYXRlZCB7CkBAIC02Niw3ICs2OCw3IEBAIHB1
YmxpYzoKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgU2NyaXB0VmFsdWUmIG90aGVyKSBjb25z
dCB7IHJldHVybiBtX3ZhbHVlID09IG90aGVyLm1fdmFsdWU7IH0KIAogI2lmIEVOQUJMRShJTlNQ
RUNUT1IpCi0gICAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiB0b0luc3Bl
Y3RvclZhbHVlKEpTQzo6RXhlY1N0YXRlKikgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpVbmNoZWNrZWRWYWx1ZT4gdG9VbmNoZWNrZWRWYWx1ZShKU0M6OkV4ZWNT
dGF0ZSopIGNvbnN0OwogI2VuZGlmCiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdlLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuY3BwCmluZGV4IGY3ZDFlNTU2Nzg1MzVh
ODkzYmNmZjM1NTgxYjYxYWE4MjczNWI1YTIuLmM5MmFjMTQzNjQwMTNmYzFhZGFmNjkzZDEyOWE0
OGI5ZDlmNWNjYTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
Q29uc29sZU1lc3NhZ2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
Q29uc29sZU1lc3NhZ2UuY3BwCkBAIC0zNiw3ICszNiw3IEBACiAjaW5jbHVkZSAiSWRlbnRpZmll
cnNGYWN0b3J5LmgiCiAjaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHQuaCIKICNpbmNsdWRlICJJbmpl
Y3RlZFNjcmlwdE1hbmFnZXIuaCIKLSNpbmNsdWRlICJJbnNwZWN0b3JWYWx1ZXMuaCIKKyNpbmNs
dWRlICJJbnNwZWN0b3JQcm90b2NvbFR5cGVzLmgiCiAjaW5jbHVkZSAiU2NyaXB0QXJndW1lbnRz
LmgiCiAjaW5jbHVkZSAiU2NyaXB0Q2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiU2NyaXB0Q2FsbFN0
YWNrLmgiCkBAIC0yMjQsNyArMjI0LDcgQEAgdm9pZCBDb25zb2xlTWVzc2FnZTo6YWRkVG9Gcm9u
dGVuZChJbnNwZWN0b3JDb25zb2xlRnJvbnRlbmREaXNwYXRjaGVyKiBjb25zb2xlRnIKICAgICB9
CiAKICAgICBpZiAobV9jYWxsU3RhY2spCi0gICAgICAgIGpzb25PYmotPnNldFN0YWNrVHJhY2Uo
bV9jYWxsU3RhY2stPmJ1aWxkSW5zcGVjdG9yQXJyYXkoKSk7CisgICAgICAgIGpzb25PYmotPnNl
dFN0YWNrVHJhY2UobV9jYWxsU3RhY2stPmJ1aWxkVW5jaGVja2VkQXJyYXkoKSk7CiAKICAgICBj
b25zb2xlRnJvbnRlbmREaXNwYXRjaGVyLT5tZXNzYWdlQWRkZWQoanNvbk9iaik7CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0NvbnRlbnRTZWFyY2hVdGls
aXRpZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9Db250ZW50U2VhcmNo
VXRpbGl0aWVzLmNwcAppbmRleCBlZjU0ZjA2YzMxY2E2MDFhYjVjYzM0Y2Q2MTFkYmU2ODc5OTQz
OTg4Li5mNjI3MzMzYmUxYzQ1ZmRmNTM3MTFhNzY5MjI0ZTYxODY3MjNlOWRmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0NvbnRlbnRTZWFyY2hVdGlsaXRpZXMu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvQ29udGVudFNlYXJjaFV0
aWxpdGllcy5jcHAKQEAgLTMyLDcgKzMyLDcgQEAKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogCiAj
aW5jbHVkZSAiSW5zcGVjdG9ySlNQcm90b2NvbFR5cGVzLmgiCi0jaW5jbHVkZSAiSW5zcGVjdG9y
VmFsdWVzLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oIgogI2luY2x1ZGUg
IlJlZ3VsYXJFeHByZXNzaW9uLmgiCiAjaW5jbHVkZSAiWWFyci5oIgogI2luY2x1ZGUgPHd0Zi9C
dW1wUG9pbnRlckFsbG9jYXRvci5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL0luamVjdGVkU2NyaXB0LmNwcAppbmRleCA2MWRkYzBjYjA1NDUyMGQ5YjJlNDZkYzc4
YjU2YjE2NTk3NGQxNzE4Li42YmRlNjcwNzFlNmUwOTUyOGM3MTcxNjlkNzI4MGIzODYyNmExMTFj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2Ny
aXB0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2Ny
aXB0LmNwcApAQCAtMzQsNyArMzQsNyBAQAogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKIAotI2lu
Y2x1ZGUgIkluc3BlY3RvclZhbHVlcy5oIgorI2luY2x1ZGUgIkluc3BlY3RvclByb3RvY29sVHlw
ZXMuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiU2NyaXB0RnVuY3Rpb25D
YWxsLmgiCiAjaW5jbHVkZSAiU2NyaXB0T2JqZWN0LmgiCkBAIC05OCw5ICs5OCw5IEBAIHZvaWQg
SW5qZWN0ZWRTY3JpcHQ6OmdldEZ1bmN0aW9uRGV0YWlscyhFcnJvclN0cmluZyYgZXJyb3JTdHJp
bmcsIGNvbnN0IFN0cmluZyYKICAgICBEZXByZWNhdGVkOjpTY3JpcHRGdW5jdGlvbkNhbGwgZnVu
Y3Rpb24oaW5qZWN0ZWRTY3JpcHRPYmplY3QoKSwgQVNDSUlMaXRlcmFsKCJnZXRGdW5jdGlvbkRl
dGFpbHMiKSwgaW5zcGVjdG9yRW52aXJvbm1lbnQoKS0+ZnVuY3Rpb25DYWxsSGFuZGxlcigpKTsK
ICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChmdW5jdGlvbklkKTsKIAotICAgIFJlZlB0cjxJ
bnNwZWN0b3JWYWx1ZT4gcmVzdWx0VmFsdWU7CisgICAgUmVmUHRyPFByb3RvY29sOjpVbmNoZWNr
ZWRWYWx1ZT4gcmVzdWx0VmFsdWU7CiAgICAgbWFrZUNhbGwoZnVuY3Rpb24sICZyZXN1bHRWYWx1
ZSk7Ci0gICAgaWYgKCFyZXN1bHRWYWx1ZSB8fCByZXN1bHRWYWx1ZS0+dHlwZSgpICE9IEluc3Bl
Y3RvclZhbHVlOjpUeXBlOjpPYmplY3QpIHsKKyAgICBpZiAoIXJlc3VsdFZhbHVlIHx8IHJlc3Vs
dFZhbHVlLT50eXBlKCkgIT0gUHJvdG9jb2w6OlVuY2hlY2tlZFZhbHVlOjpUeXBlOjpPYmplY3Qp
IHsKICAgICAgICAgaWYgKCFyZXN1bHRWYWx1ZS0+YXNTdHJpbmcoZXJyb3JTdHJpbmcpKQogICAg
ICAgICAgICAgZXJyb3JTdHJpbmcgPSBBU0NJSUxpdGVyYWwoIkludGVybmFsIGVycm9yIik7CiAg
ICAgICAgIHJldHVybjsKQEAgLTExNSw5ICsxMTUsOSBAQCB2b2lkIEluamVjdGVkU2NyaXB0Ojpn
ZXRQcm9wZXJ0aWVzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBvYmpl
YwogICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KG9iamVjdElkKTsKICAgICBmdW5jdGlvbi5h
cHBlbmRBcmd1bWVudChvd25Qcm9wZXJ0aWVzKTsKIAotICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1
ZT4gcmVzdWx0OworICAgIFJlZlB0cjxQcm90b2NvbDo6VW5jaGVja2VkVmFsdWU+IHJlc3VsdDsK
ICAgICBtYWtlQ2FsbChmdW5jdGlvbiwgJnJlc3VsdCk7Ci0gICAgaWYgKCFyZXN1bHQgfHwgcmVz
dWx0LT50eXBlKCkgIT0gSW5zcGVjdG9yVmFsdWU6OlR5cGU6OkFycmF5KSB7CisgICAgaWYgKCFy
ZXN1bHQgfHwgcmVzdWx0LT50eXBlKCkgIT0gUHJvdG9jb2w6OlVuY2hlY2tlZFZhbHVlOjpUeXBl
OjpBcnJheSkgewogICAgICAgICBlcnJvclN0cmluZyA9IEFTQ0lJTGl0ZXJhbCgiSW50ZXJuYWwg
ZXJyb3IiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTEzMCw5ICsxMzAsOSBAQCB2b2lk
IEluamVjdGVkU2NyaXB0OjpnZXRJbnRlcm5hbFByb3BlcnRpZXMoRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBjb25zdCBTdHJpbgogICAgIERlcHJlY2F0ZWQ6OlNjcmlwdEZ1bmN0aW9uQ2FsbCBm
dW5jdGlvbihpbmplY3RlZFNjcmlwdE9iamVjdCgpLCBBU0NJSUxpdGVyYWwoImdldEludGVybmFs
UHJvcGVydGllcyIpLCBpbnNwZWN0b3JFbnZpcm9ubWVudCgpLT5mdW5jdGlvbkNhbGxIYW5kbGVy
KCkpOwogICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KG9iamVjdElkKTsKIAotICAgIFJlZlB0
cjxJbnNwZWN0b3JWYWx1ZT4gcmVzdWx0OworICAgIFJlZlB0cjxQcm90b2NvbDo6VW5jaGVja2Vk
VmFsdWU+IHJlc3VsdDsKICAgICBtYWtlQ2FsbChmdW5jdGlvbiwgJnJlc3VsdCk7Ci0gICAgaWYg
KCFyZXN1bHQgfHwgcmVzdWx0LT50eXBlKCkgIT0gSW5zcGVjdG9yVmFsdWU6OlR5cGU6OkFycmF5
KSB7CisgICAgaWYgKCFyZXN1bHQgfHwgcmVzdWx0LT50eXBlKCkgIT0gUHJvdG9jb2w6OlVuY2hl
Y2tlZFZhbHVlOjpUeXBlOjpBcnJheSkgewogICAgICAgICBlcnJvclN0cmluZyA9IEFTQ0lJTGl0
ZXJhbCgiSW50ZXJuYWwgZXJyb3IiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE1MSw4
ICsxNTEsOCBAQCBQYXNzUmVmUHRyPEFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2Vy
OjpDYWxsRnJhbWU+PiBJbmplY3RlZFNjcmlwdDo6d3JhcAogICAgIGJvb2wgaGFkRXhjZXB0aW9u
ID0gZmFsc2U7CiAgICAgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUgY2FsbEZyYW1lc1ZhbHVlID0g
Y2FsbEZ1bmN0aW9uV2l0aEV2YWxFbmFibGVkKGZ1bmN0aW9uLCBoYWRFeGNlcHRpb24pOwogICAg
IEFTU0VSVCghaGFkRXhjZXB0aW9uKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHJlc3Vs
dCA9IGNhbGxGcmFtZXNWYWx1ZS50b0luc3BlY3RvclZhbHVlKHNjcmlwdFN0YXRlKCkpOwotICAg
IGlmIChyZXN1bHQtPnR5cGUoKSA9PSBJbnNwZWN0b3JWYWx1ZTo6VHlwZTo6QXJyYXkpCisgICAg
UmVmUHRyPFByb3RvY29sOjpVbmNoZWNrZWRWYWx1ZT4gcmVzdWx0ID0gY2FsbEZyYW1lc1ZhbHVl
LnRvVW5jaGVja2VkVmFsdWUoc2NyaXB0U3RhdGUoKSk7CisgICAgaWYgKHJlc3VsdC0+dHlwZSgp
ID09IFByb3RvY29sOjpVbmNoZWNrZWRWYWx1ZTo6VHlwZTo6QXJyYXkpCiAgICAgICAgIHJldHVy
biBCaW5kaW5nVHJhaXRzPEFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpDYWxs
RnJhbWU+Pjo6cnVudGltZUNhc3QocmVzdWx0KTsKIAogICAgIHJldHVybiBBcnJheTxJbnNwZWN0
b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6Q2FsbEZyYW1lPjo6Y3JlYXRlKCk7CkBAIC0xNzIsOCAr
MTcyLDggQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVP
YmplY3Q+IEluamVjdGVkU2NyaXB0Ojp3cmFwT2JqZWMKICAgICBpZiAoaGFkRXhjZXB0aW9uKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJl
c3VsdE9iamVjdDsKLSAgICBib29sIGNhc3RTdWNjZWVkZWQgPSByLnRvSW5zcGVjdG9yVmFsdWUo
c2NyaXB0U3RhdGUoKSktPmFzT2JqZWN0KHJlc3VsdE9iamVjdCk7CisgICAgUmVmUHRyPFByb3Rv
Y29sOjpVbmNoZWNrZWRPYmplY3Q+IHJlc3VsdE9iamVjdDsKKyAgICBib29sIGNhc3RTdWNjZWVk
ZWQgPSByLnRvVW5jaGVja2VkVmFsdWUoc2NyaXB0U3RhdGUoKSktPmFzT2JqZWN0KHJlc3VsdE9i
amVjdCk7CiAgICAgQVNTRVJUX1VOVVNFRChjYXN0U3VjY2VlZGVkLCBjYXN0U3VjY2VlZGVkKTsK
IAogICAgIHJldHVybiBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6
OlJlbW90ZU9iamVjdD46OnJ1bnRpbWVDYXN0KHJlc3VsdE9iamVjdCk7CkBAIC0xOTUsOCArMTk1
LDggQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmpl
Y3Q+IEluamVjdGVkU2NyaXB0Ojp3cmFwVGFibGUKICAgICBpZiAoaGFkRXhjZXB0aW9uKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3Vs
dE9iamVjdDsKLSAgICBib29sIGNhc3RTdWNjZWVkZWQgPSByLnRvSW5zcGVjdG9yVmFsdWUoc2Ny
aXB0U3RhdGUoKSktPmFzT2JqZWN0KHJlc3VsdE9iamVjdCk7CisgICAgUmVmUHRyPFByb3RvY29s
OjpVbmNoZWNrZWRPYmplY3Q+IHJlc3VsdE9iamVjdDsKKyAgICBib29sIGNhc3RTdWNjZWVkZWQg
PSByLnRvVW5jaGVja2VkVmFsdWUoc2NyaXB0U3RhdGUoKSktPmFzT2JqZWN0KHJlc3VsdE9iamVj
dCk7CiAgICAgQVNTRVJUX1VOVVNFRChjYXN0U3VjY2VlZGVkLCBjYXN0U3VjY2VlZGVkKTsKIAog
ICAgIHJldHVybiBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJl
bW90ZU9iamVjdD46OnJ1bnRpbWVDYXN0KHJlc3VsdE9iamVjdCk7CkBAIC0yMjAsNyArMjIwLDcg
QEAgdm9pZCBJbmplY3RlZFNjcmlwdDo6aW5zcGVjdE9iamVjdChEZXByZWNhdGVkOjpTY3JpcHRW
YWx1ZSB2YWx1ZSkKICAgICBBU1NFUlQoIWhhc05vVmFsdWUoKSk7CiAgICAgRGVwcmVjYXRlZDo6
U2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKGluamVjdGVkU2NyaXB0T2JqZWN0KCksIEFTQ0lJ
TGl0ZXJhbCgiaW5zcGVjdE9iamVjdCIpLCBpbnNwZWN0b3JFbnZpcm9ubWVudCgpLT5mdW5jdGlv
bkNhbGxIYW5kbGVyKCkpOwogICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KHZhbHVlKTsKLSAg
ICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHJlc3VsdDsKKyAgICBSZWZQdHI8UHJvdG9jb2w6OlVu
Y2hlY2tlZFZhbHVlPiByZXN1bHQ7CiAgICAgbWFrZUNhbGwoZnVuY3Rpb24sICZyZXN1bHQpOwog
fQogCkBAIC0yMjgsNyArMjI4LDcgQEAgdm9pZCBJbmplY3RlZFNjcmlwdDo6cmVsZWFzZU9iamVj
dChjb25zdCBTdHJpbmcmIG9iamVjdElkKQogewogICAgIERlcHJlY2F0ZWQ6OlNjcmlwdEZ1bmN0
aW9uQ2FsbCBmdW5jdGlvbihpbmplY3RlZFNjcmlwdE9iamVjdCgpLCBBU0NJSUxpdGVyYWwoInJl
bGVhc2VPYmplY3QiKSwgaW5zcGVjdG9yRW52aXJvbm1lbnQoKS0+ZnVuY3Rpb25DYWxsSGFuZGxl
cigpKTsKICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChvYmplY3RJZCk7Ci0gICAgUmVmUHRy
PEluc3BlY3RvclZhbHVlPiByZXN1bHQ7CisgICAgUmVmUHRyPFByb3RvY29sOjpVbmNoZWNrZWRW
YWx1ZT4gcmVzdWx0OwogICAgIG1ha2VDYWxsKGZ1bmN0aW9uLCAmcmVzdWx0KTsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEJh
c2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEJh
c2UuY3BwCmluZGV4IGRkMTI5OGNiNWY0ZDZjOTdlMTYxZTg4YTJiYzEzMTY3YmIyNzk5YzQuLmMz
N2MzODg5YTlkNjczN2Y5YzJkNjFiMTBmNmE4ZTliZjQ4MzQ2YjggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRCYXNlLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0QmFzZS5jcHAKQEAg
LTM1LDcgKzM1LDcgQEAKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogCiAjaW5jbHVkZSAiRGVidWdn
ZXJFdmFsRW5hYmxlci5oIgotI2luY2x1ZGUgIkluc3BlY3RvclZhbHVlcy5oIgorI2luY2x1ZGUg
Ikluc3BlY3RvclByb3RvY29sVHlwZXMuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJTY3JpcHRGdW5jdGlvbkNhbGwuaCIK
QEAgLTk1LDEwICs5NSwxMCBAQCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSBJbmplY3RlZFNjcmlw
dEJhc2U6OmNhbGxGdW5jdGlvbldpdGhFdmFsRW5hYmxlZChEZXByZWNhdAogICAgIHJldHVybiBy
ZXN1bHRWYWx1ZTsKIH0KIAotdm9pZCBJbmplY3RlZFNjcmlwdEJhc2U6Om1ha2VDYWxsKERlcHJl
Y2F0ZWQ6OlNjcmlwdEZ1bmN0aW9uQ2FsbCYgZnVuY3Rpb24sIFJlZlB0cjxJbnNwZWN0b3JWYWx1
ZT4qIHJlc3VsdCkKK3ZvaWQgSW5qZWN0ZWRTY3JpcHRCYXNlOjptYWtlQ2FsbChEZXByZWNhdGVk
OjpTY3JpcHRGdW5jdGlvbkNhbGwmIGZ1bmN0aW9uLCBSZWZQdHI8UHJvdG9jb2w6OlVuY2hlY2tl
ZFZhbHVlPiogcmVzdWx0KQogewogICAgIGlmIChoYXNOb1ZhbHVlKCkgfHwgIWhhc0FjY2Vzc1Rv
SW5zcGVjdGVkU2NyaXB0U3RhdGUoKSkgewotICAgICAgICAqcmVzdWx0ID0gSW5zcGVjdG9yVmFs
dWU6Om51bGwoKTsKKyAgICAgICAgKnJlc3VsdCA9IFByb3RvY29sOjpVbmNoZWNrZWRWYWx1ZTo6
bnVsbCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xMDcsMzUgKzEwNywzNSBAQCB2
b2lkIEluamVjdGVkU2NyaXB0QmFzZTo6bWFrZUNhbGwoRGVwcmVjYXRlZDo6U2NyaXB0RnVuY3Rp
b25DYWxsJiBmdW5jdGlvbiwgUmVmUAogCiAgICAgQVNTRVJUKCFoYWRFeGNlcHRpb24pOwogICAg
IGlmICghaGFkRXhjZXB0aW9uKSB7Ci0gICAgICAgICpyZXN1bHQgPSByZXN1bHRWYWx1ZS50b0lu
c3BlY3RvclZhbHVlKG1faW5qZWN0ZWRTY3JpcHRPYmplY3Quc2NyaXB0U3RhdGUoKSk7CisgICAg
ICAgICpyZXN1bHQgPSByZXN1bHRWYWx1ZS50b1VuY2hlY2tlZFZhbHVlKG1faW5qZWN0ZWRTY3Jp
cHRPYmplY3Quc2NyaXB0U3RhdGUoKSk7CiAgICAgICAgIGlmICghKnJlc3VsdCkKLSAgICAgICAg
ICAgICpyZXN1bHQgPSBJbnNwZWN0b3JTdHJpbmc6OmNyZWF0ZShTdHJpbmc6OmZvcm1hdCgiT2Jq
ZWN0IGhhcyB0b28gbG9uZyByZWZlcmVuY2UgY2hhaW4gKG11c3Qgbm90IGJlIGxvbmdlciB0aGFu
ICVkKSIsIEluc3BlY3RvclZhbHVlOjptYXhEZXB0aCkpOworICAgICAgICAgICAgKnJlc3VsdCA9
IFByb3RvY29sOjpTY2FsYXJWYWx1ZTo6Y3JlYXRlKFN0cmluZzo6Zm9ybWF0KCJPYmplY3QgaGFz
IHRvbyBsb25nIHJlZmVyZW5jZSBjaGFpbiAobXVzdCBub3QgYmUgbG9uZ2VyIHRoYW4gJWQpIiwg
UHJvdG9jb2w6OlVuY2hlY2tlZFZhbHVlOjptYXhEZXB0aCkpOwogICAgIH0gZWxzZQotICAgICAg
ICAqcmVzdWx0ID0gSW5zcGVjdG9yU3RyaW5nOjpjcmVhdGUoIkV4Y2VwdGlvbiB3aGlsZSBtYWtp
bmcgYSBjYWxsLiIpOworICAgICAgICAqcmVzdWx0ID0gUHJvdG9jb2w6OlNjYWxhclZhbHVlOjpj
cmVhdGUoIkV4Y2VwdGlvbiB3aGlsZSBtYWtpbmcgYSBjYWxsLiIpOwogfQogCiB2b2lkIEluamVj
dGVkU2NyaXB0QmFzZTo6bWFrZUV2YWxDYWxsKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgRGVw
cmVjYXRlZDo6U2NyaXB0RnVuY3Rpb25DYWxsJiBmdW5jdGlvbiwgUmVmUHRyPFByb3RvY29sOjpS
dW50aW1lOjpSZW1vdGVPYmplY3Q+KiBvYmplY3RSZXN1bHQsIFByb3RvY29sOjpPcHRPdXRwdXQ8
Ym9vbD4qIHdhc1Rocm93bikKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHJlc3VsdDsK
KyAgICBSZWZQdHI8UHJvdG9jb2w6OlVuY2hlY2tlZFZhbHVlPiByZXN1bHQ7CiAgICAgbWFrZUNh
bGwoZnVuY3Rpb24sICZyZXN1bHQpOwogICAgIGlmICghcmVzdWx0KSB7CiAgICAgICAgIGVycm9y
U3RyaW5nID0gQVNDSUlMaXRlcmFsKCJJbnRlcm5hbCBlcnJvcjogcmVzdWx0IHZhbHVlIGlzIGVt
cHR5Iik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAocmVzdWx0LT50eXBlKCkg
PT0gSW5zcGVjdG9yVmFsdWU6OlR5cGU6OlN0cmluZykgeworICAgIGlmIChyZXN1bHQtPnR5cGUo
KSA9PSBQcm90b2NvbDo6VW5jaGVja2VkVmFsdWU6OlR5cGU6OlN0cmluZykgewogICAgICAgICBy
ZXN1bHQtPmFzU3RyaW5nKGVycm9yU3RyaW5nKTsKICAgICAgICAgQVNTRVJUKGVycm9yU3RyaW5n
Lmxlbmd0aCgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHJlc3VsdFBhaXI7CisgICAgUmVmUHRyPFByb3RvY29sOjpVbmNoZWNrZWRPYmpl
Y3Q+IHJlc3VsdFBhaXI7CiAgICAgaWYgKCFyZXN1bHQtPmFzT2JqZWN0KHJlc3VsdFBhaXIpKSB7
CiAgICAgICAgIGVycm9yU3RyaW5nID0gQVNDSUlMaXRlcmFsKCJJbnRlcm5hbCBlcnJvcjogcmVz
dWx0IGlzIG5vdCBhbiBPYmplY3QiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdE9iamVjdCA9IHJlc3VsdFBhaXItPmdldE9iamVj
dChBU0NJSUxpdGVyYWwoInJlc3VsdCIpKTsKKyAgICBSZWZQdHI8UHJvdG9jb2w6OlVuY2hlY2tl
ZE9iamVjdD4gcmVzdWx0T2JqZWN0ID0gcmVzdWx0UGFpci0+Z2V0T2JqZWN0KEFTQ0lJTGl0ZXJh
bCgicmVzdWx0IikpOwogICAgIGJvb2wgd2FzVGhyb3duVmFsID0gZmFsc2U7CiAgICAgaWYgKCFy
ZXN1bHRPYmplY3QgfHwgIXJlc3VsdFBhaXItPmdldEJvb2xlYW4oQVNDSUlMaXRlcmFsKCJ3YXNU
aHJvd24iKSwgd2FzVGhyb3duVmFsKSkgewogICAgICAgICBlcnJvclN0cmluZyA9IEFTQ0lJTGl0
ZXJhbCgiSW50ZXJuYWwgZXJyb3I6IHJlc3VsdCBpcyBub3QgYSBwYWlyIG9mIHZhbHVlIGFuZCB3
YXNUaHJvd24gZmxhZyIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9JbmplY3RlZFNjcmlwdEJhc2UuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3IvSW5qZWN0ZWRTY3JpcHRCYXNlLmgKaW5kZXggMTk0Zjc0NDdkYTBiNDc5ZTViMGVmOTk5OTlh
YWIwODM1YjhkOWRhMi4uNTIwY2IwNDkyODYzNWZjNzI4MWNmMjg4YTVlNjVlZmRkYzk3OTcxMSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlw
dEJhc2UuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2Ny
aXB0QmFzZS5oCkBAIC02Nyw3ICs2Nyw3IEBAIHByb3RlY3RlZDoKIAogICAgIGNvbnN0IERlcHJl
Y2F0ZWQ6OlNjcmlwdE9iamVjdCYgaW5qZWN0ZWRTY3JpcHRPYmplY3QoKSBjb25zdDsKICAgICBE
ZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSBjYWxsRnVuY3Rpb25XaXRoRXZhbEVuYWJsZWQoRGVwcmVj
YXRlZDo6U2NyaXB0RnVuY3Rpb25DYWxsJiwgYm9vbCYgaGFkRXhjZXB0aW9uKSBjb25zdDsKLSAg
ICB2b2lkIG1ha2VDYWxsKERlcHJlY2F0ZWQ6OlNjcmlwdEZ1bmN0aW9uQ2FsbCYsIFJlZlB0cjxJ
bnNwZWN0b3JWYWx1ZT4qIHJlc3VsdCk7CisgICAgdm9pZCBtYWtlQ2FsbChEZXByZWNhdGVkOjpT
Y3JpcHRGdW5jdGlvbkNhbGwmLCBSZWZQdHI8UHJvdG9jb2w6OlVuY2hlY2tlZFZhbHVlPiogcmVz
dWx0KTsKICAgICB2b2lkIG1ha2VFdmFsQ2FsbChFcnJvclN0cmluZyYsIERlcHJlY2F0ZWQ6OlNj
cmlwdEZ1bmN0aW9uQ2FsbCYsIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0
PiogcmVzdWx0LCBQcm90b2NvbDo6T3B0T3V0cHV0PGJvb2w+KiB3YXNUaHJvd24pOwogCiBwcml2
YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3Rl
ZFNjcmlwdE1hbmFnZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9Jbmpl
Y3RlZFNjcmlwdE1hbmFnZXIuY3BwCmluZGV4IDlhOTAxOGJkZDgyOTE3YTM5YjMwOTUzZjBmODc0
MTgzMmYzMTkwZmUuLjFhOTE4Yjc1NzRkYjAwNjlmNjUwMGI0ODJhMjg4MDgzYTc0MmZkYzAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRN
YW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVk
U2NyaXB0TWFuYWdlci5jcHAKQEAgLTM2LDcgKzM2LDcgQEAKICNpbmNsdWRlICJDb21wbGV0aW9u
LmgiCiAjaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHRIb3N0LmgiCiAjaW5jbHVkZSAiSW5qZWN0ZWRT
Y3JpcHRTb3VyY2UuaCIKLSNpbmNsdWRlICJJbnNwZWN0b3JWYWx1ZXMuaCIKKyNpbmNsdWRlICJJ
bnNwZWN0b3JQcm90b2NvbFR5cGVzLmgiCiAjaW5jbHVkZSAiSlNJbmplY3RlZFNjcmlwdEhvc3Qu
aCIKICNpbmNsdWRlICJKU0xvY2suaCIKICNpbmNsdWRlICJTY3JpcHRPYmplY3QuaCIKQEAgLTk0
LDExICs5NCwxMSBAQCBpbnQgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjppbmplY3RlZFNjcmlwdElk
Rm9yKEV4ZWNTdGF0ZSogc2NyaXB0U3RhdGUpCiAKIEluamVjdGVkU2NyaXB0IEluamVjdGVkU2Ny
aXB0TWFuYWdlcjo6aW5qZWN0ZWRTY3JpcHRGb3JPYmplY3RJZChjb25zdCBTdHJpbmcmIG9iamVj
dElkKQogewotICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gcGFyc2VkT2JqZWN0SWQ7Ci0gICAg
aWYgKCFJbnNwZWN0b3JWYWx1ZTo6cGFyc2VKU09OKG9iamVjdElkLCBwYXJzZWRPYmplY3RJZCkp
CisgICAgUmVmUHRyPFByb3RvY29sOjpVbmNoZWNrZWRWYWx1ZT4gcGFyc2VkT2JqZWN0SWQ7Cisg
ICAgaWYgKCFQcm90b2NvbDo6VW5jaGVja2VkVmFsdWU6OnBhcnNlSlNPTihvYmplY3RJZCwgcGFy
c2VkT2JqZWN0SWQpKQogICAgICAgICByZXR1cm4gSW5qZWN0ZWRTY3JpcHQoKTsKIAotICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdE9iamVjdDsKKyAgICBSZWZQdHI8UHJvdG9jb2w6
OlVuY2hlY2tlZE9iamVjdD4gcmVzdWx0T2JqZWN0OwogICAgIGlmICghcGFyc2VkT2JqZWN0SWQt
PmFzT2JqZWN0KHJlc3VsdE9iamVjdCkpCiAgICAgICAgIHJldHVybiBJbmplY3RlZFNjcmlwdCgp
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuY3BwCmluZGV4IDlhYjI0OTE0OWZiYTNhMmEwOTI0
NzYyZjQ5NDJiNjExZmQxZDA5ODQuLjUzNjVmOTI3ODU1ZmU1YmEwZWE3ZjNlMTMyZWRiYmUxMmQ4
Njg1NGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuY3BwCkBAIC0zMCw3ICszMCw3IEBACiAj
aWYgRU5BQkxFKElOU1BFQ1RPUikKIAogI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5kQ2hhbm5l
bC5oIgotI2luY2x1ZGUgIkluc3BlY3RvclZhbHVlcy5oIgorI2luY2x1ZGUgIkluc3BlY3RvclBy
b3RvY29sVHlwZXMuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTU0LDcgKzU0LDcgQEAgdm9pZCBJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlOjpzZW5kRmFpbHVyZShjb25zdCBFcnJvclN0
cmluZyYgZXIKICAgICBzZW5kSWZBY3RpdmUobnVsbHB0ciwgZXJyb3IpOwogfQogCi12b2lkIElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2U6OnNlbmRJZkFjdGl2ZShQYXNz
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFydGlhbE1lc3NhZ2UsIGNvbnN0IEVycm9yU3RyaW5n
JiBpbnZvY2F0aW9uRXJyb3IpCit2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpDYWxs
YmFja0Jhc2U6OnNlbmRJZkFjdGl2ZShQYXNzUmVmUHRyPFByb3RvY29sOjpVbmNoZWNrZWRPYmpl
Y3Q+IHBhcnRpYWxNZXNzYWdlLCBjb25zdCBFcnJvclN0cmluZyYgaW52b2NhdGlvbkVycm9yKQog
ewogICAgIGlmIChtX2FscmVhZHlTZW50KQogICAgICAgICByZXR1cm47CkBAIC03OCwxOSArNzgs
MTkgQEAgdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2goY29uc3QgU3Ry
aW5nJiBtZXNzYWdlKQogewogICAgIFJlZjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4gcHJv
dGVjdCgqdGhpcyk7CiAKLSAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHBhcnNlZE1lc3NhZ2U7
Ci0gICAgaWYgKCFJbnNwZWN0b3JWYWx1ZTo6cGFyc2VKU09OKG1lc3NhZ2UsIHBhcnNlZE1lc3Nh
Z2UpKSB7CisgICAgUmVmUHRyPFByb3RvY29sOjpVbmNoZWNrZWRWYWx1ZT4gcGFyc2VkTWVzc2Fn
ZTsKKyAgICBpZiAoIVByb3RvY29sOjpVbmNoZWNrZWRWYWx1ZTo6cGFyc2VKU09OKG1lc3NhZ2Us
IHBhcnNlZE1lc3NhZ2UpKSB7CiAgICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IobnVsbHB0ciwg
UGFyc2VFcnJvciwgQVNDSUlMaXRlcmFsKCJNZXNzYWdlIG11c3QgYmUgaW4gSlNPTiBmb3JtYXQi
KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBtZXNzYWdlT2JqZWN0OworICAgIFJlZlB0cjxQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBt
ZXNzYWdlT2JqZWN0OwogICAgIGlmICghcGFyc2VkTWVzc2FnZS0+YXNPYmplY3QobWVzc2FnZU9i
amVjdCkpIHsKICAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihudWxscHRyLCBJbnZhbGlkUmVx
dWVzdCwgQVNDSUlMaXRlcmFsKCJNZXNzYWdlIG11c3QgYmUgYSBKU09OaWZpZWQgb2JqZWN0Iikp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiBj
YWxsSWRWYWx1ZSA9IG1lc3NhZ2VPYmplY3QtPmdldChBU0NJSUxpdGVyYWwoImlkIikpOworICAg
IFJlZlB0cjxQcm90b2NvbDo6VW5jaGVja2VkVmFsdWU+IGNhbGxJZFZhbHVlID0gbWVzc2FnZU9i
amVjdC0+Z2V0KEFTQ0lJTGl0ZXJhbCgiaWQiKSk7CiAgICAgaWYgKCFjYWxsSWRWYWx1ZSkgewog
ICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKG51bGxwdHIsIEludmFsaWRSZXF1ZXN0LCBBU0NJ
SUxpdGVyYWwoIidpZCcgcHJvcGVydHkgd2FzIG5vdCBmb3VuZCIpKTsKICAgICAgICAgcmV0dXJu
OwpAQCAtMTAyLDcgKzEwMiw3IEBAIHZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmRp
c3BhdGNoKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gbWV0aG9kVmFsdWUgPSBtZXNzYWdlT2JqZWN0LT5n
ZXQoQVNDSUlMaXRlcmFsKCJtZXRob2QiKSk7CisgICAgUmVmUHRyPFByb3RvY29sOjpVbmNoZWNr
ZWRWYWx1ZT4gbWV0aG9kVmFsdWUgPSBtZXNzYWdlT2JqZWN0LT5nZXQoQVNDSUlMaXRlcmFsKCJt
ZXRob2QiKSk7CiAgICAgaWYgKCFtZXRob2RWYWx1ZSkgewogICAgICAgICByZXBvcnRQcm90b2Nv
bEVycm9yKCZjYWxsSWQsIEludmFsaWRSZXF1ZXN0LCBBU0NJSUxpdGVyYWwoIidtZXRob2QnIHBy
b3BlcnR5IHdhc24ndCBmb3VuZCIpKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMTMxLDcgKzEzMSw3
IEBAIHZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGNvbnN0IFN0cmlu
ZyYgbWVzc2FnZSkKICAgICBkb21haW5EaXNwYXRjaGVyLT5kaXNwYXRjaChjYWxsSWQsIGRvbWFp
bk1ldGhvZCwgbWVzc2FnZU9iamVjdC5yZWxlYXNlKCkpOwogfQogCi12b2lkIEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyOjpzZW5kUmVzcG9uc2UobG9uZyBjYWxsSWQsIFBhc3NSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiByZXN1bHQsIGNvbnN0IEVycm9yU3RyaW5nJiBpbnZvY2F0aW9uRXJyb3Ip
Cit2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpzZW5kUmVzcG9uc2UobG9uZyBjYWxs
SWQsIFBhc3NSZWZQdHI8UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gcmVzdWx0LCBjb25zdCBF
cnJvclN0cmluZyYgaW52b2NhdGlvbkVycm9yKQogewogICAgIGlmICghbV9pbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwpCiAgICAgICAgIHJldHVybjsKQEAgLTE0MSw3ICsxNDEsNyBAQCB2b2lkIElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpzZW5kUmVzcG9uc2UobG9uZyBjYWxsSWQsIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yTwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcmVzcG9uc2VNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKKyAgICBSZWZQdHI8UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gcmVzcG9uc2VNZXNzYWdl
ID0gUHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdDo6Y3JlYXRlKCk7CiAgICAgcmVzcG9uc2VNZXNz
YWdlLT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJyZXN1bHQiKSwgcmVzdWx0KTsKICAgICByZXNw
b25zZU1lc3NhZ2UtPnNldEludGVnZXIoQVNDSUlMaXRlcmFsKCJpZCIpLCBjYWxsSWQpOwogICAg
IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQocmVzcG9u
c2VNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CkBAIC0xNTIsNyArMTUyLDcgQEAgdm9pZCBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6cmVwb3J0UHJvdG9jb2xFcnJvcihjb25zdCBsb25nKiBj
b25zdCBjYWxsSWQsIEMKICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgZXJyb3JDb2Rl
LCBlcnJvck1lc3NhZ2UsIG51bGxwdHIpOwogfQogCi12b2lkIEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyOjpyZXBvcnRQcm90b2NvbEVycm9yKGNvbnN0IGxvbmcqIGNvbnN0IGNhbGxJZCwgQ29t
bW9uRXJyb3JDb2RlIGVycm9yQ29kZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGRhdGEpIGNvbnN0Cit2b2lkIEluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyOjpyZXBvcnRQcm90b2NvbEVycm9yKGNvbnN0IGxvbmcqIGNvbnN0IGNhbGxJZCwg
Q29tbW9uRXJyb3JDb2RlIGVycm9yQ29kZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIFBh
c3NSZWZQdHI8UHJvdG9jb2w6OlVuY2hlY2tlZEFycmF5PiBkYXRhKSBjb25zdAogewogICAgIHN0
YXRpYyBjb25zdCBpbnQgZXJyb3JDb2Rlc1tdID0gewogICAgICAgICAtMzI3MDAsIC8vIFBhcnNl
RXJyb3IKQEAgLTE3MCwyNCArMTcwLDI0IEBAIHZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI6OnJlcG9ydFByb3RvY29sRXJyb3IoY29uc3QgbG9uZyogY29uc3QgY2FsbElkLCBDCiAgICAg
aWYgKCFtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZXJyb3IgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OworICAgIFJlZlB0cjxQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBlcnJvciA9IFByb3RvY29s
OjpVbmNoZWNrZWRPYmplY3Q6OmNyZWF0ZSgpOwogICAgIGVycm9yLT5zZXRJbnRlZ2VyKEFTQ0lJ
TGl0ZXJhbCgiY29kZSIpLCBlcnJvckNvZGVzW2Vycm9yQ29kZV0pOwogICAgIGVycm9yLT5zZXRT
dHJpbmcoQVNDSUlMaXRlcmFsKCJtZXNzYWdlIiksIGVycm9yTWVzc2FnZSk7CiAgICAgaWYgKGRh
dGEpCiAgICAgICAgIGVycm9yLT5zZXRBcnJheShBU0NJSUxpdGVyYWwoImRhdGEiKSwgZGF0YSk7
CiAKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gbWVzc2Fn
ZSA9IFByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q6OmNyZWF0ZSgpOwogICAgIG1lc3NhZ2UtPnNl
dE9iamVjdChBU0NJSUxpdGVyYWwoImVycm9yIiksIGVycm9yLnJlbGVhc2UoKSk7CiAgICAgaWYg
KGNhbGxJZCkKICAgICAgICAgbWVzc2FnZS0+c2V0SW50ZWdlcihBU0NJSUxpdGVyYWwoImlkIiks
ICpjYWxsSWQpOwogICAgIGVsc2UKLSAgICAgICAgbWVzc2FnZS0+c2V0VmFsdWUoQVNDSUlMaXRl
cmFsKCJpZCIpLCBJbnNwZWN0b3JWYWx1ZTo6bnVsbCgpKTsKKyAgICAgICAgbWVzc2FnZS0+c2V0
VmFsdWUoQVNDSUlMaXRlcmFsKCJpZCIpLCBQcm90b2NvbDo6VW5jaGVja2VkVmFsdWU6Om51bGwo
KSk7CiAKICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250
ZW5kKG1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgUmV0
dXJuVmFsdWVUeXBlLCB0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIERlZmF1bHRWYWx1ZVR5
cGU+Ci1zdGF0aWMgUmV0dXJuVmFsdWVUeXBlIGdldFByb3BlcnR5VmFsdWUoSW5zcGVjdG9yT2Jq
ZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVj
dG9yQXJyYXkqIHByb3RvY29sRXJyb3JzLCBEZWZhdWx0VmFsdWVUeXBlIGRlZmF1bHRWYWx1ZSwg
Ym9vbCAoKmFzTWV0aG9kKShJbnNwZWN0b3JWYWx1ZSYsIFZhbHVlVHlwZSYpLCBjb25zdCBjaGFy
KiB0eXBlTmFtZSkKK3N0YXRpYyBSZXR1cm5WYWx1ZVR5cGUgZ2V0UHJvcGVydHlWYWx1ZShQcm90
b2NvbDo6VW5jaGVja2VkT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCog
dmFsdWVGb3VuZCwgUHJvdG9jb2w6OlVuY2hlY2tlZEFycmF5KiBwcm90b2NvbEVycm9ycywgRGVm
YXVsdFZhbHVlVHlwZSBkZWZhdWx0VmFsdWUsIGJvb2wgKCphc01ldGhvZCkoUHJvdG9jb2w6OlVu
Y2hlY2tlZFZhbHVlJiwgVmFsdWVUeXBlJiksIGNvbnN0IGNoYXIqIHR5cGVOYW1lKQogewogICAg
IEFTU0VSVChwcm90b2NvbEVycm9ycyk7CiAKQEAgLTIwMSw4ICsyMDEsOCBAQCBzdGF0aWMgUmV0
dXJuVmFsdWVUeXBlIGdldFByb3BlcnR5VmFsdWUoSW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNv
bnN0IFN0cmluZyYgbgogICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgfQogCi0gICAgSW5zcGVj
dG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBvYmplY3QtPmVuZCgpOwotICAgIEluc3Bl
Y3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgdmFsdWVJdGVyYXRvciA9IG9iamVjdC0+ZmluZChu
YW1lKTsKKyAgICBQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0Ojpjb25zdF9pdGVyYXRvciBlbmQg
PSBvYmplY3QtPmVuZCgpOworICAgIFByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q6OmNvbnN0X2l0
ZXJhdG9yIHZhbHVlSXRlcmF0b3IgPSBvYmplY3QtPmZpbmQobmFtZSk7CiAgICAgaWYgKHZhbHVl
SXRlcmF0b3IgPT0gZW5kKSB7CiAgICAgICAgIGlmICghdmFsdWVGb3VuZCkKICAgICAgICAgICAg
IHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJQYXJhbWV0ZXIgJyVz
JyB3aXRoIHR5cGUgJyVzJyB3YXMgbm90IGZvdW5kLiIsIG5hbWUudXRmOCgpLmRhdGEoKSwgdHlw
ZU5hbWUpKTsKQEAgLTIyMSw0MiArMjIxLDQyIEBAIHN0YXRpYyBSZXR1cm5WYWx1ZVR5cGUgZ2V0
UHJvcGVydHlWYWx1ZShJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuCiB9
CiAKIHN0cnVjdCBBc01ldGhvZEJyaWRnZXMgewotICAgIHN0YXRpYyBib29sIGFzSW50ZWdlcihJ
bnNwZWN0b3JWYWx1ZSYgdmFsdWUsIGludCYgb3V0cHV0KSB7IHJldHVybiB2YWx1ZS5hc0ludGVn
ZXIob3V0cHV0KTsgfQotICAgIHN0YXRpYyBib29sIGFzRG91YmxlKEluc3BlY3RvclZhbHVlJiB2
YWx1ZSwgZG91YmxlJiBvdXRwdXQpIHsgcmV0dXJuIHZhbHVlLmFzRG91YmxlKG91dHB1dCk7IH0K
LSAgICBzdGF0aWMgYm9vbCBhc1N0cmluZyhJbnNwZWN0b3JWYWx1ZSYgdmFsdWUsIFN0cmluZyYg
b3V0cHV0KSB7IHJldHVybiB2YWx1ZS5hc1N0cmluZyhvdXRwdXQpOyB9Ci0gICAgc3RhdGljIGJv
b2wgYXNCb29sZWFuKEluc3BlY3RvclZhbHVlJiB2YWx1ZSwgYm9vbCYgb3V0cHV0KSB7IHJldHVy
biB2YWx1ZS5hc0Jvb2xlYW4ob3V0cHV0KTsgfQotICAgIHN0YXRpYyBib29sIGFzT2JqZWN0KElu
c3BlY3RvclZhbHVlJiB2YWx1ZSwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIG91dHB1dCkgeyBy
ZXR1cm4gdmFsdWUuYXNPYmplY3Qob3V0cHV0KTsgfQotICAgIHN0YXRpYyBib29sIGFzQXJyYXko
SW5zcGVjdG9yVmFsdWUmIHZhbHVlLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+JiBvdXRwdXQpIHsg
cmV0dXJuIHZhbHVlLmFzQXJyYXkob3V0cHV0KTsgfQorICAgIHN0YXRpYyBib29sIGFzSW50ZWdl
cihQcm90b2NvbDo6VW5jaGVja2VkVmFsdWUmIHZhbHVlLCBpbnQmIG91dHB1dCkgeyByZXR1cm4g
dmFsdWUuYXNJbnRlZ2VyKG91dHB1dCk7IH0KKyAgICBzdGF0aWMgYm9vbCBhc0RvdWJsZShQcm90
b2NvbDo6VW5jaGVja2VkVmFsdWUmIHZhbHVlLCBkb3VibGUmIG91dHB1dCkgeyByZXR1cm4gdmFs
dWUuYXNEb3VibGUob3V0cHV0KTsgfQorICAgIHN0YXRpYyBib29sIGFzU3RyaW5nKFByb3RvY29s
OjpVbmNoZWNrZWRWYWx1ZSYgdmFsdWUsIFN0cmluZyYgb3V0cHV0KSB7IHJldHVybiB2YWx1ZS5h
c1N0cmluZyhvdXRwdXQpOyB9CisgICAgc3RhdGljIGJvb2wgYXNCb29sZWFuKFByb3RvY29sOjpV
bmNoZWNrZWRWYWx1ZSYgdmFsdWUsIGJvb2wmIG91dHB1dCkgeyByZXR1cm4gdmFsdWUuYXNCb29s
ZWFuKG91dHB1dCk7IH0KKyAgICBzdGF0aWMgYm9vbCBhc09iamVjdChQcm90b2NvbDo6VW5jaGVj
a2VkVmFsdWUmIHZhbHVlLCBSZWZQdHI8UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4mIG91dHB1
dCkgeyByZXR1cm4gdmFsdWUuYXNPYmplY3Qob3V0cHV0KTsgfQorICAgIHN0YXRpYyBib29sIGFz
QXJyYXkoUHJvdG9jb2w6OlVuY2hlY2tlZFZhbHVlJiB2YWx1ZSwgUmVmUHRyPFByb3RvY29sOjpV
bmNoZWNrZWRBcnJheT4mIG91dHB1dCkgeyByZXR1cm4gdmFsdWUuYXNBcnJheShvdXRwdXQpOyB9
CiB9OwogCi1pbnQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldEludGVnZXIoSW5zcGVj
dG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwg
SW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKQoraW50IEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyOjpnZXRJbnRlZ2VyKFByb3RvY29sOjpVbmNoZWNrZWRPYmplY3QqIG9iamVjdCwgY29u
c3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBQcm90b2NvbDo6VW5jaGVja2VkQXJy
YXkqIHByb3RvY29sRXJyb3JzKQogewogICAgIHJldHVybiBnZXRQcm9wZXJ0eVZhbHVlPGludCwg
aW50LCBpbnQ+KG9iamVjdCwgbmFtZSwgdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnMsIDAsIEFz
TWV0aG9kQnJpZGdlczo6YXNJbnRlZ2VyLCAiSW50ZWdlciIpOwogfQogCi1kb3VibGUgSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXI6OmdldERvdWJsZShJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwg
Y29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJv
dG9jb2xFcnJvcnMpCitkb3VibGUgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldERvdWJs
ZShQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwg
Ym9vbCogdmFsdWVGb3VuZCwgUHJvdG9jb2w6OlVuY2hlY2tlZEFycmF5KiBwcm90b2NvbEVycm9y
cykKIHsKICAgICByZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZTxkb3VibGUsIGRvdWJsZSwgZG91Ymxl
PihvYmplY3QsIG5hbWUsIHZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzLCAwLCBBc01ldGhvZEJy
aWRnZXM6OmFzRG91YmxlLCAiTnVtYmVyIik7CiB9CiAKLVN0cmluZyBJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJp
bmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9y
cykKK1N0cmluZyBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKFByb3RvY29s
OjpVbmNoZWNrZWRPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1
ZUZvdW5kLCBQcm90b2NvbDo6VW5jaGVja2VkQXJyYXkqIHByb3RvY29sRXJyb3JzKQogewogICAg
IHJldHVybiBnZXRQcm9wZXJ0eVZhbHVlPFN0cmluZywgU3RyaW5nLCBTdHJpbmc+KG9iamVjdCwg
bmFtZSwgdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnMsICIiLCBBc01ldGhvZEJyaWRnZXM6OmFz
U3RyaW5nLCAiU3RyaW5nIik7CiB9CiAKLWJvb2wgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6
OmdldEJvb2xlYW4oSW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwg
Ym9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKQorYm9vbCBJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0Qm9vbGVhbihQcm90b2NvbDo6VW5jaGVja2Vk
T2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgUHJv
dG9jb2w6OlVuY2hlY2tlZEFycmF5KiBwcm90b2NvbEVycm9ycykKIHsKICAgICByZXR1cm4gZ2V0
UHJvcGVydHlWYWx1ZTxib29sLCBib29sLCBib29sPihvYmplY3QsIG5hbWUsIHZhbHVlRm91bmQs
IHByb3RvY29sRXJyb3JzLCBmYWxzZSwgQXNNZXRob2RCcmlkZ2VzOjphc0Jvb2xlYW4sICJCb29s
ZWFuIik7CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlcjo6Z2V0T2JqZWN0KEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJp
bmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9y
cykKK1Bhc3NSZWZQdHI8UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXI6OmdldE9iamVjdChQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0KiBvYmplY3Qs
IGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgUHJvdG9jb2w6OlVuY2hlY2tl
ZEFycmF5KiBwcm90b2NvbEVycm9ycykKIHsKLSAgICByZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZTxQ
YXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4sIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+LCBJbnNw
ZWN0b3JPYmplY3QqPihvYmplY3QsIG5hbWUsIHZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzLCBu
dWxscHRyLCBBc01ldGhvZEJyaWRnZXM6OmFzT2JqZWN0LCAiT2JqZWN0Iik7CisgICAgcmV0dXJu
IGdldFByb3BlcnR5VmFsdWU8UGFzc1JlZlB0cjxQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0Piwg
UmVmUHRyPFByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+LCBQcm90b2NvbDo6VW5jaGVja2VkT2Jq
ZWN0Kj4ob2JqZWN0LCBuYW1lLCB2YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9ycywgbnVsbHB0ciwg
QXNNZXRob2RCcmlkZ2VzOjphc09iamVjdCwgIk9iamVjdCIpOwogfQogCi1QYXNzUmVmUHRyPElu
c3BlY3RvckFycmF5PiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0QXJyYXkoSW5zcGVj
dG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwg
SW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKQorUGFzc1JlZlB0cjxQcm90b2NvbDo6VW5j
aGVja2VkQXJyYXk+IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRBcnJheShQcm90b2Nv
bDo6VW5jaGVja2VkT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFs
dWVGb3VuZCwgUHJvdG9jb2w6OlVuY2hlY2tlZEFycmF5KiBwcm90b2NvbEVycm9ycykKIHsKLSAg
ICByZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZTxQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiwgUmVm
UHRyPEluc3BlY3RvckFycmF5PiwgSW5zcGVjdG9yQXJyYXkqPihvYmplY3QsIG5hbWUsIHZhbHVl
Rm91bmQsIHByb3RvY29sRXJyb3JzLCBudWxscHRyLCBBc01ldGhvZEJyaWRnZXM6OmFzQXJyYXks
ICJBcnJheSIpOworICAgIHJldHVybiBnZXRQcm9wZXJ0eVZhbHVlPFBhc3NSZWZQdHI8UHJvdG9j
b2w6OlVuY2hlY2tlZEFycmF5PiwgUmVmUHRyPFByb3RvY29sOjpVbmNoZWNrZWRBcnJheT4sIFBy
b3RvY29sOjpVbmNoZWNrZWRBcnJheSo+KG9iamVjdCwgbmFtZSwgdmFsdWVGb3VuZCwgcHJvdG9j
b2xFcnJvcnMsIG51bGxwdHIsIEFzTWV0aG9kQnJpZGdlczo6YXNBcnJheSwgIkFycmF5Iik7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oCmluZGV4
IDI5NThhNGRjYmE2YzhmNmE1YTgzZmQzNjg3MzQ5Y2ViYThjMmFkMGQuLjdjZmZlZDI0YTZlM2U1
YzUwN2U3OTA0NGQyYmQ1MWJkYmEzOWY3ODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmgKQEAg
LTI3LDcgKzI3LDcgQEAKICNpZm5kZWYgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJfaAogI2Rl
ZmluZSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcl9oCiAKLSNpbmNsdWRlICJJbnNwZWN0b3JW
YWx1ZXMuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JQcm90b2NvbFR5cGVzLmgiCiAjaW5jbHVkZSA8
d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtNDIsNyArNDIsNyBAQCBjbGFzcyBJbnNwZWN0b3JT
dXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBSZWZDb3VudGVkPEluc3BlY3Rv
clN1cHBsZQogcHVibGljOgogICAgIEluc3BlY3RvclN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRj
aGVyKEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcikgOiBtX2Jh
Y2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKSB7IH0KICAgICB2aXJ0dWFsIH5JbnNw
ZWN0b3JTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQotICAgIHZpcnR1YWwgdm9p
ZCBkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFBhc3NSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNo
KGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUGFzc1JlZlB0cjxQcm90b2NvbDo6
VW5jaGVja2VkT2JqZWN0PiBtZXNzYWdlKSA9IDA7CiBwcm90ZWN0ZWQ6CiAgICAgUmVmUHRyPElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwogfTsKQEAgLTYw
LDcgKzYwLDcgQEAgcHVibGljOgogICAgICAgICB2b2lkIGRpc2FibGUoKSB7IG1fYWxyZWFkeVNl
bnQgPSB0cnVlOyB9CiAKICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIHZvaWQgc2VuZElmQWN0aXZl
KFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJ0aWFsTWVzc2FnZSwgY29uc3QgRXJyb3JT
dHJpbmcmIGludm9jYXRpb25FcnJvcik7CisgICAgICAgIHZvaWQgc2VuZElmQWN0aXZlKFBhc3NS
ZWZQdHI8UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gcGFydGlhbE1lc3NhZ2UsIGNvbnN0IEVy
cm9yU3RyaW5nJiBpbnZvY2F0aW9uRXJyb3IpOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgUmVm
UHRyPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwpAQCAt
ODIsMTYgKzgyLDE2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgcmVnaXN0ZXJEaXNwYXRjaGVyRm9y
RG9tYWluKGNvbnN0IFN0cmluZyYgZG9tYWluLCBJbnNwZWN0b3JTdXBwbGVtZW50YWxCYWNrZW5k
RGlzcGF0Y2hlciopOwogICAgIHZvaWQgZGlzcGF0Y2goY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsK
LSAgICB2b2lkIHNlbmRSZXNwb25zZShsb25nIGNhbGxJZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHJlc3VsdCwgY29uc3QgRXJyb3JTdHJpbmcmIGludm9jYXRpb25FcnJvcik7CisgICAg
dm9pZCBzZW5kUmVzcG9uc2UobG9uZyBjYWxsSWQsIFBhc3NSZWZQdHI8UHJvdG9jb2w6OlVuY2hl
Y2tlZE9iamVjdD4gcmVzdWx0LCBjb25zdCBFcnJvclN0cmluZyYgaW52b2NhdGlvbkVycm9yKTsK
ICAgICB2b2lkIHJlcG9ydFByb3RvY29sRXJyb3IoY29uc3QgbG9uZyogY29uc3QgY2FsbElkLCBD
b21tb25FcnJvckNvZGUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKSBjb25zdDsKLSAgICB2
b2lkIHJlcG9ydFByb3RvY29sRXJyb3IoY29uc3QgbG9uZyogY29uc3QgY2FsbElkLCBDb21tb25F
cnJvckNvZGUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBQYXNzUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiBkYXRhKSBjb25zdDsKLQotICAgIHN0YXRpYyBpbnQgZ2V0SW50ZWdlcihJbnNwZWN0
b3JPYmplY3QqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3Rv
ckFycmF5KiBwcm90b2NvbEVycm9ycyk7Ci0gICAgc3RhdGljIGRvdWJsZSBnZXREb3VibGUoSW5z
cGVjdG9yT2JqZWN0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNw
ZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnMpOwotICAgIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5n
KEluc3BlY3Rvck9iamVjdCosIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwg
SW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKTsKLSAgICBzdGF0aWMgYm9vbCBnZXRCb29s
ZWFuKEluc3BlY3Rvck9iamVjdCosIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3Vu
ZCwgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKTsKLSAgICBzdGF0aWMgUGFzc1JlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IGdldE9iamVjdChJbnNwZWN0b3JPYmplY3QqLCBjb25zdCBTdHJp
bmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9y
cyk7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGdldEFycmF5KEluc3Bl
Y3Rvck9iamVjdCosIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVj
dG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKTsKKyAgICB2b2lkIHJlcG9ydFByb3RvY29sRXJyb3Io
Y29uc3QgbG9uZyogY29uc3QgY2FsbElkLCBDb21tb25FcnJvckNvZGUsIGNvbnN0IFN0cmluZyYg
ZXJyb3JNZXNzYWdlLCBQYXNzUmVmUHRyPFByb3RvY29sOjpVbmNoZWNrZWRBcnJheT4gZGF0YSkg
Y29uc3Q7CisKKyAgICBzdGF0aWMgaW50IGdldEludGVnZXIoUHJvdG9jb2w6OlVuY2hlY2tlZE9i
amVjdCosIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgUHJvdG9jb2w6OlVu
Y2hlY2tlZEFycmF5KiBwcm90b2NvbEVycm9ycyk7CisgICAgc3RhdGljIGRvdWJsZSBnZXREb3Vi
bGUoUHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdCosIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCog
dmFsdWVGb3VuZCwgUHJvdG9jb2w6OlVuY2hlY2tlZEFycmF5KiBwcm90b2NvbEVycm9ycyk7Cisg
ICAgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoUHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdCosIGNv
bnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgUHJvdG9jb2w6OlVuY2hlY2tlZEFy
cmF5KiBwcm90b2NvbEVycm9ycyk7CisgICAgc3RhdGljIGJvb2wgZ2V0Qm9vbGVhbihQcm90b2Nv
bDo6VW5jaGVja2VkT2JqZWN0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5k
LCBQcm90b2NvbDo6VW5jaGVja2VkQXJyYXkqIHByb3RvY29sRXJyb3JzKTsKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBnZXRPYmplY3QoUHJvdG9jb2w6
OlVuY2hlY2tlZE9iamVjdCosIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwg
UHJvdG9jb2w6OlVuY2hlY2tlZEFycmF5KiBwcm90b2NvbEVycm9ycyk7CisgICAgc3RhdGljIFBh
c3NSZWZQdHI8UHJvdG9jb2w6OlVuY2hlY2tlZEFycmF5PiBnZXRBcnJheShQcm90b2NvbDo6VW5j
aGVja2VkT2JqZWN0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBQcm90
b2NvbDo6VW5jaGVja2VkQXJyYXkqIHByb3RvY29sRXJyb3JzKTsKIAogcHJpdmF0ZToKICAgICBJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCkgOiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwpIHsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTU1
ZDY5NzNjNmY5NmRhNTYyNTg1YjBkNjk1Yzg1M2EzMmFhNWY3ZgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5j
cHAKQEAgLTAsMCArMSw4OTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkluc3BlY3RvclByb3RvY29sVHlwZXMuaCIKKworI2luY2x1ZGUgPHd0Zi9EZWNpbWFs
TnVtYmVyLmg+CisjaW5jbHVkZSA8d3RmL2R0b2EuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdCdWlsZGVyLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCituYW1lc3BhY2UgeworCit1
c2luZyBuYW1lc3BhY2UgUHJvdG9jb2w7CisKK3N0YXRpYyBjb25zdCBpbnQgc3RhY2tMaW1pdCA9
IDEwMDA7CisKK2VudW0gVG9rZW4geworICAgIE9CSkVDVF9CRUdJTiwKKyAgICBPQkpFQ1RfRU5E
LAorICAgIEFSUkFZX0JFR0lOLAorICAgIEFSUkFZX0VORCwKKyAgICBTVFJJTkcsCisgICAgTlVN
QkVSLAorICAgIEJPT0xfVFJVRSwKKyAgICBCT09MX0ZBTFNFLAorICAgIE5VTExfVE9LRU4sCisg
ICAgTElTVF9TRVBBUkFUT1IsCisgICAgT0JKRUNUX1BBSVJfU0VQQVJBVE9SLAorICAgIElOVkFM
SURfVE9LRU4sCit9OworCitjb25zdCBjaGFyKiBjb25zdCBudWxsU3RyaW5nID0gIm51bGwiOwor
Y29uc3QgY2hhciogY29uc3QgdHJ1ZVN0cmluZyA9ICJ0cnVlIjsKK2NvbnN0IGNoYXIqIGNvbnN0
IGZhbHNlU3RyaW5nID0gImZhbHNlIjsKKworYm9vbCBwYXJzZUNvbnN0VG9rZW4oY29uc3QgVUNo
YXIqIHN0YXJ0LCBjb25zdCBVQ2hhciogZW5kLCBjb25zdCBVQ2hhcioqIHRva2VuRW5kLCBjb25z
dCBjaGFyKiB0b2tlbikKK3sKKyAgICB3aGlsZSAoc3RhcnQgPCBlbmQgJiYgKnRva2VuICE9ICdc
MCcgJiYgKnN0YXJ0KysgPT0gKnRva2VuKyspIHsgfQorCisgICAgaWYgKCp0b2tlbiAhPSAnXDAn
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAqdG9rZW5FbmQgPSBzdGFydDsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworYm9vbCByZWFkSW50KGNvbnN0IFVDaGFyKiBzdGFydCwgY29uc3Qg
VUNoYXIqIGVuZCwgY29uc3QgVUNoYXIqKiB0b2tlbkVuZCwgYm9vbCBjYW5IYXZlTGVhZGluZ1pl
cm9zKQoreworICAgIGlmIChzdGFydCA9PSBlbmQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGJvb2wgaGF2ZUxlYWRpbmdaZXJvID0gJzAnID09ICpzdGFydDsKKyAgICBpbnQgbGVuZ3Ro
ID0gMDsKKyAgICB3aGlsZSAoc3RhcnQgPCBlbmQgJiYgJzAnIDw9ICpzdGFydCAmJiAqc3RhcnQg
PD0gJzknKSB7CisgICAgICAgICsrc3RhcnQ7CisgICAgICAgICsrbGVuZ3RoOworICAgIH0KKwor
ICAgIGlmICghbGVuZ3RoKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWNhbkhh
dmVMZWFkaW5nWmVyb3MgJiYgbGVuZ3RoID4gMSAmJiBoYXZlTGVhZGluZ1plcm8pCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgICp0b2tlbkVuZCA9IHN0YXJ0OworICAgIHJldHVybiB0cnVl
OworfQorCitib29sIHBhcnNlTnVtYmVyVG9rZW4oY29uc3QgVUNoYXIqIHN0YXJ0LCBjb25zdCBV
Q2hhciogZW5kLCBjb25zdCBVQ2hhcioqIHRva2VuRW5kKQoreworICAgIC8vIFdlIGp1c3QgZ3Jh
YiB0aGUgbnVtYmVyIGhlcmUuICBXZSB2YWxpZGF0ZSB0aGUgc2l6ZSBpbiBEZWNvZGVOdW1iZXIu
CisgICAgLy8gQWNjb3JkaW5nICAgdG8gUkZDNDYyNywgYSB2YWxpZCBudW1iZXIgaXM6IFttaW51
c10gaW50IFtmcmFjXSBbZXhwXQorICAgIGlmIChzdGFydCA9PSBlbmQpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIFVDaGFyIGMgPSAqc3RhcnQ7CisgICAgaWYgKCctJyA9PSBjKQorICAg
ICAgICArK3N0YXJ0OworCisgICAgaWYgKCFyZWFkSW50KHN0YXJ0LCBlbmQsICZzdGFydCwgZmFs
c2UpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoc3RhcnQgPT0gZW5kKSB7Cisg
ICAgICAgICp0b2tlbkVuZCA9IHN0YXJ0OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisK
KyAgICAvLyBPcHRpb25hbCBmcmFjdGlvbiBwYXJ0CisgICAgYyA9ICpzdGFydDsKKyAgICBpZiAo
Jy4nID09IGMpIHsKKyAgICAgICAgKytzdGFydDsKKyAgICAgICAgaWYgKCFyZWFkSW50KHN0YXJ0
LCBlbmQsICZzdGFydCwgdHJ1ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IGlmIChzdGFydCA9PSBlbmQpIHsKKyAgICAgICAgICAgICp0b2tlbkVuZCA9IHN0YXJ0OworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgYyA9ICpzdGFydDsKKyAg
ICB9CisKKyAgICAvLyBPcHRpb25hbCBleHBvbmVudCBwYXJ0CisgICAgaWYgKCdlJyA9PSBjIHx8
ICdFJyA9PSBjKSB7CisgICAgICAgICsrc3RhcnQ7CisgICAgICAgIGlmIChzdGFydCA9PSBlbmQp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGMgPSAqc3RhcnQ7CisgICAgICAg
IGlmICgnLScgPT0gYyB8fCAnKycgPT0gYykgeworICAgICAgICAgICAgKytzdGFydDsKKyAgICAg
ICAgICAgIGlmIChzdGFydCA9PSBlbmQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgICAgIGlmICghcmVhZEludChzdGFydCwgZW5kLCAmc3RhcnQsIHRydWUp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgICp0b2tlbkVuZCA9IHN0
YXJ0OworICAgIHJldHVybiB0cnVlOworfQorCitib29sIHJlYWRIZXhEaWdpdHMoY29uc3QgVUNo
YXIqIHN0YXJ0LCBjb25zdCBVQ2hhciogZW5kLCBjb25zdCBVQ2hhcioqIHRva2VuRW5kLCBpbnQg
ZGlnaXRzKQoreworICAgIGlmIChlbmQgLSBzdGFydCA8IGRpZ2l0cykKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkaWdpdHM7ICsraSkgeworICAgICAg
ICBVQ2hhciBjID0gKnN0YXJ0Kys7CisgICAgICAgIGlmICghKCgnMCcgPD0gYyAmJiBjIDw9ICc5
JykgfHwgKCdhJyA8PSBjICYmIGMgPD0gJ2YnKSB8fCAoJ0EnIDw9IGMgJiYgYyA8PSAnRicpKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAqdG9rZW5FbmQgPSBzdGFy
dDsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBwYXJzZVN0cmluZ1Rva2VuKGNvbnN0IFVD
aGFyKiBzdGFydCwgY29uc3QgVUNoYXIqIGVuZCwgY29uc3QgVUNoYXIqKiB0b2tlbkVuZCkKK3sK
KyAgICB3aGlsZSAoc3RhcnQgPCBlbmQpIHsKKyAgICAgICAgVUNoYXIgYyA9ICpzdGFydCsrOwor
ICAgICAgICBpZiAoJ1xcJyA9PSBjKSB7CisgICAgICAgICAgICBjID0gKnN0YXJ0Kys7CisgICAg
ICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIGVzY2FwZWQgY2hhciBpcyB2YWxpZC4KKyAgICAgICAg
ICAgIHN3aXRjaCAoYykgeworICAgICAgICAgICAgY2FzZSAneCc6CisgICAgICAgICAgICAgICAg
aWYgKCFyZWFkSGV4RGlnaXRzKHN0YXJ0LCBlbmQsICZzdGFydCwgMikpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGNhc2UgJ3UnOgorICAgICAgICAgICAgICAgIGlmICghcmVhZEhleERpZ2l0cyhzdGFydCwgZW5k
LCAmc3RhcnQsIDQpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICdcXCc6CisgICAgICAgICAgICBjYXNl
ICcvJzoKKyAgICAgICAgICAgIGNhc2UgJ2InOgorICAgICAgICAgICAgY2FzZSAnZic6CisgICAg
ICAgICAgICBjYXNlICduJzoKKyAgICAgICAgICAgIGNhc2UgJ3InOgorICAgICAgICAgICAgY2Fz
ZSAndCc6CisgICAgICAgICAgICBjYXNlICd2JzoKKyAgICAgICAgICAgIGNhc2UgJyInOgorICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoJyInID09
IGMpIHsKKyAgICAgICAgICAgICp0b2tlbkVuZCA9IHN0YXJ0OworICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1Rva2Vu
IHBhcnNlVG9rZW4oY29uc3QgVUNoYXIqIHN0YXJ0LCBjb25zdCBVQ2hhciogZW5kLCBjb25zdCBV
Q2hhcioqIHRva2VuU3RhcnQsIGNvbnN0IFVDaGFyKiogdG9rZW5FbmQpCit7CisgICAgd2hpbGUg
KHN0YXJ0IDwgZW5kICYmIGlzU3BhY2VPck5ld2xpbmUoKnN0YXJ0KSkKKyAgICAgICAgKytzdGFy
dDsKKworICAgIGlmIChzdGFydCA9PSBlbmQpCisgICAgICAgIHJldHVybiBJTlZBTElEX1RPS0VO
OworCisgICAgKnRva2VuU3RhcnQgPSBzdGFydDsKKworICAgIHN3aXRjaCAoKnN0YXJ0KSB7Cisg
ICAgY2FzZSAnbic6CisgICAgICAgIGlmIChwYXJzZUNvbnN0VG9rZW4oc3RhcnQsIGVuZCwgdG9r
ZW5FbmQsIG51bGxTdHJpbmcpKQorICAgICAgICAgICAgcmV0dXJuIE5VTExfVE9LRU47CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgJ3QnOgorICAgICAgICBpZiAocGFyc2VDb25zdFRva2VuKHN0
YXJ0LCBlbmQsIHRva2VuRW5kLCB0cnVlU3RyaW5nKSkKKyAgICAgICAgICAgIHJldHVybiBCT09M
X1RSVUU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgJ2YnOgorICAgICAgICBpZiAocGFyc2VD
b25zdFRva2VuKHN0YXJ0LCBlbmQsIHRva2VuRW5kLCBmYWxzZVN0cmluZykpCisgICAgICAgICAg
ICByZXR1cm4gQk9PTF9GQUxTRTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAnWyc6CisgICAg
ICAgICp0b2tlbkVuZCA9IHN0YXJ0ICsgMTsKKyAgICAgICAgcmV0dXJuIEFSUkFZX0JFR0lOOwor
ICAgIGNhc2UgJ10nOgorICAgICAgICAqdG9rZW5FbmQgPSBzdGFydCArIDE7CisgICAgICAgIHJl
dHVybiBBUlJBWV9FTkQ7CisgICAgY2FzZSAnLCc6CisgICAgICAgICp0b2tlbkVuZCA9IHN0YXJ0
ICsgMTsKKyAgICAgICAgcmV0dXJuIExJU1RfU0VQQVJBVE9SOworICAgIGNhc2UgJ3snOgorICAg
ICAgICAqdG9rZW5FbmQgPSBzdGFydCArIDE7CisgICAgICAgIHJldHVybiBPQkpFQ1RfQkVHSU47
CisgICAgY2FzZSAnfSc6CisgICAgICAgICp0b2tlbkVuZCA9IHN0YXJ0ICsgMTsKKyAgICAgICAg
cmV0dXJuIE9CSkVDVF9FTkQ7CisgICAgY2FzZSAnOic6CisgICAgICAgICp0b2tlbkVuZCA9IHN0
YXJ0ICsgMTsKKyAgICAgICAgcmV0dXJuIE9CSkVDVF9QQUlSX1NFUEFSQVRPUjsKKyAgICBjYXNl
ICcwJzoKKyAgICBjYXNlICcxJzoKKyAgICBjYXNlICcyJzoKKyAgICBjYXNlICczJzoKKyAgICBj
YXNlICc0JzoKKyAgICBjYXNlICc1JzoKKyAgICBjYXNlICc2JzoKKyAgICBjYXNlICc3JzoKKyAg
ICBjYXNlICc4JzoKKyAgICBjYXNlICc5JzoKKyAgICBjYXNlICctJzoKKyAgICAgICAgaWYgKHBh
cnNlTnVtYmVyVG9rZW4oc3RhcnQsIGVuZCwgdG9rZW5FbmQpKQorICAgICAgICAgICAgcmV0dXJu
IE5VTUJFUjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAnIic6CisgICAgICAgIGlmIChwYXJz
ZVN0cmluZ1Rva2VuKHN0YXJ0ICsgMSwgZW5kLCB0b2tlbkVuZCkpCisgICAgICAgICAgICByZXR1
cm4gU1RSSU5HOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gSU5WQUxJRF9U
T0tFTjsKK30KKworaW5saW5lIGludCBoZXhUb0ludChVQ2hhciBjKQoreworICAgIGlmICgnMCcg
PD0gYyAmJiBjIDw9ICc5JykKKyAgICAgICAgcmV0dXJuIGMgLSAnMCc7CisgICAgaWYgKCdBJyA8
PSBjICYmIGMgPD0gJ0YnKQorICAgICAgICByZXR1cm4gYyAtICdBJyArIDEwOworICAgIGlmICgn
YScgPD0gYyAmJiBjIDw9ICdmJykKKyAgICAgICAgcmV0dXJuIGMgLSAnYScgKyAxMDsKKworICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorCitib29sIGRlY29kZVN0
cmluZyhjb25zdCBVQ2hhciogc3RhcnQsIGNvbnN0IFVDaGFyKiBlbmQsIFN0cmluZ0J1aWxkZXIm
IG91dHB1dCkKK3sKKyAgICB3aGlsZSAoc3RhcnQgPCBlbmQpIHsKKyAgICAgICAgVUNoYXIgYyA9
ICpzdGFydCsrOworICAgICAgICBpZiAoJ1xcJyAhPSBjKSB7CisgICAgICAgICAgICBvdXRwdXQu
YXBwZW5kKGMpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgYyA9
ICpzdGFydCsrOworICAgICAgICBzd2l0Y2ggKGMpIHsKKyAgICAgICAgY2FzZSAnIic6CisgICAg
ICAgIGNhc2UgJy8nOgorICAgICAgICBjYXNlICdcXCc6CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSAnYic6CisgICAgICAgICAgICBjID0gJ1xiJzsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlICdmJzoKKyAgICAgICAgICAgIGMgPSAnXGYnOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgJ24nOgorICAgICAgICAgICAgYyA9ICdcbic7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSAncic6CisgICAgICAgICAgICBjID0gJ1xyJzsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICd0JzoKKyAgICAgICAgICAgIGMgPSAnXHQn
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ3YnOgorICAgICAgICAgICAgYyA9
ICdcdic7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAneCc6CisgICAgICAgICAg
ICBjID0gKGhleFRvSW50KCpzdGFydCkgPDwgNCkgKworICAgICAgICAgICAgICAgIGhleFRvSW50
KCooc3RhcnQgKyAxKSk7CisgICAgICAgICAgICBzdGFydCArPSAyOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgJ3UnOgorICAgICAgICAgICAgYyA9IChoZXhUb0ludCgqc3RhcnQp
IDw8IDEyKSArCisgICAgICAgICAgICAgICAgKGhleFRvSW50KCooc3RhcnQgKyAxKSkgPDwgOCkg
KworICAgICAgICAgICAgICAgIChoZXhUb0ludCgqKHN0YXJ0ICsgMikpIDw8IDQpICsKKyAgICAg
ICAgICAgICAgICBoZXhUb0ludCgqKHN0YXJ0ICsgMykpOworICAgICAgICAgICAgc3RhcnQgKz0g
NDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIG91dHB1dC5hcHBlbmQoYyk7CisgICAgfQor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgZGVjb2RlU3RyaW5nKGNvbnN0IFVDaGFyKiBz
dGFydCwgY29uc3QgVUNoYXIqIGVuZCwgU3RyaW5nJiBvdXRwdXQpCit7CisgICAgaWYgKHN0YXJ0
ID09IGVuZCkgeworICAgICAgICBvdXRwdXQgPSBlbXB0eVN0cmluZygpOworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoc3RhcnQgPiBlbmQpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIFN0cmluZ0J1aWxkZXIgYnVmZmVyOworICAgIGJ1ZmZlci5yZXNlcnZlQ2Fw
YWNpdHkoZW5kIC0gc3RhcnQpOworICAgIGlmICghZGVjb2RlU3RyaW5nKHN0YXJ0LCBlbmQsIGJ1
ZmZlcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG91dHB1dCA9IGJ1ZmZlci50b1N0
cmluZygpOworICAgIHJldHVybiB0cnVlOworfQorCitQYXNzUmVmUHRyPFByb3RvY29sOjpVbmNo
ZWNrZWRWYWx1ZT4gYnVpbGRWYWx1ZShjb25zdCBVQ2hhciogc3RhcnQsIGNvbnN0IFVDaGFyKiBl
bmQsIGNvbnN0IFVDaGFyKiogdmFsdWVUb2tlbkVuZCwgaW50IGRlcHRoKQoreworICAgIGlmIChk
ZXB0aCA+IHN0YWNrTGltaXQpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgUmVmUHRy
PFByb3RvY29sOjpVbmNoZWNrZWRWYWx1ZT4gcmVzdWx0OworICAgIGNvbnN0IFVDaGFyKiB0b2tl
blN0YXJ0OworICAgIGNvbnN0IFVDaGFyKiB0b2tlbkVuZDsKKyAgICBUb2tlbiB0b2tlbiA9IHBh
cnNlVG9rZW4oc3RhcnQsIGVuZCwgJnRva2VuU3RhcnQsICZ0b2tlbkVuZCk7CisgICAgc3dpdGNo
ICh0b2tlbikgeworICAgIGNhc2UgSU5WQUxJRF9UT0tFTjoKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgY2FzZSBOVUxMX1RPS0VOOgorICAgICAgICByZXN1bHQgPSBQcm90b2NvbDo6VW5j
aGVja2VkVmFsdWU6Om51bGwoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBCT09MX1RSVUU6
CisgICAgICAgIHJlc3VsdCA9IFNjYWxhclZhbHVlOjpjcmVhdGUodHJ1ZSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgQk9PTF9GQUxTRToKKyAgICAgICAgcmVzdWx0ID0gU2NhbGFyVmFsdWU6
OmNyZWF0ZShmYWxzZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTlVNQkVSOiB7CisgICAg
ICAgIGJvb2wgb2s7CisgICAgICAgIGRvdWJsZSB2YWx1ZSA9IGNoYXJhY3RlcnNUb0RvdWJsZSh0
b2tlblN0YXJ0LCB0b2tlbkVuZCAtIHRva2VuU3RhcnQsICZvayk7CisgICAgICAgIGlmICghb2sp
CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmVzdWx0ID0gU2NhbGFyVmFs
dWU6OmNyZWF0ZSh2YWx1ZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFNUUklO
RzogeworICAgICAgICBTdHJpbmcgdmFsdWU7CisgICAgICAgIGJvb2wgb2sgPSBkZWNvZGVTdHJp
bmcodG9rZW5TdGFydCArIDEsIHRva2VuRW5kIC0gMSwgdmFsdWUpOworICAgICAgICBpZiAoIW9r
KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJlc3VsdCA9IFNjYWxhclZh
bHVlOjpjcmVhdGUodmFsdWUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBBUlJB
WV9CRUdJTjogeworICAgICAgICBSZWZQdHI8UHJvdG9jb2w6OlVuY2hlY2tlZEFycmF5PiBhcnJh
eSA9IFVuY2hlY2tlZEFycmF5OjpjcmVhdGUoKTsKKyAgICAgICAgc3RhcnQgPSB0b2tlbkVuZDsK
KyAgICAgICAgdG9rZW4gPSBwYXJzZVRva2VuKHN0YXJ0LCBlbmQsICZ0b2tlblN0YXJ0LCAmdG9r
ZW5FbmQpOworICAgICAgICB3aGlsZSAodG9rZW4gIT0gQVJSQVlfRU5EKSB7CisgICAgICAgICAg
ICBSZWZQdHI8UHJvdG9jb2w6OlVuY2hlY2tlZFZhbHVlPiBhcnJheU5vZGUgPSBidWlsZFZhbHVl
KHN0YXJ0LCBlbmQsICZ0b2tlbkVuZCwgZGVwdGggKyAxKTsKKyAgICAgICAgICAgIGlmICghYXJy
YXlOb2RlKQorICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgYXJy
YXktPnB1c2hWYWx1ZShhcnJheU5vZGUpOworCisgICAgICAgICAgICAvLyBBZnRlciBhIGxpc3Qg
dmFsdWUsIHdlIGV4cGVjdCBhIGNvbW1hIG9yIHRoZSBlbmQgb2YgdGhlIGxpc3QuCisgICAgICAg
ICAgICBzdGFydCA9IHRva2VuRW5kOworICAgICAgICAgICAgdG9rZW4gPSBwYXJzZVRva2VuKHN0
YXJ0LCBlbmQsICZ0b2tlblN0YXJ0LCAmdG9rZW5FbmQpOworICAgICAgICAgICAgaWYgKHRva2Vu
ID09IExJU1RfU0VQQVJBVE9SKSB7CisgICAgICAgICAgICAgICAgc3RhcnQgPSB0b2tlbkVuZDsK
KyAgICAgICAgICAgICAgICB0b2tlbiA9IHBhcnNlVG9rZW4oc3RhcnQsIGVuZCwgJnRva2VuU3Rh
cnQsICZ0b2tlbkVuZCk7CisgICAgICAgICAgICAgICAgaWYgKHRva2VuID09IEFSUkFZX0VORCkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICB9IGVsc2Ug
aWYgKHRva2VuICE9IEFSUkFZX0VORCkgeworICAgICAgICAgICAgICAgIC8vIFVuZXhwZWN0ZWQg
dmFsdWUgYWZ0ZXIgbGlzdCB2YWx1ZS4gIEJhaWwgb3V0LgorICAgICAgICAgICAgICAgIHJldHVy
biBudWxscHRyOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICh0b2tlbiAh
PSBBUlJBWV9FTkQpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmVzdWx0
ID0gYXJyYXkucmVsZWFzZSgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBPQkpF
Q1RfQkVHSU46IHsKKyAgICAgICAgUmVmUHRyPFByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IG9i
amVjdCA9IFVuY2hlY2tlZE9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIHN0YXJ0ID0gdG9rZW5F
bmQ7CisgICAgICAgIHRva2VuID0gcGFyc2VUb2tlbihzdGFydCwgZW5kLCAmdG9rZW5TdGFydCwg
JnRva2VuRW5kKTsKKyAgICAgICAgd2hpbGUgKHRva2VuICE9IE9CSkVDVF9FTkQpIHsKKyAgICAg
ICAgICAgIGlmICh0b2tlbiAhPSBTVFJJTkcpCisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgICAgICAgICBTdHJpbmcga2V5OworICAgICAgICAgICAgaWYgKCFkZWNvZGVTdHJp
bmcodG9rZW5TdGFydCArIDEsIHRva2VuRW5kIC0gMSwga2V5KSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIHN0YXJ0ID0gdG9rZW5FbmQ7CisKKyAgICAgICAg
ICAgIHRva2VuID0gcGFyc2VUb2tlbihzdGFydCwgZW5kLCAmdG9rZW5TdGFydCwgJnRva2VuRW5k
KTsKKyAgICAgICAgICAgIGlmICh0b2tlbiAhPSBPQkpFQ1RfUEFJUl9TRVBBUkFUT1IpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICBzdGFydCA9IHRva2VuRW5k
OworCisgICAgICAgICAgICBSZWZQdHI8UHJvdG9jb2w6OlVuY2hlY2tlZFZhbHVlPiB2YWx1ZSA9
IGJ1aWxkVmFsdWUoc3RhcnQsIGVuZCwgJnRva2VuRW5kLCBkZXB0aCArIDEpOworICAgICAgICAg
ICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAg
ICAgIG9iamVjdC0+c2V0VmFsdWUoa2V5LCB2YWx1ZSk7CisgICAgICAgICAgICBzdGFydCA9IHRv
a2VuRW5kOworCisgICAgICAgICAgICAvLyBBZnRlciBhIGtleS92YWx1ZSBwYWlyLCB3ZSBleHBl
Y3QgYSBjb21tYSBvciB0aGUgZW5kIG9mIHRoZQorICAgICAgICAgICAgLy8gb2JqZWN0LgorICAg
ICAgICAgICAgdG9rZW4gPSBwYXJzZVRva2VuKHN0YXJ0LCBlbmQsICZ0b2tlblN0YXJ0LCAmdG9r
ZW5FbmQpOworICAgICAgICAgICAgaWYgKHRva2VuID09IExJU1RfU0VQQVJBVE9SKSB7CisgICAg
ICAgICAgICAgICAgc3RhcnQgPSB0b2tlbkVuZDsKKyAgICAgICAgICAgICAgICB0b2tlbiA9IHBh
cnNlVG9rZW4oc3RhcnQsIGVuZCwgJnRva2VuU3RhcnQsICZ0b2tlbkVuZCk7CisgICAgICAgICAg
ICAgICAgIGlmICh0b2tlbiA9PSBPQkpFQ1RfRU5EKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAodG9rZW4gIT0gT0JKRUNUX0VORCkg
eworICAgICAgICAgICAgICAgIC8vIFVuZXhwZWN0ZWQgdmFsdWUgYWZ0ZXIgbGFzdCBvYmplY3Qg
dmFsdWUuICBCYWlsIG91dC4KKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAodG9rZW4gIT0gT0JKRUNUX0VORCkKKyAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXN1bHQgPSBvYmplY3QucmVsZWFz
ZSgpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBkZWZhdWx0OgorICAgICAgICAvLyBX
ZSBnb3QgYSB0b2tlbiB0aGF0J3Mgbm90IGEgdmFsdWUuCisgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIH0KKyAgICAqdmFsdWVUb2tlbkVuZCA9IHRva2VuRW5kOworICAgIHJldHVybiByZXN1
bHQucmVsZWFzZSgpOworfQorCitpbmxpbmUgYm9vbCBlc2NhcGVDaGFyKFVDaGFyIGMsIFN0cmlu
Z0J1aWxkZXImIGRzdCkKK3sKKyAgICBzd2l0Y2ggKGMpIHsKKyAgICBjYXNlICdcYic6IGRzdC5h
cHBlbmRMaXRlcmFsKCJcXGIiKTsgYnJlYWs7CisgICAgY2FzZSAnXGYnOiBkc3QuYXBwZW5kTGl0
ZXJhbCgiXFxmIik7IGJyZWFrOworICAgIGNhc2UgJ1xuJzogZHN0LmFwcGVuZExpdGVyYWwoIlxc
biIpOyBicmVhazsKKyAgICBjYXNlICdccic6IGRzdC5hcHBlbmRMaXRlcmFsKCJcXHIiKTsgYnJl
YWs7CisgICAgY2FzZSAnXHQnOiBkc3QuYXBwZW5kTGl0ZXJhbCgiXFx0Iik7IGJyZWFrOworICAg
IGNhc2UgJ1xcJzogZHN0LmFwcGVuZExpdGVyYWwoIlxcXFwiKTsgYnJlYWs7CisgICAgY2FzZSAn
Iic6IGRzdC5hcHBlbmRMaXRlcmFsKCJcXFwiIik7IGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2lubGluZSB2
b2lkIGRvdWJsZVF1b3RlU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyLCBTdHJpbmdCdWlsZGVyJiBk
c3QpCit7CisgICAgZHN0LmFwcGVuZCgnIicpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzdHIubGVuZ3RoKCk7ICsraSkgeworICAgICAgICBVQ2hhciBjID0gc3RyW2ldOworICAgICAg
ICBpZiAoIWVzY2FwZUNoYXIoYywgZHN0KSkgeworICAgICAgICAgICAgaWYgKGMgPCAzMiB8fCBj
ID4gMTI2IHx8IGMgPT0gJzwnIHx8IGMgPT0gJz4nKSB7CisgICAgICAgICAgICAgICAgLy8gMS4g
RXNjYXBpbmcgPCwgPiB0byBwcmV2ZW50IHNjcmlwdCBleGVjdXRpb24uCisgICAgICAgICAgICAg
ICAgLy8gMi4gVGVjaG5pY2FsbHksIHdlIGNvdWxkIGFsc28gcGFzcyB0aHJvdWdoIGMgPiAxMjYg
YXMgVVRGOCwgYnV0IHRoaXMKKyAgICAgICAgICAgICAgICAvLyAgICBpcyBhbHNvIG9wdGlvbmFs
LiAgSXQgd291bGQgYWxzbyBiZSBhIHBhaW4gdG8gaW1wbGVtZW50IGhlcmUuCisgICAgICAgICAg
ICAgICAgZHN0LmFwcGVuZChTdHJpbmc6OmZvcm1hdCgiXFx1JTA0WCIsIGMpKTsKKyAgICAgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIGRzdC5hcHBlbmQoYyk7CisgICAgICAgIH0KKyAg
ICB9CisgICAgZHN0LmFwcGVuZCgnIicpOworfQorCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UK
KworbmFtZXNwYWNlIFByb3RvY29sIHsKKworYm9vbCBQcm90b2NvbDo6VW5jaGVja2VkVmFsdWU6
OmFzQm9vbGVhbihib29sJikgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wg
UHJvdG9jb2w6OlVuY2hlY2tlZFZhbHVlOjphc0RvdWJsZShkb3VibGUmKSBjb25zdAoreworICAg
IHJldHVybiBmYWxzZTsKK30KKworYm9vbCBQcm90b2NvbDo6VW5jaGVja2VkVmFsdWU6OmFzRG91
YmxlKGZsb2F0JikgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUHJvdG9j
b2w6OlVuY2hlY2tlZFZhbHVlOjphc0ludGVnZXIoaW50JikgY29uc3QKK3sKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK2Jvb2wgUHJvdG9jb2w6OlVuY2hlY2tlZFZhbHVlOjphc0ludGVnZXIodW5z
aWduZWQmKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBQcm90b2NvbDo6
VW5jaGVja2VkVmFsdWU6OmFzSW50ZWdlcihsb25nJikgY29uc3QKK3sKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK2Jvb2wgUHJvdG9jb2w6OlVuY2hlY2tlZFZhbHVlOjphc0ludGVnZXIobG9uZyBs
b25nJikgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUHJvdG9jb2w6OlVu
Y2hlY2tlZFZhbHVlOjphc0ludGVnZXIodW5zaWduZWQgbG9uZyYpIGNvbnN0Cit7CisgICAgcmV0
dXJuIGZhbHNlOworfQorCitib29sIFByb3RvY29sOjpVbmNoZWNrZWRWYWx1ZTo6YXNJbnRlZ2Vy
KHVuc2lnbmVkIGxvbmcgbG9uZyYpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCiti
b29sIFByb3RvY29sOjpVbmNoZWNrZWRWYWx1ZTo6YXNTdHJpbmcoU3RyaW5nJikgY29uc3QKK3sK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUHJvdG9jb2w6OlVuY2hlY2tlZFZhbHVlOjph
c1ZhbHVlKFJlZlB0cjxQcm90b2NvbDo6VW5jaGVja2VkVmFsdWU+JiBvdXRwdXQpCit7CisgICAg
b3V0cHV0ID0gdGhpczsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm90b2NvbDo6VW5j
aGVja2VkVmFsdWU6OmFzT2JqZWN0KFJlZlB0cjxQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiYp
Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFByb3RvY29sOjpVbmNoZWNrZWRWYWx1
ZTo6YXNBcnJheShSZWZQdHI8UHJvdG9jb2w6OlVuY2hlY2tlZEFycmF5PiYpCit7CisgICAgcmV0
dXJuIGZhbHNlOworfQorCitib29sIFByb3RvY29sOjpVbmNoZWNrZWRWYWx1ZTo6cGFyc2VKU09O
KGNvbnN0IFN0cmluZyYganNvbklucHV0LCBSZWZQdHI8UHJvdG9jb2w6OlVuY2hlY2tlZFZhbHVl
PiYgb3V0cHV0KQoreworICAgIC8vIEZJWE1FOiBUaGlzIHdob2xlIGZpbGUgc2hvdWxkIGp1c3Qg
dXNlIFN0cmluZ1ZpZXcgaW5zdGVhZCBvZiBVQ2hhci9sZW5ndGggYW5kIGF2b2lkIHVwY29udmVy
dGluZy4KKyAgICBhdXRvIGNoYXJhY3RlcnMgPSBTdHJpbmdWaWV3KGpzb25JbnB1dCkudXBjb252
ZXJ0ZWRDaGFyYWN0ZXJzKCk7CisgICAgY29uc3QgVUNoYXIqIHN0YXJ0ID0gY2hhcmFjdGVyczsK
KyAgICBjb25zdCBVQ2hhciogZW5kID0gc3RhcnQgKyBqc29uSW5wdXQubGVuZ3RoKCk7CisgICAg
Y29uc3QgVUNoYXIqIHRva2VuRW5kOworICAgIFJlZlB0cjxQcm90b2NvbDo6VW5jaGVja2VkVmFs
dWU+IHJlc3VsdCA9IGJ1aWxkVmFsdWUoc3RhcnQsIGVuZCwgJnRva2VuRW5kLCAwKTsKKyAgICBp
ZiAoIXJlc3VsdCB8fCB0b2tlbkVuZCAhPSBlbmQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIG91dHB1dCA9IHJlc3VsdC5yZWxlYXNlKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK1N0
cmluZyBQcm90b2NvbDo6VW5jaGVja2VkVmFsdWU6OnRvSlNPTlN0cmluZygpIGNvbnN0Cit7Cisg
ICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CisgICAgcmVzdWx0LnJlc2VydmVDYXBhY2l0eSg1MTIp
OworICAgIHdyaXRlSlNPTihyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsK
K30KKwordm9pZCBQcm90b2NvbDo6VW5jaGVja2VkVmFsdWU6OndyaXRlSlNPTihTdHJpbmdCdWls
ZGVyJiBvdXRwdXQpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fdHlwZSA9PSBUeXBlOjpOdWxsKTsK
KworICAgIG91dHB1dC5hcHBlbmRMaXRlcmFsKCJudWxsIik7Cit9CisKK2Jvb2wgU2NhbGFyVmFs
dWU6OmFzQm9vbGVhbihib29sJiBvdXRwdXQpIGNvbnN0Cit7CisgICAgaWYgKHR5cGUoKSAhPSBU
eXBlOjpCb29sZWFuKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBvdXRwdXQgPSBtX2Jv
b2xlYW5WYWx1ZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBTY2FsYXJWYWx1ZTo6YXNE
b3VibGUoZG91YmxlJiBvdXRwdXQpIGNvbnN0Cit7CisgICAgaWYgKHR5cGUoKSAhPSBUeXBlOjpE
b3VibGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG91dHB1dCA9IG1fZG91YmxlVmFs
dWU7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgU2NhbGFyVmFsdWU6OmFzRG91YmxlKGZs
b2F0JiBvdXRwdXQpIGNvbnN0Cit7CisgICAgaWYgKHR5cGUoKSAhPSBUeXBlOjpEb3VibGUpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG91dHB1dCA9IHN0YXRpY19jYXN0PGZsb2F0Piht
X2RvdWJsZVZhbHVlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBTY2FsYXJWYWx1ZTo6
YXNJbnRlZ2VyKGludCYgb3V0cHV0KSBjb25zdAoreworICAgIGlmICh0eXBlKCkgIT0gVHlwZTo6
SW50ZWdlciAmJiB0eXBlKCkgIT0gVHlwZTo6RG91YmxlKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBvdXRwdXQgPSBzdGF0aWNfY2FzdDxpbnQ+KG1fZG91YmxlVmFsdWUpOworICAgIHJl
dHVybiB0cnVlOworfQorCitib29sIFNjYWxhclZhbHVlOjphc0ludGVnZXIodW5zaWduZWQmIG91
dHB1dCkgY29uc3QKK3sKKyAgICBpZiAodHlwZSgpICE9IFR5cGU6OkludGVnZXIgJiYgdHlwZSgp
ICE9IFR5cGU6OkRvdWJsZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgb3V0cHV0ID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fZG91YmxlVmFsdWUpOworICAgIHJldHVybiB0cnVlOwor
fQorCitib29sIFNjYWxhclZhbHVlOjphc0ludGVnZXIobG9uZyYgb3V0cHV0KSBjb25zdAorewor
ICAgIGlmICh0eXBlKCkgIT0gVHlwZTo6SW50ZWdlciAmJiB0eXBlKCkgIT0gVHlwZTo6RG91Ymxl
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBvdXRwdXQgPSBzdGF0aWNfY2FzdDxsb25n
PihtX2RvdWJsZVZhbHVlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBTY2FsYXJWYWx1
ZTo6YXNJbnRlZ2VyKGxvbmcgbG9uZyYgb3V0cHV0KSBjb25zdAoreworICAgIGlmICh0eXBlKCkg
IT0gVHlwZTo6SW50ZWdlciAmJiB0eXBlKCkgIT0gVHlwZTo6RG91YmxlKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBvdXRwdXQgPSBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KG1fZG91Ymxl
VmFsdWUpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFNjYWxhclZhbHVlOjphc0ludGVn
ZXIodW5zaWduZWQgbG9uZyYgb3V0cHV0KSBjb25zdAoreworICAgIGlmICh0eXBlKCkgIT0gVHlw
ZTo6SW50ZWdlciAmJiB0eXBlKCkgIT0gVHlwZTo6RG91YmxlKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBvdXRwdXQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihtX2RvdWJsZVZh
bHVlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBTY2FsYXJWYWx1ZTo6YXNJbnRlZ2Vy
KHVuc2lnbmVkIGxvbmcgbG9uZyYgb3V0cHV0KSBjb25zdAoreworICAgIGlmICh0eXBlKCkgIT0g
VHlwZTo6SW50ZWdlciAmJiB0eXBlKCkgIT0gVHlwZTo6RG91YmxlKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBvdXRwdXQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KG1f
ZG91YmxlVmFsdWUpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFNjYWxhclZhbHVlOjph
c1N0cmluZyhTdHJpbmcmIG91dHB1dCkgY29uc3QKK3sKKyAgICBpZiAodHlwZSgpICE9IFR5cGU6
OlN0cmluZykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgb3V0cHV0ID0gbV9zdHJpbmdW
YWx1ZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBTY2FsYXJWYWx1ZTo6d3JpdGVKU09O
KFN0cmluZ0J1aWxkZXImIG91dHB1dCkgY29uc3QKK3sKKyAgICBBU1NFUlQodHlwZSgpID09IFR5
cGU6OlN0cmluZyB8fCB0eXBlKCkgPT0gVHlwZTo6Qm9vbGVhbiB8fCB0eXBlKCkgPT0gVHlwZTo6
RG91YmxlIHx8IHR5cGUoKSA9PSBUeXBlOjpJbnRlZ2VyKTsKKworICAgIGlmICh0eXBlKCkgPT0g
VHlwZTo6U3RyaW5nKSB7CisgICAgICAgIGRvdWJsZVF1b3RlU3RyaW5nKG1fc3RyaW5nVmFsdWUs
IG91dHB1dCk7CisgICAgfSBlbHNlIGlmICh0eXBlKCkgPT0gVHlwZTo6Qm9vbGVhbikgeworICAg
ICAgICBpZiAobV9ib29sZWFuVmFsdWUpCisgICAgICAgICAgICBvdXRwdXQuYXBwZW5kTGl0ZXJh
bCgidHJ1ZSIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBvdXRwdXQuYXBwZW5kTGl0ZXJh
bCgiZmFsc2UiKTsKKyAgICB9IGVsc2UgaWYgKHR5cGUoKSA9PSBUeXBlOjpEb3VibGUgfHwgdHlw
ZSgpID09IFR5cGU6OkludGVnZXIpIHsKKyAgICAgICAgTnVtYmVyVG9MU3RyaW5nQnVmZmVyIGJ1
ZmZlcjsKKyAgICAgICAgaWYgKCFzdGQ6OmlzZmluaXRlKG1fZG91YmxlVmFsdWUpKSB7CisgICAg
ICAgICAgICBvdXRwdXQuYXBwZW5kTGl0ZXJhbCgibnVsbCIpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgIERlY2ltYWxOdW1iZXIgZGVjaW1hbCA9IG1fZG91YmxlVmFs
dWU7CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IDA7CisgICAgICAgIGlmIChkZWNpbWFsLmJ1
ZmZlckxlbmd0aEZvclN0cmluZ0RlY2ltYWwoKSA+IFdURjo6TnVtYmVyVG9TdHJpbmdCdWZmZXJM
ZW5ndGgpIHsKKyAgICAgICAgICAgIC8vIE5vdCBlbm91Z2ggcm9vbSBmb3IgZGVjaW1hbC4gVXNl
IGV4cG9uZW50aWFsIGZvcm1hdC4KKyAgICAgICAgICAgIGlmIChkZWNpbWFsLmJ1ZmZlckxlbmd0
aEZvclN0cmluZ0V4cG9uZW50aWFsKCkgPiBXVEY6Ok51bWJlclRvU3RyaW5nQnVmZmVyTGVuZ3Ro
KSB7CisgICAgICAgICAgICAgICAgLy8gRmFsbGJhY2sgZm9yIGFuIGFibm9ybWFsIGNhc2UgaWYg
aXQncyB0b28gbGl0dGxlIGV2ZW4gZm9yIGV4cG9uZW50aWFsLgorICAgICAgICAgICAgICAgIG91
dHB1dC5hcHBlbmRMaXRlcmFsKCJOYU4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBsZW5ndGggPSBkZWNpbWFsLnRvU3RyaW5nRXhwb25lbnRp
YWwoYnVmZmVyLCBXVEY6Ok51bWJlclRvU3RyaW5nQnVmZmVyTGVuZ3RoKTsKKyAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICBsZW5ndGggPSBkZWNpbWFsLnRvU3RyaW5nRGVjaW1hbChidWZmZXIs
IFdURjo6TnVtYmVyVG9TdHJpbmdCdWZmZXJMZW5ndGgpOworICAgICAgICBvdXRwdXQuYXBwZW5k
KGJ1ZmZlciwgbGVuZ3RoKTsKKyAgICB9Cit9CisKK1VuY2hlY2tlZE9iamVjdEJhc2U6On5VbmNo
ZWNrZWRPYmplY3RCYXNlKCkKK3sKK30KKworYm9vbCBVbmNoZWNrZWRPYmplY3RCYXNlOjphc09i
amVjdChSZWZQdHI8UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4mIG91dHB1dCkKK3sKKyAgICBD
T01QSUxFX0FTU0VSVChzaXplb2YoVW5jaGVja2VkT2JqZWN0KSA9PSBzaXplb2YoVW5jaGVja2Vk
T2JqZWN0QmFzZSksIGNhbm5vdF9jYXN0KTsKKworICAgIG91dHB1dCA9IHN0YXRpY19jYXN0PFVu
Y2hlY2tlZE9iamVjdCo+KHRoaXMpOworICAgIHJldHVybiB0cnVlOworfQorCitVbmNoZWNrZWRP
YmplY3QqIFVuY2hlY2tlZE9iamVjdEJhc2U6Om9wZW5BY2Nlc3NvcnMoKQoreworICAgIENPTVBJ
TEVfQVNTRVJUKHNpemVvZihVbmNoZWNrZWRPYmplY3QpID09IHNpemVvZihVbmNoZWNrZWRPYmpl
Y3RCYXNlKSwgY2Fubm90X2Nhc3QpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxVbmNoZWNrZWRP
YmplY3QqPih0aGlzKTsKK30KKworYm9vbCBVbmNoZWNrZWRPYmplY3RCYXNlOjpnZXRCb29sZWFu
KGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCYgb3V0cHV0KSBjb25zdAoreworICAgIFJlZlB0cjxQ
cm90b2NvbDo6VW5jaGVja2VkVmFsdWU+IHZhbHVlID0gZ2V0KG5hbWUpOworICAgIGlmICghdmFs
dWUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB2YWx1ZS0+YXNCb29sZWFu
KG91dHB1dCk7Cit9CisKK2Jvb2wgVW5jaGVja2VkT2JqZWN0QmFzZTo6Z2V0U3RyaW5nKGNvbnN0
IFN0cmluZyYgbmFtZSwgU3RyaW5nJiBvdXRwdXQpIGNvbnN0Cit7CisgICAgUmVmUHRyPFByb3Rv
Y29sOjpVbmNoZWNrZWRWYWx1ZT4gdmFsdWUgPSBnZXQobmFtZSk7CisgICAgaWYgKCF2YWx1ZSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB2YWx1ZS0+YXNTdHJpbmcob3V0cHV0
KTsKK30KKworUGFzc1JlZlB0cjxQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBVbmNoZWNrZWRP
YmplY3RCYXNlOjpnZXRPYmplY3QoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdAoreworICAgIFBh
c3NSZWZQdHI8UHJvdG9jb2w6OlVuY2hlY2tlZFZhbHVlPiB2YWx1ZSA9IGdldChuYW1lKTsKKyAg
ICBpZiAoIXZhbHVlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIFJlZlB0cjxQcm90
b2NvbDo6VW5jaGVja2VkT2JqZWN0PiByZXN1bHQ7CisgICAgdmFsdWUtPmFzT2JqZWN0KHJlc3Vs
dCk7CisgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7Cit9CisKK1Bhc3NSZWZQdHI8UHJvdG9j
b2w6OlVuY2hlY2tlZEFycmF5PiBVbmNoZWNrZWRPYmplY3RCYXNlOjpnZXRBcnJheShjb25zdCBT
dHJpbmcmIG5hbWUpIGNvbnN0Cit7CisgICAgUGFzc1JlZlB0cjxQcm90b2NvbDo6VW5jaGVja2Vk
VmFsdWU+IHZhbHVlID0gZ2V0KG5hbWUpOworICAgIGlmICghdmFsdWUpCisgICAgICAgIHJldHVy
biBudWxscHRyOworCisgICAgUmVmUHRyPFByb3RvY29sOjpVbmNoZWNrZWRBcnJheT4gcmVzdWx0
OworICAgIHZhbHVlLT5hc0FycmF5KHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNl
KCk7Cit9CisKK1Bhc3NSZWZQdHI8UHJvdG9jb2w6OlVuY2hlY2tlZFZhbHVlPiBVbmNoZWNrZWRP
YmplY3RCYXNlOjpnZXQoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdAoreworICAgIERpY3Rpb25h
cnk6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9kYXRhLmZpbmQobmFtZSk7CisgICAgaWYgKGl0ID09
IG1fZGF0YS5lbmQoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIGl0LT52
YWx1ZTsKK30KKwordm9pZCBVbmNoZWNrZWRPYmplY3RCYXNlOjpyZW1vdmUoY29uc3QgU3RyaW5n
JiBuYW1lKQoreworICAgIG1fZGF0YS5yZW1vdmUobmFtZSk7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBtX29yZGVyLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChtX29yZGVyW2ldID09
IG5hbWUpIHsKKyAgICAgICAgICAgIG1fb3JkZXIucmVtb3ZlKGkpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgVW5jaGVja2VkT2JqZWN0QmFzZTo6d3Jp
dGVKU09OKFN0cmluZ0J1aWxkZXImIG91dHB1dCkgY29uc3QKK3sKKyAgICBvdXRwdXQuYXBwZW5k
KCd7Jyk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX29yZGVyLnNpemUoKTsgKytpKSB7
CisgICAgICAgIERpY3Rpb25hcnk6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9kYXRhLmZpbmQobV9v
cmRlcltpXSk7CisgICAgICAgIEFTU0VSVChpdCAhPSBtX2RhdGEuZW5kKCkpOworICAgICAgICBp
ZiAoaSkKKyAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoJywnKTsKKyAgICAgICAgZG91YmxlUXVv
dGVTdHJpbmcoaXQtPmtleSwgb3V0cHV0KTsKKyAgICAgICAgb3V0cHV0LmFwcGVuZCgnOicpOwor
ICAgICAgICBpdC0+dmFsdWUtPndyaXRlSlNPTihvdXRwdXQpOworICAgIH0KKyAgICBvdXRwdXQu
YXBwZW5kKCd9Jyk7Cit9CisKK1VuY2hlY2tlZE9iamVjdEJhc2U6OlVuY2hlY2tlZE9iamVjdEJh
c2UoKQorICAgIDogUHJvdG9jb2w6OlVuY2hlY2tlZFZhbHVlKFR5cGU6Ok9iamVjdCkKKyAgICAs
IG1fZGF0YSgpCisgICAgLCBtX29yZGVyKCkKK3sKK30KKworVW5jaGVja2VkQXJyYXlCYXNlOjp+
VW5jaGVja2VkQXJyYXlCYXNlKCkKK3sKK30KKworYm9vbCBVbmNoZWNrZWRBcnJheUJhc2U6OmFz
QXJyYXkoUmVmUHRyPFByb3RvY29sOjpVbmNoZWNrZWRBcnJheT4mIG91dHB1dCkKK3sKKyAgICBD
T01QSUxFX0FTU0VSVChzaXplb2YoVW5jaGVja2VkQXJyYXlCYXNlKSA9PSBzaXplb2YoVW5jaGVj
a2VkQXJyYXkpLCBjYW5ub3RfY2FzdCk7CisgICAgb3V0cHV0ID0gc3RhdGljX2Nhc3Q8VW5jaGVj
a2VkQXJyYXkqPih0aGlzKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBVbmNoZWNrZWRB
cnJheUJhc2U6OndyaXRlSlNPTihTdHJpbmdCdWlsZGVyJiBvdXRwdXQpIGNvbnN0Cit7CisgICAg
b3V0cHV0LmFwcGVuZCgnWycpOworICAgIGZvciAoVmVjdG9yPFJlZlB0cjxQcm90b2NvbDo6VW5j
aGVja2VkVmFsdWU+Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2RhdGEuYmVnaW4oKTsgaXQgIT0g
bV9kYXRhLmVuZCgpOyArK2l0KSB7CisgICAgICAgIGlmIChpdCAhPSBtX2RhdGEuYmVnaW4oKSkK
KyAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoJywnKTsKKyAgICAgICAgKCppdCktPndyaXRlSlNP
TihvdXRwdXQpOworICAgIH0KKyAgICBvdXRwdXQuYXBwZW5kKCddJyk7Cit9CisKK1VuY2hlY2tl
ZEFycmF5QmFzZTo6VW5jaGVja2VkQXJyYXlCYXNlKCkKKyAgICA6IFByb3RvY29sOjpVbmNoZWNr
ZWRWYWx1ZShUeXBlOjpBcnJheSkKKyAgICAsIG1fZGF0YSgpCit7Cit9CisKK1Bhc3NSZWZQdHI8
UHJvdG9jb2w6OlVuY2hlY2tlZFZhbHVlPiBVbmNoZWNrZWRBcnJheUJhc2U6OmdldChzaXplX3Qg
aW5kZXgpCit7CisgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaW5kZXggPCBt
X2RhdGEuc2l6ZSgpKTsKKyAgICByZXR1cm4gbV9kYXRhW2luZGV4XTsKK30KKworUGFzc1JlZlB0
cjxQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBVbmNoZWNrZWRPYmplY3Q6OmNyZWF0ZSgpCit7
CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBVbmNoZWNrZWRPYmplY3QpOworfQorCitQYXNzUmVm
UHRyPFByb3RvY29sOjpVbmNoZWNrZWRBcnJheT4gVW5jaGVja2VkQXJyYXk6OmNyZWF0ZSgpCit7
CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBVbmNoZWNrZWRBcnJheSk7Cit9CisKK1Bhc3NSZWZQ
dHI8UHJvdG9jb2w6OlVuY2hlY2tlZFZhbHVlPiBQcm90b2NvbDo6VW5jaGVja2VkVmFsdWU6Om51
bGwoKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgUHJvdG9jb2w6OlVuY2hlY2tlZFZhbHVl
KTsKK30KKworUGFzc1JlZlB0cjxTY2FsYXJWYWx1ZT4gU2NhbGFyVmFsdWU6OmNyZWF0ZShib29s
IHZhbHVlKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2NhbGFyVmFsdWUodmFsdWUpKTsK
K30KKworUGFzc1JlZlB0cjxTY2FsYXJWYWx1ZT4gU2NhbGFyVmFsdWU6OmNyZWF0ZShpbnQgdmFs
dWUpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTY2FsYXJWYWx1ZSh2YWx1ZSkpOworfQor
CitQYXNzUmVmUHRyPFNjYWxhclZhbHVlPiBTY2FsYXJWYWx1ZTo6Y3JlYXRlKGRvdWJsZSB2YWx1
ZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNjYWxhclZhbHVlKHZhbHVlKSk7Cit9CisK
K1Bhc3NSZWZQdHI8U2NhbGFyVmFsdWU+IFNjYWxhclZhbHVlOjpjcmVhdGUoY29uc3QgU3RyaW5n
JiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNjYWxhclZhbHVlKHZhbHVlKSk7
Cit9CisKK1Bhc3NSZWZQdHI8U2NhbGFyVmFsdWU+IFNjYWxhclZhbHVlOjpjcmVhdGUoY29uc3Qg
Y2hhciogdmFsdWUpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTY2FsYXJWYWx1ZSh2YWx1
ZSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yUHJvdG9jb2xUeXBlcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JQcm90b2NvbFR5cGVzLmgKaW5kZXggMTQzZGVmODU3OWFjNDYwNjVlOTVmZDliMTI4NzE1
MzNhYjA5YjM0MS4uYTc3ODRlMjcxOGNhYzgxNmEwYTRmNTk0ZWYxYWNlYmM0YjI3YmFhZiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQcm90b2Nv
bFR5cGVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQ
cm90b2NvbFR5cGVzLmgKQEAgLTEsNiArMSw4IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDExIFRo
ZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDE0ICszMSwzNzUgQEAKIAogI2lmIEVO
QUJMRShJTlNQRUNUT1IpCiAKLSNpbmNsdWRlICJJbnNwZWN0b3JWYWx1ZXMuaCIKKyNpbmNsdWRl
ICJJbnNwZWN0b3JQcm90b2NvbFR5cGVzLmgiCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4K
KyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5j
bHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3Igewog
CiBuYW1lc3BhY2UgUHJvdG9jb2wgewogCitjbGFzcyBVbmNoZWNrZWRBcnJheTsKK2NsYXNzIFVu
Y2hlY2tlZEFycmF5QmFzZTsKK2NsYXNzIFVuY2hlY2tlZE9iamVjdDsKK2NsYXNzIFVuY2hlY2tl
ZE9iamVjdEJhc2U7CisKK2NsYXNzIEpTX0VYUE9SVF9QUklWQVRFIFVuY2hlY2tlZFZhbHVlIDog
cHVibGljIFJlZkNvdW50ZWQ8VW5jaGVja2VkVmFsdWU+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
Y29uc3QgaW50IG1heERlcHRoID0gMTAwMDsKKworICAgIFVuY2hlY2tlZFZhbHVlKCkKKyAgICAg
ICAgOiBtX3R5cGUoVHlwZTo6TnVsbCkgeyB9CisgICAgdmlydHVhbCB+VW5jaGVja2VkVmFsdWUo
KSB7IH0KKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFByb3RvY29sOjpVbmNoZWNrZWRWYWx1ZT4g
bnVsbCgpOworCisgICAgZW51bSBjbGFzcyBUeXBlIHsKKyAgICAgICAgTnVsbCA9IDAsCisgICAg
ICAgIEJvb2xlYW4sCisgICAgICAgIERvdWJsZSwKKyAgICAgICAgSW50ZWdlciwKKyAgICAgICAg
U3RyaW5nLAorICAgICAgICBPYmplY3QsCisgICAgICAgIEFycmF5CisgICAgfTsKKworICAgIFR5
cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorCisgICAgYm9vbCBpc051bGwoKSBj
b25zdCB7IHJldHVybiBtX3R5cGUgPT0gVHlwZTo6TnVsbDsgfQorCisgICAgdmlydHVhbCBib29s
IGFzQm9vbGVhbihib29sJikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGFzSW50ZWdlcihpbnQm
KSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgYXNJbnRlZ2VyKHVuc2lnbmVkJikgY29uc3Q7Cisg
ICAgdmlydHVhbCBib29sIGFzSW50ZWdlcihsb25nJikgY29uc3Q7CisgICAgdmlydHVhbCBib29s
IGFzSW50ZWdlcihsb25nIGxvbmcmKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgYXNJbnRlZ2Vy
KHVuc2lnbmVkIGxvbmcmKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgYXNJbnRlZ2VyKHVuc2ln
bmVkIGxvbmcgbG9uZyYpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBhc0RvdWJsZShkb3VibGUm
KSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgYXNEb3VibGUoZmxvYXQmKSBjb25zdDsKKyAgICB2
aXJ0dWFsIGJvb2wgYXNTdHJpbmcoU3RyaW5nJikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGFz
VmFsdWUoUmVmUHRyPFByb3RvY29sOjpVbmNoZWNrZWRWYWx1ZT4mKTsKKyAgICB2aXJ0dWFsIGJv
b2wgYXNPYmplY3QoUmVmUHRyPFByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+Jik7CisgICAgdmly
dHVhbCBib29sIGFzQXJyYXkoUmVmUHRyPFByb3RvY29sOjpVbmNoZWNrZWRBcnJheT4mKTsKKwor
ICAgIHN0YXRpYyBib29sIHBhcnNlSlNPTihjb25zdCBTdHJpbmcmIGpzb25JbnB1dCwgUmVmUHRy
PFByb3RvY29sOjpVbmNoZWNrZWRWYWx1ZT4mIG91dHB1dCk7CisKKyAgICBTdHJpbmcgdG9KU09O
U3RyaW5nKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHdyaXRlSlNPTihTdHJpbmdCdWlsZGVy
JiBvdXRwdXQpIGNvbnN0OworCitwcm90ZWN0ZWQ6CisgICAgZXhwbGljaXQgVW5jaGVja2VkVmFs
dWUoVHlwZSB0eXBlKSA6IG1fdHlwZSh0eXBlKSB7IH0KKworcHJpdmF0ZToKKyAgICBUeXBlIG1f
dHlwZTsKK307CisKK2NsYXNzIEpTX0VYUE9SVF9QUklWQVRFIFNjYWxhclZhbHVlIDogcHVibGlj
IFByb3RvY29sOjpVbmNoZWNrZWRWYWx1ZSB7CitwdWJsaWM6CisgICAgflNjYWxhclZhbHVlKCkg
eyB9CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTY2FsYXJWYWx1ZT4gY3JlYXRlKGJvb2wpOwor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNjYWxhclZhbHVlPiBjcmVhdGUoaW50KTsKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxTY2FsYXJWYWx1ZT4gY3JlYXRlKGRvdWJsZSk7CisgICAgc3RhdGljIFBh
c3NSZWZQdHI8U2NhbGFyVmFsdWU+IGNyZWF0ZShjb25zdCBTdHJpbmcmKTsKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxTY2FsYXJWYWx1ZT4gY3JlYXRlKGNvbnN0IGNoYXIqKTsKKworICAgIHZpcnR1
YWwgYm9vbCBhc0Jvb2xlYW4oYm9vbCYpIGNvbnN0IG92ZXJyaWRlOworICAgIC8vIE51bWJlcnMg
ZnJvbSB0aGUgZnJvbnRlbmQgYXJlIGFsd2F5cyBwYXJzZWQgYXMgZG91Ymxlcywgc28gd2UgYWxs
b3cKKyAgICAvLyBjbGllbnRzIHRvIGNvbnZlcnQgdG8gaW50ZWdyYWwgdmFsdWVzIHdpdGggdGhp
cyBmdW5jdGlvbi4KKyAgICB2aXJ0dWFsIGJvb2wgYXNJbnRlZ2VyKGludCYpIGNvbnN0IG92ZXJy
aWRlOworICAgIHZpcnR1YWwgYm9vbCBhc0ludGVnZXIodW5zaWduZWQmKSBjb25zdCBvdmVycmlk
ZTsKKyAgICB2aXJ0dWFsIGJvb2wgYXNJbnRlZ2VyKGxvbmcmKSBjb25zdCBvdmVycmlkZTsKKyAg
ICB2aXJ0dWFsIGJvb2wgYXNJbnRlZ2VyKGxvbmcgbG9uZyYpIGNvbnN0IG92ZXJyaWRlOworICAg
IHZpcnR1YWwgYm9vbCBhc0ludGVnZXIodW5zaWduZWQgbG9uZyYpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIHZpcnR1YWwgYm9vbCBhc0ludGVnZXIodW5zaWduZWQgbG9uZyBsb25nJikgY29uc3Qgb3Zl
cnJpZGU7CisgICAgdmlydHVhbCBib29sIGFzRG91YmxlKGRvdWJsZSYpIGNvbnN0IG92ZXJyaWRl
OworICAgIHZpcnR1YWwgYm9vbCBhc0RvdWJsZShmbG9hdCYpIGNvbnN0IG92ZXJyaWRlOworICAg
IHZpcnR1YWwgYm9vbCBhc1N0cmluZyhTdHJpbmcmKSBjb25zdCBvdmVycmlkZTsKKworICAgIHZp
cnR1YWwgdm9pZCB3cml0ZUpTT04oU3RyaW5nQnVpbGRlciYgb3V0cHV0KSBjb25zdCBvdmVycmlk
ZTsKKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBTY2FsYXJWYWx1ZShib29sIHZhbHVlKQorICAg
ICAgICA6IFByb3RvY29sOjpVbmNoZWNrZWRWYWx1ZShUeXBlOjpCb29sZWFuKQorICAgICAgICAs
IG1fYm9vbGVhblZhbHVlKHZhbHVlKSB7IH0KKworICAgIGV4cGxpY2l0IFNjYWxhclZhbHVlKGlu
dCB2YWx1ZSkKKyAgICAgICAgOiBQcm90b2NvbDo6VW5jaGVja2VkVmFsdWUoVHlwZTo6SW50ZWdl
cikKKyAgICAgICAgLCBtX2RvdWJsZVZhbHVlKHN0YXRpY19jYXN0PGRvdWJsZT4odmFsdWUpKSB7
IH0KKworICAgIGV4cGxpY2l0IFNjYWxhclZhbHVlKGRvdWJsZSB2YWx1ZSkKKyAgICAgICAgOiBQ
cm90b2NvbDo6VW5jaGVja2VkVmFsdWUoVHlwZTo6RG91YmxlKQorICAgICAgICAsIG1fZG91Ymxl
VmFsdWUodmFsdWUpIHsgfQorCisgICAgZXhwbGljaXQgU2NhbGFyVmFsdWUoY29uc3QgU3RyaW5n
JiB2YWx1ZSkKKyAgICAgICAgOiBVbmNoZWNrZWRWYWx1ZShUeXBlOjpTdHJpbmcpCisgICAgICAg
ICwgbV9zdHJpbmdWYWx1ZSh2YWx1ZSkgeyB9CisKKyAgICBleHBsaWNpdCBTY2FsYXJWYWx1ZShj
b25zdCBjaGFyKiB2YWx1ZSkKKyAgICAgICAgOiBVbmNoZWNrZWRWYWx1ZShUeXBlOjpTdHJpbmcp
CisgICAgICAgICwgbV9zdHJpbmdWYWx1ZSh2YWx1ZSkgeyB9CisKKyAgICB1bmlvbiB7CisgICAg
ICAgIGJvb2wgbV9ib29sZWFuVmFsdWU7CisgICAgICAgIGRvdWJsZSBtX2RvdWJsZVZhbHVlOwor
ICAgICAgICBTdHJpbmcgbV9zdHJpbmdWYWx1ZTsKKyAgICB9OworfTsKKworY2xhc3MgSlNfRVhQ
T1JUX1BSSVZBVEUgVW5jaGVja2VkT2JqZWN0QmFzZSA6IHB1YmxpYyBQcm90b2NvbDo6VW5jaGVj
a2VkVmFsdWUgeworcHJpdmF0ZToKKyAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8
UHJvdG9jb2w6OlVuY2hlY2tlZFZhbHVlPj4gRGljdGlvbmFyeTsKKworcHVibGljOgorICAgIHR5
cGVkZWYgRGljdGlvbmFyeTo6aXRlcmF0b3IgaXRlcmF0b3I7CisgICAgdHlwZWRlZiBEaWN0aW9u
YXJ5Ojpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKKworICAgIC8vIEZJWE1FOiByZW1v
dmUgdGhpcyBvbmNlIGJyZWFrcG9pbnQgYXV4aWxsaWFyeSBkYXRhIGlzIHNlbnQgdXNpbmcgYSBj
aGVja2VkIHByb3RvY29sIHR5cGUuCisgICAgVW5jaGVja2VkT2JqZWN0KiBvcGVuQWNjZXNzb3Jz
KCk7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIH5VbmNoZWNrZWRPYmplY3RCYXNlKCk7CisK
KyAgICB2aXJ0dWFsIGJvb2wgYXNPYmplY3QoUmVmUHRyPFByb3RvY29sOjpVbmNoZWNrZWRPYmpl
Y3Q+JiBvdXRwdXQpIG92ZXJyaWRlOworCisgICAgLy8gRklYTUU6IHVzZSB0ZW1wbGF0ZXMgdG8g
cmVkdWNlIHRoZSBhbW91bnQgb2YgZHVwbGljYXRlZCBzZXQqKCkgbWV0aG9kcy4KKyAgICB2b2lk
IHNldEJvb2xlYW4oY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKTsKKyAgICB2b2lkIHNldEludGVn
ZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBpbnQpOworICAgIHZvaWQgc2V0RG91YmxlKGNvbnN0IFN0
cmluZyYgbmFtZSwgZG91YmxlKTsKKyAgICB2b2lkIHNldFN0cmluZyhjb25zdCBTdHJpbmcmIG5h
bWUsIGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgc2V0VmFsdWUoY29uc3QgU3RyaW5nJiBuYW1l
LCBQYXNzUmVmUHRyPFByb3RvY29sOjpVbmNoZWNrZWRWYWx1ZT4pOworICAgIHZvaWQgc2V0T2Jq
ZWN0KGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxVbmNoZWNrZWRPYmplY3RCYXNlPik7
CisgICAgdm9pZCBzZXRBcnJheShjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8VW5jaGVj
a2VkQXJyYXlCYXNlPik7CisKKyAgICBpdGVyYXRvciBmaW5kKGNvbnN0IFN0cmluZyYgbmFtZSk7
CisgICAgY29uc3RfaXRlcmF0b3IgZmluZChjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0OworCisg
ICAgLy8gRklYTUU6IHVzZSB0ZW1wbGF0ZXMgdG8gcmVkdWNlIHRoZSBhbW91bnQgb2YgZHVwbGlj
YXRlZCBnZXQqKCkgbWV0aG9kcy4KKyAgICBib29sIGdldEJvb2xlYW4oY29uc3QgU3RyaW5nJiBu
YW1lLCBib29sJiBvdXRwdXQpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNzIFQ+IGJvb2wgZ2V0
RG91YmxlKGNvbnN0IFN0cmluZyYgbmFtZSwgVCYgb3V0cHV0KSBjb25zdAorICAgIHsKKyAgICAg
ICAgUmVmUHRyPFByb3RvY29sOjpVbmNoZWNrZWRWYWx1ZT4gdmFsdWUgPSBnZXQobmFtZSk7Cisg
ICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJl
dHVybiB2YWx1ZS0+YXNEb3VibGUob3V0cHV0KTsKKyAgICB9CisgICAgdGVtcGxhdGU8Y2xhc3Mg
VD4gYm9vbCBnZXRJbnRlZ2VyKGNvbnN0IFN0cmluZyYgbmFtZSwgVCYgb3V0cHV0KSBjb25zdAor
ICAgIHsKKyAgICAgICAgUmVmUHRyPFByb3RvY29sOjpVbmNoZWNrZWRWYWx1ZT4gdmFsdWUgPSBn
ZXQobmFtZSk7CisgICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIHJldHVybiB2YWx1ZS0+YXNJbnRlZ2VyKG91dHB1dCk7CisgICAgfQorCisgICAg
Ym9vbCBnZXRTdHJpbmcoY29uc3QgU3RyaW5nJiBuYW1lLCBTdHJpbmcmIG91dHB1dCkgY29uc3Q7
CisgICAgUGFzc1JlZlB0cjxQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBnZXRPYmplY3QoY29u
c3QgU3RyaW5nJiBuYW1lKSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPFByb3RvY29sOjpVbmNoZWNr
ZWRBcnJheT4gZ2V0QXJyYXkoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdDsKKyAgICBQYXNzUmVm
UHRyPFByb3RvY29sOjpVbmNoZWNrZWRWYWx1ZT4gZ2V0KGNvbnN0IFN0cmluZyYgbmFtZSkgY29u
c3Q7CisKKyAgICB2b2lkIHJlbW92ZShjb25zdCBTdHJpbmcmIG5hbWUpOworCisgICAgdmlydHVh
bCB2b2lkIHdyaXRlSlNPTihTdHJpbmdCdWlsZGVyJiBvdXRwdXQpIGNvbnN0IG92ZXJyaWRlOwor
CisgICAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBtX2RhdGEuYmVnaW4oKTsgfQorICAgIGl0
ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIG1fZGF0YS5lbmQoKTsgfQorICAgIGNvbnN0X2l0ZXJhdG9y
IGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmJlZ2luKCk7IH0KKyAgICBjb25zdF9pdGVy
YXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtX2RhdGEuZW5kKCk7IH0KKworICAgIGludCBzaXpl
KCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLnNpemUoKTsgfQorCitwcm90ZWN0ZWQ6CisgICAgVW5j
aGVja2VkT2JqZWN0QmFzZSgpOworCitwcml2YXRlOgorICAgIERpY3Rpb25hcnkgbV9kYXRhOwor
ICAgIFZlY3RvcjxTdHJpbmc+IG1fb3JkZXI7Cit9OworCitjbGFzcyBVbmNoZWNrZWRPYmplY3Qg
OiBwdWJsaWMgVW5jaGVja2VkT2JqZWN0QmFzZSB7CitwdWJsaWM6CisgICAgc3RhdGljIEpTX0VY
UE9SVF9QUklWQVRFIFBhc3NSZWZQdHI8UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gY3JlYXRl
KCk7CisKKyAgICB1c2luZyBVbmNoZWNrZWRPYmplY3RCYXNlOjphc09iamVjdDsKKworICAgIHVz
aW5nIFVuY2hlY2tlZE9iamVjdEJhc2U6OnNldEJvb2xlYW47CisgICAgdXNpbmcgVW5jaGVja2Vk
T2JqZWN0QmFzZTo6c2V0SW50ZWdlcjsKKyAgICB1c2luZyBVbmNoZWNrZWRPYmplY3RCYXNlOjpz
ZXREb3VibGU7CisgICAgdXNpbmcgVW5jaGVja2VkT2JqZWN0QmFzZTo6c2V0U3RyaW5nOworICAg
IHVzaW5nIFVuY2hlY2tlZE9iamVjdEJhc2U6OnNldFZhbHVlOworICAgIHVzaW5nIFVuY2hlY2tl
ZE9iamVjdEJhc2U6OnNldE9iamVjdDsKKyAgICB1c2luZyBVbmNoZWNrZWRPYmplY3RCYXNlOjpz
ZXRBcnJheTsKKworICAgIHVzaW5nIFVuY2hlY2tlZE9iamVjdEJhc2U6OmZpbmQ7CisgICAgdXNp
bmcgVW5jaGVja2VkT2JqZWN0QmFzZTo6Z2V0Qm9vbGVhbjsKKyAgICB1c2luZyBVbmNoZWNrZWRP
YmplY3RCYXNlOjpnZXRJbnRlZ2VyOworICAgIHVzaW5nIFVuY2hlY2tlZE9iamVjdEJhc2U6Omdl
dERvdWJsZTsKKyAgICB1c2luZyBVbmNoZWNrZWRPYmplY3RCYXNlOjpnZXRTdHJpbmc7CisgICAg
dXNpbmcgVW5jaGVja2VkT2JqZWN0QmFzZTo6Z2V0T2JqZWN0OworICAgIHVzaW5nIFVuY2hlY2tl
ZE9iamVjdEJhc2U6OmdldEFycmF5OworICAgIHVzaW5nIFVuY2hlY2tlZE9iamVjdEJhc2U6Omdl
dDsKKworICAgIHVzaW5nIFVuY2hlY2tlZE9iamVjdEJhc2U6OnJlbW92ZTsKKworICAgIHVzaW5n
IFVuY2hlY2tlZE9iamVjdEJhc2U6OmJlZ2luOworICAgIHVzaW5nIFVuY2hlY2tlZE9iamVjdEJh
c2U6OmVuZDsKKworICAgIHVzaW5nIFVuY2hlY2tlZE9iamVjdEJhc2U6OnNpemU7Cit9OworCisK
K2NsYXNzIEpTX0VYUE9SVF9QUklWQVRFIFVuY2hlY2tlZEFycmF5QmFzZSA6IHB1YmxpYyBQcm90
b2NvbDo6VW5jaGVja2VkVmFsdWUgeworcHVibGljOgorICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0
cjxQcm90b2NvbDo6VW5jaGVja2VkVmFsdWU+Pjo6aXRlcmF0b3IgaXRlcmF0b3I7CisgICAgdHlw
ZWRlZiBWZWN0b3I8UmVmUHRyPFByb3RvY29sOjpVbmNoZWNrZWRWYWx1ZT4+Ojpjb25zdF9pdGVy
YXRvciBjb25zdF9pdGVyYXRvcjsKKworICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0
dXJuIG1fZGF0YS5zaXplKCk7IH0KKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgflVuY2hlY2tl
ZEFycmF5QmFzZSgpOworCisgICAgdmlydHVhbCBib29sIGFzQXJyYXkoUmVmUHRyPFByb3RvY29s
OjpVbmNoZWNrZWRBcnJheT4mKSBvdmVycmlkZTsKKworICAgIHZvaWQgcHVzaEJvb2xlYW4oYm9v
bCk7CisgICAgdm9pZCBwdXNoSW50ZWdlcihpbnQpOworICAgIHZvaWQgcHVzaERvdWJsZShkb3Vi
bGUpOworICAgIHZvaWQgcHVzaFN0cmluZyhjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIHB1c2hW
YWx1ZShQYXNzUmVmUHRyPFByb3RvY29sOjpVbmNoZWNrZWRWYWx1ZT4pOworICAgIHZvaWQgcHVz
aE9iamVjdChQYXNzUmVmUHRyPFByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+KTsKKyAgICB2b2lk
IHB1c2hBcnJheShQYXNzUmVmUHRyPFByb3RvY29sOjpVbmNoZWNrZWRBcnJheT4pOworCisgICAg
UGFzc1JlZlB0cjxQcm90b2NvbDo6VW5jaGVja2VkVmFsdWU+IGdldChzaXplX3QgaW5kZXgpOwor
CisgICAgdmlydHVhbCB2b2lkIHdyaXRlSlNPTihTdHJpbmdCdWlsZGVyJiBvdXRwdXQpIGNvbnN0
IG92ZXJyaWRlOworCisgICAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBtX2RhdGEuYmVnaW4o
KTsgfQorICAgIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIG1fZGF0YS5lbmQoKTsgfQorICAgIGNv
bnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmJlZ2luKCk7IH0KKyAg
ICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtX2RhdGEuZW5kKCk7IH0KKwor
cHJvdGVjdGVkOgorICAgIFVuY2hlY2tlZEFycmF5QmFzZSgpOworCitwcml2YXRlOgorICAgIFZl
Y3RvcjxSZWZQdHI8UHJvdG9jb2w6OlVuY2hlY2tlZFZhbHVlPj4gbV9kYXRhOworfTsKKworY2xh
c3MgVW5jaGVja2VkQXJyYXkgOiBwdWJsaWMgVW5jaGVja2VkQXJyYXlCYXNlIHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgSlNfRVhQT1JUX1BSSVZBVEUgUGFzc1JlZlB0cjxQcm90b2NvbDo6VW5jaGVj
a2VkQXJyYXk+IGNyZWF0ZSgpOworCisgICAgdXNpbmcgVW5jaGVja2VkQXJyYXlCYXNlOjphc0Fy
cmF5OworCisgICAgdXNpbmcgVW5jaGVja2VkQXJyYXlCYXNlOjpwdXNoQm9vbGVhbjsKKyAgICB1
c2luZyBVbmNoZWNrZWRBcnJheUJhc2U6OnB1c2hJbnRlZ2VyOworICAgIHVzaW5nIFVuY2hlY2tl
ZEFycmF5QmFzZTo6cHVzaERvdWJsZTsKKyAgICB1c2luZyBVbmNoZWNrZWRBcnJheUJhc2U6OnB1
c2hTdHJpbmc7CisgICAgdXNpbmcgVW5jaGVja2VkQXJyYXlCYXNlOjpwdXNoVmFsdWU7CisgICAg
dXNpbmcgVW5jaGVja2VkQXJyYXlCYXNlOjpwdXNoT2JqZWN0OworICAgIHVzaW5nIFVuY2hlY2tl
ZEFycmF5QmFzZTo6cHVzaEFycmF5OworCisgICAgdXNpbmcgVW5jaGVja2VkQXJyYXlCYXNlOjpn
ZXQ7CisKKyAgICB1c2luZyBVbmNoZWNrZWRBcnJheUJhc2U6OmJlZ2luOworICAgIHVzaW5nIFVu
Y2hlY2tlZEFycmF5QmFzZTo6ZW5kOworfTsKKworCitpbmxpbmUgVW5jaGVja2VkT2JqZWN0QmFz
ZTo6aXRlcmF0b3IgVW5jaGVja2VkT2JqZWN0QmFzZTo6ZmluZChjb25zdCBTdHJpbmcmIG5hbWUp
Cit7CisgICAgcmV0dXJuIG1fZGF0YS5maW5kKG5hbWUpOworfQorCitpbmxpbmUgVW5jaGVja2Vk
T2JqZWN0QmFzZTo6Y29uc3RfaXRlcmF0b3IgVW5jaGVja2VkT2JqZWN0QmFzZTo6ZmluZChjb25z
dCBTdHJpbmcmIG5hbWUpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZGF0YS5maW5kKG5hbWUpOwor
fQorCitpbmxpbmUgdm9pZCBVbmNoZWNrZWRPYmplY3RCYXNlOjpzZXRCb29sZWFuKGNvbnN0IFN0
cmluZyYgbmFtZSwgYm9vbCB2YWx1ZSkKK3sKKyAgICBzZXRWYWx1ZShuYW1lLCBTY2FsYXJWYWx1
ZTo6Y3JlYXRlKHZhbHVlKSk7Cit9CisKK2lubGluZSB2b2lkIFVuY2hlY2tlZE9iamVjdEJhc2U6
OnNldEludGVnZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBpbnQgdmFsdWUpCit7CisgICAgc2V0VmFs
dWUobmFtZSwgU2NhbGFyVmFsdWU6OmNyZWF0ZSh2YWx1ZSkpOworfQorCitpbmxpbmUgdm9pZCBV
bmNoZWNrZWRPYmplY3RCYXNlOjpzZXREb3VibGUoY29uc3QgU3RyaW5nJiBuYW1lLCBkb3VibGUg
dmFsdWUpCit7CisgICAgc2V0VmFsdWUobmFtZSwgU2NhbGFyVmFsdWU6OmNyZWF0ZSh2YWx1ZSkp
OworfQorCitpbmxpbmUgdm9pZCBVbmNoZWNrZWRPYmplY3RCYXNlOjpzZXRTdHJpbmcoY29uc3Qg
U3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIHNldFZhbHVlKG5hbWUs
IFNjYWxhclZhbHVlOjpjcmVhdGUodmFsdWUpKTsKK30KKworaW5saW5lIHZvaWQgVW5jaGVja2Vk
T2JqZWN0QmFzZTo6c2V0VmFsdWUoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPFByb3Rv
Y29sOjpVbmNoZWNrZWRWYWx1ZT4gdmFsdWUpCit7CisgICAgQVNTRVJUKHZhbHVlKTsKKyAgICBp
ZiAobV9kYXRhLnNldChuYW1lLCB2YWx1ZSkuaXNOZXdFbnRyeSkKKyAgICAgICAgbV9vcmRlci5h
cHBlbmQobmFtZSk7Cit9CisKK2lubGluZSB2b2lkIFVuY2hlY2tlZE9iamVjdEJhc2U6OnNldE9i
amVjdChjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8VW5jaGVja2VkT2JqZWN0QmFzZT4g
dmFsdWUpCit7CisgICAgQVNTRVJUKHZhbHVlKTsKKyAgICBpZiAobV9kYXRhLnNldChuYW1lLCB2
YWx1ZSkuaXNOZXdFbnRyeSkKKyAgICAgICAgbV9vcmRlci5hcHBlbmQobmFtZSk7Cit9CisKK2lu
bGluZSB2b2lkIFVuY2hlY2tlZE9iamVjdEJhc2U6OnNldEFycmF5KGNvbnN0IFN0cmluZyYgbmFt
ZSwgUGFzc1JlZlB0cjxVbmNoZWNrZWRBcnJheUJhc2U+IHZhbHVlKQoreworICAgIEFTU0VSVCh2
YWx1ZSk7CisgICAgaWYgKG1fZGF0YS5zZXQobmFtZSwgdmFsdWUpLmlzTmV3RW50cnkpCisgICAg
ICAgIG1fb3JkZXIuYXBwZW5kKG5hbWUpOworfQorCitpbmxpbmUgdm9pZCBVbmNoZWNrZWRBcnJh
eUJhc2U6OnB1c2hCb29sZWFuKGJvb2wgdmFsdWUpCit7CisgICAgbV9kYXRhLmFwcGVuZChTY2Fs
YXJWYWx1ZTo6Y3JlYXRlKHZhbHVlKSk7Cit9CisKK2lubGluZSB2b2lkIFVuY2hlY2tlZEFycmF5
QmFzZTo6cHVzaEludGVnZXIoaW50IHZhbHVlKQoreworICAgIG1fZGF0YS5hcHBlbmQoU2NhbGFy
VmFsdWU6OmNyZWF0ZSh2YWx1ZSkpOworfQorCitpbmxpbmUgdm9pZCBVbmNoZWNrZWRBcnJheUJh
c2U6OnB1c2hEb3VibGUoZG91YmxlIHZhbHVlKQoreworICAgIG1fZGF0YS5hcHBlbmQoU2NhbGFy
VmFsdWU6OmNyZWF0ZSh2YWx1ZSkpOworfQorCitpbmxpbmUgdm9pZCBVbmNoZWNrZWRBcnJheUJh
c2U6OnB1c2hTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBtX2RhdGEuYXBwZW5k
KFNjYWxhclZhbHVlOjpjcmVhdGUodmFsdWUpKTsKK30KKworaW5saW5lIHZvaWQgVW5jaGVja2Vk
QXJyYXlCYXNlOjpwdXNoVmFsdWUoUGFzc1JlZlB0cjxQcm90b2NvbDo6VW5jaGVja2VkVmFsdWU+
IHZhbHVlKQoreworICAgIEFTU0VSVCh2YWx1ZSk7CisgICAgbV9kYXRhLmFwcGVuZCh2YWx1ZSk7
Cit9CisKK2lubGluZSB2b2lkIFVuY2hlY2tlZEFycmF5QmFzZTo6cHVzaE9iamVjdChQYXNzUmVm
UHRyPFByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IHZhbHVlKQoreworICAgIEFTU0VSVCh2YWx1
ZSk7CisgICAgbV9kYXRhLmFwcGVuZCh2YWx1ZSk7Cit9CisKK2lubGluZSB2b2lkIFVuY2hlY2tl
ZEFycmF5QmFzZTo6cHVzaEFycmF5KFBhc3NSZWZQdHI8UHJvdG9jb2w6OlVuY2hlY2tlZEFycmF5
PiB2YWx1ZSkKK3sKKyAgICBBU1NFUlQodmFsdWUpOworICAgIG1fZGF0YS5hcHBlbmQodmFsdWUp
OworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogY2xhc3MgT3B0T3V0cHV0IHsKIHB1YmxpYzoK
QEAgLTYzLDM0ICs0MjYsMTQgQEAgcHJpdmF0ZToKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShP
cHRPdXRwdXQpOwogfTsKIAotLy8gVGhpcyBjbGFzcyBwcm92aWRlcyAiVHJhaXRzIiB0eXBlIGZv
ciB0aGUgaW5wdXQgdHlwZSBULiBJdCBpcyBwcm9ncmFtbWVkIHVzaW5nIEMrKyB0ZW1wbGF0ZSBz
cGVjaWFsaXphdGlvbgotLy8gdGVjaG5pcXVlLiBCeSBkZWZhdWx0IGl0IHNpbXBseSB0YWtlcyAi
SXRlbVRyYWl0cyIgdHlwZSBmcm9tIFQsIGJ1dCBpdCBkb2Vzbid0IHdvcmsgd2l0aCB0aGUgYmFz
ZSB0eXBlcy4KIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgQXJyYXlJdGVtSGVscGVyIHsK
LSAgICB0eXBlZGVmIHR5cGVuYW1lIFQ6Okl0ZW1UcmFpdHMgVHJhaXRzOwotfTsKLQotdGVtcGxh
dGU8dHlwZW5hbWUgVD4KLWNsYXNzIEFycmF5IDogcHVibGljIEluc3BlY3RvckFycmF5QmFzZSB7
CitjbGFzcyBBcnJheSA6IHB1YmxpYyBVbmNoZWNrZWRBcnJheUJhc2UgewogcHJpdmF0ZToKICAg
ICBBcnJheSgpIHsgfQogCi0gICAgSW5zcGVjdG9yQXJyYXkqIG9wZW5BY2Nlc3NvcnMoKQotICAg
IHsKLSAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEluc3BlY3RvckFycmF5KSA9PSBzaXpl
b2YoQXJyYXk8VD4pLCBjYW5ub3RfY2FzdCk7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxJ
bnNwZWN0b3JBcnJheSo+KHN0YXRpY19jYXN0PEluc3BlY3RvckFycmF5QmFzZSo+KHRoaXMpKTsK
LSAgICB9Ci0KIHB1YmxpYzoKLSAgICB2b2lkIGFkZEl0ZW0oUGFzc1JlZlB0cjxUPiB2YWx1ZSkK
LSAgICB7Ci0gICAgICAgIEFycmF5SXRlbUhlbHBlcjxUPjo6VHJhaXRzOjpwdXNoUmVmUHRyKHRo
aXMtPm9wZW5BY2Nlc3NvcnMoKSwgdmFsdWUpOwotICAgIH0KLQotICAgIHZvaWQgYWRkSXRlbShU
IHZhbHVlKQotICAgIHsKLSAgICAgICAgQXJyYXlJdGVtSGVscGVyPFQ+OjpUcmFpdHM6OnB1c2hS
YXcodGhpcy0+b3BlbkFjY2Vzc29ycygpLCB2YWx1ZSk7Ci0gICAgfQorICAgIHZvaWQgYWRkSXRl
bShQYXNzUmVmUHRyPFQ+IHZhbHVlKTsKKyAgICB2b2lkIGFkZEl0ZW0oVCB2YWx1ZSk7CiAKICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxBcnJheTxUPj4gY3JlYXRlKCkKICAgICB7CkBAIC05OCw5MiAr
NDQxLDUwIEBAIHB1YmxpYzoKICAgICB9CiB9OwogCi1zdHJ1Y3QgU3RydWN0SXRlbVRyYWl0cyB7
Ci0gICAgc3RhdGljIHZvaWQgcHVzaFJlZlB0cihJbnNwZWN0b3JBcnJheSogYXJyYXksIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlKQotICAgIHsKLSAgICAgICAgYXJyYXktPnB1c2hW
YWx1ZSh2YWx1ZSk7Ci0gICAgfQotfTsKLQogdGVtcGxhdGU8Pgotc3RydWN0IEFycmF5SXRlbUhl
bHBlcjxTdHJpbmc+IHsKLSAgICBzdHJ1Y3QgVHJhaXRzIHsKLSAgICAgICAgc3RhdGljIHZvaWQg
cHVzaFJhdyhJbnNwZWN0b3JBcnJheSogYXJyYXksIGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGFycmF5LT5wdXNoU3RyaW5nKHZhbHVlKTsKLSAgICAgICAgfQot
ICAgIH07Ci19OworaW5saW5lIHZvaWQgQXJyYXk8U3RyaW5nPjo6YWRkSXRlbShTdHJpbmcgdmFs
dWUpIHsKKyAgICBwdXNoU3RyaW5nKHZhbHVlKTsKK30KIAogdGVtcGxhdGU8Pgotc3RydWN0IEFy
cmF5SXRlbUhlbHBlcjxpbnQ+IHsKLSAgICBzdHJ1Y3QgVHJhaXRzIHsKLSAgICAgICAgc3RhdGlj
IHZvaWQgcHVzaFJhdyhJbnNwZWN0b3JBcnJheSogYXJyYXksIGludCB2YWx1ZSkKLSAgICAgICAg
ewotICAgICAgICAgICAgYXJyYXktPnB1c2hJbnRlZ2VyKHZhbHVlKTsKLSAgICAgICAgfQotICAg
IH07Ci19OworaW5saW5lIHZvaWQgQXJyYXk8aW50Pjo6YWRkSXRlbShpbnQgdmFsdWUpIHsKKyAg
ICBwdXNoSW50ZWdlcih2YWx1ZSk7Cit9CiAKIHRlbXBsYXRlPD4KLXN0cnVjdCBBcnJheUl0ZW1I
ZWxwZXI8ZG91YmxlPiB7Ci0gICAgc3RydWN0IFRyYWl0cyB7Ci0gICAgICAgIHN0YXRpYyB2b2lk
IHB1c2hSYXcoSW5zcGVjdG9yQXJyYXkqIGFycmF5LCBkb3VibGUgdmFsdWUpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGFycmF5LT5wdXNoRG91YmxlKHZhbHVlKTsKLSAgICAgICAgfQotICAgIH07
Ci19OworaW5saW5lIHZvaWQgQXJyYXk8ZG91YmxlPjo6YWRkSXRlbShkb3VibGUgdmFsdWUpIHsK
KyAgICBwdXNoRG91YmxlKHZhbHVlKTsKK30KIAogdGVtcGxhdGU8Pgotc3RydWN0IEFycmF5SXRl
bUhlbHBlcjxib29sPiB7Ci0gICAgc3RydWN0IFRyYWl0cyB7Ci0gICAgICAgIHN0YXRpYyB2b2lk
IHB1c2hSYXcoSW5zcGVjdG9yQXJyYXkqIGFycmF5LCBib29sIHZhbHVlKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBhcnJheS0+cHVzaEJvb2xlYW4odmFsdWUpOwotICAgICAgICB9Ci0gICAgfTsK
LX07CitpbmxpbmUgdm9pZCBBcnJheTxib29sPjo6YWRkSXRlbShib29sIHZhbHVlKSB7CisgICAg
cHVzaEJvb2xlYW4odmFsdWUpOworfQogCiB0ZW1wbGF0ZTw+Ci1zdHJ1Y3QgQXJyYXlJdGVtSGVs
cGVyPEluc3BlY3RvclZhbHVlPiB7Ci0gICAgc3RydWN0IFRyYWl0cyB7Ci0gICAgICAgIHN0YXRp
YyB2b2lkIHB1c2hSZWZQdHIoSW5zcGVjdG9yQXJyYXkqIGFycmF5LCBQYXNzUmVmUHRyPEluc3Bl
Y3RvclZhbHVlPiB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgYXJyYXktPnB1c2hWYWx1
ZSh2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICB9OwotfTsKK2lubGluZSB2b2lkIEFycmF5PFByb3Rv
Y29sOjpVbmNoZWNrZWRWYWx1ZT46OmFkZEl0ZW0oUGFzc1JlZlB0cjxQcm90b2NvbDo6VW5jaGVj
a2VkVmFsdWU+IHZhbHVlKSB7CisgICAgcHVzaFZhbHVlKHZhbHVlKTsKK30KIAogdGVtcGxhdGU8
Pgotc3RydWN0IEFycmF5SXRlbUhlbHBlcjxJbnNwZWN0b3JPYmplY3Q+IHsKLSAgICBzdHJ1Y3Qg
VHJhaXRzIHsKLSAgICAgICAgc3RhdGljIHZvaWQgcHVzaFJlZlB0cihJbnNwZWN0b3JBcnJheSog
YXJyYXksIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBhcnJheS0+cHVzaFZhbHVlKHZhbHVlKTsKLSAgICAgICAgfQotICAgIH07Ci19Owor
aW5saW5lIHZvaWQgQXJyYXk8UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD46OmFkZEl0ZW0oUGFz
c1JlZlB0cjxQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiB2YWx1ZSkgeworICAgIHB1c2hPYmpl
Y3QodmFsdWUpOworfQogCiB0ZW1wbGF0ZTw+Ci1zdHJ1Y3QgQXJyYXlJdGVtSGVscGVyPEluc3Bl
Y3RvckFycmF5PiB7Ci0gICAgc3RydWN0IFRyYWl0cyB7Ci0gICAgICAgIHN0YXRpYyB2b2lkIHB1
c2hSZWZQdHIoSW5zcGVjdG9yQXJyYXkqIGFycmF5LCBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5
PiB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgYXJyYXktPnB1c2hBcnJheSh2YWx1ZSk7
Ci0gICAgICAgIH0KLSAgICB9OwotfTsKK2lubGluZSB2b2lkIEFycmF5PFByb3RvY29sOjpVbmNo
ZWNrZWRBcnJheT46OmFkZEl0ZW0oUGFzc1JlZlB0cjxQcm90b2NvbDo6VW5jaGVja2VkQXJyYXk+
IHZhbHVlKSB7CisgICAgcHVzaEFycmF5KHZhbHVlKTsKK30KIAogdGVtcGxhdGU8dHlwZW5hbWUg
VD4KLXN0cnVjdCBBcnJheUl0ZW1IZWxwZXI8UHJvdG9jb2w6OkFycmF5PFQ+PiB7Ci0gICAgc3Ry
dWN0IFRyYWl0cyB7Ci0gICAgICAgIHN0YXRpYyB2b2lkIHB1c2hSZWZQdHIoSW5zcGVjdG9yQXJy
YXkqIGFycmF5LCBQYXNzUmVmUHRyPFByb3RvY29sOjpBcnJheTxUPj4gdmFsdWUpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGFycmF5LT5wdXNoVmFsdWUodmFsdWUpOwotICAgICAgICB9Ci0gICAg
fTsKLX07CitpbmxpbmUgdm9pZCBBcnJheTxUPjo6YWRkSXRlbShQYXNzUmVmUHRyPFQ+IHZhbHVl
KSB7CisgICAgcHVzaFZhbHVlKHZhbHVlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2lu
bGluZSB2b2lkIEFycmF5PFQ+OjphZGRJdGVtKFQgdmFsdWUpIHsKKyAgICBwdXNoVmFsdWUodmFs
dWUpOworfQogCiAvLyBIZWxwZXIgbWV0aG9kcyBmb3IgUHJvdG9jb2wgYW5kIG90aGVyIEluc3Bl
Y3RvciB0eXBlcyBhcmUgcHJvdmlkZWQgYnkKIC8vIHNwZWNpYWxpemF0aW9ucyBvZiBCaW5kaW5n
VHJhaXRzPFQ+LiBTb21lIGFyZSBnZW5lcmF0ZWQgZm9yIHByb3RvY29sIHR5cGVzLgpAQCAtMTky
LDE3ICs0OTMsMTcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KIHN0cnVjdCBCaW5kaW5nVHJhaXRz
IHsKICAgICB0eXBlZGVmIFQgQmluZGluZ1R5cGU7CiAKLSAgICBzdGF0aWMgSW5zcGVjdG9yVmFs
dWU6OlR5cGUgdHlwZVRhZygpOwotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFQ+IHJ1bnRpbWVDYXN0
KFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0Pik7CisgICAgc3RhdGljIFByb3RvY29sOjpVbmNo
ZWNrZWRWYWx1ZTo6VHlwZSB0eXBlVGFnKCk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8VD4gcnVu
dGltZUNhc3QoUGFzc1JlZlB0cjxQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0Pik7CiAjaWYgIUFT
U0VSVF9ESVNBQkxFRAotICAgIHN0YXRpYyB2b2lkIGFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBl
KEluc3BlY3RvclZhbHVlKik7CisgICAgc3RhdGljIHZvaWQgYXNzZXJ0VmFsdWVIYXNFeHBlY3Rl
ZFR5cGUoVW5jaGVja2VkVmFsdWUqKTsKICNlbmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVECiB9Owog
Ci10ZW1wbGF0ZTxJbnNwZWN0b3JWYWx1ZTo6VHlwZSBUWVBFPgordGVtcGxhdGU8VW5jaGVja2Vk
VmFsdWU6OlR5cGUgVFlQRT4KIHN0cnVjdCBQcmltaXRpdmVCaW5kaW5nVHJhaXRzIHsKICNpZiAh
QVNTRVJUX0RJU0FCTEVECi0gICAgc3RhdGljIHZvaWQgYXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5
cGUoSW5zcGVjdG9yVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFzc2VydFZhbHVlSGFz
RXhwZWN0ZWRUeXBlKFVuY2hlY2tlZFZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIEFTU0VS
VCh2YWx1ZS0+dHlwZSgpID09IFRZUEUpOwogICAgIH0KQEAgLTIxMCwyMyArNTExLDIzIEBAIHN0
cnVjdCBQcmltaXRpdmVCaW5kaW5nVHJhaXRzIHsKIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
Ci1zdHJ1Y3QgQmluZGluZ1RyYWl0czxQcm90b2NvbDo6QXJyYXk8VD4+IHsKLSAgICBzdGF0aWMg
UGFzc1JlZlB0cjxBcnJheTxUPj4gcnVudGltZUNhc3QoUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1
ZT4gdmFsdWUpCitzdHJ1Y3QgQmluZGluZ1RyYWl0czxBcnJheTxUPj4geworICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEFycmF5PFQ+PiBydW50aW1lQ2FzdChQYXNzUmVmUHRyPFByb3RvY29sOjpVbmNo
ZWNrZWRWYWx1ZT4gdmFsdWUpCiAgICAgewotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
IGFycmF5OworICAgICAgICBSZWZQdHI8UHJvdG9jb2w6OlVuY2hlY2tlZEFycmF5PiBhcnJheTsK
ICAgICAgICAgYm9vbCBjYXN0U3VjY2VlZGVkID0gdmFsdWUtPmFzQXJyYXkoYXJyYXkpOwogICAg
ICAgICBBU1NFUlRfVU5VU0VEKGNhc3RTdWNjZWVkZWQsIGNhc3RTdWNjZWVkZWQpOwogI2lmICFB
U1NFUlRfRElTQUJMRUQKICAgICAgICAgYXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoYXJyYXku
Z2V0KCkpOwogI2VuZGlmIC8vICFBU1NFUlRfRElTQUJMRUQKLSAgICAgICAgQ09NUElMRV9BU1NF
UlQoc2l6ZW9mKEFycmF5PFQ+KSA9PSBzaXplb2YoSW5zcGVjdG9yQXJyYXkpLCB0eXBlX2Nhc3Rf
cHJvYmxlbSk7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxBcnJheTxUPio+KHN0YXRpY19j
YXN0PEluc3BlY3RvckFycmF5QmFzZSo+KGFycmF5LmdldCgpKSk7CisgICAgICAgIENPTVBJTEVf
QVNTRVJUKHNpemVvZihBcnJheTxUPikgPT0gc2l6ZW9mKFVuY2hlY2tlZEFycmF5KSwgdHlwZV9j
YXN0X3Byb2JsZW0pOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QXJyYXk8VD4qPihzdGF0
aWNfY2FzdDxVbmNoZWNrZWRBcnJheUJhc2UqPihhcnJheS5nZXQoKSkpOwogICAgIH0KIAogI2lm
ICFBU1NFUlRfRElTQUJMRUQKLSAgICBzdGF0aWMgdm9pZCBhc3NlcnRWYWx1ZUhhc0V4cGVjdGVk
VHlwZShJbnNwZWN0b3JWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXNzZXJ0VmFsdWVI
YXNFeHBlY3RlZFR5cGUoVW5jaGVja2VkVmFsdWUqIHZhbHVlKQogICAgIHsKLSAgICAgICAgUmVm
UHRyPEluc3BlY3RvckFycmF5PiBhcnJheTsKKyAgICAgICAgUmVmUHRyPFByb3RvY29sOjpVbmNo
ZWNrZWRBcnJheT4gYXJyYXk7CiAgICAgICAgIGJvb2wgY2FzdFN1Y2NlZWRlZCA9IHZhbHVlLT5h
c0FycmF5KGFycmF5KTsKICAgICAgICAgQVNTRVJUX1VOVVNFRChjYXN0U3VjY2VlZGVkLCBjYXN0
U3VjY2VlZGVkKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFycmF5LT5sZW5n
dGgoKTsgaSsrKQpAQCAtMjM2LDIwICs1MzcsMjAgQEAgc3RydWN0IEJpbmRpbmdUcmFpdHM8UHJv
dG9jb2w6OkFycmF5PFQ+PiB7CiB9OwogCiB0ZW1wbGF0ZTw+Ci1zdHJ1Y3QgQmluZGluZ1RyYWl0
czxJbnNwZWN0b3JWYWx1ZT4geworc3RydWN0IEJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6OlVuY2hl
Y2tlZFZhbHVlPiB7CiAjaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgIHN0YXRpYyB2b2lkIGFzc2Vy
dFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEluc3BlY3RvclZhbHVlKikKKyAgICBzdGF0aWMgdm9pZCBh
c3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShVbmNoZWNrZWRWYWx1ZSopCiAgICAgewogICAgIH0K
ICNlbmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVECiB9OwogCi10ZW1wbGF0ZTw+IHN0cnVjdCBCaW5k
aW5nVHJhaXRzPEluc3BlY3RvckFycmF5PiA6IHB1YmxpYyBQcmltaXRpdmVCaW5kaW5nVHJhaXRz
PEluc3BlY3RvclZhbHVlOjpUeXBlOjpBcnJheT4geyB9OwotdGVtcGxhdGU8PiBzdHJ1Y3QgQmlu
ZGluZ1RyYWl0czxJbnNwZWN0b3JPYmplY3Q+IDogcHVibGljIFByaW1pdGl2ZUJpbmRpbmdUcmFp
dHM8SW5zcGVjdG9yVmFsdWU6OlR5cGU6Ok9iamVjdD4geyB9OwotdGVtcGxhdGU8PiBzdHJ1Y3Qg
QmluZGluZ1RyYWl0czxTdHJpbmc+IDogcHVibGljIFByaW1pdGl2ZUJpbmRpbmdUcmFpdHM8SW5z
cGVjdG9yVmFsdWU6OlR5cGU6OlN0cmluZz4geyB9OwotdGVtcGxhdGU8PiBzdHJ1Y3QgQmluZGlu
Z1RyYWl0czxib29sPiA6IHB1YmxpYyBQcmltaXRpdmVCaW5kaW5nVHJhaXRzPEluc3BlY3RvclZh
bHVlOjpUeXBlOjpCb29sZWFuPiB7IH07Ci10ZW1wbGF0ZTw+IHN0cnVjdCBCaW5kaW5nVHJhaXRz
PGRvdWJsZT4gOiBwdWJsaWMgUHJpbWl0aXZlQmluZGluZ1RyYWl0czxJbnNwZWN0b3JWYWx1ZTo6
VHlwZTo6RG91YmxlPiB7IH07Ci10ZW1wbGF0ZTw+IHN0cnVjdCBCaW5kaW5nVHJhaXRzPGludD4g
OiBwdWJsaWMgUHJpbWl0aXZlQmluZGluZ1RyYWl0czxJbnNwZWN0b3JWYWx1ZTo6VHlwZTo6SW50
ZWdlcj4geyB9OwordGVtcGxhdGU8PiBzdHJ1Y3QgQmluZGluZ1RyYWl0czxQcm90b2NvbDo6VW5j
aGVja2VkQXJyYXk+IDogcHVibGljIFByaW1pdGl2ZUJpbmRpbmdUcmFpdHM8VW5jaGVja2VkVmFs
dWU6OlR5cGU6OkFycmF5PiB7IH07Cit0ZW1wbGF0ZTw+IHN0cnVjdCBCaW5kaW5nVHJhaXRzPFBy
b3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IDogcHVibGljIFByaW1pdGl2ZUJpbmRpbmdUcmFpdHM8
VW5jaGVja2VkVmFsdWU6OlR5cGU6Ok9iamVjdD4geyB9OwordGVtcGxhdGU8PiBzdHJ1Y3QgQmlu
ZGluZ1RyYWl0czxTdHJpbmc+IDogcHVibGljIFByaW1pdGl2ZUJpbmRpbmdUcmFpdHM8VW5jaGVj
a2VkVmFsdWU6OlR5cGU6OlN0cmluZz4geyB9OwordGVtcGxhdGU8PiBzdHJ1Y3QgQmluZGluZ1Ry
YWl0czxib29sPiA6IHB1YmxpYyBQcmltaXRpdmVCaW5kaW5nVHJhaXRzPFVuY2hlY2tlZFZhbHVl
OjpUeXBlOjpCb29sZWFuPiB7IH07Cit0ZW1wbGF0ZTw+IHN0cnVjdCBCaW5kaW5nVHJhaXRzPGRv
dWJsZT4gOiBwdWJsaWMgUHJpbWl0aXZlQmluZGluZ1RyYWl0czxVbmNoZWNrZWRWYWx1ZTo6VHlw
ZTo6RG91YmxlPiB7IH07Cit0ZW1wbGF0ZTw+IHN0cnVjdCBCaW5kaW5nVHJhaXRzPGludD4gOiBw
dWJsaWMgUHJpbWl0aXZlQmluZGluZ1RyYWl0czxVbmNoZWNrZWRWYWx1ZTo6VHlwZTo6SW50ZWdl
cj4geyB9OwogCiB9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDJhMmEwYmM4NTBhMWVkY2Y3YWIzMGFhMzZjZGM4NGU4MzI3YzFhZTMu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsODk0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIkluc3BlY3RvclZhbHVlcy5oIgotCi0jaW5jbHVkZSA8d3RmL0RlY2ltYWxOdW1iZXIuaD4K
LSNpbmNsdWRlIDx3dGYvZHRvYS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIu
aD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLW5hbWVzcGFjZSB7Ci0KLXN0YXRpYyBjb25z
dCBpbnQgc3RhY2tMaW1pdCA9IDEwMDA7Ci0KLWVudW0gVG9rZW4gewotICAgIE9CSkVDVF9CRUdJ
TiwKLSAgICBPQkpFQ1RfRU5ELAotICAgIEFSUkFZX0JFR0lOLAotICAgIEFSUkFZX0VORCwKLSAg
ICBTVFJJTkcsCi0gICAgTlVNQkVSLAotICAgIEJPT0xfVFJVRSwKLSAgICBCT09MX0ZBTFNFLAot
ICAgIE5VTExfVE9LRU4sCi0gICAgTElTVF9TRVBBUkFUT1IsCi0gICAgT0JKRUNUX1BBSVJfU0VQ
QVJBVE9SLAotICAgIElOVkFMSURfVE9LRU4sCi19OwotCi1jb25zdCBjaGFyKiBjb25zdCBudWxs
U3RyaW5nID0gIm51bGwiOwotY29uc3QgY2hhciogY29uc3QgdHJ1ZVN0cmluZyA9ICJ0cnVlIjsK
LWNvbnN0IGNoYXIqIGNvbnN0IGZhbHNlU3RyaW5nID0gImZhbHNlIjsKLQotYm9vbCBwYXJzZUNv
bnN0VG9rZW4oY29uc3QgVUNoYXIqIHN0YXJ0LCBjb25zdCBVQ2hhciogZW5kLCBjb25zdCBVQ2hh
cioqIHRva2VuRW5kLCBjb25zdCBjaGFyKiB0b2tlbikKLXsKLSAgICB3aGlsZSAoc3RhcnQgPCBl
bmQgJiYgKnRva2VuICE9ICdcMCcgJiYgKnN0YXJ0KysgPT0gKnRva2VuKyspIHsgfQotCi0gICAg
aWYgKCp0b2tlbiAhPSAnXDAnKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAqdG9rZW5F
bmQgPSBzdGFydDsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCByZWFkSW50KGNvbnN0IFVD
aGFyKiBzdGFydCwgY29uc3QgVUNoYXIqIGVuZCwgY29uc3QgVUNoYXIqKiB0b2tlbkVuZCwgYm9v
bCBjYW5IYXZlTGVhZGluZ1plcm9zKQotewotICAgIGlmIChzdGFydCA9PSBlbmQpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIGJvb2wgaGF2ZUxlYWRpbmdaZXJvID0gJzAnID09ICpzdGFy
dDsKLSAgICBpbnQgbGVuZ3RoID0gMDsKLSAgICB3aGlsZSAoc3RhcnQgPCBlbmQgJiYgJzAnIDw9
ICpzdGFydCAmJiAqc3RhcnQgPD0gJzknKSB7Ci0gICAgICAgICsrc3RhcnQ7Ci0gICAgICAgICsr
bGVuZ3RoOwotICAgIH0KLQotICAgIGlmICghbGVuZ3RoKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBpZiAoIWNhbkhhdmVMZWFkaW5nWmVyb3MgJiYgbGVuZ3RoID4gMSAmJiBoYXZlTGVh
ZGluZ1plcm8pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICp0b2tlbkVuZCA9IHN0YXJ0
OwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIHBhcnNlTnVtYmVyVG9rZW4oY29uc3QgVUNo
YXIqIHN0YXJ0LCBjb25zdCBVQ2hhciogZW5kLCBjb25zdCBVQ2hhcioqIHRva2VuRW5kKQotewot
ICAgIC8vIFdlIGp1c3QgZ3JhYiB0aGUgbnVtYmVyIGhlcmUuICBXZSB2YWxpZGF0ZSB0aGUgc2l6
ZSBpbiBEZWNvZGVOdW1iZXIuCi0gICAgLy8gQWNjb3JkaW5nICAgdG8gUkZDNDYyNywgYSB2YWxp
ZCBudW1iZXIgaXM6IFttaW51c10gaW50IFtmcmFjXSBbZXhwXQotICAgIGlmIChzdGFydCA9PSBl
bmQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFVDaGFyIGMgPSAqc3RhcnQ7Ci0gICAg
aWYgKCctJyA9PSBjKQotICAgICAgICArK3N0YXJ0OwotCi0gICAgaWYgKCFyZWFkSW50KHN0YXJ0
LCBlbmQsICZzdGFydCwgZmFsc2UpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAo
c3RhcnQgPT0gZW5kKSB7Ci0gICAgICAgICp0b2tlbkVuZCA9IHN0YXJ0OwotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvLyBPcHRpb25hbCBmcmFjdGlvbiBwYXJ0Ci0gICAgYyA9
ICpzdGFydDsKLSAgICBpZiAoJy4nID09IGMpIHsKLSAgICAgICAgKytzdGFydDsKLSAgICAgICAg
aWYgKCFyZWFkSW50KHN0YXJ0LCBlbmQsICZzdGFydCwgdHJ1ZSkpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIGlmIChzdGFydCA9PSBlbmQpIHsKLSAgICAgICAgICAgICp0b2tl
bkVuZCA9IHN0YXJ0OwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAg
ICAgYyA9ICpzdGFydDsKLSAgICB9Ci0KLSAgICAvLyBPcHRpb25hbCBleHBvbmVudCBwYXJ0Ci0g
ICAgaWYgKCdlJyA9PSBjIHx8ICdFJyA9PSBjKSB7Ci0gICAgICAgICsrc3RhcnQ7Ci0gICAgICAg
IGlmIChzdGFydCA9PSBlbmQpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGMg
PSAqc3RhcnQ7Ci0gICAgICAgIGlmICgnLScgPT0gYyB8fCAnKycgPT0gYykgewotICAgICAgICAg
ICAgKytzdGFydDsKLSAgICAgICAgICAgIGlmIChzdGFydCA9PSBlbmQpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGlmICghcmVhZEludChzdGFydCwg
ZW5kLCAmc3RhcnQsIHRydWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQot
ICAgICp0b2tlbkVuZCA9IHN0YXJ0OwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIHJlYWRI
ZXhEaWdpdHMoY29uc3QgVUNoYXIqIHN0YXJ0LCBjb25zdCBVQ2hhciogZW5kLCBjb25zdCBVQ2hh
cioqIHRva2VuRW5kLCBpbnQgZGlnaXRzKQotewotICAgIGlmIChlbmQgLSBzdGFydCA8IGRpZ2l0
cykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkaWdp
dHM7ICsraSkgewotICAgICAgICBVQ2hhciBjID0gKnN0YXJ0Kys7Ci0gICAgICAgIGlmICghKCgn
MCcgPD0gYyAmJiBjIDw9ICc5JykgfHwgKCdhJyA8PSBjICYmIGMgPD0gJ2YnKSB8fCAoJ0EnIDw9
IGMgJiYgYyA8PSAnRicpKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAg
ICAqdG9rZW5FbmQgPSBzdGFydDsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBwYXJzZVN0
cmluZ1Rva2VuKGNvbnN0IFVDaGFyKiBzdGFydCwgY29uc3QgVUNoYXIqIGVuZCwgY29uc3QgVUNo
YXIqKiB0b2tlbkVuZCkKLXsKLSAgICB3aGlsZSAoc3RhcnQgPCBlbmQpIHsKLSAgICAgICAgVUNo
YXIgYyA9ICpzdGFydCsrOwotICAgICAgICBpZiAoJ1xcJyA9PSBjKSB7Ci0gICAgICAgICAgICBj
ID0gKnN0YXJ0Kys7Ci0gICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIGVzY2FwZWQgY2hhciBp
cyB2YWxpZC4KLSAgICAgICAgICAgIHN3aXRjaCAoYykgewotICAgICAgICAgICAgY2FzZSAneCc6
Ci0gICAgICAgICAgICAgICAgaWYgKCFyZWFkSGV4RGlnaXRzKHN0YXJ0LCBlbmQsICZzdGFydCwg
MikpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIGNhc2UgJ3UnOgotICAgICAgICAgICAgICAgIGlmICghcmVhZEhl
eERpZ2l0cyhzdGFydCwgZW5kLCAmc3RhcnQsIDQpKQotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlICdcXCc6
Ci0gICAgICAgICAgICBjYXNlICcvJzoKLSAgICAgICAgICAgIGNhc2UgJ2InOgotICAgICAgICAg
ICAgY2FzZSAnZic6Ci0gICAgICAgICAgICBjYXNlICduJzoKLSAgICAgICAgICAgIGNhc2UgJ3In
OgotICAgICAgICAgICAgY2FzZSAndCc6Ci0gICAgICAgICAgICBjYXNlICd2JzoKLSAgICAgICAg
ICAgIGNhc2UgJyInOgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0gZWxzZSBpZiAoJyInID09IGMpIHsKLSAgICAgICAgICAgICp0b2tlbkVuZCA9IHN0YXJ0Owot
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLVRva2VuIHBhcnNlVG9rZW4oY29uc3QgVUNoYXIqIHN0YXJ0LCBjb25zdCBV
Q2hhciogZW5kLCBjb25zdCBVQ2hhcioqIHRva2VuU3RhcnQsIGNvbnN0IFVDaGFyKiogdG9rZW5F
bmQpCi17Ci0gICAgd2hpbGUgKHN0YXJ0IDwgZW5kICYmIGlzU3BhY2VPck5ld2xpbmUoKnN0YXJ0
KSkKLSAgICAgICAgKytzdGFydDsKLQotICAgIGlmIChzdGFydCA9PSBlbmQpCi0gICAgICAgIHJl
dHVybiBJTlZBTElEX1RPS0VOOwotCi0gICAgKnRva2VuU3RhcnQgPSBzdGFydDsKLQotICAgIHN3
aXRjaCAoKnN0YXJ0KSB7Ci0gICAgY2FzZSAnbic6Ci0gICAgICAgIGlmIChwYXJzZUNvbnN0VG9r
ZW4oc3RhcnQsIGVuZCwgdG9rZW5FbmQsIG51bGxTdHJpbmcpKQotICAgICAgICAgICAgcmV0dXJu
IE5VTExfVE9LRU47Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgJ3QnOgotICAgICAgICBpZiAo
cGFyc2VDb25zdFRva2VuKHN0YXJ0LCBlbmQsIHRva2VuRW5kLCB0cnVlU3RyaW5nKSkKLSAgICAg
ICAgICAgIHJldHVybiBCT09MX1RSVUU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgJ2YnOgot
ICAgICAgICBpZiAocGFyc2VDb25zdFRva2VuKHN0YXJ0LCBlbmQsIHRva2VuRW5kLCBmYWxzZVN0
cmluZykpCi0gICAgICAgICAgICByZXR1cm4gQk9PTF9GQUxTRTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSAnWyc6Ci0gICAgICAgICp0b2tlbkVuZCA9IHN0YXJ0ICsgMTsKLSAgICAgICAgcmV0
dXJuIEFSUkFZX0JFR0lOOwotICAgIGNhc2UgJ10nOgotICAgICAgICAqdG9rZW5FbmQgPSBzdGFy
dCArIDE7Ci0gICAgICAgIHJldHVybiBBUlJBWV9FTkQ7Ci0gICAgY2FzZSAnLCc6Ci0gICAgICAg
ICp0b2tlbkVuZCA9IHN0YXJ0ICsgMTsKLSAgICAgICAgcmV0dXJuIExJU1RfU0VQQVJBVE9SOwot
ICAgIGNhc2UgJ3snOgotICAgICAgICAqdG9rZW5FbmQgPSBzdGFydCArIDE7Ci0gICAgICAgIHJl
dHVybiBPQkpFQ1RfQkVHSU47Ci0gICAgY2FzZSAnfSc6Ci0gICAgICAgICp0b2tlbkVuZCA9IHN0
YXJ0ICsgMTsKLSAgICAgICAgcmV0dXJuIE9CSkVDVF9FTkQ7Ci0gICAgY2FzZSAnOic6Ci0gICAg
ICAgICp0b2tlbkVuZCA9IHN0YXJ0ICsgMTsKLSAgICAgICAgcmV0dXJuIE9CSkVDVF9QQUlSX1NF
UEFSQVRPUjsKLSAgICBjYXNlICcwJzoKLSAgICBjYXNlICcxJzoKLSAgICBjYXNlICcyJzoKLSAg
ICBjYXNlICczJzoKLSAgICBjYXNlICc0JzoKLSAgICBjYXNlICc1JzoKLSAgICBjYXNlICc2JzoK
LSAgICBjYXNlICc3JzoKLSAgICBjYXNlICc4JzoKLSAgICBjYXNlICc5JzoKLSAgICBjYXNlICct
JzoKLSAgICAgICAgaWYgKHBhcnNlTnVtYmVyVG9rZW4oc3RhcnQsIGVuZCwgdG9rZW5FbmQpKQot
ICAgICAgICAgICAgcmV0dXJuIE5VTUJFUjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAnIic6
Ci0gICAgICAgIGlmIChwYXJzZVN0cmluZ1Rva2VuKHN0YXJ0ICsgMSwgZW5kLCB0b2tlbkVuZCkp
Ci0gICAgICAgICAgICByZXR1cm4gU1RSSU5HOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gSU5WQUxJRF9UT0tFTjsKLX0KLQotaW5saW5lIGludCBoZXhUb0ludChVQ2hhciBj
KQotewotICAgIGlmICgnMCcgPD0gYyAmJiBjIDw9ICc5JykKLSAgICAgICAgcmV0dXJuIGMgLSAn
MCc7Ci0gICAgaWYgKCdBJyA8PSBjICYmIGMgPD0gJ0YnKQotICAgICAgICByZXR1cm4gYyAtICdB
JyArIDEwOwotICAgIGlmICgnYScgPD0gYyAmJiBjIDw9ICdmJykKLSAgICAgICAgcmV0dXJuIGMg
LSAnYScgKyAxMDsKLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiAwOwot
fQotCi1ib29sIGRlY29kZVN0cmluZyhjb25zdCBVQ2hhciogc3RhcnQsIGNvbnN0IFVDaGFyKiBl
bmQsIFN0cmluZ0J1aWxkZXImIG91dHB1dCkKLXsKLSAgICB3aGlsZSAoc3RhcnQgPCBlbmQpIHsK
LSAgICAgICAgVUNoYXIgYyA9ICpzdGFydCsrOwotICAgICAgICBpZiAoJ1xcJyAhPSBjKSB7Ci0g
ICAgICAgICAgICBvdXRwdXQuYXBwZW5kKGMpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIH0KLSAgICAgICAgYyA9ICpzdGFydCsrOwotICAgICAgICBzd2l0Y2ggKGMpIHsKLSAgICAg
ICAgY2FzZSAnIic6Ci0gICAgICAgIGNhc2UgJy8nOgotICAgICAgICBjYXNlICdcXCc6Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAnYic6Ci0gICAgICAgICAgICBjID0gJ1xiJzsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICdmJzoKLSAgICAgICAgICAgIGMgPSAn
XGYnOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgJ24nOgotICAgICAgICAgICAg
YyA9ICdcbic7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAncic6Ci0gICAgICAg
ICAgICBjID0gJ1xyJzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICd0JzoKLSAg
ICAgICAgICAgIGMgPSAnXHQnOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgJ3Yn
OgotICAgICAgICAgICAgYyA9ICdcdic7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSAneCc6Ci0gICAgICAgICAgICBjID0gKGhleFRvSW50KCpzdGFydCkgPDwgNCkgKwotICAgICAg
ICAgICAgICAgIGhleFRvSW50KCooc3RhcnQgKyAxKSk7Ci0gICAgICAgICAgICBzdGFydCArPSAy
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgJ3UnOgotICAgICAgICAgICAgYyA9
IChoZXhUb0ludCgqc3RhcnQpIDw8IDEyKSArCi0gICAgICAgICAgICAgICAgKGhleFRvSW50KCoo
c3RhcnQgKyAxKSkgPDwgOCkgKwotICAgICAgICAgICAgICAgIChoZXhUb0ludCgqKHN0YXJ0ICsg
MikpIDw8IDQpICsKLSAgICAgICAgICAgICAgICBoZXhUb0ludCgqKHN0YXJ0ICsgMykpOwotICAg
ICAgICAgICAgc3RhcnQgKz0gNDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIG91dHB1dC5h
cHBlbmQoYyk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgZGVjb2RlU3Ry
aW5nKGNvbnN0IFVDaGFyKiBzdGFydCwgY29uc3QgVUNoYXIqIGVuZCwgU3RyaW5nJiBvdXRwdXQp
Ci17Ci0gICAgaWYgKHN0YXJ0ID09IGVuZCkgewotICAgICAgICBvdXRwdXQgPSBlbXB0eVN0cmlu
ZygpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoc3RhcnQgPiBlbmQp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFN0cmluZ0J1aWxkZXIgYnVmZmVyOwotICAg
IGJ1ZmZlci5yZXNlcnZlQ2FwYWNpdHkoZW5kIC0gc3RhcnQpOwotICAgIGlmICghZGVjb2RlU3Ry
aW5nKHN0YXJ0LCBlbmQsIGJ1ZmZlcikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG91
dHB1dCA9IGJ1ZmZlci50b1N0cmluZygpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1QYXNzUmVm
UHRyPEluc3BlY3RvclZhbHVlPiBidWlsZFZhbHVlKGNvbnN0IFVDaGFyKiBzdGFydCwgY29uc3Qg
VUNoYXIqIGVuZCwgY29uc3QgVUNoYXIqKiB2YWx1ZVRva2VuRW5kLCBpbnQgZGVwdGgpCi17Ci0g
ICAgaWYgKGRlcHRoID4gc3RhY2tMaW1pdCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAg
ICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHJlc3VsdDsKLSAgICBjb25zdCBVQ2hhciogdG9rZW5T
dGFydDsKLSAgICBjb25zdCBVQ2hhciogdG9rZW5FbmQ7Ci0gICAgVG9rZW4gdG9rZW4gPSBwYXJz
ZVRva2VuKHN0YXJ0LCBlbmQsICZ0b2tlblN0YXJ0LCAmdG9rZW5FbmQpOwotICAgIHN3aXRjaCAo
dG9rZW4pIHsKLSAgICBjYXNlIElOVkFMSURfVE9LRU46Ci0gICAgICAgIHJldHVybiBudWxscHRy
OwotICAgIGNhc2UgTlVMTF9UT0tFTjoKLSAgICAgICAgcmVzdWx0ID0gSW5zcGVjdG9yVmFsdWU6
Om51bGwoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBCT09MX1RSVUU6Ci0gICAgICAgIHJl
c3VsdCA9IEluc3BlY3RvckJhc2ljVmFsdWU6OmNyZWF0ZSh0cnVlKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBCT09MX0ZBTFNFOgotICAgICAgICByZXN1bHQgPSBJbnNwZWN0b3JCYXNpY1Zh
bHVlOjpjcmVhdGUoZmFsc2UpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIE5VTUJFUjogewot
ICAgICAgICBib29sIG9rOwotICAgICAgICBkb3VibGUgdmFsdWUgPSBjaGFyYWN0ZXJzVG9Eb3Vi
bGUodG9rZW5TdGFydCwgdG9rZW5FbmQgLSB0b2tlblN0YXJ0LCAmb2spOwotICAgICAgICBpZiAo
IW9rKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIHJlc3VsdCA9IEluc3Bl
Y3RvckJhc2ljVmFsdWU6OmNyZWF0ZSh2YWx1ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAg
ICBjYXNlIFNUUklORzogewotICAgICAgICBTdHJpbmcgdmFsdWU7Ci0gICAgICAgIGJvb2wgb2sg
PSBkZWNvZGVTdHJpbmcodG9rZW5TdGFydCArIDEsIHRva2VuRW5kIC0gMSwgdmFsdWUpOwotICAg
ICAgICBpZiAoIW9rKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIHJlc3Vs
dCA9IEluc3BlY3RvclN0cmluZzo6Y3JlYXRlKHZhbHVlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIGNhc2UgQVJSQVlfQkVHSU46IHsKLSAgICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5
PiBhcnJheSA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKLSAgICAgICAgc3RhcnQgPSB0b2tl
bkVuZDsKLSAgICAgICAgdG9rZW4gPSBwYXJzZVRva2VuKHN0YXJ0LCBlbmQsICZ0b2tlblN0YXJ0
LCAmdG9rZW5FbmQpOwotICAgICAgICB3aGlsZSAodG9rZW4gIT0gQVJSQVlfRU5EKSB7Ci0gICAg
ICAgICAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGFycmF5Tm9kZSA9IGJ1aWxkVmFsdWUoc3Rh
cnQsIGVuZCwgJnRva2VuRW5kLCBkZXB0aCArIDEpOwotICAgICAgICAgICAgaWYgKCFhcnJheU5v
ZGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICBhcnJheS0+
cHVzaFZhbHVlKGFycmF5Tm9kZSk7Ci0KLSAgICAgICAgICAgIC8vIEFmdGVyIGEgbGlzdCB2YWx1
ZSwgd2UgZXhwZWN0IGEgY29tbWEgb3IgdGhlIGVuZCBvZiB0aGUgbGlzdC4KLSAgICAgICAgICAg
IHN0YXJ0ID0gdG9rZW5FbmQ7Ci0gICAgICAgICAgICB0b2tlbiA9IHBhcnNlVG9rZW4oc3RhcnQs
IGVuZCwgJnRva2VuU3RhcnQsICZ0b2tlbkVuZCk7Ci0gICAgICAgICAgICBpZiAodG9rZW4gPT0g
TElTVF9TRVBBUkFUT1IpIHsKLSAgICAgICAgICAgICAgICBzdGFydCA9IHRva2VuRW5kOwotICAg
ICAgICAgICAgICAgIHRva2VuID0gcGFyc2VUb2tlbihzdGFydCwgZW5kLCAmdG9rZW5TdGFydCwg
JnRva2VuRW5kKTsKLSAgICAgICAgICAgICAgICBpZiAodG9rZW4gPT0gQVJSQVlfRU5EKQotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAo
dG9rZW4gIT0gQVJSQVlfRU5EKSB7Ci0gICAgICAgICAgICAgICAgLy8gVW5leHBlY3RlZCB2YWx1
ZSBhZnRlciBsaXN0IHZhbHVlLiAgQmFpbCBvdXQuCi0gICAgICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHRva2VuICE9IEFS
UkFZX0VORCkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICByZXN1bHQgPSBh
cnJheS5yZWxlYXNlKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIE9CSkVDVF9C
RUdJTjogewotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvYmplY3QgPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgICAgICBzdGFydCA9IHRva2VuRW5kOwotICAgICAgICB0
b2tlbiA9IHBhcnNlVG9rZW4oc3RhcnQsIGVuZCwgJnRva2VuU3RhcnQsICZ0b2tlbkVuZCk7Ci0g
ICAgICAgIHdoaWxlICh0b2tlbiAhPSBPQkpFQ1RfRU5EKSB7Ci0gICAgICAgICAgICBpZiAodG9r
ZW4gIT0gU1RSSU5HKQotICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICAg
ICAgU3RyaW5nIGtleTsKLSAgICAgICAgICAgIGlmICghZGVjb2RlU3RyaW5nKHRva2VuU3RhcnQg
KyAxLCB0b2tlbkVuZCAtIDEsIGtleSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgICAgICAgICBzdGFydCA9IHRva2VuRW5kOwotCi0gICAgICAgICAgICB0b2tlbiA9IHBh
cnNlVG9rZW4oc3RhcnQsIGVuZCwgJnRva2VuU3RhcnQsICZ0b2tlbkVuZCk7Ci0gICAgICAgICAg
ICBpZiAodG9rZW4gIT0gT0JKRUNUX1BBSVJfU0VQQVJBVE9SKQotICAgICAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgICAgICAgICAgc3RhcnQgPSB0b2tlbkVuZDsKLQotICAgICAgICAg
ICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1ZSA9IGJ1aWxkVmFsdWUoc3RhcnQsIGVuZCwg
JnRva2VuRW5kLCBkZXB0aCArIDEpOwotICAgICAgICAgICAgaWYgKCF2YWx1ZSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAgIG9iamVjdC0+c2V0VmFsdWUoa2V5
LCB2YWx1ZSk7Ci0gICAgICAgICAgICBzdGFydCA9IHRva2VuRW5kOwotCi0gICAgICAgICAgICAv
LyBBZnRlciBhIGtleS92YWx1ZSBwYWlyLCB3ZSBleHBlY3QgYSBjb21tYSBvciB0aGUgZW5kIG9m
IHRoZQotICAgICAgICAgICAgLy8gb2JqZWN0LgotICAgICAgICAgICAgdG9rZW4gPSBwYXJzZVRv
a2VuKHN0YXJ0LCBlbmQsICZ0b2tlblN0YXJ0LCAmdG9rZW5FbmQpOwotICAgICAgICAgICAgaWYg
KHRva2VuID09IExJU1RfU0VQQVJBVE9SKSB7Ci0gICAgICAgICAgICAgICAgc3RhcnQgPSB0b2tl
bkVuZDsKLSAgICAgICAgICAgICAgICB0b2tlbiA9IHBhcnNlVG9rZW4oc3RhcnQsIGVuZCwgJnRv
a2VuU3RhcnQsICZ0b2tlbkVuZCk7Ci0gICAgICAgICAgICAgICAgIGlmICh0b2tlbiA9PSBPQkpF
Q1RfRU5EKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAg
IH0gZWxzZSBpZiAodG9rZW4gIT0gT0JKRUNUX0VORCkgewotICAgICAgICAgICAgICAgIC8vIFVu
ZXhwZWN0ZWQgdmFsdWUgYWZ0ZXIgbGFzdCBvYmplY3QgdmFsdWUuICBCYWlsIG91dC4KLSAgICAg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
ICAgICBpZiAodG9rZW4gIT0gT0JKRUNUX0VORCkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRy
OwotICAgICAgICByZXN1bHQgPSBvYmplY3QucmVsZWFzZSgpOwotICAgICAgICBicmVhazsKLSAg
ICB9Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICAvLyBXZSBnb3QgYSB0b2tlbiB0aGF0J3Mgbm90
IGEgdmFsdWUuCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLSAgICAqdmFsdWVUb2tl
bkVuZCA9IHRva2VuRW5kOwotICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwotfQotCi1pbmxp
bmUgYm9vbCBlc2NhcGVDaGFyKFVDaGFyIGMsIFN0cmluZ0J1aWxkZXImIGRzdCkKLXsKLSAgICBz
d2l0Y2ggKGMpIHsKLSAgICBjYXNlICdcYic6IGRzdC5hcHBlbmRMaXRlcmFsKCJcXGIiKTsgYnJl
YWs7Ci0gICAgY2FzZSAnXGYnOiBkc3QuYXBwZW5kTGl0ZXJhbCgiXFxmIik7IGJyZWFrOwotICAg
IGNhc2UgJ1xuJzogZHN0LmFwcGVuZExpdGVyYWwoIlxcbiIpOyBicmVhazsKLSAgICBjYXNlICdc
cic6IGRzdC5hcHBlbmRMaXRlcmFsKCJcXHIiKTsgYnJlYWs7Ci0gICAgY2FzZSAnXHQnOiBkc3Qu
YXBwZW5kTGl0ZXJhbCgiXFx0Iik7IGJyZWFrOwotICAgIGNhc2UgJ1xcJzogZHN0LmFwcGVuZExp
dGVyYWwoIlxcXFwiKTsgYnJlYWs7Ci0gICAgY2FzZSAnIic6IGRzdC5hcHBlbmRMaXRlcmFsKCJc
XFwiIik7IGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWlubGluZSB2b2lkIGRvdWJsZVF1b3RlU3RyaW5nKGNv
bnN0IFN0cmluZyYgc3RyLCBTdHJpbmdCdWlsZGVyJiBkc3QpCi17Ci0gICAgZHN0LmFwcGVuZCgn
IicpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoKCk7ICsraSkgewot
ICAgICAgICBVQ2hhciBjID0gc3RyW2ldOwotICAgICAgICBpZiAoIWVzY2FwZUNoYXIoYywgZHN0
KSkgewotICAgICAgICAgICAgaWYgKGMgPCAzMiB8fCBjID4gMTI2IHx8IGMgPT0gJzwnIHx8IGMg
PT0gJz4nKSB7Ci0gICAgICAgICAgICAgICAgLy8gMS4gRXNjYXBpbmcgPCwgPiB0byBwcmV2ZW50
IHNjcmlwdCBleGVjdXRpb24uCi0gICAgICAgICAgICAgICAgLy8gMi4gVGVjaG5pY2FsbHksIHdl
IGNvdWxkIGFsc28gcGFzcyB0aHJvdWdoIGMgPiAxMjYgYXMgVVRGOCwgYnV0IHRoaXMKLSAgICAg
ICAgICAgICAgICAvLyAgICBpcyBhbHNvIG9wdGlvbmFsLiAgSXQgd291bGQgYWxzbyBiZSBhIHBh
aW4gdG8gaW1wbGVtZW50IGhlcmUuCi0gICAgICAgICAgICAgICAgZHN0LmFwcGVuZChTdHJpbmc6
OmZvcm1hdCgiXFx1JTA0WCIsIGMpKTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAg
ICAgIGRzdC5hcHBlbmQoYyk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZHN0LmFwcGVuZCgnIicp
OwotfQotCi19IC8vIGFub255bW91cyBuYW1lc3BhY2UKLQotYm9vbCBJbnNwZWN0b3JWYWx1ZTo6
YXNCb29sZWFuKGJvb2wmKSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBJ
bnNwZWN0b3JWYWx1ZTo6YXNEb3VibGUoZG91YmxlJikgY29uc3QKLXsKLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLWJvb2wgSW5zcGVjdG9yVmFsdWU6OmFzRG91YmxlKGZsb2F0JikgY29uc3QKLXsK
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgSW5zcGVjdG9yVmFsdWU6OmFzSW50ZWdlcihp
bnQmKSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBJbnNwZWN0b3JWYWx1
ZTo6YXNJbnRlZ2VyKHVuc2lnbmVkJikgY29uc3QKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LWJvb2wgSW5zcGVjdG9yVmFsdWU6OmFzSW50ZWdlcihsb25nJikgY29uc3QKLXsKLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KLWJvb2wgSW5zcGVjdG9yVmFsdWU6OmFzSW50ZWdlcihsb25nIGxvbmcm
KSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBJbnNwZWN0b3JWYWx1ZTo6
YXNJbnRlZ2VyKHVuc2lnbmVkIGxvbmcmKSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotYm9vbCBJbnNwZWN0b3JWYWx1ZTo6YXNJbnRlZ2VyKHVuc2lnbmVkIGxvbmcgbG9uZyYpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEluc3BlY3RvclZhbHVlOjphc1N0
cmluZyhTdHJpbmcmKSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBJbnNw
ZWN0b3JWYWx1ZTo6YXNWYWx1ZShSZWZQdHI8SW5zcGVjdG9yVmFsdWU+JiBvdXRwdXQpCi17Ci0g
ICAgb3V0cHV0ID0gdGhpczsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBJbnNwZWN0b3JW
YWx1ZTo6YXNPYmplY3QoUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mKQotewotICAgIHJldHVybiBm
YWxzZTsKLX0KLQotYm9vbCBJbnNwZWN0b3JWYWx1ZTo6YXNBcnJheShSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+JikKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgSW5zcGVjdG9yVmFsdWU6
OnBhcnNlSlNPTihjb25zdCBTdHJpbmcmIGpzb25JbnB1dCwgUmVmUHRyPEluc3BlY3RvclZhbHVl
PiYgb3V0cHV0KQotewotICAgIC8vIEZJWE1FOiBUaGlzIHdob2xlIGZpbGUgc2hvdWxkIGp1c3Qg
dXNlIFN0cmluZ1ZpZXcgaW5zdGVhZCBvZiBVQ2hhci9sZW5ndGggYW5kIGF2b2lkIHVwY29udmVy
dGluZy4KLSAgICBhdXRvIGNoYXJhY3RlcnMgPSBTdHJpbmdWaWV3KGpzb25JbnB1dCkudXBjb252
ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgY29uc3QgVUNoYXIqIHN0YXJ0ID0gY2hhcmFjdGVyczsK
LSAgICBjb25zdCBVQ2hhciogZW5kID0gc3RhcnQgKyBqc29uSW5wdXQubGVuZ3RoKCk7Ci0gICAg
Y29uc3QgVUNoYXIqIHRva2VuRW5kOwotICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gcmVzdWx0
ID0gYnVpbGRWYWx1ZShzdGFydCwgZW5kLCAmdG9rZW5FbmQsIDApOwotICAgIGlmICghcmVzdWx0
IHx8IHRva2VuRW5kICE9IGVuZCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgb3V0cHV0
ID0gcmVzdWx0LnJlbGVhc2UoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotU3RyaW5nIEluc3Bl
Y3RvclZhbHVlOjp0b0pTT05TdHJpbmcoKSBjb25zdAotewotICAgIFN0cmluZ0J1aWxkZXIgcmVz
dWx0OwotICAgIHJlc3VsdC5yZXNlcnZlQ2FwYWNpdHkoNTEyKTsKLSAgICB3cml0ZUpTT04ocmVz
dWx0KTsKLSAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9y
VmFsdWU6OndyaXRlSlNPTihTdHJpbmdCdWlsZGVyJiBvdXRwdXQpIGNvbnN0Ci17Ci0gICAgQVNT
RVJUKG1fdHlwZSA9PSBUeXBlOjpOdWxsKTsKLQotICAgIG91dHB1dC5hcHBlbmRMaXRlcmFsKCJu
dWxsIik7Ci19Ci0KLWJvb2wgSW5zcGVjdG9yQmFzaWNWYWx1ZTo6YXNCb29sZWFuKGJvb2wmIG91
dHB1dCkgY29uc3QKLXsKLSAgICBpZiAodHlwZSgpICE9IFR5cGU6OkJvb2xlYW4pCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIG91dHB1dCA9IG1fYm9vbGVhblZhbHVlOwotICAgIHJldHVy
biB0cnVlOwotfQotCi1ib29sIEluc3BlY3RvckJhc2ljVmFsdWU6OmFzRG91YmxlKGRvdWJsZSYg
b3V0cHV0KSBjb25zdAotewotICAgIGlmICh0eXBlKCkgIT0gVHlwZTo6RG91YmxlKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBvdXRwdXQgPSBtX2RvdWJsZVZhbHVlOwotICAgIHJldHVy
biB0cnVlOwotfQotCi1ib29sIEluc3BlY3RvckJhc2ljVmFsdWU6OmFzRG91YmxlKGZsb2F0JiBv
dXRwdXQpIGNvbnN0Ci17Ci0gICAgaWYgKHR5cGUoKSAhPSBUeXBlOjpEb3VibGUpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIG91dHB1dCA9IHN0YXRpY19jYXN0PGZsb2F0PihtX2RvdWJs
ZVZhbHVlKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBJbnNwZWN0b3JCYXNpY1ZhbHVl
Ojphc0ludGVnZXIoaW50JiBvdXRwdXQpIGNvbnN0Ci17Ci0gICAgaWYgKHR5cGUoKSAhPSBUeXBl
OjpJbnRlZ2VyICYmIHR5cGUoKSAhPSBUeXBlOjpEb3VibGUpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIG91dHB1dCA9IHN0YXRpY19jYXN0PGludD4obV9kb3VibGVWYWx1ZSk7Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgSW5zcGVjdG9yQmFzaWNWYWx1ZTo6YXNJbnRlZ2VyKHVu
c2lnbmVkJiBvdXRwdXQpIGNvbnN0Ci17Ci0gICAgaWYgKHR5cGUoKSAhPSBUeXBlOjpJbnRlZ2Vy
ICYmIHR5cGUoKSAhPSBUeXBlOjpEb3VibGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IG91dHB1dCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2RvdWJsZVZhbHVlKTsKLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotYm9vbCBJbnNwZWN0b3JCYXNpY1ZhbHVlOjphc0ludGVnZXIobG9uZyYg
b3V0cHV0KSBjb25zdAotewotICAgIGlmICh0eXBlKCkgIT0gVHlwZTo6SW50ZWdlciAmJiB0eXBl
KCkgIT0gVHlwZTo6RG91YmxlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBvdXRwdXQg
PSBzdGF0aWNfY2FzdDxsb25nPihtX2RvdWJsZVZhbHVlKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotYm9vbCBJbnNwZWN0b3JCYXNpY1ZhbHVlOjphc0ludGVnZXIobG9uZyBsb25nJiBvdXRwdXQp
IGNvbnN0Ci17Ci0gICAgaWYgKHR5cGUoKSAhPSBUeXBlOjpJbnRlZ2VyICYmIHR5cGUoKSAhPSBU
eXBlOjpEb3VibGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG91dHB1dCA9IHN0YXRp
Y19jYXN0PGxvbmcgbG9uZz4obV9kb3VibGVWYWx1ZSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LWJvb2wgSW5zcGVjdG9yQmFzaWNWYWx1ZTo6YXNJbnRlZ2VyKHVuc2lnbmVkIGxvbmcmIG91dHB1
dCkgY29uc3QKLXsKLSAgICBpZiAodHlwZSgpICE9IFR5cGU6OkludGVnZXIgJiYgdHlwZSgpICE9
IFR5cGU6OkRvdWJsZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgb3V0cHV0ID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4obV9kb3VibGVWYWx1ZSk7Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLWJvb2wgSW5zcGVjdG9yQmFzaWNWYWx1ZTo6YXNJbnRlZ2VyKHVuc2lnbmVkIGxvbmcg
bG9uZyYgb3V0cHV0KSBjb25zdAotewotICAgIGlmICh0eXBlKCkgIT0gVHlwZTo6SW50ZWdlciAm
JiB0eXBlKCkgIT0gVHlwZTo6RG91YmxlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBv
dXRwdXQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KG1fZG91YmxlVmFsdWUpOwot
ICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIEluc3BlY3RvckJhc2ljVmFsdWU6OndyaXRlSlNP
TihTdHJpbmdCdWlsZGVyJiBvdXRwdXQpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKHR5cGUoKSA9PSBU
eXBlOjpCb29sZWFuIHx8IHR5cGUoKSA9PSBUeXBlOjpEb3VibGUgfHwgdHlwZSgpID09IFR5cGU6
OkludGVnZXIpOwotCi0gICAgaWYgKHR5cGUoKSA9PSBUeXBlOjpCb29sZWFuKSB7Ci0gICAgICAg
IGlmIChtX2Jvb2xlYW5WYWx1ZSkKLSAgICAgICAgICAgIG91dHB1dC5hcHBlbmRMaXRlcmFsKCJ0
cnVlIik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG91dHB1dC5hcHBlbmRMaXRlcmFsKCJm
YWxzZSIpOwotICAgIH0gZWxzZSBpZiAodHlwZSgpID09IFR5cGU6OkRvdWJsZSB8fCB0eXBlKCkg
PT0gVHlwZTo6SW50ZWdlcikgewotICAgICAgICBOdW1iZXJUb0xTdHJpbmdCdWZmZXIgYnVmZmVy
OwotICAgICAgICBpZiAoIXN0ZDo6aXNmaW5pdGUobV9kb3VibGVWYWx1ZSkpIHsKLSAgICAgICAg
ICAgIG91dHB1dC5hcHBlbmRMaXRlcmFsKCJudWxsIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICAgICAgRGVjaW1hbE51bWJlciBkZWNpbWFsID0gbV9kb3VibGVWYWx1ZTsK
LSAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gMDsKLSAgICAgICAgaWYgKGRlY2ltYWwuYnVmZmVy
TGVuZ3RoRm9yU3RyaW5nRGVjaW1hbCgpID4gV1RGOjpOdW1iZXJUb1N0cmluZ0J1ZmZlckxlbmd0
aCkgewotICAgICAgICAgICAgLy8gTm90IGVub3VnaCByb29tIGZvciBkZWNpbWFsLiBVc2UgZXhw
b25lbnRpYWwgZm9ybWF0LgotICAgICAgICAgICAgaWYgKGRlY2ltYWwuYnVmZmVyTGVuZ3RoRm9y
U3RyaW5nRXhwb25lbnRpYWwoKSA+IFdURjo6TnVtYmVyVG9TdHJpbmdCdWZmZXJMZW5ndGgpIHsK
LSAgICAgICAgICAgICAgICAvLyBGYWxsYmFjayBmb3IgYW4gYWJub3JtYWwgY2FzZSBpZiBpdCdz
IHRvbyBsaXR0bGUgZXZlbiBmb3IgZXhwb25lbnRpYWwuCi0gICAgICAgICAgICAgICAgb3V0cHV0
LmFwcGVuZExpdGVyYWwoIk5hTiIpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGxlbmd0aCA9IGRlY2ltYWwudG9TdHJpbmdFeHBvbmVudGlhbChi
dWZmZXIsIFdURjo6TnVtYmVyVG9TdHJpbmdCdWZmZXJMZW5ndGgpOwotICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgIGxlbmd0aCA9IGRlY2ltYWwudG9TdHJpbmdEZWNpbWFsKGJ1ZmZlciwgV1RG
OjpOdW1iZXJUb1N0cmluZ0J1ZmZlckxlbmd0aCk7Ci0gICAgICAgIG91dHB1dC5hcHBlbmQoYnVm
ZmVyLCBsZW5ndGgpOwotICAgIH0KLX0KLQotYm9vbCBJbnNwZWN0b3JTdHJpbmc6OmFzU3RyaW5n
KFN0cmluZyYgb3V0cHV0KSBjb25zdAotewotICAgIG91dHB1dCA9IG1fc3RyaW5nVmFsdWU7Ci0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yU3RyaW5nOjp3cml0ZUpTT04oU3Ry
aW5nQnVpbGRlciYgb3V0cHV0KSBjb25zdAotewotICAgIEFTU0VSVCh0eXBlKCkgPT0gVHlwZTo6
U3RyaW5nKTsKLSAgICBkb3VibGVRdW90ZVN0cmluZyhtX3N0cmluZ1ZhbHVlLCBvdXRwdXQpOwot
fQotCi1JbnNwZWN0b3JPYmplY3RCYXNlOjp+SW5zcGVjdG9yT2JqZWN0QmFzZSgpCi17Ci19Ci0K
LWJvb2wgSW5zcGVjdG9yT2JqZWN0QmFzZTo6YXNPYmplY3QoUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4mIG91dHB1dCkKLXsKLSAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoSW5zcGVjdG9yT2JqZWN0
KSA9PSBzaXplb2YoSW5zcGVjdG9yT2JqZWN0QmFzZSksIGNhbm5vdF9jYXN0KTsKLQotICAgIG91
dHB1dCA9IHN0YXRpY19jYXN0PEluc3BlY3Rvck9iamVjdCo+KHRoaXMpOwotICAgIHJldHVybiB0
cnVlOwotfQotCi1JbnNwZWN0b3JPYmplY3QqIEluc3BlY3Rvck9iamVjdEJhc2U6Om9wZW5BY2Nl
c3NvcnMoKQotewotICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihJbnNwZWN0b3JPYmplY3QpID09
IHNpemVvZihJbnNwZWN0b3JPYmplY3RCYXNlKSwgY2Fubm90X2Nhc3QpOwotCi0gICAgcmV0dXJu
IHN0YXRpY19jYXN0PEluc3BlY3Rvck9iamVjdCo+KHRoaXMpOwotfQotCi1ib29sIEluc3BlY3Rv
ck9iamVjdEJhc2U6OmdldEJvb2xlYW4oY29uc3QgU3RyaW5nJiBuYW1lLCBib29sJiBvdXRwdXQp
IGNvbnN0Ci17Ci0gICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1ZSA9IGdldChuYW1lKTsK
LSAgICBpZiAoIXZhbHVlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdmFs
dWUtPmFzQm9vbGVhbihvdXRwdXQpOwotfQotCi1ib29sIEluc3BlY3Rvck9iamVjdEJhc2U6Omdl
dFN0cmluZyhjb25zdCBTdHJpbmcmIG5hbWUsIFN0cmluZyYgb3V0cHV0KSBjb25zdAotewotICAg
IFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUgPSBnZXQobmFtZSk7Ci0gICAgaWYgKCF2YWx1
ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB2YWx1ZS0+YXNTdHJpbmcob3V0
cHV0KTsKLX0KLQotUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3Rvck9iamVjdEJh
c2U6OmdldE9iamVjdChjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0Ci17Ci0gICAgUGFzc1JlZlB0
cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUgPSBnZXQobmFtZSk7Ci0gICAgaWYgKCF2YWx1ZSkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1
bHQ7Ci0gICAgdmFsdWUtPmFzT2JqZWN0KHJlc3VsdCk7Ci0gICAgcmV0dXJuIHJlc3VsdC5yZWxl
YXNlKCk7Ci19Ci0KLVBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IEluc3BlY3Rvck9iamVjdEJh
c2U6OmdldEFycmF5KGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QKLXsKLSAgICBQYXNzUmVmUHRy
PEluc3BlY3RvclZhbHVlPiB2YWx1ZSA9IGdldChuYW1lKTsKLSAgICBpZiAoIXZhbHVlKQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcmVzdWx0
OwotICAgIHZhbHVlLT5hc0FycmF5KHJlc3VsdCk7Ci0gICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNl
KCk7Ci19Ci0KLVBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IEluc3BlY3Rvck9iamVjdEJhc2U6
OmdldChjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0Ci17Ci0gICAgRGljdGlvbmFyeTo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtX2RhdGEuZmluZChuYW1lKTsKLSAgICBpZiAoaXQgPT0gbV9kYXRhLmVu
ZCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gaXQtPnZhbHVlOwotfQot
Ci12b2lkIEluc3BlY3Rvck9iamVjdEJhc2U6OnJlbW92ZShjb25zdCBTdHJpbmcmIG5hbWUpCi17
Ci0gICAgbV9kYXRhLnJlbW92ZShuYW1lKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1f
b3JkZXIuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1fb3JkZXJbaV0gPT0gbmFtZSkgewot
ICAgICAgICAgICAgbV9vcmRlci5yZW1vdmUoaSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgIH0KLX0KLQotdm9pZCBJbnNwZWN0b3JPYmplY3RCYXNlOjp3cml0ZUpTT04oU3Ry
aW5nQnVpbGRlciYgb3V0cHV0KSBjb25zdAotewotICAgIG91dHB1dC5hcHBlbmQoJ3snKTsKLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fb3JkZXIuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAg
RGljdGlvbmFyeTo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2RhdGEuZmluZChtX29yZGVyW2ldKTsK
LSAgICAgICAgQVNTRVJUKGl0ICE9IG1fZGF0YS5lbmQoKSk7Ci0gICAgICAgIGlmIChpKQotICAg
ICAgICAgICAgb3V0cHV0LmFwcGVuZCgnLCcpOwotICAgICAgICBkb3VibGVRdW90ZVN0cmluZyhp
dC0+a2V5LCBvdXRwdXQpOwotICAgICAgICBvdXRwdXQuYXBwZW5kKCc6Jyk7Ci0gICAgICAgIGl0
LT52YWx1ZS0+d3JpdGVKU09OKG91dHB1dCk7Ci0gICAgfQotICAgIG91dHB1dC5hcHBlbmQoJ30n
KTsKLX0KLQotSW5zcGVjdG9yT2JqZWN0QmFzZTo6SW5zcGVjdG9yT2JqZWN0QmFzZSgpCi0gICAg
OiBJbnNwZWN0b3JWYWx1ZShUeXBlOjpPYmplY3QpCi0gICAgLCBtX2RhdGEoKQotICAgICwgbV9v
cmRlcigpCi17Ci19Ci0KLUluc3BlY3RvckFycmF5QmFzZTo6fkluc3BlY3RvckFycmF5QmFzZSgp
Ci17Ci19Ci0KLWJvb2wgSW5zcGVjdG9yQXJyYXlCYXNlOjphc0FycmF5KFJlZlB0cjxJbnNwZWN0
b3JBcnJheT4mIG91dHB1dCkKLXsKLSAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoSW5zcGVjdG9y
QXJyYXlCYXNlKSA9PSBzaXplb2YoSW5zcGVjdG9yQXJyYXkpLCBjYW5ub3RfY2FzdCk7Ci0gICAg
b3V0cHV0ID0gc3RhdGljX2Nhc3Q8SW5zcGVjdG9yQXJyYXkqPih0aGlzKTsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotdm9pZCBJbnNwZWN0b3JBcnJheUJhc2U6OndyaXRlSlNPTihTdHJpbmdCdWls
ZGVyJiBvdXRwdXQpIGNvbnN0Ci17Ci0gICAgb3V0cHV0LmFwcGVuZCgnWycpOwotICAgIGZvciAo
VmVjdG9yPFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fZGF0
YS5iZWdpbigpOyBpdCAhPSBtX2RhdGEuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0ICE9
IG1fZGF0YS5iZWdpbigpKQotICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgnLCcpOwotICAgICAg
ICAoKml0KS0+d3JpdGVKU09OKG91dHB1dCk7Ci0gICAgfQotICAgIG91dHB1dC5hcHBlbmQoJ10n
KTsKLX0KLQotSW5zcGVjdG9yQXJyYXlCYXNlOjpJbnNwZWN0b3JBcnJheUJhc2UoKQotICAgIDog
SW5zcGVjdG9yVmFsdWUoVHlwZTo6QXJyYXkpCi0gICAgLCBtX2RhdGEoKQotewotfQotCi1QYXNz
UmVmUHRyPEluc3BlY3RvclZhbHVlPiBJbnNwZWN0b3JBcnJheUJhc2U6OmdldChzaXplX3QgaW5k
ZXgpCi17Ci0gICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaW5kZXggPCBtX2Rh
dGEuc2l6ZSgpKTsKLSAgICByZXR1cm4gbV9kYXRhW2luZGV4XTsKLX0KLQotUGFzc1JlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkKLXsKLSAgICByZXR1cm4g
YWRvcHRSZWYobmV3IEluc3BlY3Rvck9iamVjdCk7Ci19Ci0KLVBhc3NSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKQotewotICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgSW5zcGVjdG9yQXJyYXkpOwotfQotCi1QYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBJbnNw
ZWN0b3JWYWx1ZTo6bnVsbCgpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JW
YWx1ZSk7Ci19Ci0KLVBhc3NSZWZQdHI8SW5zcGVjdG9yU3RyaW5nPiBJbnNwZWN0b3JTdHJpbmc6
OmNyZWF0ZShjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcg
SW5zcGVjdG9yU3RyaW5nKHZhbHVlKSk7Ci19Ci0KLVBhc3NSZWZQdHI8SW5zcGVjdG9yU3RyaW5n
PiBJbnNwZWN0b3JTdHJpbmc6OmNyZWF0ZShjb25zdCBjaGFyKiB2YWx1ZSkKLXsKLSAgICByZXR1
cm4gYWRvcHRSZWYobmV3IEluc3BlY3RvclN0cmluZyh2YWx1ZSkpOwotfQotCi1QYXNzUmVmUHRy
PEluc3BlY3RvckJhc2ljVmFsdWU+IEluc3BlY3RvckJhc2ljVmFsdWU6OmNyZWF0ZShib29sIHZh
bHVlKQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5zcGVjdG9yQmFzaWNWYWx1ZSh2YWx1
ZSkpOwotfQotCi1QYXNzUmVmUHRyPEluc3BlY3RvckJhc2ljVmFsdWU+IEluc3BlY3RvckJhc2lj
VmFsdWU6OmNyZWF0ZShpbnQgdmFsdWUpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNw
ZWN0b3JCYXNpY1ZhbHVlKHZhbHVlKSk7Ci19Ci0KLVBhc3NSZWZQdHI8SW5zcGVjdG9yQmFzaWNW
YWx1ZT4gSW5zcGVjdG9yQmFzaWNWYWx1ZTo6Y3JlYXRlKGRvdWJsZSB2YWx1ZSkKLXsKLSAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IEluc3BlY3RvckJhc2ljVmFsdWUodmFsdWUpKTsKLX0KLQotfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JWYWx1ZXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTQz
NWZhNTI4Yjg0MjRmZDBkMjAyMzk4YWI4OWUxY2RlYmUyYjk2Mi4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL0luc3BlY3RvclZhbHVlcy5oCisrKyAvZGV2L251bGwKQEAgLTEsNDA4ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6
Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
LSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2lmbmRlZiBJbnNwZWN0b3JWYWx1ZXNfaAotI2RlZmluZSBJbnNwZWN0b3JWYWx1
ZXNfaAotCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEluc3BlY3RvckFycmF5
OwotY2xhc3MgSW5zcGVjdG9yQXJyYXlCYXNlOwotY2xhc3MgSW5zcGVjdG9yT2JqZWN0OwotY2xh
c3MgSW5zcGVjdG9yT2JqZWN0QmFzZTsKLQotY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgSW5zcGVj
dG9yVmFsdWUgOiBwdWJsaWMgUmVmQ291bnRlZDxJbnNwZWN0b3JWYWx1ZT4gewotcHVibGljOgot
ICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4RGVwdGggPSAxMDAwOwotCi0gICAgSW5zcGVjdG9yVmFs
dWUoKQotICAgICAgICA6IG1fdHlwZShUeXBlOjpOdWxsKSB7IH0KLSAgICB2aXJ0dWFsIH5JbnNw
ZWN0b3JWYWx1ZSgpIHsgfQotCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+
IG51bGwoKTsKLQotICAgIGVudW0gY2xhc3MgVHlwZSB7Ci0gICAgICAgIE51bGwgPSAwLAotICAg
ICAgICBCb29sZWFuLAotICAgICAgICBEb3VibGUsCi0gICAgICAgIEludGVnZXIsCi0gICAgICAg
IFN0cmluZywKLSAgICAgICAgT2JqZWN0LAotICAgICAgICBBcnJheQotICAgIH07Ci0KLSAgICBU
eXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KLQotICAgIGJvb2wgaXNOdWxsKCkg
Y29uc3QgeyByZXR1cm4gbV90eXBlID09IFR5cGU6Ok51bGw7IH0KLQotICAgIHZpcnR1YWwgYm9v
bCBhc0Jvb2xlYW4oYm9vbCYpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBhc0ludGVnZXIoaW50
JikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGFzSW50ZWdlcih1bnNpZ25lZCYpIGNvbnN0Owot
ICAgIHZpcnR1YWwgYm9vbCBhc0ludGVnZXIobG9uZyYpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9v
bCBhc0ludGVnZXIobG9uZyBsb25nJikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGFzSW50ZWdl
cih1bnNpZ25lZCBsb25nJikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGFzSW50ZWdlcih1bnNp
Z25lZCBsb25nIGxvbmcmKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgYXNEb3VibGUoZG91Ymxl
JikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGFzRG91YmxlKGZsb2F0JikgY29uc3Q7Ci0gICAg
dmlydHVhbCBib29sIGFzU3RyaW5nKFN0cmluZyYpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBh
c1ZhbHVlKFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4mKTsKLSAgICB2aXJ0dWFsIGJvb2wgYXNPYmpl
Y3QoUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mKTsKLSAgICB2aXJ0dWFsIGJvb2wgYXNBcnJheShS
ZWZQdHI8SW5zcGVjdG9yQXJyYXk+Jik7Ci0KLSAgICBzdGF0aWMgYm9vbCBwYXJzZUpTT04oY29u
c3QgU3RyaW5nJiBqc29uSW5wdXQsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4mIG91dHB1dCk7Ci0K
LSAgICBTdHJpbmcgdG9KU09OU3RyaW5nKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHdyaXRl
SlNPTihTdHJpbmdCdWlsZGVyJiBvdXRwdXQpIGNvbnN0OwotCi1wcm90ZWN0ZWQ6Ci0gICAgZXhw
bGljaXQgSW5zcGVjdG9yVmFsdWUoVHlwZSB0eXBlKSA6IG1fdHlwZSh0eXBlKSB7IH0KLQotcHJp
dmF0ZToKLSAgICBUeXBlIG1fdHlwZTsKLX07Ci0KLWNsYXNzIEpTX0VYUE9SVF9QUklWQVRFIElu
c3BlY3RvckJhc2ljVmFsdWUgOiBwdWJsaWMgSW5zcGVjdG9yVmFsdWUgewotcHVibGljOgotCi0g
ICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yQmFzaWNWYWx1ZT4gY3JlYXRlKGJvb2wpOwot
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvckJhc2ljVmFsdWU+IGNyZWF0ZShpbnQpOwot
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvckJhc2ljVmFsdWU+IGNyZWF0ZShkb3VibGUp
OwotCi0gICAgdmlydHVhbCBib29sIGFzQm9vbGVhbihib29sJikgY29uc3Qgb3ZlcnJpZGU7Ci0g
ICAgLy8gTnVtYmVycyBmcm9tIHRoZSBmcm9udGVuZCBhcmUgYWx3YXlzIHBhcnNlZCBhcyBkb3Vi
bGVzLCBzbyB3ZSBhbGxvdwotICAgIC8vIGNsaWVudHMgdG8gY29udmVydCB0byBpbnRlZ3JhbCB2
YWx1ZXMgd2l0aCB0aGlzIGZ1bmN0aW9uLgotICAgIHZpcnR1YWwgYm9vbCBhc0ludGVnZXIoaW50
JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIGFzSW50ZWdlcih1bnNpZ25lZCYp
IGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBhc0ludGVnZXIobG9uZyYpIGNvbnN0
IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBhc0ludGVnZXIobG9uZyBsb25nJikgY29uc3Qg
b3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIGFzSW50ZWdlcih1bnNpZ25lZCBsb25nJikgY29u
c3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIGFzSW50ZWdlcih1bnNpZ25lZCBsb25nIGxv
bmcmKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgYXNEb3VibGUoZG91YmxlJikg
Y29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIGFzRG91YmxlKGZsb2F0JikgY29uc3Qg
b3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgd3JpdGVKU09OKFN0cmluZ0J1aWxkZXImIG91
dHB1dCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgSW5zcGVjdG9y
QmFzaWNWYWx1ZShib29sIHZhbHVlKQotICAgICAgICA6IEluc3BlY3RvclZhbHVlKFR5cGU6OkJv
b2xlYW4pCi0gICAgICAgICwgbV9ib29sZWFuVmFsdWUodmFsdWUpIHsgfQotCi0gICAgZXhwbGlj
aXQgSW5zcGVjdG9yQmFzaWNWYWx1ZShpbnQgdmFsdWUpCi0gICAgICAgIDogSW5zcGVjdG9yVmFs
dWUoVHlwZTo6SW50ZWdlcikKLSAgICAgICAgLCBtX2RvdWJsZVZhbHVlKHN0YXRpY19jYXN0PGRv
dWJsZT4odmFsdWUpKSB7IH0KLQotICAgIGV4cGxpY2l0IEluc3BlY3RvckJhc2ljVmFsdWUoZG91
YmxlIHZhbHVlKQotICAgICAgICA6IEluc3BlY3RvclZhbHVlKFR5cGU6OkRvdWJsZSkKLSAgICAg
ICAgLCBtX2RvdWJsZVZhbHVlKHZhbHVlKSB7IH0KLQotICAgIHVuaW9uIHsKLSAgICAgICAgYm9v
bCBtX2Jvb2xlYW5WYWx1ZTsKLSAgICAgICAgZG91YmxlIG1fZG91YmxlVmFsdWU7Ci0gICAgfTsK
LX07Ci0KLWNsYXNzIEpTX0VYUE9SVF9QUklWQVRFIEluc3BlY3RvclN0cmluZyA6IHB1YmxpYyBJ
bnNwZWN0b3JWYWx1ZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9y
U3RyaW5nPiBjcmVhdGUoY29uc3QgU3RyaW5nJik7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SW5z
cGVjdG9yU3RyaW5nPiBjcmVhdGUoY29uc3QgY2hhciopOwotCi0gICAgdmlydHVhbCBib29sIGFz
U3RyaW5nKFN0cmluZyYgb3V0cHV0KSBjb25zdCBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgdm9p
ZCB3cml0ZUpTT04oU3RyaW5nQnVpbGRlciYgb3V0cHV0KSBjb25zdCBvdmVycmlkZTsKLQotcHJp
dmF0ZToKLSAgICBleHBsaWNpdCBJbnNwZWN0b3JTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkK
LSAgICAgICAgOiBJbnNwZWN0b3JWYWx1ZShUeXBlOjpTdHJpbmcpCi0gICAgICAgICwgbV9zdHJp
bmdWYWx1ZSh2YWx1ZSkgeyB9Ci0KLSAgICBleHBsaWNpdCBJbnNwZWN0b3JTdHJpbmcoY29uc3Qg
Y2hhciogdmFsdWUpCi0gICAgICAgIDogSW5zcGVjdG9yVmFsdWUoVHlwZTo6U3RyaW5nKQotICAg
ICAgICAsIG1fc3RyaW5nVmFsdWUodmFsdWUpIHsgfQotCi0gICAgU3RyaW5nIG1fc3RyaW5nVmFs
dWU7Ci19OwotCi1jbGFzcyBKU19FWFBPUlRfUFJJVkFURSBJbnNwZWN0b3JPYmplY3RCYXNlIDog
cHVibGljIEluc3BlY3RvclZhbHVlIHsKLXByaXZhdGU6Ci0gICAgdHlwZWRlZiBIYXNoTWFwPFN0
cmluZywgUmVmUHRyPEluc3BlY3RvclZhbHVlPj4gRGljdGlvbmFyeTsKLQotcHVibGljOgotICAg
IHR5cGVkZWYgRGljdGlvbmFyeTo6aXRlcmF0b3IgaXRlcmF0b3I7Ci0gICAgdHlwZWRlZiBEaWN0
aW9uYXJ5Ojpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKLQotICAgIEluc3BlY3Rvck9i
amVjdCogb3BlbkFjY2Vzc29ycygpOwotCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB+SW5zcGVj
dG9yT2JqZWN0QmFzZSgpOwotCi0gICAgdmlydHVhbCBib29sIGFzT2JqZWN0KFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+JiBvdXRwdXQpIG92ZXJyaWRlOwotCi0gICAgLy8gRklYTUU6IHVzZSB0ZW1w
bGF0ZXMgdG8gcmVkdWNlIHRoZSBhbW91bnQgb2YgZHVwbGljYXRlZCBzZXQqKCkgbWV0aG9kcy4K
LSAgICB2b2lkIHNldEJvb2xlYW4oY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKTsKLSAgICB2b2lk
IHNldEludGVnZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBpbnQpOwotICAgIHZvaWQgc2V0RG91Ymxl
KGNvbnN0IFN0cmluZyYgbmFtZSwgZG91YmxlKTsKLSAgICB2b2lkIHNldFN0cmluZyhjb25zdCBT
dHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYpOwotICAgIHZvaWQgc2V0VmFsdWUoY29uc3QgU3Ry
aW5nJiBuYW1lLCBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPik7Ci0gICAgdm9pZCBzZXRPYmpl
Y3QoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdEJhc2U+KTsK
LSAgICB2b2lkIHNldEFycmF5KGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJbnNwZWN0
b3JBcnJheUJhc2U+KTsKLQotICAgIGl0ZXJhdG9yIGZpbmQoY29uc3QgU3RyaW5nJiBuYW1lKTsK
LSAgICBjb25zdF9pdGVyYXRvciBmaW5kKGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3Q7Ci0KLSAg
ICAvLyBGSVhNRTogdXNlIHRlbXBsYXRlcyB0byByZWR1Y2UgdGhlIGFtb3VudCBvZiBkdXBsaWNh
dGVkIGdldCooKSBtZXRob2RzLgotICAgIGJvb2wgZ2V0Qm9vbGVhbihjb25zdCBTdHJpbmcmIG5h
bWUsIGJvb2wmIG91dHB1dCkgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgVD4gYm9vbCBnZXRE
b3VibGUoY29uc3QgU3RyaW5nJiBuYW1lLCBUJiBvdXRwdXQpIGNvbnN0Ci0gICAgewotICAgICAg
ICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlID0gZ2V0KG5hbWUpOwotICAgICAgICBpZiAo
IXZhbHVlKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXR1cm4gdmFsdWUt
PmFzRG91YmxlKG91dHB1dCk7Ci0gICAgfQotICAgIHRlbXBsYXRlPGNsYXNzIFQ+IGJvb2wgZ2V0
SW50ZWdlcihjb25zdCBTdHJpbmcmIG5hbWUsIFQmIG91dHB1dCkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUgPSBnZXQobmFtZSk7Ci0gICAgICAgIGlm
ICghdmFsdWUpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJldHVybiB2YWx1
ZS0+YXNJbnRlZ2VyKG91dHB1dCk7Ci0gICAgfQotCi0gICAgYm9vbCBnZXRTdHJpbmcoY29uc3Qg
U3RyaW5nJiBuYW1lLCBTdHJpbmcmIG91dHB1dCkgY29uc3Q7Ci0gICAgUGFzc1JlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IGdldE9iamVjdChjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0OwotICAgIFBh
c3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGdldEFycmF5KGNvbnN0IFN0cmluZyYgbmFtZSkgY29u
c3Q7Ci0gICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gZ2V0KGNvbnN0IFN0cmluZyYgbmFt
ZSkgY29uc3Q7Ci0KLSAgICB2b2lkIHJlbW92ZShjb25zdCBTdHJpbmcmIG5hbWUpOwotCi0gICAg
dmlydHVhbCB2b2lkIHdyaXRlSlNPTihTdHJpbmdCdWlsZGVyJiBvdXRwdXQpIGNvbnN0IG92ZXJy
aWRlOwotCi0gICAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBtX2RhdGEuYmVnaW4oKTsgfQot
ICAgIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIG1fZGF0YS5lbmQoKTsgfQotICAgIGNvbnN0X2l0
ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmJlZ2luKCk7IH0KLSAgICBjb25z
dF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtX2RhdGEuZW5kKCk7IH0KLQotICAgIGlu
dCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLnNpemUoKTsgfQotCi1wcm90ZWN0ZWQ6Ci0g
ICAgSW5zcGVjdG9yT2JqZWN0QmFzZSgpOwotCi1wcml2YXRlOgotICAgIERpY3Rpb25hcnkgbV9k
YXRhOwotICAgIFZlY3RvcjxTdHJpbmc+IG1fb3JkZXI7Ci19OwotCi1jbGFzcyBJbnNwZWN0b3JP
YmplY3QgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0QmFzZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGlj
IEpTX0VYUE9SVF9QUklWQVRFIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGUoKTsK
LQotICAgIHVzaW5nIEluc3BlY3Rvck9iamVjdEJhc2U6OmFzT2JqZWN0OwotCi0gICAgdXNpbmcg
SW5zcGVjdG9yT2JqZWN0QmFzZTo6c2V0Qm9vbGVhbjsKLSAgICB1c2luZyBJbnNwZWN0b3JPYmpl
Y3RCYXNlOjpzZXRJbnRlZ2VyOwotICAgIHVzaW5nIEluc3BlY3Rvck9iamVjdEJhc2U6OnNldERv
dWJsZTsKLSAgICB1c2luZyBJbnNwZWN0b3JPYmplY3RCYXNlOjpzZXRTdHJpbmc7Ci0gICAgdXNp
bmcgSW5zcGVjdG9yT2JqZWN0QmFzZTo6c2V0VmFsdWU7Ci0gICAgdXNpbmcgSW5zcGVjdG9yT2Jq
ZWN0QmFzZTo6c2V0T2JqZWN0OwotICAgIHVzaW5nIEluc3BlY3Rvck9iamVjdEJhc2U6OnNldEFy
cmF5OwotCi0gICAgdXNpbmcgSW5zcGVjdG9yT2JqZWN0QmFzZTo6ZmluZDsKLSAgICB1c2luZyBJ
bnNwZWN0b3JPYmplY3RCYXNlOjpnZXRCb29sZWFuOwotICAgIHVzaW5nIEluc3BlY3Rvck9iamVj
dEJhc2U6OmdldEludGVnZXI7Ci0gICAgdXNpbmcgSW5zcGVjdG9yT2JqZWN0QmFzZTo6Z2V0RG91
YmxlOwotICAgIHVzaW5nIEluc3BlY3Rvck9iamVjdEJhc2U6OmdldFN0cmluZzsKLSAgICB1c2lu
ZyBJbnNwZWN0b3JPYmplY3RCYXNlOjpnZXRPYmplY3Q7Ci0gICAgdXNpbmcgSW5zcGVjdG9yT2Jq
ZWN0QmFzZTo6Z2V0QXJyYXk7Ci0gICAgdXNpbmcgSW5zcGVjdG9yT2JqZWN0QmFzZTo6Z2V0Owot
Ci0gICAgdXNpbmcgSW5zcGVjdG9yT2JqZWN0QmFzZTo6cmVtb3ZlOwotCi0gICAgdXNpbmcgSW5z
cGVjdG9yT2JqZWN0QmFzZTo6YmVnaW47Ci0gICAgdXNpbmcgSW5zcGVjdG9yT2JqZWN0QmFzZTo6
ZW5kOwotCi0gICAgdXNpbmcgSW5zcGVjdG9yT2JqZWN0QmFzZTo6c2l6ZTsKLX07Ci0KLQotY2xh
c3MgSlNfRVhQT1JUX1BSSVZBVEUgSW5zcGVjdG9yQXJyYXlCYXNlIDogcHVibGljIEluc3BlY3Rv
clZhbHVlIHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8SW5zcGVjdG9yVmFs
dWU+Pjo6aXRlcmF0b3IgaXRlcmF0b3I7Ci0gICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPEluc3Bl
Y3RvclZhbHVlPj46OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwotCi0gICAgdW5zaWdu
ZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLnNpemUoKTsgfQotCi1wcm90ZWN0ZWQ6
Ci0gICAgdmlydHVhbCB+SW5zcGVjdG9yQXJyYXlCYXNlKCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wg
YXNBcnJheShSZWZQdHI8SW5zcGVjdG9yQXJyYXk+Jikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHB1
c2hCb29sZWFuKGJvb2wpOwotICAgIHZvaWQgcHVzaEludGVnZXIoaW50KTsKLSAgICB2b2lkIHB1
c2hEb3VibGUoZG91YmxlKTsKLSAgICB2b2lkIHB1c2hTdHJpbmcoY29uc3QgU3RyaW5nJik7Ci0g
ICAgdm9pZCBwdXNoVmFsdWUoUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4pOwotICAgIHZvaWQg
cHVzaE9iamVjdChQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4pOwotICAgIHZvaWQgcHVzaEFy
cmF5KFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KTsKLQotICAgIFBhc3NSZWZQdHI8SW5zcGVj
dG9yVmFsdWU+IGdldChzaXplX3QgaW5kZXgpOwotCi0gICAgdmlydHVhbCB2b2lkIHdyaXRlSlNP
TihTdHJpbmdCdWlsZGVyJiBvdXRwdXQpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgaXRlcmF0b3Ig
YmVnaW4oKSB7IHJldHVybiBtX2RhdGEuYmVnaW4oKTsgfQotICAgIGl0ZXJhdG9yIGVuZCgpIHsg
cmV0dXJuIG1fZGF0YS5lbmQoKTsgfQotICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3Qg
eyByZXR1cm4gbV9kYXRhLmJlZ2luKCk7IH0KLSAgICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25z
dCB7IHJldHVybiBtX2RhdGEuZW5kKCk7IH0KLQotcHJvdGVjdGVkOgotICAgIEluc3BlY3RvckFy
cmF5QmFzZSgpOwotCi1wcml2YXRlOgotICAgIFZlY3RvcjxSZWZQdHI8SW5zcGVjdG9yVmFsdWU+
PiBtX2RhdGE7Ci19OwotCi1jbGFzcyBJbnNwZWN0b3JBcnJheSA6IHB1YmxpYyBJbnNwZWN0b3JB
cnJheUJhc2UgewotcHVibGljOgotICAgIHN0YXRpYyBKU19FWFBPUlRfUFJJVkFURSBQYXNzUmVm
UHRyPEluc3BlY3RvckFycmF5PiBjcmVhdGUoKTsKLQotICAgIHVzaW5nIEluc3BlY3RvckFycmF5
QmFzZTo6YXNBcnJheTsKLQotICAgIHVzaW5nIEluc3BlY3RvckFycmF5QmFzZTo6cHVzaEJvb2xl
YW47Ci0gICAgdXNpbmcgSW5zcGVjdG9yQXJyYXlCYXNlOjpwdXNoSW50ZWdlcjsKLSAgICB1c2lu
ZyBJbnNwZWN0b3JBcnJheUJhc2U6OnB1c2hEb3VibGU7Ci0gICAgdXNpbmcgSW5zcGVjdG9yQXJy
YXlCYXNlOjpwdXNoU3RyaW5nOwotICAgIHVzaW5nIEluc3BlY3RvckFycmF5QmFzZTo6cHVzaFZh
bHVlOwotICAgIHVzaW5nIEluc3BlY3RvckFycmF5QmFzZTo6cHVzaE9iamVjdDsKLSAgICB1c2lu
ZyBJbnNwZWN0b3JBcnJheUJhc2U6OnB1c2hBcnJheTsKLQotICAgIHVzaW5nIEluc3BlY3RvckFy
cmF5QmFzZTo6Z2V0OwotCi0gICAgdXNpbmcgSW5zcGVjdG9yQXJyYXlCYXNlOjpiZWdpbjsKLSAg
ICB1c2luZyBJbnNwZWN0b3JBcnJheUJhc2U6OmVuZDsKLX07Ci0KLQotaW5saW5lIEluc3BlY3Rv
ck9iamVjdEJhc2U6Oml0ZXJhdG9yIEluc3BlY3Rvck9iamVjdEJhc2U6OmZpbmQoY29uc3QgU3Ry
aW5nJiBuYW1lKQotewotICAgIHJldHVybiBtX2RhdGEuZmluZChuYW1lKTsKLX0KLQotaW5saW5l
IEluc3BlY3Rvck9iamVjdEJhc2U6OmNvbnN0X2l0ZXJhdG9yIEluc3BlY3Rvck9iamVjdEJhc2U6
OmZpbmQoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdAotewotICAgIHJldHVybiBtX2RhdGEuZmlu
ZChuYW1lKTsKLX0KLQotaW5saW5lIHZvaWQgSW5zcGVjdG9yT2JqZWN0QmFzZTo6c2V0Qm9vbGVh
bihjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wgdmFsdWUpCi17Ci0gICAgc2V0VmFsdWUobmFtZSwg
SW5zcGVjdG9yQmFzaWNWYWx1ZTo6Y3JlYXRlKHZhbHVlKSk7Ci19Ci0KLWlubGluZSB2b2lkIElu
c3BlY3Rvck9iamVjdEJhc2U6OnNldEludGVnZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBpbnQgdmFs
dWUpCi17Ci0gICAgc2V0VmFsdWUobmFtZSwgSW5zcGVjdG9yQmFzaWNWYWx1ZTo6Y3JlYXRlKHZh
bHVlKSk7Ci19Ci0KLWlubGluZSB2b2lkIEluc3BlY3Rvck9iamVjdEJhc2U6OnNldERvdWJsZShj
b25zdCBTdHJpbmcmIG5hbWUsIGRvdWJsZSB2YWx1ZSkKLXsKLSAgICBzZXRWYWx1ZShuYW1lLCBJ
bnNwZWN0b3JCYXNpY1ZhbHVlOjpjcmVhdGUodmFsdWUpKTsKLX0KLQotaW5saW5lIHZvaWQgSW5z
cGVjdG9yT2JqZWN0QmFzZTo6c2V0U3RyaW5nKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKLXsKLSAgICBzZXRWYWx1ZShuYW1lLCBJbnNwZWN0b3JTdHJpbmc6OmNyZWF0
ZSh2YWx1ZSkpOwotfQotCi1pbmxpbmUgdm9pZCBJbnNwZWN0b3JPYmplY3RCYXNlOjpzZXRWYWx1
ZShjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlKQot
ewotICAgIEFTU0VSVCh2YWx1ZSk7Ci0gICAgaWYgKG1fZGF0YS5zZXQobmFtZSwgdmFsdWUpLmlz
TmV3RW50cnkpCi0gICAgICAgIG1fb3JkZXIuYXBwZW5kKG5hbWUpOwotfQotCi1pbmxpbmUgdm9p
ZCBJbnNwZWN0b3JPYmplY3RCYXNlOjpzZXRPYmplY3QoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNz
UmVmUHRyPEluc3BlY3Rvck9iamVjdEJhc2U+IHZhbHVlKQotewotICAgIEFTU0VSVCh2YWx1ZSk7
Ci0gICAgaWYgKG1fZGF0YS5zZXQobmFtZSwgdmFsdWUpLmlzTmV3RW50cnkpCi0gICAgICAgIG1f
b3JkZXIuYXBwZW5kKG5hbWUpOwotfQotCi1pbmxpbmUgdm9pZCBJbnNwZWN0b3JPYmplY3RCYXNl
OjpzZXRBcnJheShjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXlC
YXNlPiB2YWx1ZSkKLXsKLSAgICBBU1NFUlQodmFsdWUpOwotICAgIGlmIChtX2RhdGEuc2V0KG5h
bWUsIHZhbHVlKS5pc05ld0VudHJ5KQotICAgICAgICBtX29yZGVyLmFwcGVuZChuYW1lKTsKLX0K
LQotaW5saW5lIHZvaWQgSW5zcGVjdG9yQXJyYXlCYXNlOjpwdXNoQm9vbGVhbihib29sIHZhbHVl
KQotewotICAgIG1fZGF0YS5hcHBlbmQoSW5zcGVjdG9yQmFzaWNWYWx1ZTo6Y3JlYXRlKHZhbHVl
KSk7Ci19Ci0KLWlubGluZSB2b2lkIEluc3BlY3RvckFycmF5QmFzZTo6cHVzaEludGVnZXIoaW50
IHZhbHVlKQotewotICAgIG1fZGF0YS5hcHBlbmQoSW5zcGVjdG9yQmFzaWNWYWx1ZTo6Y3JlYXRl
KHZhbHVlKSk7Ci19Ci0KLWlubGluZSB2b2lkIEluc3BlY3RvckFycmF5QmFzZTo6cHVzaERvdWJs
ZShkb3VibGUgdmFsdWUpCi17Ci0gICAgbV9kYXRhLmFwcGVuZChJbnNwZWN0b3JCYXNpY1ZhbHVl
OjpjcmVhdGUodmFsdWUpKTsKLX0KLQotaW5saW5lIHZvaWQgSW5zcGVjdG9yQXJyYXlCYXNlOjpw
dXNoU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgbV9kYXRhLmFwcGVuZChJbnNw
ZWN0b3JTdHJpbmc6OmNyZWF0ZSh2YWx1ZSkpOwotfQotCi1pbmxpbmUgdm9pZCBJbnNwZWN0b3JB
cnJheUJhc2U6OnB1c2hWYWx1ZShQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1ZSkKLXsK
LSAgICBBU1NFUlQodmFsdWUpOwotICAgIG1fZGF0YS5hcHBlbmQodmFsdWUpOwotfQotCi1pbmxp
bmUgdm9pZCBJbnNwZWN0b3JBcnJheUJhc2U6OnB1c2hPYmplY3QoUGFzc1JlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHZhbHVlKQotewotICAgIEFTU0VSVCh2YWx1ZSk7Ci0gICAgbV9kYXRhLmFwcGVu
ZCh2YWx1ZSk7Ci19Ci0KLWlubGluZSB2b2lkIEluc3BlY3RvckFycmF5QmFzZTo6cHVzaEFycmF5
KFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQotewotICAgIEFTU0VSVCh2YWx1ZSk7
Ci0gICAgbV9kYXRhLmFwcGVuZCh2YWx1ZSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgotCi0jZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVjdG9yVmFsdWVzX2gpCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL1NjcmlwdENhbGxGcmFtZS5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL1NjcmlwdENhbGxGcmFtZS5jcHAKaW5kZXggN2M5
NTBlOGI5MDdhYjMxYWYzZmJmNjQxZGY4NDBlNThmMWZiZTY2Zi4uYTcxMDI2NjZhZjQ0ZDA0NmY2
MGI4MGQyZDM2Y2Q5MWM0NWI3NmVjNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9TY3JpcHRDYWxsRnJhbWUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvU2NyaXB0Q2FsbEZyYW1lLmNwcApAQCAtMzIsNyArMzIsNyBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNjcmlwdENhbGxGcmFtZS5oIgogCi0jaW5jbHVkZSAi
SW5zcGVjdG9yVmFsdWVzLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oIgog
I2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewpAQCAt
NTgsNyArNTgsNyBAQCBib29sIFNjcmlwdENhbGxGcmFtZTo6aXNFcXVhbChjb25zdCBTY3JpcHRD
YWxsRnJhbWUmIG8pIGNvbnN0CiB9CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQotUGFzc1JlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDb25zb2xlOjpDYWxsRnJhbWU+IFNjcmlwdENhbGxGcmFt
ZTo6YnVpbGRJbnNwZWN0b3JPYmplY3QoKSBjb25zdAorUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpDb25zb2xlOjpDYWxsRnJhbWU+IFNjcmlwdENhbGxGcmFtZTo6YnVpbGRVbmNoZWNr
ZWRPYmplY3QoKSBjb25zdAogewogICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpDb25z
b2xlOjpDYWxsRnJhbWU6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRGdW5jdGlvbk5hbWUobV9mdW5j
dGlvbk5hbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL1Nj
cmlwdENhbGxGcmFtZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9TY3JpcHRD
YWxsRnJhbWUuaAppbmRleCBlOWMxMGZmOWUzYmI2YTdlODk2MjdlYzkzZmVjZWViMDZkZGVhYmQy
Li5hZTExMTAyNDVkODFiMzc4Yjg4NjE3MWM0NTdmY2QzZjdkYmE0MjE1IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL1NjcmlwdENhbGxGcmFtZS5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvU2NyaXB0Q2FsbEZyYW1lLmgKQEAgLTU0LDcg
KzU0LDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNFcXVhbChjb25zdCBTY3JpcHRDYWxsRnJhbWUm
KSBjb25zdDsKIAogI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgUGFzc1JlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpDb25zb2xlOjpDYWxsRnJhbWU+IGJ1aWxkSW5zcGVjdG9yT2JqZWN0KCkg
Y29uc3Q7CisgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDb25zb2xlOjpDYWxs
RnJhbWU+IGJ1aWxkVW5jaGVja2VkT2JqZWN0KCkgY29uc3Q7CiAjZW5kaWYKIAogcHJpdmF0ZToK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvU2NyaXB0Q2FsbFN0
YWNrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvU2NyaXB0Q2FsbFN0YWNr
LmNwcAppbmRleCA2ZjgxYTU4ZWRmY2NiM2E1NWJhYWVjNDNhMjM1NzgyOWFlZDU3ZGExLi5lNjM5
MGE4NWQ5N2RjYTRhNTU0MTk0YTQyMzQxM2M3MjE4YjQ4NWNjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL1NjcmlwdENhbGxTdGFjay5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9TY3JpcHRDYWxsU3RhY2suY3BwCkBAIC0zMiw3ICsz
Miw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU2NyaXB0Q2FsbFN0YWNrLmgi
CiAKLSNpbmNsdWRlICJJbnNwZWN0b3JWYWx1ZXMuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JQcm90
b2NvbFR5cGVzLmgiCiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC0xMDcsMTEgKzEwNywx
MSBAQCBib29sIFNjcmlwdENhbGxTdGFjazo6aXNFcXVhbChTY3JpcHRDYWxsU3RhY2sqIG8pIGNv
bnN0CiB9CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQotUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpDb25zb2xlOjpDYWxsRnJhbWU+PiBT
Y3JpcHRDYWxsU3RhY2s6OmJ1aWxkSW5zcGVjdG9yQXJyYXkoKSBjb25zdAorUGFzc1JlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpDb25zb2xlOjpD
YWxsRnJhbWU+PiBTY3JpcHRDYWxsU3RhY2s6OmJ1aWxkVW5jaGVja2VkQXJyYXkoKSBjb25zdAog
ewogICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpDb25zb2xlOjpDYWxsRnJhbWU+PiBmcmFtZXMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpB
cnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpDb25zb2xlOjpDYWxsRnJhbWU+OjpjcmVhdGUoKTsK
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZnJhbWVzLnNpemUoKTsgaSsrKQotICAgICAg
ICBmcmFtZXMtPmFkZEl0ZW0obV9mcmFtZXMuYXQoaSkuYnVpbGRJbnNwZWN0b3JPYmplY3QoKSk7
CisgICAgICAgIGZyYW1lcy0+YWRkSXRlbShtX2ZyYW1lcy5hdChpKS5idWlsZFVuY2hlY2tlZE9i
amVjdCgpKTsKICAgICByZXR1cm4gZnJhbWVzOwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL1NjcmlwdENhbGxTdGFjay5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9TY3JpcHRDYWxsU3RhY2suaAppbmRleCA2MWRhOWU0ODk5
OTNhODNjZTExMjQzYWM3ZWYyMmIwYjYyNDQ1YWZmLi40NjRjMzQ0NDA3ZTdiYjQwOWJiYWExYjU1
NTJjNjg2M2M2NWRkMDQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL1NjcmlwdENhbGxTdGFjay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3IvU2NyaXB0Q2FsbFN0YWNrLmgKQEAgLTYyLDcgKzYyLDcgQEAgcHVibGljOgogICAgIGJvb2wg
aXNFcXVhbChTY3JpcHRDYWxsU3RhY2sqKSBjb25zdDsKIAogI2lmIEVOQUJMRShJTlNQRUNUT1Ip
Ci0gICAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlBy
b3RvY29sOjpDb25zb2xlOjpDYWxsRnJhbWU+PiBidWlsZEluc3BlY3RvckFycmF5KCkgY29uc3Q7
CisgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlBy
b3RvY29sOjpDb25zb2xlOjpDYWxsRnJhbWU+PiBidWlsZFVuY2hlY2tlZEFycmF5KCkgY29uc3Q7
CiAjZW5kaWYKIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckFnZW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckFnZW50LmNwcAppbmRleCA5ZjQ2ZjU4OGZkOGZm
OTQ1YjM3MmFjYjlkNmJjYTNkNTRhMGQ1NDdiLi45MTBjOTU2YTA0MzdiNjMwMTgyZTdjNzU4ZmU5
NjBkZWRjNGVjNzhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L2FnZW50cy9JbnNwZWN0b3JBZ2VudC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQWdlbnQuY3BwCkBAIC0zNCw3ICszNCw3IEBACiAjaWYg
RU5BQkxFKElOU1BFQ1RPUikKIAogI2luY2x1ZGUgIkluc3BlY3RvckVudmlyb25tZW50LmgiCi0j
aW5jbHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yUHJvdG9jb2xU
eXBlcy5oIgogI2luY2x1ZGUgIlNjcmlwdFZhbHVlLmgiCiAKIG5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewpAQCAtOTQsNyArOTQsNyBAQCB2b2lkIEluc3BlY3RvckFnZW50Ojppbml0aWFsaXplZChFcnJv
clN0cmluZyYpCiAgICAgbV9lbnZpcm9ubWVudC5mcm9udGVuZEluaXRpYWxpemVkKCk7CiB9CiAK
LXZvaWQgSW5zcGVjdG9yQWdlbnQ6Omluc3BlY3QoUGFzc1JlZlB0cjxQcm90b2NvbDo6UnVudGlt
ZTo6UmVtb3RlT2JqZWN0PiBvYmplY3RUb0luc3BlY3QsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBoaW50cykKK3ZvaWQgSW5zcGVjdG9yQWdlbnQ6Omluc3BlY3QoUGFzc1JlZlB0cjxQcm90
b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiBvYmplY3RUb0luc3BlY3QsIFBhc3NSZWZQdHI8
UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gaGludHMpCiB7CiAgICAgaWYgKG1fZW5hYmxlZCAm
JiBtX2Zyb250ZW5kRGlzcGF0Y2hlcikgewogICAgICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+
aW5zcGVjdChvYmplY3RUb0luc3BlY3QsIGhpbnRzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckFnZW50LmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBZ2VudC5oCmluZGV4IDJmYjhm
MjUxZTdiMmYwNzFhYzJkMzQzZTE0ZWNiZDU1YTkxZTEzMjkuLjZjN2Y1NWE0ODg0NjMwMzI5Y2Iz
YTg2ZmEwOTFjMmE1MTVjY2M5MmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckFnZW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQWdlbnQuaApAQCAtNDMsNyArNDMsMTAgQEAg
bmFtZXNwYWNlIEluc3BlY3RvciB7CiBjbGFzcyBJbnNwZWN0b3JFbnZpcm9ubWVudDsKIGNsYXNz
IEluc3BlY3Rvckluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOwogY2xhc3MgSW5zcGVjdG9ySW5z
cGVjdG9yRnJvbnRlbmREaXNwYXRjaGVyczsKLWNsYXNzIEluc3BlY3Rvck9iamVjdDsKKworbmFt
ZXNwYWNlIFByb3RvY29sIHsKK2NsYXNzIFVuY2hlY2tlZE9iamVjdDsKK30KIAogdHlwZWRlZiBT
dHJpbmcgRXJyb3JTdHJpbmc7CiAKQEAgLTYxLDcgKzY0LDcgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgdm9pZCBkaXNhYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lk
IGluaXRpYWxpemVkKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGluc3BlY3Qo
UGFzc1JlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiBvYmplY3RUb0luc3Bl
Y3QsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBoaW50cyk7CisgICAgdm9pZCBpbnNwZWN0
KFBhc3NSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gb2JqZWN0VG9JbnNw
ZWN0LCBQYXNzUmVmUHRyPFByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IGhpbnRzKTsKICAgICB2
b2lkIGV2YWx1YXRlRm9yVGVzdEluRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBzY3JpcHQpOwogCiBw
cml2YXRlOgpAQCAtNjksNyArNzIsNyBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxJ
bnNwZWN0b3JJbnNwZWN0b3JGcm9udGVuZERpc3BhdGNoZXI+IG1fZnJvbnRlbmREaXNwYXRjaGVy
OwogICAgIFJlZlB0cjxJbnNwZWN0b3JJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNr
ZW5kRGlzcGF0Y2hlcjsKICAgICBWZWN0b3I8U3RyaW5nPiBtX3BlbmRpbmdFdmFsdWF0ZVRlc3RD
b21tYW5kczsKLSAgICBzdGQ6OnBhaXI8UmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVP
YmplY3Q+LCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0Pj4gbV9wZW5kaW5nSW5zcGVjdERhdGE7Cisg
ICAgc3RkOjpwYWlyPFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiwgUmVm
UHRyPFByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+PiBtX3BlbmRpbmdJbnNwZWN0RGF0YTsKICAg
ICBib29sIG1fZW5hYmxlZDsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAK
aW5kZXggMTY5MGEzNzM5M2U3NmQwZjE3ZTZmMGZiNGY0MDgwZTY0ZmExZWQ5YS4uNzM0NmM3MTk5
NDUwYjNlZDYxNzlkYThiNGJkYmM3Y2FhN2MyNDk5OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRGVidWdn
ZXJBZ2VudC5jcHAKQEAgLTM1LDcgKzM1LDcgQEAKICNpbmNsdWRlICJDb250ZW50U2VhcmNoVXRp
bGl0aWVzLmgiCiAjaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHQuaCIKICNpbmNsdWRlICJJbmplY3Rl
ZFNjcmlwdE1hbmFnZXIuaCIKLSNpbmNsdWRlICJJbnNwZWN0b3JWYWx1ZXMuaCIKKyNpbmNsdWRl
ICJJbnNwZWN0b3JQcm90b2NvbFR5cGVzLmgiCiAjaW5jbHVkZSAiUmVndWxhckV4cHJlc3Npb24u
aCIKICNpbmNsdWRlICJTY3JpcHREZWJ1Z1NlcnZlci5oIgogI2luY2x1ZGUgIlNjcmlwdE9iamVj
dC5oIgpAQCAtMTQ4LDkgKzE0OCw5IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6aGFu
ZGxlQ29uc29sZUFzc2VydCgpCiAgICAgICAgIGJyZWFrUHJvZ3JhbShJbnNwZWN0b3JEZWJ1Z2dl
ckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVhc29uOjpBc3NlcnQsIG51bGxwdHIpOwogfQogCi1zdGF0
aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9yQnJlYWtwb2ludENv
b2tpZShjb25zdCBTdHJpbmcmIHVybCwgaW50IGxpbmVOdW1iZXIsIGludCBjb2x1bW5OdW1iZXIs
IGNvbnN0IFN0cmluZyYgY29uZGl0aW9uLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+JiBhY3Rpb25z
LCBib29sIGlzUmVnZXgsIGJvb2wgYXV0b0NvbnRpbnVlKQorc3RhdGljIFBhc3NSZWZQdHI8UHJv
dG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gYnVpbGRPYmplY3RGb3JCcmVha3BvaW50Q29va2llKGNv
bnN0IFN0cmluZyYgdXJsLCBpbnQgbGluZU51bWJlciwgaW50IGNvbHVtbk51bWJlciwgY29uc3Qg
U3RyaW5nJiBjb25kaXRpb24sIFJlZlB0cjxQcm90b2NvbDo6VW5jaGVja2VkQXJyYXk+JiBhY3Rp
b25zLCBib29sIGlzUmVnZXgsIGJvb2wgYXV0b0NvbnRpbnVlKQogewotICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IGJyZWFrcG9pbnRPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OworICAgIFJlZlB0cjxQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBicmVha3BvaW50T2JqZWN0
ID0gUHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdDo6Y3JlYXRlKCk7CiAgICAgYnJlYWtwb2ludE9i
amVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgidXJsIiksIHVybCk7CiAgICAgYnJlYWtwb2lu
dE9iamVjdC0+c2V0SW50ZWdlcihBU0NJSUxpdGVyYWwoImxpbmVOdW1iZXIiKSwgbGluZU51bWJl
cik7CiAgICAgYnJlYWtwb2ludE9iamVjdC0+c2V0SW50ZWdlcihBU0NJSUxpdGVyYWwoImNvbHVt
bk51bWJlciIpLCBjb2x1bW5OdW1iZXIpOwpAQCAtMTk1LDcgKzE5NSw3IEBAIHN0YXRpYyBib29s
IGJyZWFrcG9pbnRBY3Rpb25UeXBlRm9yU3RyaW5nKGNvbnN0IFN0cmluZyYgdHlwZVN0cmluZywg
U2NyaXB0QnJlYWtwCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIEluc3BlY3RvckRlYnVn
Z2VyQWdlbnQ6OmJyZWFrcG9pbnRBY3Rpb25zRnJvbVByb3RvY29sKEVycm9yU3RyaW5nJiBlcnJv
clN0cmluZywgUmVmUHRyPEluc3BlY3RvckFycmF5PiYgYWN0aW9ucywgQnJlYWtwb2ludEFjdGlv
bnMqIHJlc3VsdCkKK2Jvb2wgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6YnJlYWtwb2ludEFjdGlv
bnNGcm9tUHJvdG9jb2woRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBSZWZQdHI8UHJvdG9jb2w6
OlVuY2hlY2tlZEFycmF5PiYgYWN0aW9ucywgQnJlYWtwb2ludEFjdGlvbnMqIHJlc3VsdCkKIHsK
ICAgICBpZiAoIWFjdGlvbnMpCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjA2LDggKzIwNiw4
IEBAIGJvb2wgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6YnJlYWtwb2ludEFjdGlvbnNGcm9tUHJv
dG9jb2woRXJyb3JTdHJpbmcmIGVycm9yU3RyCiAKICAgICByZXN1bHQtPnJlc2VydmVDYXBhY2l0
eShhY3Rpb25zTGVuZ3RoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYWN0aW9uc0xl
bmd0aDsgKytpKSB7Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUgPSBhY3Rp
b25zLT5nZXQoaSk7Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG9iamVjdDsKKyAg
ICAgICAgUmVmUHRyPFByb3RvY29sOjpVbmNoZWNrZWRWYWx1ZT4gdmFsdWUgPSBhY3Rpb25zLT5n
ZXQoaSk7CisgICAgICAgIFJlZlB0cjxQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBvYmplY3Q7
CiAgICAgICAgIGlmICghdmFsdWUtPmFzT2JqZWN0KG9iamVjdCkpIHsKICAgICAgICAgICAgIGVy
cm9yU3RyaW5nID0gQVNDSUlMaXRlcmFsKCJCcmVha3BvaW50QWN0aW9uIG9mIGluY29ycmVjdCB0
eXBlLCBleHBlY3RlZCBvYmplY3QiKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTIz
OSw3ICsyMzksNyBAQCBib29sIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmJyZWFrcG9pbnRBY3Rp
b25zRnJvbVByb3RvY29sKEVycm9yU3RyaW5nJiBlcnJvclN0cgogICAgIHJldHVybiB0cnVlOwog
fQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9pbnRCeVVybChFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcqIGNvbnN0
IG9wdGlvbmFsVVJMLCBjb25zdCBTdHJpbmcqIGNvbnN0IG9wdGlvbmFsVVJMUmVnZXgsIGNvbnN0
IGludCogY29uc3Qgb3B0aW9uYWxDb2x1bW5OdW1iZXIsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+KiBvcHRpb25zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2lu
dElkKiBvdXRCcmVha3BvaW50SWRlbnRpZmllciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpMb2NhdGlvbj4+JiBsb2NhdGlv
bnMpCit2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9pbnRCeVVybChFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcqIGNvbnN0
IG9wdGlvbmFsVVJMLCBjb25zdCBTdHJpbmcqIGNvbnN0IG9wdGlvbmFsVVJMUmVnZXgsIGNvbnN0
IGludCogY29uc3Qgb3B0aW9uYWxDb2x1bW5OdW1iZXIsIGNvbnN0IFJlZlB0cjxQcm90b2NvbDo6
VW5jaGVja2VkT2JqZWN0Piogb3B0aW9ucywgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6
OkJyZWFrcG9pbnRJZCogb3V0QnJlYWtwb2ludElkZW50aWZpZXIsIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6TG9jYXRpb24+
PiYgbG9jYXRpb25zKQogewogICAgIGxvY2F0aW9ucyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFy
cmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpMb2NhdGlvbj46OmNyZWF0ZSgpOwog
ICAgIGlmICghb3B0aW9uYWxVUkwgPT0gIW9wdGlvbmFsVVJMUmVnZXgpIHsKQEAgLTI1OSw3ICsy
NTksNyBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9pbnRCeVVybChF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBsaQogCiAgICAgU3RyaW5nIGNvbmRpdGlvbiA9
IGVtcHR5U3RyaW5nKCk7CiAgICAgYm9vbCBhdXRvQ29udGludWUgPSBmYWxzZTsKLSAgICBSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+IGFjdGlvbnM7CisgICAgUmVmUHRyPFByb3RvY29sOjpVbmNoZWNr
ZWRBcnJheT4gYWN0aW9uczsKICAgICBpZiAob3B0aW9ucykgewogICAgICAgICAoKm9wdGlvbnMp
LT5nZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJjb25kaXRpb24iKSwgY29uZGl0aW9uKTsKICAgICAg
ICAgKCpvcHRpb25zKS0+Z2V0Qm9vbGVhbihBU0NJSUxpdGVyYWwoImF1dG9Db250aW51ZSIpLCBh
dXRvQ29udGludWUpOwpAQCAtMjg1LDcgKzI4NSw3IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJB
Z2VudDo6c2V0QnJlYWtwb2ludEJ5VXJsKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IGxp
CiAgICAgKm91dEJyZWFrcG9pbnRJZGVudGlmaWVyID0gYnJlYWtwb2ludElkZW50aWZpZXI7CiB9
CiAKLXN0YXRpYyBib29sIHBhcnNlTG9jYXRpb24oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBJ
bnNwZWN0b3JPYmplY3QmIGxvY2F0aW9uLCBKU0M6OlNvdXJjZUlEJiBzb3VyY2VJRCwgdW5zaWdu
ZWQmIGxpbmVOdW1iZXIsIHVuc2lnbmVkJiBjb2x1bW5OdW1iZXIpCitzdGF0aWMgYm9vbCBwYXJz
ZUxvY2F0aW9uKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgUHJvdG9jb2w6OlVuY2hlY2tlZE9i
amVjdCYgbG9jYXRpb24sIEpTQzo6U291cmNlSUQmIHNvdXJjZUlELCB1bnNpZ25lZCYgbGluZU51
bWJlciwgdW5zaWduZWQmIGNvbHVtbk51bWJlcikKIHsKICAgICBTdHJpbmcgc2NyaXB0SURTdHI7
CiAgICAgaWYgKCFsb2NhdGlvbi5nZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJzY3JpcHRJZCIpLCBz
Y3JpcHRJRFN0cikgfHwgIWxvY2F0aW9uLmdldEludGVnZXIoQVNDSUlMaXRlcmFsKCJsaW5lTnVt
YmVyIiksIGxpbmVOdW1iZXIpKSB7CkBAIC0zMDAsNyArMzAwLDcgQEAgc3RhdGljIGJvb2wgcGFy
c2VMb2NhdGlvbihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIEluc3BlY3Rvck9iamVjdCYgbG9j
YXRpb24sIEoKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50OjpzZXRCcmVha3BvaW50KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4mIGxvY2F0aW9uLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
Piogb3B0aW9ucywgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRJZCog
b3V0QnJlYWtwb2ludElkZW50aWZpZXIsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1
Z2dlcjo6TG9jYXRpb24+JiBhY3R1YWxMb2NhdGlvbikKK3ZvaWQgSW5zcGVjdG9yRGVidWdnZXJB
Z2VudDo6c2V0QnJlYWtwb2ludChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0
cjxQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiYgbG9jYXRpb24sIGNvbnN0IFJlZlB0cjxQcm90
b2NvbDo6VW5jaGVja2VkT2JqZWN0Piogb3B0aW9ucywgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGVi
dWdnZXI6OkJyZWFrcG9pbnRJZCogb3V0QnJlYWtwb2ludElkZW50aWZpZXIsIFJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6TG9jYXRpb24+JiBhY3R1YWxMb2NhdGlvbikKIHsK
ICAgICBKU0M6OlNvdXJjZUlEIHNvdXJjZUlEOwogICAgIHVuc2lnbmVkIGxpbmVOdW1iZXI7CkBA
IC0zMTAsNyArMzEwLDcgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRCcmVha3Bv
aW50KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgUmVmUHQKIAogICAgIFN0cmluZyBj
b25kaXRpb24gPSBlbXB0eVN0cmluZygpOwogICAgIGJvb2wgYXV0b0NvbnRpbnVlID0gZmFsc2U7
Ci0gICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBhY3Rpb25zOworICAgIFJlZlB0cjxQcm90b2Nv
bDo6VW5jaGVja2VkQXJyYXk+IGFjdGlvbnM7CiAgICAgaWYgKG9wdGlvbnMpIHsKICAgICAgICAg
KCpvcHRpb25zKS0+Z2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgiY29uZGl0aW9uIiksIGNvbmRpdGlv
bik7CiAgICAgICAgICgqb3B0aW9ucyktPmdldEJvb2xlYW4oQVNDSUlMaXRlcmFsKCJhdXRvQ29u
dGludWUiKSwgYXV0b0NvbnRpbnVlKTsKQEAgLTM1MCw3ICszNTAsNyBAQCB2b2lkIEluc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQ6OnJlbW92ZUJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJp
bmcmIGJyZWFrcAogICAgIH0KIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpjb250
aW51ZVRvTG9jYXRpb24oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiYgbG9jYXRpb24pCit2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmNv
bnRpbnVlVG9Mb2NhdGlvbihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxQ
cm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiYgbG9jYXRpb24pCiB7CiAgICAgaWYgKG1fY29udGlu
dWVUb0xvY2F0aW9uQnJlYWtwb2ludElEICE9IEpTQzo6bm9CcmVha3BvaW50SUQpIHsKICAgICAg
ICAgc2NyaXB0RGVidWdTZXJ2ZXIoKS5yZW1vdmVCcmVha3BvaW50KG1fY29udGludWVUb0xvY2F0
aW9uQnJlYWtwb2ludElEKTsKQEAgLTQyOSw3ICs0MjksNyBAQCB2b2lkIEluc3BlY3RvckRlYnVn
Z2VyQWdlbnQ6OmdldEZ1bmN0aW9uRGV0YWlscyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNv
bnN0CiAgICAgaW5qZWN0ZWRTY3JpcHQuZ2V0RnVuY3Rpb25EZXRhaWxzKGVycm9yU3RyaW5nLCBm
dW5jdGlvbklkLCAmZGV0YWlscyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6
c2NoZWR1bGVQYXVzZU9uTmV4dFN0YXRlbWVudChJbnNwZWN0b3JEZWJ1Z2dlckZyb250ZW5kRGlz
cGF0Y2hlcjo6UmVhc29uIGJyZWFrUmVhc29uLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
ZGF0YSkKK3ZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2NoZWR1bGVQYXVzZU9uTmV4dFN0
YXRlbWVudChJbnNwZWN0b3JEZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVhc29uIGJyZWFr
UmVhc29uLCBQYXNzUmVmUHRyPFByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IGRhdGEpCiB7CiAg
ICAgaWYgKG1famF2YVNjcmlwdFBhdXNlU2NoZWR1bGVkKQogICAgICAgICByZXR1cm47CkBAIC01
NDcsNyArNTQ3LDcgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRPdmVybGF5TWVz
c2FnZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyopCiB2b2lkIEluc3BlY3RvckRlYnVnZ2Vy
QWdlbnQ6OnNjcmlwdEV4ZWN1dGlvbkJsb2NrZWRCeUNTUChjb25zdCBTdHJpbmcmIGRpcmVjdGl2
ZVRleHQpCiB7CiAgICAgaWYgKHNjcmlwdERlYnVnU2VydmVyKCkucGF1c2VPbkV4Y2VwdGlvbnNT
dGF0ZSgpICE9IEpTQzo6RGVidWdnZXI6OkRvbnRQYXVzZU9uRXhjZXB0aW9ucykgewotICAgICAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkaXJlY3RpdmUgPSBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpOworICAgICAgICBSZWZQdHI8UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gZGlyZWN0
aXZlID0gUHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgIGRpcmVj
dGl2ZS0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgiZGlyZWN0aXZlVGV4dCIpLCBkaXJlY3RpdmVU
ZXh0KTsKICAgICAgICAgYnJlYWtQcm9ncmFtKEluc3BlY3RvckRlYnVnZ2VyRnJvbnRlbmREaXNw
YXRjaGVyOjpSZWFzb246OkNTUFZpb2xhdGlvbiwgZGlyZWN0aXZlLnJlbGVhc2UoKSk7CiAgICAg
fQpAQCAtNTkzLDcgKzU5Myw3IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkUGFy
c2VTb3VyY2UoSlNDOjpTb3VyY2VJRCBzb3VyY2VJRCwgY29uc3QgU2NyaXB0CiAgICAgICAgIHJl
dHVybjsKIAogICAgIGZvciAoYXV0byBpdCA9IG1famF2YVNjcmlwdEJyZWFrcG9pbnRzLmJlZ2lu
KCksIGVuZCA9IG1famF2YVNjcmlwdEJyZWFrcG9pbnRzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKLSAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnJlYWtwb2ludE9iamVjdDsKKyAg
ICAgICAgUmVmUHRyPFByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IGJyZWFrcG9pbnRPYmplY3Q7
CiAgICAgICAgIGlmICghaXQtPnZhbHVlLT5hc09iamVjdChicmVha3BvaW50T2JqZWN0KSkKICAg
ICAgICAgICAgIHJldHVybjsKIApAQCAtNjEwLDcgKzYxMCw3IEBAIHZvaWQgSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudDo6ZGlkUGFyc2VTb3VyY2UoSlNDOjpTb3VyY2VJRCBzb3VyY2VJRCwgY29uc3Qg
U2NyaXB0CiAgICAgICAgIGJyZWFrcG9pbnRPYmplY3QtPmdldFN0cmluZyhBU0NJSUxpdGVyYWwo
ImNvbmRpdGlvbiIpLCBicmVha3BvaW50LmNvbmRpdGlvbik7CiAgICAgICAgIGJyZWFrcG9pbnRP
YmplY3QtPmdldEJvb2xlYW4oQVNDSUlMaXRlcmFsKCJhdXRvQ29udGludWUiKSwgYnJlYWtwb2lu
dC5hdXRvQ29udGludWUpOwogICAgICAgICBFcnJvclN0cmluZyBlcnJvclN0cmluZzsKLSAgICAg
ICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBhY3Rpb25zID0gYnJlYWtwb2ludE9iamVjdC0+Z2V0
QXJyYXkoQVNDSUlMaXRlcmFsKCJhY3Rpb25zIikpOworICAgICAgICBSZWZQdHI8UHJvdG9jb2w6
OlVuY2hlY2tlZEFycmF5PiBhY3Rpb25zID0gYnJlYWtwb2ludE9iamVjdC0+Z2V0QXJyYXkoQVND
SUlMaXRlcmFsKCJhY3Rpb25zIikpOwogICAgICAgICBpZiAoIWJyZWFrcG9pbnRBY3Rpb25zRnJv
bVByb3RvY29sKGVycm9yU3RyaW5nLCBhY3Rpb25zLCAmYnJlYWtwb2ludC5hY3Rpb25zKSkgewog
ICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBjb250aW51ZTsK
QEAgLTY4NCw3ICs2ODQsNyBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZENvbnRp
bnVlKCkKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+cmVzdW1lZCgpOwogfQogCi12b2lkIElu
c3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmJyZWFrUHJvZ3JhbShJbnNwZWN0b3JEZWJ1Z2dlckZyb250
ZW5kRGlzcGF0Y2hlcjo6UmVhc29uIGJyZWFrUmVhc29uLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gZGF0YSkKK3ZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6YnJlYWtQcm9ncmFtKElu
c3BlY3RvckRlYnVnZ2VyRnJvbnRlbmREaXNwYXRjaGVyOjpSZWFzb24gYnJlYWtSZWFzb24sIFBh
c3NSZWZQdHI8UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gZGF0YSkKIHsKICAgICBtX2JyZWFr
UmVhc29uID0gYnJlYWtSZWFzb247CiAgICAgbV9icmVha0F1eERhdGEgPSBkYXRhOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yRGVidWdnZXJBZ2VudC5oCmluZGV4IDhiM2ZiNjY0MWQyMzI3MzdhZWNmZTY4ZjFmODA3
YzFlYTkzNjIyZGIuLmMzYjM4MjdkZjhjNWJiOGU2NzYxMmMwZTRhZWM3YTc3ZTExOGQ5MzEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmgKQEAgLTQ5LDExICs0OSwxNCBAQAogCiBuYW1l
c3BhY2UgSW5zcGVjdG9yIHsKIAorbmFtZXNwYWNlIFByb3RvY29sIHsKK2NsYXNzIFVuY2hlY2tl
ZEFycmF5OworY2xhc3MgVW5jaGVja2VkT2JqZWN0OworY2xhc3MgVW5jaGVja2VkVmFsdWU7Cit9
CisKIGNsYXNzIEluamVjdGVkU2NyaXB0OwogY2xhc3MgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOwot
Y2xhc3MgSW5zcGVjdG9yQXJyYXk7Ci1jbGFzcyBJbnNwZWN0b3JPYmplY3Q7Ci1jbGFzcyBJbnNw
ZWN0b3JWYWx1ZTsKIGNsYXNzIFNjcmlwdERlYnVnU2VydmVyOwogdHlwZWRlZiBTdHJpbmcgRXJy
b3JTdHJpbmc7CiAKQEAgLTcxLDEwICs3NCwxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lk
IGVuYWJsZShFcnJvclN0cmluZyYpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBkaXNhYmxl
KEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHNldEJyZWFrcG9pbnRz
QWN0aXZlKEVycm9yU3RyaW5nJiwgYm9vbCBhY3RpdmUpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwg
dm9pZCBzZXRCcmVha3BvaW50QnlVcmwoRXJyb3JTdHJpbmcmLCBpbnQgbGluZU51bWJlciwgY29u
c3QgU3RyaW5nKiBvcHRpb25hbFVSTCwgY29uc3QgU3RyaW5nKiBvcHRpb25hbFVSTFJlZ2V4LCBj
b25zdCBpbnQqIG9wdGlvbmFsQ29sdW1uTnVtYmVyLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJ
bnNwZWN0b3JPYmplY3Q+KiBvcHRpb25zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6
QnJlYWtwb2ludElkKiwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpMb2NhdGlvbj4+JiBsb2NhdGlvbnMpIG92ZXJyaWRlOwot
ICAgIHZpcnR1YWwgdm9pZCBzZXRCcmVha3BvaW50KEVycm9yU3RyaW5nJiwgY29uc3QgUmVmUHRy
PEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYgbG9jYXRpb24sIGNvbnN0IFJlZlB0cjxJbnNw
ZWN0b3I6Okluc3BlY3Rvck9iamVjdD4qIG9wdGlvbnMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRl
YnVnZ2VyOjpCcmVha3BvaW50SWQqLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdn
ZXI6OkxvY2F0aW9uPiYgYWN0dWFsTG9jYXRpb24pIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9p
ZCBzZXRCcmVha3BvaW50QnlVcmwoRXJyb3JTdHJpbmcmLCBpbnQgbGluZU51bWJlciwgY29uc3Qg
U3RyaW5nKiBvcHRpb25hbFVSTCwgY29uc3QgU3RyaW5nKiBvcHRpb25hbFVSTFJlZ2V4LCBjb25z
dCBpbnQqIG9wdGlvbmFsQ29sdW1uTnVtYmVyLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6VW5jaGVja2VkT2JqZWN0Piogb3B0aW9ucywgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGVi
dWdnZXI6OkJyZWFrcG9pbnRJZCosIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJ
bnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6TG9jYXRpb24+PiYgbG9jYXRpb25zKSBvdmVy
cmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QnJlYWtwb2ludChFcnJvclN0cmluZyYsIGNvbnN0
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+JiBsb2NhdGlvbiwg
Y29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4qIG9wdGlv
bnMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50SWQqLCBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkxvY2F0aW9uPiYgYWN0dWFsTG9jYXRpb24p
IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVCcmVha3BvaW50KEVycm9yU3RyaW5n
JiwgY29uc3QgU3RyaW5nJiBicmVha3BvaW50SWRlbnRpZmllcikgb3ZlcnJpZGU7Ci0gICAgdmly
dHVhbCB2b2lkIGNvbnRpbnVlVG9Mb2NhdGlvbihFcnJvclN0cmluZyYsIGNvbnN0IFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+JiBsb2NhdGlvbikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGNv
bnRpbnVlVG9Mb2NhdGlvbihFcnJvclN0cmluZyYsIGNvbnN0IFJlZlB0cjxQcm90b2NvbDo6VW5j
aGVja2VkT2JqZWN0PiYgbG9jYXRpb24pIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBzZWFy
Y2hJbkNvbnRlbnQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHNjcmlwdElELCBjb25zdCBT
dHJpbmcmIHF1ZXJ5LCBjb25zdCBib29sKiBvcHRpb25hbENhc2VTZW5zaXRpdmUsIGNvbnN0IGJv
b2wqIG9wdGlvbmFsSXNSZWdleCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkdlbmVyaWNUeXBlczo6U2VhcmNoTWF0Y2g+PiYpIG92ZXJyaWRl
OwogICAgIHZpcnR1YWwgdm9pZCBnZXRTY3JpcHRTb3VyY2UoRXJyb3JTdHJpbmcmLCBjb25zdCBT
dHJpbmcmIHNjcmlwdElELCBTdHJpbmcqIHNjcmlwdFNvdXJjZSkgb3ZlcnJpZGU7CiAgICAgdmly
dHVhbCB2b2lkIGdldEZ1bmN0aW9uRGV0YWlscyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYg
ZnVuY3Rpb25JZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpGdW5jdGlv
bkRldGFpbHM+Jikgb3ZlcnJpZGU7CkBAIC05MSw5ICs5NCw5IEBAIHB1YmxpYzoKICAgICAKICAg
ICB2b2lkIGhhbmRsZUNvbnNvbGVBc3NlcnQoKTsKIAotICAgIHZvaWQgc2NoZWR1bGVQYXVzZU9u
TmV4dFN0YXRlbWVudChJbnNwZWN0b3JEZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVhc29u
IGJyZWFrUmVhc29uLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGF0YSk7CisgICAgdm9p
ZCBzY2hlZHVsZVBhdXNlT25OZXh0U3RhdGVtZW50KEluc3BlY3RvckRlYnVnZ2VyRnJvbnRlbmRE
aXNwYXRjaGVyOjpSZWFzb24gYnJlYWtSZWFzb24sIFBhc3NSZWZQdHI8UHJvdG9jb2w6OlVuY2hl
Y2tlZE9iamVjdD4gZGF0YSk7CiAgICAgdm9pZCBjYW5jZWxQYXVzZU9uTmV4dFN0YXRlbWVudCgp
OwotICAgIHZvaWQgYnJlYWtQcm9ncmFtKEluc3BlY3RvckRlYnVnZ2VyRnJvbnRlbmREaXNwYXRj
aGVyOjpSZWFzb24gYnJlYWtSZWFzb24sIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkYXRh
KTsKKyAgICB2b2lkIGJyZWFrUHJvZ3JhbShJbnNwZWN0b3JEZWJ1Z2dlckZyb250ZW5kRGlzcGF0
Y2hlcjo6UmVhc29uIGJyZWFrUmVhc29uLCBQYXNzUmVmUHRyPFByb3RvY29sOjpVbmNoZWNrZWRP
YmplY3Q+IGRhdGEpOwogICAgIHZvaWQgc2NyaXB0RXhlY3V0aW9uQmxvY2tlZEJ5Q1NQKGNvbnN0
IFN0cmluZyYgZGlyZWN0aXZlVGV4dCk7CiAKICAgICBjbGFzcyBMaXN0ZW5lciB7CkBAIC0xNDMs
MTEgKzE0NiwxMSBAQCBwcml2YXRlOgogICAgIHZvaWQgY2xlYXJJbnNwZWN0b3JCcmVha3BvaW50
U3RhdGUoKTsKICAgICB2b2lkIGNsZWFyQnJlYWtEZXRhaWxzKCk7CiAKLSAgICBib29sIGJyZWFr
cG9pbnRBY3Rpb25zRnJvbVByb3RvY29sKEVycm9yU3RyaW5nJiwgUmVmUHRyPEluc3BlY3RvckFy
cmF5PiYgYWN0aW9ucywgQnJlYWtwb2ludEFjdGlvbnMqIHJlc3VsdCk7CisgICAgYm9vbCBicmVh
a3BvaW50QWN0aW9uc0Zyb21Qcm90b2NvbChFcnJvclN0cmluZyYsIFJlZlB0cjxQcm90b2NvbDo6
VW5jaGVja2VkQXJyYXk+JiBhY3Rpb25zLCBCcmVha3BvaW50QWN0aW9ucyogcmVzdWx0KTsKIAog
ICAgIHR5cGVkZWYgSGFzaE1hcDxKU0M6OlNvdXJjZUlELCBTY3JpcHQ+IFNjcmlwdHNNYXA7CiAg
ICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgVmVjdG9yPEpTQzo6QnJlYWtwb2ludElEPj4gQnJl
YWtwb2ludElkZW50aWZpZXJUb0RlYnVnU2VydmVyQnJlYWtwb2ludElEc01hcDsKLSAgICB0eXBl
ZGVmIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0Pj4gQnJlYWtwb2ludElk
ZW50aWZpZXJUb0JyZWFrcG9pbnRNYXA7CisgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgUmVm
UHRyPFByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+PiBCcmVha3BvaW50SWRlbnRpZmllclRvQnJl
YWtwb2ludE1hcDsKIAogICAgIEluamVjdGVkU2NyaXB0TWFuYWdlciogbV9pbmplY3RlZFNjcmlw
dE1hbmFnZXI7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEluc3BlY3RvckRlYnVnZ2VyRnJvbnRlbmRE
aXNwYXRjaGVyPiBtX2Zyb250ZW5kRGlzcGF0Y2hlcjsKQEAgLTE2MCw3ICsxNjMsNyBAQCBwcml2
YXRlOgogICAgIEJyZWFrcG9pbnRJZGVudGlmaWVyVG9CcmVha3BvaW50TWFwIG1famF2YVNjcmlw
dEJyZWFrcG9pbnRzOwogICAgIEpTQzo6QnJlYWtwb2ludElEIG1fY29udGludWVUb0xvY2F0aW9u
QnJlYWtwb2ludElEOwogICAgIEluc3BlY3RvckRlYnVnZ2VyRnJvbnRlbmREaXNwYXRjaGVyOjpS
ZWFzb24gbV9icmVha1JlYXNvbjsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX2JyZWFr
QXV4RGF0YTsKKyAgICBSZWZQdHI8UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gbV9icmVha0F1
eERhdGE7CiAgICAgYm9vbCBtX2VuYWJsZWQ7CiAgICAgYm9vbCBtX2phdmFTY3JpcHRQYXVzZVNj
aGVkdWxlZDsKICAgICBpbnQgbV9uZXh0UHJvYmVTYW1wbGVJZDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JSdW50
aW1lQWdlbnQuY3BwCmluZGV4IGMwMGYzZmU1MmQzMTFlNmU0ZTBiZjc3OTM0N2Y5ODRkYmIwYTc5
MmUuLjYwNjA3YmMwY2ZlMDI2YmRhYTJkMWZjOWE0ODdhYjJhZDI3N2JiM2EgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRpbWVB
Z2VudC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yUnVudGltZUFnZW50LmNwcApAQCAtMzgsNyArMzgsNyBAQAogI2luY2x1ZGUgIkhlYXBJ
dGVyYXRpb25TY29wZS5oIgogI2luY2x1ZGUgIkluamVjdGVkU2NyaXB0LmgiCiAjaW5jbHVkZSAi
SW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmgiCi0jaW5jbHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgiCisj
aW5jbHVkZSAiSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oIgogI2luY2x1ZGUgIkpTTG9jay5oIgog
I2luY2x1ZGUgIlBhcnNlckVycm9yLmgiCiAjaW5jbHVkZSAiU2NyaXB0RGVidWdTZXJ2ZXIuaCIK
QEAgLTEzNyw3ICsxMzcsNyBAQCB2b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6ZXZhbHVhdGUo
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGV4cAogICAgIH0KIH0KIAot
dm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmNhbGxGdW5jdGlvbk9uKEVycm9yU3RyaW5nJiBl
cnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgY29uc3QgU3RyaW5nJiBleHByZXNz
aW9uLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBjb25zdCBvcHRpb25hbEFyZ3VtZW50
cywgY29uc3QgYm9vbCogY29uc3QgZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xl
LCBjb25zdCBib29sKiBjb25zdCByZXR1cm5CeVZhbHVlLCBjb25zdCBib29sKiBnZW5lcmF0ZVBy
ZXZpZXcsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+
JiByZXN1bHQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxib29sPiogd2FzVGhyb3du
KQordm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmNhbGxGdW5jdGlvbk9uKEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgY29uc3QgU3RyaW5nJiBleHBy
ZXNzaW9uLCBjb25zdCBSZWZQdHI8UHJvdG9jb2w6OlVuY2hlY2tlZEFycmF5PiogY29uc3Qgb3B0
aW9uYWxBcmd1bWVudHMsIGNvbnN0IGJvb2wqIGNvbnN0IGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNB
bmRNdXRlQ29uc29sZSwgY29uc3QgYm9vbCogY29uc3QgcmV0dXJuQnlWYWx1ZSwgY29uc3QgYm9v
bCogZ2VuZXJhdGVQcmV2aWV3LCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6
UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8Ym9v
bD4qIHdhc1Rocm93bikKIHsKICAgICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IG1f
aW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLT5pbmplY3RlZFNjcmlwdEZvck9iamVjdElkKG9iamVjdElk
KTsKICAgICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKSB7CkBAIC0xOTcsNyArMTk3
LDcgQEAgdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OnJ1bihFcnJvclN0cmluZyYpCiB7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjpnZXRSdW50aW1lVHlwZXNGb3JWYXJpYWJs
ZXNBdE9mZnNldHMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8SW5zcGVj
dG9yOjpJbnNwZWN0b3JBcnJheT4mIGxvY2F0aW9ucywgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR5cGVEZXNjcmlwdGlvbj4+
JiB0eXBlRGVzY3JpcHRpb25zKQordm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmdldFJ1bnRp
bWVUeXBlc0ZvclZhcmlhYmxlc0F0T2Zmc2V0cyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNv
bnN0IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRBcnJheT4mIGxvY2F0aW9u
cywgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlJ1bnRpbWU6OlR5cGVEZXNjcmlwdGlvbj4+JiB0eXBlRGVzY3JpcHRpb25zKQogewogICAgIHN0
YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKICAgICBWTSYgdm0gPSBnbG9iYWxWTSgp
OwpAQCAtMjExLDggKzIxMSw4IEBAIHZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjpnZXRSdW50
aW1lVHlwZXNGb3JWYXJpYWJsZXNBdE9mZnNldHMoRXJyb3JTdHJpbmcmIGVyCiAgICAgdm0udHlw
ZVByb2ZpbGVyTG9nKCktPnByb2Nlc3NMb2dFbnRyaWVzKEFTQ0lJTGl0ZXJhbCgiVXNlciBRdWVy
eSIpKTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbG9jYXRpb25zLT5sZW5ndGgoKTsg
aSsrKSB7Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiB2YWx1ZSA9
IGxvY2F0aW9ucy0+Z2V0KGkpOwotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBsb2Nh
dGlvbjsKKyAgICAgICAgUmVmUHRyPFByb3RvY29sOjpVbmNoZWNrZWRWYWx1ZT4gdmFsdWUgPSBs
b2NhdGlvbnMtPmdldChpKTsKKyAgICAgICAgUmVmUHRyPFByb3RvY29sOjpVbmNoZWNrZWRPYmpl
Y3Q+IGxvY2F0aW9uOwogICAgICAgICBpZiAoIXZhbHVlLT5hc09iamVjdChsb2NhdGlvbikpIHsK
ICAgICAgICAgICAgIGVycm9yU3RyaW5nID0gQVNDSUlMaXRlcmFsKCJBcnJheSBvZiBUeXBlTG9j
YXRpb24gb2JqZWN0cyBoYXMgYW4gb2JqZWN0IHRoYXQgZG9lcyBub3QgaGF2ZSB0eXBlIG9mIFR5
cGVMb2NhdGlvbi4iKTsKICAgICAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVudGltZUFn
ZW50LmgKaW5kZXggYzJiZmM1NTk2YTVhYzAxZWNlY2Y3YTBlMTVkNTA1ZTc3ZTcxYWYxYi4uOWIz
MzM4NjE4MjNjMzFhODQ1M2EzNzNhYjk5YzdjZjZkZjYwNWQ4NiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVudGltZUFnZW50LmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVu
dGltZUFnZW50LmgKQEAgLTQ2LDkgKzQ2LDEyIEBAIGNsYXNzIFZNOwogCiBuYW1lc3BhY2UgSW5z
cGVjdG9yIHsKIAorbmFtZXNwYWNlIFByb3RvY29sIHsKK2NsYXNzIFVuY2hlY2tlZEFycmF5Owor
fQorCiBjbGFzcyBJbmplY3RlZFNjcmlwdDsKIGNsYXNzIEluamVjdGVkU2NyaXB0TWFuYWdlcjsK
LWNsYXNzIEluc3BlY3RvckFycmF5OwogY2xhc3MgU2NyaXB0RGVidWdTZXJ2ZXI7CiB0eXBlZGVm
IFN0cmluZyBFcnJvclN0cmluZzsKIApAQCAtNjMsMTIgKzY2LDEyIEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIHZvaWQgZGlzYWJsZShFcnJvclN0cmluZyYpIG92ZXJyaWRlIHsgbV9lbmFibGVkID0g
ZmFsc2U7IH0KICAgICB2aXJ0dWFsIHZvaWQgcGFyc2UoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJp
bmcmIGV4cHJlc3Npb24sIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlN5bnRheEVycm9y
VHlwZSogcmVzdWx0LCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8U3RyaW5nPiogbWVz
c2FnZSwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkVycm9yUmFuZ2U+Jikg
b3ZlcnJpZGUgZmluYWw7CiAgICAgdmlydHVhbCB2b2lkIGV2YWx1YXRlKEVycm9yU3RyaW5nJiwg
Y29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcqIG9iamVjdEdyb3VwLCBjb25z
dCBib29sKiBpbmNsdWRlQ29tbWFuZExpbmVBUEksIGNvbnN0IGJvb2wqIGRvTm90UGF1c2VPbkV4
Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSwgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQsIGNv
bnN0IGJvb2wqIHJldHVybkJ5VmFsdWUsIGNvbnN0IGJvb2wqIGdlbmVyYXRlUHJldmlldywgUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCwg
SW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PGJvb2w+KiB3YXNUaHJvd24pIG92ZXJyaWRl
IGZpbmFsOwotICAgIHZpcnR1YWwgdm9pZCBjYWxsRnVuY3Rpb25PbihFcnJvclN0cmluZyYsIGNv
bnN0IFN0cmluZyYgb2JqZWN0SWQsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgUmVm
UHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+KiBvcHRpb25hbEFyZ3VtZW50cywgY29uc3Qg
Ym9vbCogZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlLCBjb25zdCBib29sKiBy
ZXR1cm5CeVZhbHVlLCBjb25zdCBib29sKiBnZW5lcmF0ZVByZXZpZXcsIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQsIEluc3BlY3Rvcjo6
UHJvdG9jb2w6Ok9wdE91dHB1dDxib29sPiogd2FzVGhyb3duKSBvdmVycmlkZSBmaW5hbDsKKyAg
ICB2aXJ0dWFsIHZvaWQgY2FsbEZ1bmN0aW9uT24oRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcm
IG9iamVjdElkLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpVbmNoZWNrZWRBcnJheT4qIG9wdGlvbmFsQXJndW1lbnRzLCBjb25zdCBi
b29sKiBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUsIGNvbnN0IGJvb2wqIHJl
dHVybkJ5VmFsdWUsIGNvbnN0IGJvb2wqIGdlbmVyYXRlUHJldmlldywgUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCwgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6T3B0T3V0cHV0PGJvb2w+KiB3YXNUaHJvd24pIG92ZXJyaWRlIGZpbmFsOwogICAg
IHZpcnR1YWwgdm9pZCByZWxlYXNlT2JqZWN0KEVycm9yU3RyaW5nJiwgY29uc3QgRXJyb3JTdHJp
bmcmIG9iamVjdElkKSBvdmVycmlkZSBmaW5hbDsKICAgICB2aXJ0dWFsIHZvaWQgZ2V0UHJvcGVy
dGllcyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGNvbnN0IGJvb2wqIG93
blByb3BlcnRpZXMsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6
OlByb3RvY29sOjpSdW50aW1lOjpQcm9wZXJ0eURlc2NyaXB0b3I+PiYgcmVzdWx0LCBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6
SW50ZXJuYWxQcm9wZXJ0eURlc2NyaXB0b3I+PiYgaW50ZXJuYWxQcm9wZXJ0aWVzKSBvdmVycmlk
ZSBmaW5hbDsKICAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZU9iamVjdEdyb3VwKEVycm9yU3RyaW5n
JiwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCkgb3ZlcnJpZGUgZmluYWw7CiAgICAgdmlydHVh
bCB2b2lkIHJ1bihFcnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBnZXRS
dW50aW1lVHlwZXNGb3JWYXJpYWJsZXNBdE9mZnNldHMoRXJyb3JTdHJpbmcmLCBjb25zdCBSZWZQ
dHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4mIGxvY2F0aW9ucywgUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR5cGVEZXNj
cmlwdGlvbj4+Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGdldFJ1bnRpbWVUeXBlc0Zv
clZhcmlhYmxlc0F0T2Zmc2V0cyhFcnJvclN0cmluZyYsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpVbmNoZWNrZWRBcnJheT4mIGxvY2F0aW9ucywgUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR5cGVEZXNjcmlw
dGlvbj4+Jikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGVuYWJsZVR5cGVQcm9maWxlcihF
cnJvclN0cmluZyYpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBkaXNhYmxlVHlwZVByb2Zp
bGVyKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9iYWNrZW5kX2Rp
c3BhdGNoZXJfaGVhZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2NvZGVnZW4vZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQppbmRleCBj
MWZmMGQ1YmFkYTQzM2E5NjhmOWExZjBiMjRiYmIxNjkyMWE2ODY2Li41MmQ3MWJkNDdmNmYxZTY3
ZWQ1MzNhYmE5YjdlYjAyZjgyYzk2NWIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJf
aGVhZGVyLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9j
b2RlZ2VuL2dlbmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKQEAgLTE3OCw0ICsx
NzgsNCBAQCBjbGFzcyBCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihHZW5lcmF0b3Ip
OgogICAgICAgICByZXR1cm4gR2VuZXJhdG9yLndyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWluKGRv
bWFpbiwgVGVtcGxhdGUoVGVtcGxhdGVzLkJhY2tlbmREaXNwYXRjaGVySGVhZGVyRG9tYWluRGlz
cGF0Y2hlckRlY2xhcmF0aW9uKS5zdWJzdGl0dXRlKE5vbmUsICoqaGFuZGxlcl9hcmdzKSkKIAog
ICAgIGRlZiBfZ2VuZXJhdGVfZGlzcGF0Y2hlcl9kZWNsYXJhdGlvbl9mb3JfY29tbWFuZChzZWxm
LCBjb21tYW5kKToKLSAgICAgICAgcmV0dXJuICIgICAgdm9pZCAlcyhsb25nIGNhbGxJZCwgY29u
c3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOyIgJSBjb21tYW5kLmNvbW1h
bmRfbmFtZQorICAgICAgICByZXR1cm4gIiAgICB2b2lkICVzKGxvbmcgY2FsbElkLCBjb25zdCBJ
bnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3QmIG1lc3NhZ2UpOyIgJSBjb21tYW5k
LmNvbW1hbmRfbmFtZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0
aW9uLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Z2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CmluZGV4IDhmNTFk
YjA0OTJhNmE1ZWYzMzNkZjQ3ZDBmNmJiNDI3ZjZmNjg3ZjIuLjkxNzZmMmEwMmFiODQ4YTNiMzIz
ZDRjYzYzMjRmMWY2MzkxNjI5ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBs
ZW1lbnRhdGlvbi5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvY29kZWdlbi9nZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkK
QEAgLTQ5LDcgKzQ5LDcgQEAgY2xhc3MgQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdl
bmVyYXRvcihHZW5lcmF0b3IpOgogICAgIGRlZiBnZW5lcmF0ZV9vdXRwdXQoc2VsZik6CiAgICAg
ICAgIHNlY29uZGFyeV9oZWFkZXJzID0gWwogICAgICAgICAgICAgJzxpbnNwZWN0b3IvSW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsLmg+JywKLSAgICAgICAgICAgICc8aW5zcGVjdG9yL0luc3BlY3Rv
clZhbHVlcy5oPicsCisgICAgICAgICAgICAnPGluc3BlY3Rvci9JbnNwZWN0b3JQcm90b2NvbFR5
cGVzLmg+JywKICAgICAgICAgICAgICc8d3RmL3RleHQvQ1N0cmluZy5oPiddCiAKICAgICAgICAg
aGVhZGVyX2FyZ3MgPSB7CkBAIC0yMzQsMTYgKzIzNCwxNiBAQCBjbGFzcyBCYWNrZW5kRGlzcGF0
Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKEdlbmVyYXRvcik6CiAKICAgICAgICAgbGluZXMg
PSBbXQogICAgICAgICBpZiBsZW4oY29tbWFuZC5jYWxsX3BhcmFtZXRlcnMpID09IDA6Ci0gICAg
ICAgICAgICBsaW5lcy5hcHBlbmQoJ3ZvaWQgSW5zcGVjdG9yJShkb21haW5OYW1lKXNCYWNrZW5k
RGlzcGF0Y2hlcjo6JShjb21tYW5kTmFtZSlzKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JP
YmplY3QmKScgJSBjb21tYW5kX2FyZ3MpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ3ZvaWQg
SW5zcGVjdG9yJShkb21haW5OYW1lKXNCYWNrZW5kRGlzcGF0Y2hlcjo6JShjb21tYW5kTmFtZSlz
KGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Qm
KScgJSBjb21tYW5kX2FyZ3MpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBsaW5lcy5hcHBl
bmQoJ3ZvaWQgSW5zcGVjdG9yJShkb21haW5OYW1lKXNCYWNrZW5kRGlzcGF0Y2hlcjo6JShjb21t
YW5kTmFtZSlzKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpJyAl
IGNvbW1hbmRfYXJncykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgndm9pZCBJbnNwZWN0b3Il
KGRvbWFpbk5hbWUpc0JhY2tlbmREaXNwYXRjaGVyOjolKGNvbW1hbmROYW1lKXMobG9uZyBjYWxs
SWQsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdCYgbWVzc2FnZSkn
ICUgY29tbWFuZF9hcmdzKQogICAgICAgICBsaW5lcy5hcHBlbmQoJ3snKQogCiAgICAgICAgIGlm
IGxlbihjb21tYW5kLmNhbGxfcGFyYW1ldGVycykgPiAwOgogICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5CYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uUHJl
cGFyZUNvbW1hbmRBcmd1bWVudHMpLnN1YnN0aXR1dGUoTm9uZSwgKipjb21tYW5kX2FyZ3MpKQog
CiAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIEVycm9yU3RyaW5nIGVycm9yOycpCi0gICAgICAg
IGxpbmVzLmFwcGVuZCgnICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCk7JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9y
OjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0OjpjcmVhdGUoKTsnKQogICAgICAgICBpZiBjb21t
YW5kLmlzX2FzeW5jOgogICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgUmVmUHRyPEluc3Bl
Y3RvciUoZG9tYWluTmFtZSlzQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjolKGNhbGxiYWNrTmFt
ZSlzPiBjYWxsYmFjayA9IGFkb3B0UmVmKG5ldyBJbnNwZWN0b3IlKGRvbWFpbk5hbWUpc0JhY2tl
bmREaXNwYXRjaGVySGFuZGxlcjo6JShjYWxsYmFja05hbWUpcyhtX2JhY2tlbmREaXNwYXRjaGVy
LGNhbGxJZCkpOycgJSBjb21tYW5kX2FyZ3MpCiAgICAgICAgIGlmIGxlbihjb21tYW5kLnJldHVy
bl9wYXJhbWV0ZXJzKSA+IDA6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRl
ci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dl
bmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CmluZGV4IGE1NjgyMGE3YzE3OTli
ZDg2YTVhZmVjZGNlOTJiOTYyZjNjZTBmZjcuLmEzYmFiZGI2YTIxODM2YWEzMTQ5MDAzNzJjN2Fl
MzVjZDc0YzNjNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5Cisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVy
YXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CkBAIC01MSw3ICs1MSw3IEBAIGNsYXNz
IEZyb250ZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihHZW5lcmF0b3IpOgogICAgICAgICBo
ZWFkZXJzID0gWwogICAgICAgICAgICAgJyJJbnNwZWN0b3Ilc1Byb3RvY29sVHlwZXMuaCInICUg
c2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCdwcmVmaXgnKSwKICAgICAgICAgICAgICc8
aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPicsCi0gICAgICAgICAgICAnPGlu
c3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4nLAorICAgICAgICAgICAgJzxpbnNwZWN0b3IvSW5z
cGVjdG9yUHJvdG9jb2xUeXBlcy5oPicsCiAgICAgICAgICAgICAnPHd0Zi9QYXNzUmVmUHRyLmg+
JywKICAgICAgICAgICAgICc8d3RmL3RleHQvV1RGU3RyaW5nLmg+J10KIApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVf
ZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNo
ZXJfaW1wbGVtZW50YXRpb24ucHkKaW5kZXggZjVhMzUyZWI1NTU1YzVjYzc5Y2I4ZmNlNzRiMmI5
Y2E5MWJhYjI0NS4uYmU0OWU2NTY2NGZmYmIzNmUyNDQwMzA4ZGMzYTViZDNiZmRiOTAzOSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Z2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9mcm9u
dGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CkBAIC0xMDgsMTEgKzEwOCwxMSBAQCBj
bGFzcyBGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihHZW5lcmF0b3Ip
OgogCiAgICAgICAgIGxpbmVzLmFwcGVuZCgndm9pZCBJbnNwZWN0b3IlKGRvbWFpbk5hbWUpc0Zy
b250ZW5kRGlzcGF0Y2hlcjo6JShldmVudE5hbWUpcyglKGZvcm1hbFBhcmFtZXRlcnMpcyknICUg
ZXZlbnRfYXJncykKICAgICAgICAgbGluZXMuYXBwZW5kKCd7JykKLSAgICAgICAgbGluZXMuYXBw
ZW5kKCcgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4ganNvbk1lc3NhZ2UgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFJlZlB0cjxQcm90
b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBqc29uTWVzc2FnZSA9IFByb3RvY29sOjpVbmNoZWNrZWRP
YmplY3Q6OmNyZWF0ZSgpOycpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGpzb25NZXNzYWdl
LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJtZXRob2QiKSwgQVNDSUlMaXRlcmFsKCIlKGRvbWFp
bk5hbWUpcy4lKGV2ZW50TmFtZSlzIikpOycgJSBldmVudF9hcmdzKQogCiAgICAgICAgIGlmIGxl
bihwYXJhbWV0ZXJfYXNzaWdubWVudHMpID4gMDoKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgn
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVj
dDo6Y3JlYXRlKCk7JykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFJlZlB0cjxQcm90
b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBQcm90b2NvbDo6VW5jaGVja2Vk
T2JqZWN0OjpjcmVhdGUoKTsnKQogICAgICAgICAgICAgbGluZXMuZXh0ZW5kKHBhcmFtZXRlcl9h
c3NpZ25tZW50cykKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGpzb25NZXNzYWdlLT5z
ZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJwYXJhbXMiKSwgcGFyYW1zT2JqZWN0KTsnKQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9n
ZW5lcmF0ZV9wcm90b2NvbF90eXBlc19oZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9wcm90b2NvbF90eXBlc19oZWFkZXIu
cHkKaW5kZXggOWE2MDM5YzRkZmI2ZjFlZWMzZTMxYTA3MDdlODhhY2IwMjE2MmIzNS4uNTAzNDRl
ZDU2ZmFiY2ViYjAwNjc0NDI0NDhlZTk5YzBkMDZiNDI4MiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfcHJvdG9jb2xf
dHlwZXNfaGVhZGVyLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL2dlbmVyYXRlX3Byb3RvY29sX3R5cGVzX2hlYWRlci5weQpAQCAtMTg4LDcg
KzE4OCw3IEBAIGNsYXNzIFByb3RvY29sVHlwZXNIZWFkZXJHZW5lcmF0b3IoR2VuZXJhdG9yKToK
ICAgICAgICAgbGluZXMgPSBbXQogICAgICAgICBpZiBsZW4odHlwZV9kZWNsYXJhdGlvbi5kZXNj
cmlwdGlvbikgPiAwOgogICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcvKiAlcyAqLycgJSB0eXBl
X2RlY2xhcmF0aW9uLmRlc2NyaXB0aW9uKQotICAgICAgICBiYXNlX2NsYXNzID0gJ0luc3BlY3Rv
cjo6SW5zcGVjdG9yT2JqZWN0JworICAgICAgICBiYXNlX2NsYXNzID0gJ0luc3BlY3Rvcjo6UHJv
dG9jb2w6OlVuY2hlY2tlZE9iamVjdCcKICAgICAgICAgaWYgbm90IEdlbmVyYXRvci50eXBlX2hh
c19vcGVuX2ZpZWxkcyh0eXBlX2RlY2xhcmF0aW9uLnR5cGUpOgogICAgICAgICAgICAgYmFzZV9j
bGFzcyA9IGJhc2VfY2xhc3MgKyAnQmFzZScKICAgICAgICAgbGluZXMuYXBwZW5kKCdjbGFzcyAl
cyA6IHB1YmxpYyAlcyB7JyAlIChvYmplY3RfbmFtZSwgYmFzZV9jbGFzcykpCkBAIC0zMDYsOSAr
MzA2LDkgQEAgY2xhc3MgUHJvdG9jb2xUeXBlc0hlYWRlckdlbmVyYXRvcihHZW5lcmF0b3IpOgog
ICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICB2b2lkIHNldCUoY2FtZWxOYW1lKXMoJShwYXJhbWV0
ZXJUeXBlKXMgdmFsdWUpJyAlIHNldHRlcl9hcmdzKQogICAgICAgICBsaW5lcy5hcHBlbmQoJyAg
ICB7JykKICAgICAgICAgaWYgaXNpbnN0YW5jZSh0eXBlX21lbWJlci50eXBlLCBFbnVtVHlwZSk6
Ci0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgSW5zcGVjdG9yT2JqZWN0QmFzZTo6
JShrZXllZFNldClzKEFTQ0lJTGl0ZXJhbCgiJShuYW1lKXMiKSwgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6Z2V0JShmcmFtZXdvcmtQcmVmaXgpc0VudW1Db25zdGFudFZhbHVlKHN0YXRpY19jYXN0PGlu
dD4odmFsdWUpKSk7JyAlIHNldHRlcl9hcmdzKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcg
ICAgICAgIFVuY2hlY2tlZE9iamVjdEJhc2U6OiUoa2V5ZWRTZXQpcyhBU0NJSUxpdGVyYWwoIiUo
bmFtZSlzIiksIEluc3BlY3Rvcjo6UHJvdG9jb2w6OmdldCUoZnJhbWV3b3JrUHJlZml4KXNFbnVt
Q29uc3RhbnRWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+KHZhbHVlKSkpOycgJSBzZXR0ZXJfYXJncykK
ICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBJbnNwZWN0
b3JPYmplY3RCYXNlOjolKGtleWVkU2V0KXMoQVNDSUlMaXRlcmFsKCIlKG5hbWUpcyIpLCB2YWx1
ZSk7JyAlIHNldHRlcl9hcmdzKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIFVu
Y2hlY2tlZE9iamVjdEJhc2U6OiUoa2V5ZWRTZXQpcyhBU0NJSUxpdGVyYWwoIiUobmFtZSlzIiks
IHZhbHVlKTsnICUgc2V0dGVyX2FyZ3MpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIH0nKQog
ICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQogCkBAIC0zMzgsOSArMzM4LDkgQEAgY2xh
c3MgUHJvdG9jb2xUeXBlc0hlYWRlckdlbmVyYXRvcihHZW5lcmF0b3IpOgogICAgICAgICBmb3Ig
YXJndW1lbnQgaW4gdHlwZV9hcmd1bWVudHM6CiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ3Rl
bXBsYXRlPD4gJXMgQmluZGluZ1RyYWl0czwlcz4geycgJSAoJyAnLmpvaW4oc3RydWN0X2tleXdv
cmRzKSwgYXJndW1lbnRbMF0pKQogICAgICAgICAgICAgaWYgYXJndW1lbnRbMV06Ci0gICAgICAg
ICAgICAgICAgbGluZXMuYXBwZW5kKCdzdGF0aWMgUGFzc1JlZlB0cjwlcz4gcnVudGltZUNhc3Qo
UGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiB2YWx1ZSk7JyAlIGFyZ3VtZW50
WzBdKQorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnc3RhdGljIFBhc3NSZWZQdHI8JXM+
IHJ1bnRpbWVDYXN0KFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkVmFs
dWU+IHZhbHVlKTsnICUgYXJndW1lbnRbMF0pCiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyNp
ZiAhQVNTRVJUX0RJU0FCTEVEJykKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnJXMgYXNzZXJ0
VmFsdWVIYXNFeHBlY3RlZFR5cGUoSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSopOycgJSAnICcu
am9pbihmdW5jdGlvbl9rZXl3b3JkcykpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyVzIGFz
c2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZFZh
bHVlKik7JyAlICcgJy5qb2luKGZ1bmN0aW9uX2tleXdvcmRzKSkKICAgICAgICAgICAgIGxpbmVz
LmFwcGVuZCgnI2VuZGlmIC8vICFBU1NFUlRfRElTQUJMRUQnKQogICAgICAgICAgICAgbGluZXMu
YXBwZW5kKCd9OycpCiAgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0
ZV9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX3Byb3RvY29sX3R5cGVzX2ltcGxl
bWVudGF0aW9uLnB5CmluZGV4IGUzMjQwNTgyMDdiYTc3MmE5MTk0ZjQ1MDg1ZDAyNTQ1ZDkwM2U4
MGIuLjliYTBhNWZlM2M4YTE1Mjg5N2M1OTY2NWJlMWE2NmQxZjZlNjYzMTEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRl
X3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX3Byb3RvY29sX3R5cGVzX2lt
cGxlbWVudGF0aW9uLnB5CkBAIC0xMjMsOSArMTIzLDkgQEAgY2xhc3MgUHJvdG9jb2xUeXBlc0lt
cGxlbWVudGF0aW9uR2VuZXJhdG9yKEdlbmVyYXRvcik6CiAgICAgICAgIGxpbmVzID0gW10KIAog
ICAgICAgICBsaW5lcy5hcHBlbmQoJyNpZiAhQVNTRVJUX0RJU0FCTEVEJykKLSAgICAgICAgbGlu
ZXMuYXBwZW5kKCd2b2lkIEJpbmRpbmdUcmFpdHM8JXM+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVk
VHlwZShJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKiB2YWx1ZSknICUgKEdlbmVyYXRvci5wcm90
b2NvbF90eXBlX3N0cmluZ19mb3JfdHlwZShvYmplY3RfZGVjbGFyYXRpb24udHlwZSkpKQorICAg
ICAgICBsaW5lcy5hcHBlbmQoJ3ZvaWQgQmluZGluZ1RyYWl0czwlcz46OmFzc2VydFZhbHVlSGFz
RXhwZWN0ZWRUeXBlKFByb3RvY29sOjpVbmNoZWNrZWRWYWx1ZSogdmFsdWUpJyAlIChHZW5lcmF0
b3IucHJvdG9jb2xfdHlwZV9zdHJpbmdfZm9yX3R5cGUob2JqZWN0X2RlY2xhcmF0aW9uLnR5cGUp
KSkKICAgICAgICAgbGluZXMuYXBwZW5kKCIiInsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBvYmplY3Q7CisgICAgUmVmUHRyPFByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IG9iamVjdDsK
ICAgICBib29sIGNhc3RTdWNjZWVkZWQgPSB2YWx1ZS0+YXNPYmplY3Qob2JqZWN0KTsKICAgICBB
U1NFUlRfVU5VU0VEKGNhc3RTdWNjZWVkZWQsIGNhc3RTdWNjZWVkZWQpOyIiIikKICAgICAgICAg
Zm9yIHR5cGVfbWVtYmVyIGluIHJlcXVpcmVkX21lbWJlcnM6CkBAIC0xMzUsNyArMTM1LDcgQEAg
Y2xhc3MgUHJvdG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yKEdlbmVyYXRvcik6CiAg
ICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgiIiIgICAgewotICAgICAg
ICBJbnNwZWN0b3JPYmplY3Q6Oml0ZXJhdG9yICUobWVtYmVyTmFtZSlzUG9zID0gb2JqZWN0LT5m
aW5kKEFTQ0lJTGl0ZXJhbCgiJShtZW1iZXJOYW1lKXMiKSk7CisgICAgICAgIFByb3RvY29sOjpV
bmNoZWNrZWRPYmplY3Q6Oml0ZXJhdG9yICUobWVtYmVyTmFtZSlzUG9zID0gb2JqZWN0LT5maW5k
KEFTQ0lJTGl0ZXJhbCgiJShtZW1iZXJOYW1lKXMiKSk7CiAgICAgICAgIEFTU0VSVCglKG1lbWJl
ck5hbWUpc1BvcyAhPSBvYmplY3QtPmVuZCgpKTsKICAgICAgICAgJShhc3NlcnRNZXRob2Qpcygl
KG1lbWJlck5hbWUpc1Bvcy0+dmFsdWUuZ2V0KCkpOwogICAgIH0iIiIgJSBhcmdzKQpAQCAtMTUx
LDcgKzE1MSw3IEBAIGNsYXNzIFByb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihH
ZW5lcmF0b3IpOgogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoIiIi
ICAgIHsKLSAgICAgICAgSW5zcGVjdG9yT2JqZWN0OjppdGVyYXRvciAlKG1lbWJlck5hbWUpc1Bv
cyA9IG9iamVjdC0+ZmluZChBU0NJSUxpdGVyYWwoIiUobWVtYmVyTmFtZSlzIikpOworICAgICAg
ICBQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0OjppdGVyYXRvciAlKG1lbWJlck5hbWUpc1BvcyA9
IG9iamVjdC0+ZmluZChBU0NJSUxpdGVyYWwoIiUobWVtYmVyTmFtZSlzIikpOwogICAgICAgICBp
ZiAoJShtZW1iZXJOYW1lKXNQb3MgIT0gb2JqZWN0LT5lbmQoKSkgewogICAgICAgICAgICAgJShh
c3NlcnRNZXRob2QpcyglKG1lbWJlck5hbWUpc1Bvcy0+dmFsdWUuZ2V0KCkpOyIiIiAlIGFyZ3Mp
CiAKQEAgLTE3MCw3ICsxNzAsNyBAQCBjbGFzcyBQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25H
ZW5lcmF0b3IoR2VuZXJhdG9yKToKICAgICBkZWYgX2dlbmVyYXRlX2Fzc2VydGlvbl9mb3JfZW51
bShzZWxmLCBlbnVtX21lbWJlciwgb2JqZWN0X2RlY2xhcmF0aW9uKToKICAgICAgICAgbGluZXMg
PSBbXQogICAgICAgICBsaW5lcy5hcHBlbmQoJyNpZiAhQVNTRVJUX0RJU0FCTEVEJykKLSAgICAg
ICAgbGluZXMuYXBwZW5kKCd2b2lkICVzKEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqIHZhbHVl
KScgJSBHZW5lcmF0b3IuYXNzZXJ0aW9uX21ldGhvZF9mb3JfdHlwZV9tZW1iZXIoZW51bV9tZW1i
ZXIsIG9iamVjdF9kZWNsYXJhdGlvbikpCisgICAgICAgIGxpbmVzLmFwcGVuZCgndm9pZCAlcyhQ
cm90b2NvbDo6VW5jaGVja2VkVmFsdWUqIHZhbHVlKScgJSBHZW5lcmF0b3IuYXNzZXJ0aW9uX21l
dGhvZF9mb3JfdHlwZV9tZW1iZXIoZW51bV9tZW1iZXIsIG9iamVjdF9kZWNsYXJhdGlvbikpCiAg
ICAgICAgIGxpbmVzLmFwcGVuZCgneycpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFN0cmlu
ZyByZXN1bHQ7JykKICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgYm9vbCBjYXN0U3VjY2VlZGVk
ID0gdmFsdWUtPmFzU3RyaW5nKHJlc3VsdCk7JykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRvci5weSBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRvci5weQppbmRl
eCAyYTZlYjY3OTIzNDc2ODZiMTk3MGFhNDkzNzEzYmNhYTdkNTZjZTM4Li40OWNhOTZjMmY1NTA1
YTA4NjAzYTljNmUwZWZjNjQ4OGVmNzAzY2U4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3IucHkKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yLnB5CkBA
IC00MywxMyArNDMsMTMgQEAgX1BSSU1JVElWRV9UT19DUFBfTkFNRV9NQVAgPSB7CiAgICAgJ2lu
dGVnZXInOiAnaW50JywKICAgICAnbnVtYmVyJzogJ2RvdWJsZScsCiAgICAgJ3N0cmluZyc6ICdT
dHJpbmcnLAotICAgICdvYmplY3QnOiAnSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QnLAotICAg
ICdhbnknOiAnSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZScKKyAgICAnb2JqZWN0JzogJ0luc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdCcsCisgICAgJ2FueSc6ICdJbnNwZWN0b3I6
OlByb3RvY29sOjpVbmNoZWNrZWRWYWx1ZScKIH0KIAogX0FMV0FZU19VUFBFUkNBU0VEX0VOVU1f
VkFMVUVfU1VCU1RSSU5HUyA9IHNldChbJ0FQSScsICdDU1MnLCAnRE9NJywgJ0hUTUwnLCAnWEhS
JywgJ1hNTCddKQogCi0jIFRoZXNlIG9iamVjdHMgYXJlIGJ1aWx0IG1hbnVhbGx5IGJ5IGNyZWF0
aW5nIGFuZCBzZXR0aW5nIEluc3BlY3RvclZhbHVlcy4KKyMgVGhlc2Ugb2JqZWN0cyBhcmUgYnVp
bHQgbWFudWFsbHkgYnkgY3JlYXRpbmcgYW5kIHNldHRpbmcgVW5jaGVja2VkVmFsdWVzLgogIyBC
ZWZvcmUgc2VuZGluZyB0aGVzZSBvdmVyIHRoZSBwcm90b2NvbCwgdGhlaXIgc2hhcGVzIGFyZSBj
aGVja2VkIGFnYWluc3QgdGhlIHNwZWNpZmljYXRpb24uCiAjIFNvLCBhbnkgdHlwZXMgcmVmZXJl
bmNlZCBieSB0aGVzZSB0eXBlcyByZXF1aXJlIGRlYnVnLW9ubHkgYXNzZXJ0aW9ucyB0aGF0IGNo
ZWNrIHZhbHVlcy4KICMgQ2FsY3VsYXRpbmcgbmVjZXNzYXJ5IGFzc2VydGlvbnMgaXMgYW5ub3lp
bmcsIGFuZCBhZGRzIGEgbG90IG9mIGNvbXBsZXhpdHkgdG8gdGhlIGdlbmVyYXRvci4KQEAgLTI2
Niw3ICsyNjYsNyBAQCBjbGFzcyBHZW5lcmF0b3I6CiAgICAgQHN0YXRpY21ldGhvZAogICAgIGRl
ZiBwcm90b2NvbF90eXBlX3N0cmluZ19mb3JfdHlwZShfdHlwZSk6CiAgICAgICAgIGlmIGlzaW5z
dGFuY2UoX3R5cGUsIE9iamVjdFR5cGUpIGFuZCBsZW4oX3R5cGUubWVtYmVycykgPT0gMDoKLSAg
ICAgICAgICAgIHJldHVybiAnSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QnCisgICAgICAgICAg
ICByZXR1cm4gJ0luc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdCcKICAgICAgICAg
aWYgaXNpbnN0YW5jZShfdHlwZSwgKE9iamVjdFR5cGUsIEFsaWFzZWRUeXBlLCBFbnVtVHlwZSkp
OgogICAgICAgICAgICAgcmV0dXJuICdJbnNwZWN0b3I6OlByb3RvY29sOjolczo6JXMnICUgKF90
eXBlLnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIF90eXBlLnJhd19uYW1lKCkpCiAgICAgICAg
IGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFycmF5VHlwZSk6CkBAIC0yOTMsOSArMjkzLDkgQEAgY2xh
c3MgR2VuZXJhdG9yOgogICAgICAgICBzaWdpbCA9ICcqJyBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9u
YWwgZWxzZSAnJicKICAgICAgICAgIyBUaGlzIGhhbmRsZXMgdGhlICdhbnknIHR5cGUgYW5kIG9i
amVjdHMgd2l0aCBkZWZpbmVkIHByb3BlcnRpZXMuCiAgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5
cGUsIE9iamVjdFR5cGUpIG9yIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgaXMgJ29iamVjdCc6Ci0g
ICAgICAgICAgICByZXR1cm4gJ2NvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVj
dD4nICsgc2lnaWwKKyAgICAgICAgICAgIHJldHVybiAnY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4nICsgc2lnaWwKICAgICAgICAgaWYgaXNpbnN0YW5j
ZShfdHlwZSwgQXJyYXlUeXBlKToKLSAgICAgICAgICAgIHJldHVybiAnY29uc3QgUmVmUHRyPElu
c3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+JyArIHNpZ2lsCisgICAgICAgICAgICByZXR1cm4gJ2Nv
bnN0IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRBcnJheT4nICsgc2lnaWwK
ICAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSk6CiAgICAgICAgICAg
ICBjcHBfbmFtZSA9IEdlbmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUoX3R5cGUp
CiAgICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CkBAIC0zMzIsOSArMzMyLDkg
QEAgY2xhc3MgR2VuZXJhdG9yOgogICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBQcmltaXRp
dmVUeXBlKToKICAgICAgICAgICAgIGNwcF9uYW1lID0gR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9w
cmltaXRpdmVfdHlwZShfdHlwZSkKICAgICAgICAgICAgIGlmIF90eXBlLnF1YWxpZmllZF9uYW1l
KCkgaW4gWydvYmplY3QnXToKLSAgICAgICAgICAgICAgICByZXR1cm4gJ1Bhc3NSZWZQdHI8SW5z
cGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JworICAgICAgICAgICAgICAgIHJldHVybiAnUGFzc1Jl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+JwogICAgICAgICAgICAg
ZWxpZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpIGluIFsnYW55J106Ci0gICAgICAgICAgICAgICAg
cmV0dXJuICdQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+JworICAgICAgICAg
ICAgICAgIHJldHVybiAnUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRW
YWx1ZT4nCiAgICAgICAgICAgICBlbGlmIGlzX29wdGlvbmFsOgogICAgICAgICAgICAgICAgIHJl
dHVybiAnY29uc3QgJXMqIGNvbnN0JyAlIGNwcF9uYW1lCiAgICAgICAgICAgICBlbGlmIF90eXBl
LnF1YWxpZmllZF9uYW1lKCkgaW4gWydzdHJpbmcnXToKQEAgLTQwMSw3ICs0MDEsNyBAQCBjbGFz
cyBHZW5lcmF0b3I6CiAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIlVua25vd24gZm9ybWFsIGFz
eW5jIHBhcmFtZXRlciB0eXBlLiIpCiAKICAgICAjIEluLXBhcmFtZXRlcnMgZG9uJ3QgdXNlIGJ1
aWxkZXIgdHlwZXMsIGJlY2F1c2UgdGhleSBjb3VsZCBiZSBwYXNzZWQKLSAgICAjICJvcGVuIHR5
cGVzIiB0aGF0IGFyZSBtYW51YWxseSBjb25zdHJ1Y3RlZCBvdXQgb2YgSW5zcGVjdG9yT2JqZWN0
cy4KKyAgICAjICJvcGVuIHR5cGVzIiB0aGF0IGFyZSBtYW51YWxseSBjb25zdHJ1Y3RlZCBvdXQg
b2YgVW5jaGVja2VkT2JqZWN0cy4KIAogICAgICMgRklYTUU6IE9ubHkgcGFyYW1ldGVycyB0aGF0
IGFyZSBhY3R1YWxseSBvcGVuIHR5cGVzIHNob3VsZCBuZWVkIG5vbi1idWlsZGVyIHBhcmFtZXRl
ciB0eXBlcy4KICAgICBAc3RhdGljbWV0aG9kCkBAIC00MTQsOSArNDE0LDkgQEAgY2xhc3MgR2Vu
ZXJhdG9yOgogICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5wcmltaXRpdmVfdHlwZSAgIyBGYWxs
IHRocm91Z2guCiAKICAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgT2JqZWN0VHlwZSk6Ci0g
ICAgICAgICAgICByZXR1cm4gIlJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4iCisg
ICAgICAgICAgICByZXR1cm4gIlJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRP
YmplY3Q+IgogICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBcnJheVR5cGUpOgotICAgICAg
ICAgICAgcmV0dXJuICJSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4iCisgICAgICAg
ICAgICByZXR1cm4gIlJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRBcnJheT4i
CiAgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUpOgogICAgICAgICAg
ICAgY3BwX25hbWUgPSBHZW5lcmF0b3IuY3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBl
KQogICAgICAgICAgICAgaWYgX3R5cGUucXVhbGlmaWVkX25hbWUoKSBpbiBbJ2FueScsICdvYmpl
Y3QnXToKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL2dlbmVyYXRvcl90ZW1wbGF0ZXMucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5CmluZGV4IDg0
M2E0OTI5Mzc1ZDM5MTdmOGFhMzY2YmE4NTRmZjE4ODU1MTViN2QuLjRlMTk5MWE1YTc2MTIyY2Q5
MzAxZTkxMzQ1M2NkZWE2NTc1MmQ5NWQgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRvcl90ZW1wbGF0ZXMucHkKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9y
X3RlbXBsYXRlcy5weQpAQCAtMTA3LDcgKzEwNyw3IEBAIHByb3RlY3RlZDoKICAgICAiIiIke2Ns
YXNzQW5kRXhwb3J0TWFjcm99IEluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hl
ciBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3RvclN1cHBsZW1lbnRhbEJhY2tlbmRE
aXNwYXRjaGVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3Ike2Rv
bWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShJbnNwZWN0b3I6Okluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyKiwgSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlciopOwotICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3Qg
U3RyaW5nJiBtZXRob2QsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IG1l
c3NhZ2UpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaChsb25nIGNhbGxJZCwg
Y29uc3QgU3RyaW5nJiBtZXRob2QsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5j
aGVja2VkT2JqZWN0PiBtZXNzYWdlKSBvdmVycmlkZTsKICR7Y29tbWFuZERlY2xhcmF0aW9uc30K
IHByaXZhdGU6CiAgICAgSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyKElu
c3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqLCBJbnNwZWN0b3Ike2RvbWFpbk5h
bWV9QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CkBAIC0xMjMsNyArMTIzLDcgQEAgcHJpdmF0
ZToKICAgICB2aXJ0dWFsIHZvaWQgJHtjb21tYW5kTmFtZX0oJHtpblBhcmFtZXRlcnN9KSA9IDA7
IiIiKQogCiAgICAgQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvblNtYWxsU3dpdGNoID0g
KAotICAgICIiInZvaWQgSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyOjpk
aXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFBhc3NSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBtZXNzYWdlKQorICAgICIiInZvaWQgSW5zcGVjdG9yJHtkb21haW5OYW1l
fUJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBt
ZXRob2QsIFBhc3NSZWZQdHI8UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gbWVzc2FnZSkKIHsK
ICAgICBSZWY8SW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0
KCp0aGlzKTsKIApAQCAtMTMzLDExICsxMzMsMTEgQEAgJHtkaXNwYXRjaENhc2VzfQogfSIiIikK
IAogICAgIEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25MYXJnZVN3aXRjaCA9ICgKLSIi
InZvaWQgSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChs
b25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBtZXNzYWdlKQorIiIidm9pZCBJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3Bh
dGNoZXI6OmRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUGFzc1Jl
ZlB0cjxQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBtZXNzYWdlKQogewogICAgIFJlZjxJbnNw
ZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwogCi0g
ICAgdHlwZWRlZiB2b2lkIChJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXI6
OipDYWxsSGFuZGxlcikobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2Jq
ZWN0JiBtZXNzYWdlKTsKKyAgICB0eXBlZGVmIHZvaWQgKEluc3BlY3RvciR7ZG9tYWluTmFtZX1C
YWNrZW5kRGlzcGF0Y2hlcjo6KkNhbGxIYW5kbGVyKShsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVj
dG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0JiBtZXNzYWdlKTsKICAgICB0eXBlZGVmIEhh
c2hNYXA8U3RyaW5nLCBDYWxsSGFuZGxlcj4gRGlzcGF0Y2hNYXA7CiAgICAgREVQUkVDQVRFRF9E
RUZJTkVfU1RBVElDX0xPQ0FMKERpc3BhdGNoTWFwLCBkaXNwYXRjaE1hcCwgKCkpOwogICAgIGlm
IChkaXNwYXRjaE1hcC5pc0VtcHR5KCkpIHsKQEAgLTE3NSwxMCArMTc1LDEwIEBAIEluc3BlY3Rv
ciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcjo6SW5zcGVjdG9yJHtkb21haW5OYW1lfUJh
Y2tlbmREaXNwYXRjaGVyCiB9IiIiKQogCiAgICAgQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRh
dGlvblByZXBhcmVDb21tYW5kQXJndW1lbnRzID0gKAotIiIiICAgIFJlZlB0cjxJbnNwZWN0b3JB
cnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7Ci0gICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gbWVzc2FnZS5nZXRPYmplY3Qo
QVNDSUlMaXRlcmFsKCJwYXJhbXMiKSk7Ci0gICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250
YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7Ci0gICAgSW5zcGVjdG9yQXJyYXkqIHBy
b3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CisiIiIgICAgUmVmUHRyPFBy
b3RvY29sOjpVbmNoZWNrZWRBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBQcm90b2NvbDo6VW5jaGVj
a2VkQXJyYXk6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0
PiBwYXJhbXNDb250YWluZXIgPSBtZXNzYWdlLmdldE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFt
cyIpKTsKKyAgICBQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIg
PSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CisgICAgUHJvdG9jb2w6OlVuY2hlY2tlZEFycmF5KiBw
cm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogJHtpblBhcmFtZXRlckRl
Y2xhcmF0aW9uc30KICAgICBpZiAocHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAg
IFN0cmluZyBlcnJvck1lc3NhZ2UgPSBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2Yg
bWV0aG9kIFwnJXNcJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiJHtkb21haW5OYW1lfS4ke2NvbW1h
bmROYW1lfSIpOwpAQCAtMTkyLDcgKzE5Miw3IEBAICR7aW5QYXJhbWV0ZXJEZWNsYXJhdGlvbnN9
CiAKIHZvaWQgSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6
JHtjYWxsYmFja05hbWV9OjpzZW5kU3VjY2Vzcygke2Zvcm1hbFBhcmFtZXRlcnN9KQogewotICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGpzb25NZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKTsKKyAgICBSZWZQdHI8UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4ganNvbk1lc3Nh
Z2UgPSBQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0OjpjcmVhdGUoKTsKICR7b3V0UGFyYW1ldGVy
QXNzaWdubWVudHN9CiAgICAgc2VuZElmQWN0aXZlKGpzb25NZXNzYWdlLCBFcnJvclN0cmluZygp
KTsKIH0iIiIpCkBAIC0yMTAsMTQgKzIxMCwxNCBAQCBwcml2YXRlOgogIiIiICAgIHRlbXBsYXRl
PGludCBTVEFURT4KICAgICBjbGFzcyBCdWlsZGVyIHsKICAgICBwcml2YXRlOgotICAgICAgICBS
ZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OworICAgICAgICBSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBtX3Jlc3VsdDsKIAogICAg
ICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUo
KQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRl
cjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgIH0KIAotICAgICAgICBCdWlsZGVyKFBh
c3NSZWZQdHI8Lyoke29iamVjdFR5cGV9Ki9JbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gcHRy
KQorICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8Lyoke29iamVjdFR5cGV9Ki9JbnNwZWN0b3I6
OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IHB0cikKICAgICAgICAgewogICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9u
b25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKQEAgLTIzMCw3ICsy
MzAsNyBAQCBwcml2YXRlOgogICAgICAgICBvcGVyYXRvciBSZWZQdHI8JHtvYmplY3RUeXBlfT4m
ICgpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZp
ZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VS
VChzaXplb2YoJHtvYmplY3RUeXBlfSkgPT0gc2l6ZW9mKEluc3BlY3Rvcjo6SW5zcGVjdG9yT2Jq
ZWN0KSwgY2Fubm90X2Nhc3QpOworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKCR7
b2JqZWN0VHlwZX0pID09IHNpemVvZihJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmpl
Y3QpLCBjYW5ub3RfY2FzdCk7CiAgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8
UmVmUHRyPCR7b2JqZWN0VHlwZX0+Kj4oJm1fcmVzdWx0KTsKICAgICAgICAgfQogCkBAIC0yNDYs
MjEgKzI0NiwyMCBAQCAke2NvbnN0cnVjdG9yRXhhbXBsZX0KICAgICAgKi8KICAgICBzdGF0aWMg
QnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBCdWls
ZGVyPE5vRmllbGRzU2V0PihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOwot
ICAgIH0KLSAgICB0eXBlZGVmIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlN0cnVjdEl0ZW1UcmFpdHMg
SXRlbVRyYWl0czsiIiIpCisgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihJbnNw
ZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICB9IiIiKQog
CiAgICAgUHJvdG9jb2xPYmplY3RSdW50aW1lQ2FzdCA9ICgKLSIiIlBhc3NSZWZQdHI8JHtvYmpl
Y3RUeXBlfT4gQmluZGluZ1RyYWl0czwke29iamVjdFR5cGV9Pjo6cnVudGltZUNhc3QoUGFzc1Jl
ZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiB2YWx1ZSkKKyIiIlBhc3NSZWZQdHI8JHtv
YmplY3RUeXBlfT4gQmluZGluZ1RyYWl0czwke29iamVjdFR5cGV9Pjo6cnVudGltZUNhc3QoUGFz
c1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRWYWx1ZT4gdmFsdWUpCiB7Ci0g
ICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQ7CisgICAgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gcmVzdWx0OwogICAgIGJvb2wg
Y2FzdFN1Y2NlZWRlZCA9IHZhbHVlLT5hc09iamVjdChyZXN1bHQpOwogICAgIEFTU0VSVF9VTlVT
RUQoY2FzdFN1Y2NlZWRlZCwgY2FzdFN1Y2NlZWRlZCk7CiAjaWYgIUFTU0VSVF9ESVNBQkxFRAog
ICAgIEJpbmRpbmdUcmFpdHM8JHtvYmplY3RUeXBlfT46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRU
eXBlKHJlc3VsdC5nZXQoKSk7CiAjZW5kaWYgIC8vICFBU1NFUlRfRElTQUJMRUQKLSAgICBDT01Q
SUxFX0FTU0VSVChzaXplb2YoJHtvYmplY3RUeXBlfSkgPT0gc2l6ZW9mKEluc3BlY3Rvcjo6SW5z
cGVjdG9yT2JqZWN0QmFzZSksIHR5cGVfY2FzdF9wcm9ibGVtKTsKLSAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8JHtvYmplY3RUeXBlfSo+KHN0YXRpY19jYXN0PEluc3BlY3Rvcjo6SW5zcGVjdG9yT2Jq
ZWN0QmFzZSo+KHJlc3VsdC5nZXQoKSkpOworICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZigke29i
amVjdFR5cGV9KSA9PSBzaXplb2YoSW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0
QmFzZSksIHR5cGVfY2FzdF9wcm9ibGVtKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8JHtvYmpl
Y3RUeXBlfSo+KHN0YXRpY19jYXN0PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVj
dEJhc2UqPihyZXN1bHQuZ2V0KCkpKTsKIH0KICIiIgogKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmRzLXdp
dGgtYXN5bmMtYXR0cmlidXRlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmli
dXRlLmpzb24tcmVzdWx0CmluZGV4IDQxMTc5ODliMjRjMjNlOTk1NGQzMDY0NTZlZTBkYWQzZDFi
ZjNlYWEuLjIwMTIyNWYzODQyYTUzNjVmOGE0MDQxOTJkOWRkNjJjYjhjM2E5ZDIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3Rl
ZC9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uLXJlc3VsdAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMt
d2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbi1yZXN1bHQKQEAgLTk4LDE4ICs5OCwxOCBAQCBwdWJs
aWM6CiAgICAgICAgIFllbGxvdyA9IDUsCiAgICAgICAgIEJsYWNrID0gNiwKICAgICB9OyAvLyBl
bnVtIGNsYXNzIFByaW50Q29sb3IKLSAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTFN5bmNPcHRp
b25hbFJldHVyblZhbHVlcyhFcnJvclN0cmluZyYsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBT
dHJpbmcmIGluX3F1ZXJ5LCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5n
Pj4mIG9wdF9vdXRfY29sdW1uTmFtZXMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxT
dHJpbmc+KiBvcHRfb3V0X25vdGVzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8ZG91
YmxlPiogb3B0X291dF90aW1lc3RhbXAsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxJ
bnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4qIG9wdF9vdXRfdmFsdWVzLCBJbnNwZWN0b3I6OlBy
b3RvY29sOjpPcHRPdXRwdXQ8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4qIG9wdF9vdXRfcGF5
bG9hZCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PGludD4qIG9wdF9vdXRfZGF0YWJh
c2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mIG9wdF9v
dXRfc3FsRXJyb3IsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3Jz
KiBvcHRfb3V0X3NjcmVlbkNvbG9yLCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlcjo6UHJpbnRDb2xvciogb3B0X291dF9wcmludENvbG9yKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMoRXJyb3JTdHJpbmcmLCBp
bnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSwgUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+JiBvcHRfb3V0X2NvbHVtbk5hbWVzLCBJbnNwZWN0
b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8U3RyaW5nPiogb3B0X291dF9ub3RlcywgSW5zcGVjdG9y
OjpQcm90b2NvbDo6T3B0T3V0cHV0PGRvdWJsZT4qIG9wdF9vdXRfdGltZXN0YW1wLCBJbnNwZWN0
b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2Jq
ZWN0Piogb3B0X291dF92YWx1ZXMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxJbnNw
ZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRWYWx1ZT4qIG9wdF9vdXRfcGF5bG9hZCwgSW5zcGVj
dG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PGludD4qIG9wdF9vdXRfZGF0YWJhc2VJZCwgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mIG9wdF9vdXRfc3FsRXJyb3Is
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzKiBvcHRfb3V0X3Nj
cmVlbkNvbG9yLCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJp
bnRDb2xvciogb3B0X291dF9wcmludENvbG9yKSA9IDA7CiAgICAgY2xhc3MgRXhlY3V0ZVNRTEFz
eW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjayA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2UgewogICAgIHB1YmxpYzoKICAgICAg
ICAgRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjayhQYXNzUmVmUHRy
PEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+LCBpbnQgaWQpOwotICAgICAg
ICB2b2lkIHNlbmRTdWNjZXNzKFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8
U3RyaW5nPj4gY29sdW1uTmFtZXMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxTdHJp
bmc+KiBub3RlcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PGRvdWJsZT4qIHRpbWVz
dGFtcCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6SW5zcGVjdG9y
T2JqZWN0PiogdmFsdWVzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8SW5zcGVjdG9y
OjpJbnNwZWN0b3JWYWx1ZT4qIHBheWxvYWQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1
dDxpbnQ+KiBkYXRhYmFzZUlkLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFi
YXNlOjpFcnJvcj4gc3FsRXJyb3IsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxTdHJp
bmc+KiBzY3JlZW5Db2xvciwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PFN0cmluZz4q
IHByaW50Q29sb3IpOworICAgICAgICB2b2lkIHNlbmRTdWNjZXNzKFBhc3NSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4gY29sdW1uTmFtZXMsIEluc3BlY3Rvcjo6UHJv
dG9jb2w6Ok9wdE91dHB1dDxTdHJpbmc+KiBub3RlcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0
T3V0cHV0PGRvdWJsZT4qIHRpbWVzdGFtcCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4qIHZhbHVlcywgSW5zcGVjdG9y
OjpQcm90b2NvbDo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZFZhbHVl
PiogcGF5bG9hZCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PGludD4qIGRhdGFiYXNl
SWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBzcWxF
cnJvciwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PFN0cmluZz4qIHNjcmVlbkNvbG9y
LCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8U3RyaW5nPiogcHJpbnRDb2xvcik7CiAg
ICAgfTsKICAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1
ZXMoRXJyb3JTdHJpbmcmLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVy
eSwgUGFzc1JlZlB0cjxFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNr
PiBjYWxsYmFjaykgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMU3luYyhFcnJvclN0
cmluZyYsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5LCBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4mIG91dF9jb2x1bW5OYW1lcywgU3Ry
aW5nKiBvdXRfbm90ZXMsIGRvdWJsZSogb3V0X3RpbWVzdGFtcCwgSW5zcGVjdG9yOjpJbnNwZWN0
b3JPYmplY3QqIG91dF92YWx1ZXMsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqIG91dF9wYXls
b2FkLCBpbnQqIG91dF9kYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0
YWJhc2U6OkVycm9yPiYgb3V0X3NxbEVycm9yLCBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFz
ZTo6UHJpbWFyeUNvbG9ycyogb3V0X3NjcmVlbkNvbG9yLCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tl
bmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciogb3V0X3ByaW50Q29sb3IpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTFN5bmMoRXJyb3JTdHJpbmcmLCBpbnQgaW5fZGF0YWJh
c2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkFycmF5PFN0cmluZz4+JiBvdXRfY29sdW1uTmFtZXMsIFN0cmluZyogb3V0X25vdGVzLCBkb3Vi
bGUqIG91dF90aW1lc3RhbXAsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdCog
b3V0X3ZhbHVlcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkVmFsdWUqIG91dF9wYXls
b2FkLCBpbnQqIG91dF9kYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0
YWJhc2U6OkVycm9yPiYgb3V0X3NxbEVycm9yLCBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFz
ZTo6UHJpbWFyeUNvbG9ycyogb3V0X3NjcmVlbkNvbG9yLCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tl
bmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciogb3V0X3ByaW50Q29sb3IpID0gMDsKICAg
ICBjbGFzcyBFeGVjdXRlU1FMQXN5bmNDYWxsYmFjayA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2UgewogICAgIHB1YmxpYzoKICAgICAg
ICAgRXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2soUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyPiwgaW50IGlkKTsKLSAgICAgICAgdm9pZCBzZW5kU3VjY2VzcyhQ
YXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+IGNvbHVtbk5hbWVz
LCBjb25zdCBTdHJpbmcmIG5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBJbnNwZWN0b3I6Okluc3Bl
Y3Rvck9iamVjdCB2YWx1ZXMsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUgcGF5bG9hZCwgaW50
IGRhdGFiYXNlSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVy
cm9yPiBzcWxFcnJvciwgY29uc3QgU3RyaW5nJiBzY3JlZW5Db2xvciwgY29uc3QgU3RyaW5nJiBw
cmludENvbG9yKTsKKyAgICAgICAgdm9pZCBzZW5kU3VjY2VzcyhQYXNzUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+IGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG5v
dGVzLCBkb3VibGUgdGltZXN0YW1wLCBJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmpl
Y3QgdmFsdWVzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRWYWx1ZSBwYXlsb2FkLCBp
bnQgZGF0YWJhc2VJZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6
RXJyb3I+IHNxbEVycm9yLCBjb25zdCBTdHJpbmcmIHNjcmVlbkNvbG9yLCBjb25zdCBTdHJpbmcm
IHByaW50Q29sb3IpOwogICAgIH07CiAgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxBc3luYyhF
cnJvclN0cmluZyYsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5LCBQ
YXNzUmVmUHRyPEV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrPiBjYWxsYmFjaykgPSAwOwogcHJvdGVj
dGVkOgpAQCAtMTE5LDEyICsxMTksMTIgQEAgcHJvdGVjdGVkOgogY2xhc3MgSW5zcGVjdG9yRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3Rv
clN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoSW5zcGVj
dG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciosIEluc3BlY3RvckRhdGFiYXNlQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoKGxvbmcgY2Fs
bElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rv
ck9iamVjdD4gbWVzc2FnZSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoKGxv
bmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IG1lc3NhZ2UpIG92ZXJyaWRlOwogcHJpdmF0ZToKLSAg
ICB2b2lkIGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyBjYWxsSWQsIGNv
bnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKLSAgICB2b2lkIGV4ZWN1
dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0
b3I6Okluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7Ci0gICAgdm9pZCBleGVjdXRlU1FMU3luYyhs
b25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOwot
ICAgIHZvaWQgZXhlY3V0ZVNRTEFzeW5jKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3I6Oklu
c3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CisgICAgdm9pZCBleGVjdXRlU1FMU3luY09wdGlvbmFs
UmV0dXJuVmFsdWVzKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNo
ZWNrZWRPYmplY3QmIG1lc3NhZ2UpOworICAgIHZvaWQgZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxS
ZXR1cm5WYWx1ZXMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hl
Y2tlZE9iamVjdCYgbWVzc2FnZSk7CisgICAgdm9pZCBleGVjdXRlU1FMU3luYyhsb25nIGNhbGxJ
ZCwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0JiBtZXNzYWdlKTsK
KyAgICB2b2lkIGV4ZWN1dGVTUUxBc3luYyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6VW5jaGVja2VkT2JqZWN0JiBtZXNzYWdlKTsKIHByaXZhdGU6CiAgICAgSW5zcGVj
dG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyKiwgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsK
ICAgICBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9hZ2VudDsK
QEAgLTE3NCw3ICsxNzQsNyBAQCBwcml2YXRlOgogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAKICNp
bmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+Ci0jaW5jbHVkZSA8
aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0
b3JQcm90b2NvbFR5cGVzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiBuYW1l
c3BhY2UgSW5zcGVjdG9yIHsKQEAgLTE5Myw3ICsxOTMsNyBAQCBJbnNwZWN0b3JEYXRhYmFzZUJh
Y2tlbmREaXNwYXRjaGVyOjpJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKEluc3Bl
Y3RvcgogICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFp
bihBU0NJSUxpdGVyYWwoIkRhdGFiYXNlIiksIHRoaXMpOwogfQogCi12b2lkIEluc3BlY3RvckRh
dGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJp
bmcmIG1ldGhvZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2UpCit2b2lkIElu
c3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgY2FsbElkLCBj
b25zdCBTdHJpbmcmIG1ldGhvZCwgUGFzc1JlZlB0cjxQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0
PiBtZXNzYWdlKQogewogICAgIFJlZjxJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
PiBwcm90ZWN0KCp0aGlzKTsKIApAQCAtMjA5LDEyICsyMDksMTIgQEAgdm9pZCBJbnNwZWN0b3JE
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3Ry
aW5nJiBtZXQKICAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJv
cigmY2FsbElkLCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsIG1h
a2VTdHJpbmcoJ1wnJywgIkRhdGFiYXNlIiwgJy4nLCBtZXRob2QsICInIHdhcyBub3QgZm91bmQi
KSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0
ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9y
T2JqZWN0JiBtZXNzYWdlKQordm9pZCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
OjpleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgY2FsbElkLCBjb25zdCBJ
bnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3QmIG1lc3NhZ2UpCiB7Ci0gICAgUmVm
UHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVh
dGUoKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSBtZXNz
YWdlLmdldE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIpKTsKLSAgICBJbnNwZWN0b3JPYmpl
Y3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKLSAgICBJbnNw
ZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKKyAg
ICBSZWZQdHI8UHJvdG9jb2w6OlVuY2hlY2tlZEFycmF5PiBwcm90b2NvbEVycm9ycyA9IFByb3Rv
Y29sOjpVbmNoZWNrZWRBcnJheTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPFByb3RvY29sOjpVbmNo
ZWNrZWRPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IG1lc3NhZ2UuZ2V0T2JqZWN0KEFTQ0lJTGl0
ZXJhbCgicGFyYW1zIikpOworICAgIFByb3RvY29sOjpVbmNoZWNrZWRPYmplY3QqIHBhcmFtc0Nv
bnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKKyAgICBQcm90b2NvbDo6VW5jaGVj
a2VkQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICAg
aW50IGluX2RhdGFiYXNlSWQgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0SW50ZWdl
cihwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgiZGF0YWJhc2VJZCIpLCBudWxscHRy
LCBwcm90b2NvbEVycm9yc1B0cik7CiAgICAgU3RyaW5nIGluX3F1ZXJ5ID0gSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJh
bCgicXVlcnkiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgIGlmIChwcm90b2Nv
bEVycm9ycy0+bGVuZ3RoKCkpIHsKQEAgLTIyNCwxMiArMjI0LDEyIEBAIHZvaWQgSW5zcGVjdG9y
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZh
bHVlcyhsb25nCiAgICAgfQogCiAgICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiByZXN1bHQgPSBJbnNw
ZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q6OmNyZWF0ZSgpOwogICAgIFJlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiBvdXRfY29sdW1uTmFtZXM7CiAgICAg
SW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PFN0cmluZz4gb3V0X25vdGVzOwogICAgIElu
c3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxkb3VibGU+IG91dF90aW1lc3RhbXA7Ci0gICAg
SW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0
PiBvdXRfdmFsdWVzOwotICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxJbnNwZWN0
b3I6Okluc3BlY3RvclZhbHVlPiBvdXRfcGF5bG9hZDsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29s
OjpPcHRPdXRwdXQ8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBvdXRfdmFs
dWVzOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpVbmNoZWNrZWRWYWx1ZT4gb3V0X3BheWxvYWQ7CiAgICAgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpEYXRhYmFzZUlkPiBv
dXRfZGF0YWJhc2VJZDsKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6
OkVycm9yPiBvdXRfc3FsRXJyb3I7CiAgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6
OlByaW1hcnlDb2xvcnMgb3V0X3NjcmVlbkNvbG9yOwpAQCAtMjYxLDkgKzI2MSw5IEBAIHZvaWQg
SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTFN5bmNPcHRpb25h
bFJldHVyblZhbHVlcyhsb25nCiAKIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrOjpFeGVj
dXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrKFBhc3NSZWZQdHI8SW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXI+IGJhY2tlbmREaXNwYXRjaGVyLCBpbnQgaWQpIDogSW5zcGVj
dG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlKGJhY2tlbmREaXNw
YXRjaGVyLCBpZCkgeyB9CiAKLXZvaWQgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2s6OnNl
bmRTdWNjZXNzKFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4g
Y29sdW1uTmFtZXMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxTdHJpbmc+KiBub3Rl
cywgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PGRvdWJsZT4qIHRpbWVzdGFtcCwgSW5z
cGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0Piog
dmFsdWVzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8SW5zcGVjdG9yOjpJbnNwZWN0
b3JWYWx1ZT4qIHBheWxvYWQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxpbnQ+KiBk
YXRhYmFzZUlkLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJv
cj4gc3FsRXJyb3IsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxTdHJpbmc+KiBzY3Jl
ZW5Db2xvciwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PFN0cmluZz4qIHByaW50Q29s
b3IpCit2b2lkIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVj
dXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrOjpzZW5kU3VjY2VzcyhQYXNz
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+IGNvbHVtbk5hbWVzLCBJ
bnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8U3RyaW5nPiogbm90ZXMsIEluc3BlY3Rvcjo6
UHJvdG9jb2w6Ok9wdE91dHB1dDxkb3VibGU+KiB0aW1lc3RhbXAsIEluc3BlY3Rvcjo6UHJvdG9j
b2w6Ok9wdE91dHB1dDxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+KiB2YWx1
ZXMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxJbnNwZWN0b3I6OlByb3RvY29sOjpV
bmNoZWNrZWRWYWx1ZT4qIHBheWxvYWQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxp
bnQ+KiBkYXRhYmFzZUlkLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNl
OjpFcnJvcj4gc3FsRXJyb3IsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxTdHJpbmc+
KiBzY3JlZW5Db2xvciwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PFN0cmluZz4qIHBy
aW50Q29sb3IpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4ganNvbk1lc3NhZ2UgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxQcm90b2NvbDo6VW5jaGVja2Vk
T2JqZWN0PiBqc29uTWVzc2FnZSA9IFByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q6OmNyZWF0ZSgp
OwogICAgIGlmIChjb2x1bW5OYW1lcykKICAgICAgICAganNvbk1lc3NhZ2UtPnNldEFycmF5KEFT
Q0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgY29sdW1uTmFtZXMpOwogICAgIGlmIChub3Rlcy5p
c0Fzc2lnbmVkKCkpCkBAIC0yODUsMTIgKzI4NSwxMiBAQCB2b2lkIEluc3BlY3RvckRhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZh
bAogICAgIHNlbmRJZkFjdGl2ZShqc29uTWVzc2FnZSwgRXJyb3JTdHJpbmcoKSk7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTEFzeW5jT3B0
aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVz
c2FnZSkKK3ZvaWQgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNR
TEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdCYgbWVzc2FnZSkKIHsKLSAgICBSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwotICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IG1lc3NhZ2UuZ2V0T2Jq
ZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIikpOwotICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1z
Q29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwotICAgIEluc3BlY3RvckFycmF5
KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOworICAgIFJlZlB0cjxQ
cm90b2NvbDo6VW5jaGVja2VkQXJyYXk+IHByb3RvY29sRXJyb3JzID0gUHJvdG9jb2w6OlVuY2hl
Y2tlZEFycmF5OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVj
dD4gcGFyYW1zQ29udGFpbmVyID0gbWVzc2FnZS5nZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJwYXJh
bXMiKSk7CisgICAgUHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRy
ID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOworICAgIFByb3RvY29sOjpVbmNoZWNrZWRBcnJheSog
cHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgICBpbnQgaW5fZGF0
YWJhc2VJZCA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRJbnRlZ2VyKHBhcmFtc0Nv
bnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJkYXRhYmFzZUlkIiksIG51bGxwdHIsIHByb3RvY29s
RXJyb3JzUHRyKTsKICAgICBTdHJpbmcgaW5fcXVlcnkgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcjo6Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJxdWVyeSIp
LCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICAgaWYgKHByb3RvY29sRXJyb3JzLT5s
ZW5ndGgoKSkgewpAQCAtMzAwLDcgKzMwMCw3IEBAIHZvaWQgSW5zcGVjdG9yRGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uCiAg
ICAgfQogCiAgICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpVbmNoZWNrZWRPYmplY3Q6OmNyZWF0ZSgpOwogICAgIFJlZlB0cjxJbnNwZWN0b3JEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1
cm5WYWx1ZXNDYWxsYmFjaz4gY2FsbGJhY2sgPSBhZG9wdFJlZihuZXcgSW5zcGVjdG9yRGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJu
VmFsdWVzQ2FsbGJhY2sobV9iYWNrZW5kRGlzcGF0Y2hlcixjYWxsSWQpKTsKICAgICBtX2FnZW50
LT5leGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhlcnJvciwgaW5fZGF0YWJhc2VJ
ZCwgaW5fcXVlcnksIGNhbGxiYWNrKTsKIApAQCAtMzExLDEyICszMTEsMTIgQEAgdm9pZCBJbnNw
ZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJl
dHVyblZhbHVlcyhsb24KICAgICB9CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5k
RGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTFN5bmMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9i
amVjdCYgbWVzc2FnZSkKK3ZvaWQgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6
ZXhlY3V0ZVNRTFN5bmMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVu
Y2hlY2tlZE9iamVjdCYgbWVzc2FnZSkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHBy
b3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwotICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IG1lc3NhZ2UuZ2V0T2JqZWN0KEFTQ0lJTGl0
ZXJhbCgicGFyYW1zIikpOwotICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRy
ID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwotICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVy
cm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOworICAgIFJlZlB0cjxQcm90b2NvbDo6VW5j
aGVja2VkQXJyYXk+IHByb3RvY29sRXJyb3JzID0gUHJvdG9jb2w6OlVuY2hlY2tlZEFycmF5Ojpj
cmVhdGUoKTsKKyAgICBSZWZQdHI8UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gcGFyYW1zQ29u
dGFpbmVyID0gbWVzc2FnZS5nZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJwYXJhbXMiKSk7CisgICAg
UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29u
dGFpbmVyLmdldCgpOworICAgIFByb3RvY29sOjpVbmNoZWNrZWRBcnJheSogcHJvdG9jb2xFcnJv
cnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgICBpbnQgaW5fZGF0YWJhc2VJZCA9IElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRJbnRlZ2VyKHBhcmFtc0NvbnRhaW5lclB0ciwg
QVNDSUlMaXRlcmFsKCJkYXRhYmFzZUlkIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsK
ICAgICBTdHJpbmcgaW5fcXVlcnkgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3Ry
aW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJxdWVyeSIpLCBudWxscHRyLCBw
cm90b2NvbEVycm9yc1B0cik7CiAgICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewpA
QCAtMzI2LDEyICszMjYsMTIgQEAgdm9pZCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVyOjpleGVjdXRlU1FMU3luYyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGUKICAgICB9CiAKICAg
ICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQg
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpVbmNoZWNrZWRPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hl
Y2tlZE9iamVjdDo6Y3JlYXRlKCk7CiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFy
cmF5PFN0cmluZz4+IG91dF9jb2x1bW5OYW1lczsKICAgICBTdHJpbmcgb3V0X25vdGVzOwogICAg
IGRvdWJsZSBvdXRfdGltZXN0YW1wOwotICAgIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0IG91
dF92YWx1ZXM7Ci0gICAgSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSBvdXRfcGF5bG9hZDsKKyAg
ICBJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Qgb3V0X3ZhbHVlczsKKyAgICBJ
bnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRWYWx1ZSBvdXRfcGF5bG9hZDsKICAgICBJbnNw
ZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RGF0YWJhc2VJZCBvdXRfZGF0YWJhc2VJZDsKICAg
ICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBvdXRfc3FsRXJy
b3I7CiAgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMgb3V0
X3NjcmVlbkNvbG9yOwpAQCAtMzU0LDkgKzM1NCw5IEBAIHZvaWQgSW5zcGVjdG9yRGF0YWJhc2VC
YWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTFN5bmMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3Bl
CiAKIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FM
QXN5bmNDYWxsYmFjazo6RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2soUGFzc1JlZlB0cjxJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcj4gYmFja2VuZERpc3BhdGNoZXIsIGludCBpZCkgOiBJbnNwZWN0
b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2UoYmFja2VuZERpc3Bh
dGNoZXIsIGlkKSB7IH0KIAotdm9pZCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2s6OnNlbmRTdWNjZXNzKFBhc3NSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4gY29sdW1uTmFtZXMsIGNvbnN0IFN0
cmluZyYgbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0
IHZhbHVlcywgSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSBwYXlsb2FkLCBpbnQgZGF0YWJhc2VJ
ZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHNxbEVy
cm9yLCBjb25zdCBTdHJpbmcmIHNjcmVlbkNvbG9yLCBjb25zdCBTdHJpbmcmIHByaW50Q29sb3Ip
Cit2b2lkIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRl
U1FMQXN5bmNDYWxsYmFjazo6c2VuZFN1Y2Nlc3MoUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBcnJheTxTdHJpbmc+PiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBub3RlcywgZG91
YmxlIHRpbWVzdGFtcCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0IHZhbHVl
cywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkVmFsdWUgcGF5bG9hZCwgaW50IGRhdGFi
YXNlSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBz
cWxFcnJvciwgY29uc3QgU3RyaW5nJiBzY3JlZW5Db2xvciwgY29uc3QgU3RyaW5nJiBwcmludENv
bG9yKQogewotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGpzb25NZXNzYWdlID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVj
dD4ganNvbk1lc3NhZ2UgPSBQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0OjpjcmVhdGUoKTsKICAg
ICBqc29uTWVzc2FnZS0+c2V0QXJyYXkoQVNDSUlMaXRlcmFsKCJjb2x1bW5OYW1lcyIpLCBjb2x1
bW5OYW1lcyk7CiAgICAganNvbk1lc3NhZ2UtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm5vdGVz
IiksIG5vdGVzKTsKICAgICBqc29uTWVzc2FnZS0+c2V0RG91YmxlKEFTQ0lJTGl0ZXJhbCgidGlt
ZXN0YW1wIiksIHRpbWVzdGFtcCk7CkBAIC0zNjksMTIgKzM2OSwxMiBAQCB2b2lkIEluc3BlY3Rv
ckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNDYWxsYmFj
azo6c2VuZFN1YwogICAgIHNlbmRJZkFjdGl2ZShqc29uTWVzc2FnZSwgRXJyb3JTdHJpbmcoKSk7
CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNR
TEFzeW5jKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpCit2b2lk
IEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxBc3luYyhsb25n
IGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0JiBtZXNz
YWdlKQogewotICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNw
ZWN0b3JBcnJheTo6Y3JlYXRlKCk7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1z
Q29udGFpbmVyID0gbWVzc2FnZS5nZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJwYXJhbXMiKSk7Ci0g
ICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIu
Z2V0KCk7Ci0gICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xF
cnJvcnMuZ2V0KCk7CisgICAgUmVmUHRyPFByb3RvY29sOjpVbmNoZWNrZWRBcnJheT4gcHJvdG9j
b2xFcnJvcnMgPSBQcm90b2NvbDo6VW5jaGVja2VkQXJyYXk6OmNyZWF0ZSgpOworICAgIFJlZlB0
cjxQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSBtZXNzYWdlLmdl
dE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIpKTsKKyAgICBQcm90b2NvbDo6VW5jaGVja2Vk
T2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CisgICAg
UHJvdG9jb2w6OlVuY2hlY2tlZEFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJy
b3JzLmdldCgpOwogICAgIGludCBpbl9kYXRhYmFzZUlkID0gSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXI6OmdldEludGVnZXIocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoImRhdGFi
YXNlSWQiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgIFN0cmluZyBpbl9xdWVy
eSA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVy
UHRyLCBBU0NJSUxpdGVyYWwoInF1ZXJ5IiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsK
ICAgICBpZiAocHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CkBAIC0zODQsNyArMzg0LDcgQEAg
dm9pZCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMQXN5bmMo
bG9uZyBjYWxsSWQsIGNvbnN0IEluc3AKICAgICB9CiAKICAgICBFcnJvclN0cmluZyBlcnJvcjsK
LSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+
IHJlc3VsdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdDo6Y3JlYXRlKCk7
CiAgICAgUmVmUHRyPEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpF
eGVjdXRlU1FMQXN5bmNDYWxsYmFjaz4gY2FsbGJhY2sgPSBhZG9wdFJlZihuZXcgSW5zcGVjdG9y
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY0NhbGxiYWNr
KG1fYmFja2VuZERpc3BhdGNoZXIsY2FsbElkKSk7CiAgICAgbV9hZ2VudC0+ZXhlY3V0ZVNRTEFz
eW5jKGVycm9yLCBpbl9kYXRhYmFzZUlkLCBpbl9xdWVyeSwgY2FsbGJhY2spOwogCkBAIC00Mzks
NyArNDM5LDcgQEAgdm9pZCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVj
dXRlU1FMQXN5bmMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3AKIAogI2luY2x1ZGUgIkluc3BlY3Rv
clRlc3RQcm90b2NvbFR5cGVzLmgiCiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250
ZW5kQ2hhbm5lbC5oPgotI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNp
bmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgogI2luY2x1ZGUgPHd0
Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTU3
Nyw3ICs1NzcsNyBAQCBlbnVtIGNsYXNzIFByaW1hcnlDb2xvcnMgewogICAgIEJsdWUgPSAyLAog
fTsgLy8gZW51bSBjbGFzcyBQcmltYXJ5Q29sb3JzCiAvKiBEYXRhYmFzZSBlcnJvci4gKi8KLWNs
YXNzIEVycm9yIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZSB7CitjbGFz
cyBFcnJvciA6IHB1YmxpYyBJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3RCYXNl
IHsKIHB1YmxpYzoKICAgICBlbnVtIHsKICAgICAgICAgTm9GaWVsZHNTZXQgPSAwLApAQCAtNTg5
LDE0ICs1ODksMTQgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgICBjbGFz
cyBCdWlsZGVyIHsKICAgICBwcml2YXRlOgotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNw
ZWN0b3JPYmplY3Q+IG1fcmVzdWx0OworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6VW5jaGVja2VkT2JqZWN0PiBtX3Jlc3VsdDsKIAogICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RF
UD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgICB7CiAgICAgICAg
ICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhp
cyk7CiAgICAgICAgIH0KIAotICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8LypFcnJvciovSW5z
cGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHB0cikKKyAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRy
PC8qRXJyb3IqL0luc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gcHRyKQogICAg
ICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwg
YnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgIG1fcmVzdWx0
ID0gcHRyOwpAQCAtNjIxLDcgKzYyMSw3IEBAIHB1YmxpYzoKICAgICAgICAgb3BlcmF0b3IgUmVm
UHRyPEVycm9yPiYgKCkKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RB
VEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKLSAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKHNpemVvZihFcnJvcikgPT0gc2l6ZW9mKEluc3BlY3Rvcjo6SW5zcGVjdG9y
T2JqZWN0KSwgY2Fubm90X2Nhc3QpOworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9m
KEVycm9yKSA9PSBzaXplb2YoSW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0KSwg
Y2Fubm90X2Nhc3QpOwogICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0
cjxFcnJvcj4qPigmbV9yZXN1bHQpOwogICAgICAgICB9CiAKQEAgLTYzOSw5ICs2MzksOCBAQCBw
dWJsaWM6CiAgICAgICovCiAgICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgp
CiAgICAgewotICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSW5zcGVjdG9yOjpJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVs
ZHNTZXQ+KEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdDo6Y3JlYXRlKCkpOwog
ICAgIH0KLSAgICB0eXBlZGVmIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlN0cnVjdEl0ZW1UcmFpdHMg
SXRlbVRyYWl0czsKIH07CiAKIH0gLy8gRGF0YWJhc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13aXRo
LW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0
aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0CmluZGV4IDcwN2I1
NDg4MjcwNDU2YzdkMDIzM2Y0NzkwZDM3MWYxMmQ4NDVlOWQuLmRkM2UwZTIzZWU4NDRhNjBmYjk1
YTM2MTQxZjAxODkyODg1ZWQ5ZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNh
bGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtb3B0aW9u
YWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uLXJlc3VsdApAQCAtOTUsOCArOTUsOCBAQCBw
dWJsaWM6CiAgICAgICAgIFllbGxvdyA9IDUsCiAgICAgICAgIEJsYWNrID0gNiwKICAgICB9OyAv
LyBlbnVtIGNsYXNzIFByaW50Q29sb3IKLSAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZUFsbE9wdGlv
bmFsUGFyYW1ldGVycyhFcnJvclN0cmluZyYsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3Bl
Y3RvckFycmF5PiogaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyogaW5fbm90ZXMsIGNvbnN0
IGRvdWJsZSogaW5fdGltZXN0YW1wLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JP
YmplY3Q+KiBpbl92YWx1ZXMsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqIGluX3Bh
eWxvYWQsIGNvbnN0IGludCogaW5fZGF0YWJhc2VJZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6
SW5zcGVjdG9yT2JqZWN0PiogaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyogaW5fc2NyZWVuQ29s
b3IsIGNvbnN0IFN0cmluZyogaW5fcHJpbnRDb2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkFycmF5PFN0cmluZz4+JiBvcHRfb3V0X2NvbHVtbk5hbWVzLCBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpPcHRPdXRwdXQ8U3RyaW5nPiogb3B0X291dF9ub3RlcywgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6T3B0T3V0cHV0PGRvdWJsZT4qIG9wdF9vdXRfdGltZXN0YW1wLCBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpPcHRPdXRwdXQ8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+KiBvcHRfb3V0X3ZhbHVl
cywgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFs
dWU+KiBvcHRfb3V0X3BheWxvYWQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxpbnQ+
KiBvcHRfb3V0X2RhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFz
ZTo6RXJyb3I+JiBvcHRfb3V0X3NxbEVycm9yLCBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFz
ZTo6UHJpbWFyeUNvbG9ycyogb3B0X291dF9zY3JlZW5Db2xvciwgSW5zcGVjdG9yRGF0YWJhc2VC
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3IqIG9wdF9vdXRfcHJpbnRDb2xvcikg
PSAwOwotICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMoRXJyb3JT
dHJpbmcmLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4mIGluX2NvbHVt
bk5hbWVzLCBjb25zdCBTdHJpbmcmIGluX25vdGVzLCBkb3VibGUgaW5fdGltZXN0YW1wLCBjb25z
dCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiBpbl92YWx1ZXMsIEluc3BlY3Rv
cjo6SW5zcGVjdG9yVmFsdWUgaW5fcGF5bG9hZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFJl
ZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mIGluX3NxbEVycm9yLCBjb25zdCBTdHJp
bmcmIGluX3NjcmVlbkNvbG9yLCBjb25zdCBTdHJpbmcmIGluX3ByaW50Q29sb3IsIFJlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiYgb3V0X2NvbHVtbk5hbWVzLCBTdHJp
bmcqIG91dF9ub3RlcywgZG91YmxlKiBvdXRfdGltZXN0YW1wLCBJbnNwZWN0b3I6Okluc3BlY3Rv
ck9iamVjdCogb3V0X3ZhbHVlcywgSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSogb3V0X3BheWxv
YWQsIGludCogb3V0X2RhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRh
YmFzZTo6RXJyb3I+JiBvdXRfc3FsRXJyb3IsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNl
OjpQcmltYXJ5Q29sb3JzKiBvdXRfc2NyZWVuQ29sb3IsIEluc3BlY3RvckRhdGFiYXNlQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9yKiBvdXRfcHJpbnRDb2xvcikgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKEVycm9yU3RyaW5nJiwg
Y29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZEFycmF5PiogaW5fY29s
dW1uTmFtZXMsIGNvbnN0IFN0cmluZyogaW5fbm90ZXMsIGNvbnN0IGRvdWJsZSogaW5fdGltZXN0
YW1wLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0Piog
aW5fdmFsdWVzLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRWYWx1ZSogaW5f
cGF5bG9hZCwgY29uc3QgaW50KiBpbl9kYXRhYmFzZUlkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiogaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyog
aW5fc2NyZWVuQ29sb3IsIGNvbnN0IFN0cmluZyogaW5fcHJpbnRDb2xvciwgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+JiBvcHRfb3V0X2NvbHVtbk5hbWVzLCBJbnNw
ZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8U3RyaW5nPiogb3B0X291dF9ub3RlcywgSW5zcGVj
dG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PGRvdWJsZT4qIG9wdF9vdXRfdGltZXN0YW1wLCBJbnNw
ZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2Vk
T2JqZWN0Piogb3B0X291dF92YWx1ZXMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxJ
bnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRWYWx1ZT4qIG9wdF9vdXRfcGF5bG9hZCwgSW5z
cGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PGludD4qIG9wdF9vdXRfZGF0YWJhc2VJZCwgUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mIG9wdF9vdXRfc3FsRXJy
b3IsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzKiBvcHRfb3V0
X3NjcmVlbkNvbG9yLCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6
UHJpbnRDb2xvciogb3B0X291dF9wcmludENvbG9yKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGV4
ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhFcnJvclN0cmluZyYsIGNvbnN0IFJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRBcnJheT4mIGluX2NvbHVtbk5hbWVzLCBjb25zdCBT
dHJpbmcmIGluX25vdGVzLCBkb3VibGUgaW5fdGltZXN0YW1wLCBjb25zdCBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiYgaW5fdmFsdWVzLCBJbnNwZWN0b3I6OlBy
b3RvY29sOjpVbmNoZWNrZWRWYWx1ZSBpbl9wYXlsb2FkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29u
c3QgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4mIGluX3NxbEVy
cm9yLCBjb25zdCBTdHJpbmcmIGluX3NjcmVlbkNvbG9yLCBjb25zdCBTdHJpbmcmIGluX3ByaW50
Q29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiYgb3V0X2Nv
bHVtbk5hbWVzLCBTdHJpbmcqIG91dF9ub3RlcywgZG91YmxlKiBvdXRfdGltZXN0YW1wLCBJbnNw
ZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3QqIG91dF92YWx1ZXMsIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlVuY2hlY2tlZFZhbHVlKiBvdXRfcGF5bG9hZCwgaW50KiBvdXRfZGF0YWJhc2VJ
ZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mIG91dF9zcWxF
cnJvciwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMqIG91dF9z
Y3JlZW5Db2xvciwgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlBy
aW50Q29sb3IqIG91dF9wcmludENvbG9yKSA9IDA7CiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB+
SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKIH07CkBAIC0xMDQs
MTAgKzEwNCwxMCBAQCBwcm90ZWN0ZWQ6CiBjbGFzcyBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmRE
aXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yU3VwcGxlbWVudGFs
QmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3Bl
Y3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShJbnNwZWN0b3I6Okluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyKiwgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXIqKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0
cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBtZXNz
YWdlKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNv
bnN0IFN0cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hl
Y2tlZE9iamVjdD4gbWVzc2FnZSkgb3ZlcnJpZGU7CiBwcml2YXRlOgotICAgIHZvaWQgZXhlY3V0
ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNw
ZWN0b3JPYmplY3QmIG1lc3NhZ2UpOwotICAgIHZvaWQgZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0
ZXJzKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgbWVzc2Fn
ZSk7CisgICAgdm9pZCBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgY2FsbElkLCBj
b25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3QmIG1lc3NhZ2UpOworICAg
IHZvaWQgZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgY2FsbElkLCBjb25zdCBJbnNw
ZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3QmIG1lc3NhZ2UpOwogcHJpdmF0ZToKICAg
ICBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKEluc3BlY3Rvcjo6SW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXIqLCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlciopOwogICAgIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBt
X2FnZW50OwpAQCAtMTU3LDcgKzE1Nyw3IEBAIHByaXZhdGU6CiAjaWYgRU5BQkxFKElOU1BFQ1RP
UikKIAogI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KLSNp
bmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8aW5zcGVjdG9y
L0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewpAQCAtMTc2LDcgKzE3Niw3IEBAIEluc3BlY3RvckRh
dGFiYXNlQmFja2VuZERpc3BhdGNoZXI6Okluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXIoSW5zcGVjdG9yCiAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVy
Rm9yRG9tYWluKEFTQ0lJTGl0ZXJhbCgiRGF0YWJhc2UiKSwgdGhpcyk7CiB9CiAKLXZvaWQgSW5z
cGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNv
bnN0IFN0cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbWVzc2FnZSkK
K3ZvaWQgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBj
YWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPFByb3RvY29sOjpVbmNoZWNr
ZWRPYmplY3Q+IG1lc3NhZ2UpCiB7CiAgICAgUmVmPEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwogCkBAIC0xODgsMjYgKzE4OCwyNiBAQCB2b2lkIElu
c3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgY2FsbElkLCBj
b25zdCBTdHJpbmcmIG1ldAogICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90
b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RG
b3VuZCwgbWFrZVN0cmluZygnXCcnLCAiRGF0YWJhc2UiLCAnLicsIG1ldGhvZCwgIicgd2FzIG5v
dCBmb3VuZCIpKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
OjpleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0
b3JPYmplY3QmIG1lc3NhZ2UpCit2b2lkIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXI6OmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdCYgbWVzc2FnZSkKIHsKLSAgICBSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgp
OwotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IG1lc3NhZ2Uu
Z2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIikpOwotICAgIEluc3BlY3Rvck9iamVjdCog
cGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwotICAgIEluc3BlY3Rv
ckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOworICAgIFJl
ZlB0cjxQcm90b2NvbDo6VW5jaGVja2VkQXJyYXk+IHByb3RvY29sRXJyb3JzID0gUHJvdG9jb2w6
OlVuY2hlY2tlZEFycmF5OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8UHJvdG9jb2w6OlVuY2hlY2tl
ZE9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gbWVzc2FnZS5nZXRPYmplY3QoQVNDSUlMaXRlcmFs
KCJwYXJhbXMiKSk7CisgICAgUHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdCogcGFyYW1zQ29udGFp
bmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOworICAgIFByb3RvY29sOjpVbmNoZWNrZWRB
cnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgICBib29s
IGNvbHVtbk5hbWVzX3ZhbHVlRm91bmQgPSBmYWxzZTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpJ
bnNwZWN0b3JBcnJheT4gaW5fY29sdW1uTmFtZXMgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cjo6Z2V0QXJyYXkocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoImNvbHVtbk5hbWVz
IiksICZjb2x1bW5OYW1lc192YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7CisgICAgUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZEFycmF5PiBpbl9jb2x1bW5OYW1lcyA9
IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRBcnJheShwYXJhbXNDb250YWluZXJQdHIs
IEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgJmNvbHVtbk5hbWVzX3ZhbHVlRm91bmQsIHBy
b3RvY29sRXJyb3JzUHRyKTsKICAgICBib29sIG5vdGVzX3ZhbHVlRm91bmQgPSBmYWxzZTsKICAg
ICBTdHJpbmcgaW5fbm90ZXMgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5n
KHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJub3RlcyIpLCAmbm90ZXNfdmFsdWVG
b3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgIGJvb2wgdGltZXN0YW1wX3ZhbHVlRm91bmQg
PSBmYWxzZTsKICAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8ZG91YmxlPiBpbl90
aW1lc3RhbXAgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0RG91YmxlKHBhcmFtc0Nv
bnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJ0aW1lc3RhbXAiKSwgJnRpbWVzdGFtcF92YWx1ZUZv
dW5kLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICAgYm9vbCB2YWx1ZXNfdmFsdWVGb3VuZCA9IGZh
bHNlOwotICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gaW5fdmFsdWVzID0g
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldE9iamVjdChwYXJhbXNDb250YWluZXJQdHIs
IEFTQ0lJTGl0ZXJhbCgidmFsdWVzIiksICZ2YWx1ZXNfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJv
cnNQdHIpOworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+
IGluX3ZhbHVlcyA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRPYmplY3QocGFyYW1z
Q29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoInZhbHVlcyIpLCAmdmFsdWVzX3ZhbHVlRm91bmQs
IHByb3RvY29sRXJyb3JzUHRyKTsKICAgICBib29sIHBheWxvYWRfdmFsdWVGb3VuZCA9IGZhbHNl
OwotICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiBpbl9wYXlsb2FkID0gSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldEFueShwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJ
TGl0ZXJhbCgicGF5bG9hZCIpLCAmcGF5bG9hZF92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0
cik7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZFZhbHVlPiBpbl9w
YXlsb2FkID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldEFueShwYXJhbXNDb250YWlu
ZXJQdHIsIEFTQ0lJTGl0ZXJhbCgicGF5bG9hZCIpLCAmcGF5bG9hZF92YWx1ZUZvdW5kLCBwcm90
b2NvbEVycm9yc1B0cik7CiAgICAgYm9vbCBkYXRhYmFzZUlkX3ZhbHVlRm91bmQgPSBmYWxzZTsK
ICAgICBpbnQgaW5fZGF0YWJhc2VJZCA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRJ
bnRlZ2VyKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJkYXRhYmFzZUlkIiksICZk
YXRhYmFzZUlkX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgICBib29sIHNxbEVy
cm9yX3ZhbHVlRm91bmQgPSBmYWxzZTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JP
YmplY3Q+IGluX3NxbEVycm9yID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldE9iamVj
dChwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgic3FsRXJyb3IiKSwgJnNxbEVycm9y
X3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBpbl9zcWxFcnJvciA9IEluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyOjpnZXRPYmplY3QocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoInNx
bEVycm9yIiksICZzcWxFcnJvcl92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICAg
Ym9vbCBzY3JlZW5Db2xvcl92YWx1ZUZvdW5kID0gZmFsc2U7CiAgICAgU3RyaW5nIGluX3NjcmVl
bkNvbG9yID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhwYXJhbXNDb250
YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgic2NyZWVuQ29sb3IiKSwgJnNjcmVlbkNvbG9yX3ZhbHVl
Rm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgICBib29sIHByaW50Q29sb3JfdmFsdWVGb3Vu
ZCA9IGZhbHNlOwpAQCAtMjE5LDEyICsyMTksMTIgQEAgdm9pZCBJbnNwZWN0b3JEYXRhYmFzZUJh
Y2tlbmREaXNwYXRjaGVyOjpleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgY2FsbEkK
ICAgICB9CiAKICAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlVuY2hlY2tlZE9iamVjdDo6Y3JlYXRlKCk7CiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+IG91dF9jb2x1bW5OYW1lczsKICAgICBJbnNwZWN0b3I6
OlByb3RvY29sOjpPcHRPdXRwdXQ8U3RyaW5nPiBvdXRfbm90ZXM7CiAgICAgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6T3B0T3V0cHV0PGRvdWJsZT4gb3V0X3RpbWVzdGFtcDsKLSAgICBJbnNwZWN0b3I6
OlByb3RvY29sOjpPcHRPdXRwdXQ8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IG91dF92YWx1
ZXM7Ci0gICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6SW5zcGVj
dG9yVmFsdWU+IG91dF9wYXlsb2FkOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1
dDxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IG91dF92YWx1ZXM7CisgICAg
SW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hl
Y2tlZFZhbHVlPiBvdXRfcGF5bG9hZDsKICAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRw
dXQ8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkRhdGFiYXNlSWQ+IG91dF9kYXRhYmFz
ZUlkOwogICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IG91
dF9zcWxFcnJvcjsKICAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNv
bG9ycyBvdXRfc2NyZWVuQ29sb3I7CkBAIC0yNTQsMTkgKzI1NCwxOSBAQCB2b2lkIEluc3BlY3Rv
ckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMo
bG9uZyBjYWxsSQogICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQs
IHJlc3VsdC5yZWxlYXNlKCksIGVycm9yKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEYXRhYmFzZUJh
Y2tlbmREaXNwYXRjaGVyOjpleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMobG9uZyBjYWxsSWQs
IGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSkKK3ZvaWQgSW5zcGVjdG9yRGF0YWJhc2VC
YWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgY2FsbElk
LCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3QmIG1lc3NhZ2UpCiB7
Ci0gICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFy
cmF5OjpjcmVhdGUoKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWlu
ZXIgPSBtZXNzYWdlLmdldE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIpKTsKLSAgICBJbnNw
ZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsK
LSAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5n
ZXQoKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4gaW5fY29sdW1uTmFt
ZXMgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0QXJyYXkocGFyYW1zQ29udGFpbmVy
UHRyLCBBU0NJSUxpdGVyYWwoImNvbHVtbk5hbWVzIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3Jz
UHRyKTsKKyAgICBSZWZQdHI8UHJvdG9jb2w6OlVuY2hlY2tlZEFycmF5PiBwcm90b2NvbEVycm9y
cyA9IFByb3RvY29sOjpVbmNoZWNrZWRBcnJheTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPFByb3Rv
Y29sOjpVbmNoZWNrZWRPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IG1lc3NhZ2UuZ2V0T2JqZWN0
KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIikpOworICAgIFByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Qq
IHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKKyAgICBQcm90b2Nv
bDo6VW5jaGVja2VkQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0
KCk7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZEFycmF5PiBpbl9j
b2x1bW5OYW1lcyA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRBcnJheShwYXJhbXND
b250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgbnVsbHB0ciwgcHJvdG9j
b2xFcnJvcnNQdHIpOwogICAgIFN0cmluZyBpbl9ub3RlcyA9IEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyOjpnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoIm5vdGVz
IiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgICBkb3VibGUgaW5fdGltZXN0YW1w
ID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldERvdWJsZShwYXJhbXNDb250YWluZXJQ
dHIsIEFTQ0lJTGl0ZXJhbCgidGltZXN0YW1wIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRy
KTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGluX3ZhbHVlcyA9IElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRPYmplY3QocGFyYW1zQ29udGFpbmVyUHRyLCBB
U0NJSUxpdGVyYWwoInZhbHVlcyIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7Ci0gICAg
UmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IGluX3BheWxvYWQgPSBJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcjo6Z2V0QW55KHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFs
KCJwYXlsb2FkIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKKyAgICBSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBpbl92YWx1ZXMgPSBJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcjo6Z2V0T2JqZWN0KHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRl
cmFsKCJ2YWx1ZXMiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIpOworICAgIFJlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRWYWx1ZT4gaW5fcGF5bG9hZCA9IEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyOjpnZXRBbnkocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVy
YWwoInBheWxvYWQiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgIGludCBpbl9k
YXRhYmFzZUlkID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldEludGVnZXIocGFyYW1z
Q29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoImRhdGFiYXNlSWQiKSwgbnVsbHB0ciwgcHJvdG9j
b2xFcnJvcnNQdHIpOwotICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gaW5f
c3FsRXJyb3IgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0T2JqZWN0KHBhcmFtc0Nv
bnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJzcWxFcnJvciIpLCBudWxscHRyLCBwcm90b2NvbEVy
cm9yc1B0cik7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVj
dD4gaW5fc3FsRXJyb3IgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0T2JqZWN0KHBh
cmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJzcWxFcnJvciIpLCBudWxscHRyLCBwcm90
b2NvbEVycm9yc1B0cik7CiAgICAgU3RyaW5nIGluX3NjcmVlbkNvbG9yID0gSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJh
bCgic2NyZWVuQ29sb3IiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgIFN0cmlu
ZyBpbl9wcmludENvbG9yID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhw
YXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgicHJpbnRDb2xvciIpLCBudWxscHRyLCBw
cm90b2NvbEVycm9yc1B0cik7CiAgICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewpA
QCAtMjc2LDEyICsyNzYsMTIgQEAgdm9pZCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVyOjpleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMobG9uZyBjYWxsSWQKICAgICB9CiAKICAg
ICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQg
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpVbmNoZWNrZWRPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hl
Y2tlZE9iamVjdDo6Y3JlYXRlKCk7CiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFy
cmF5PFN0cmluZz4+IG91dF9jb2x1bW5OYW1lczsKICAgICBTdHJpbmcgb3V0X25vdGVzOwogICAg
IGRvdWJsZSBvdXRfdGltZXN0YW1wOwotICAgIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0IG91
dF92YWx1ZXM7Ci0gICAgSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSBvdXRfcGF5bG9hZDsKKyAg
ICBJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Qgb3V0X3ZhbHVlczsKKyAgICBJ
bnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRWYWx1ZSBvdXRfcGF5bG9hZDsKICAgICBJbnNw
ZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RGF0YWJhc2VJZCBvdXRfZGF0YWJhc2VJZDsKICAg
ICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBvdXRfc3FsRXJy
b3I7CiAgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMgb3V0
X3NjcmVlbkNvbG9yOwpAQCAtMzQ2LDcgKzM0Niw3IEBAIHZvaWQgSW5zcGVjdG9yRGF0YWJhc2VC
YWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgY2FsbElk
CiAKICNpbmNsdWRlICJJbnNwZWN0b3JUZXN0UHJvdG9jb2xUeXBlcy5oIgogI2luY2x1ZGUgPGlu
c3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KLSNpbmNsdWRlIDxpbnNwZWN0b3Iv
SW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclByb3RvY29s
VHlwZXMuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgogCkBAIC00ODQsNyArNDg0LDcgQEAgZW51bSBjbGFzcyBQcmltYXJ5Q29s
b3JzIHsKICAgICBCbHVlID0gMiwKIH07IC8vIGVudW0gY2xhc3MgUHJpbWFyeUNvbG9ycwogLyog
RGF0YWJhc2UgZXJyb3IuICovCi1jbGFzcyBFcnJvciA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3Bl
Y3Rvck9iamVjdEJhc2UgeworY2xhc3MgRXJyb3IgOiBwdWJsaWMgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6VW5jaGVja2VkT2JqZWN0QmFzZSB7CiBwdWJsaWM6CiAgICAgZW51bSB7CiAgICAgICAgIE5v
RmllbGRzU2V0ID0gMCwKQEAgLTQ5NiwxNCArNDk2LDE0IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0
ZTxpbnQgU1RBVEU+CiAgICAgY2xhc3MgQnVpbGRlciB7CiAgICAgcHJpdmF0ZToKLSAgICAgICAg
UmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKKyAgICAgICAgUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gbV9yZXN1bHQ7CiAKICAg
ICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRl
KCkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxk
ZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcihQ
YXNzUmVmUHRyPC8qRXJyb3IqL0luc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBwdHIpCisgICAg
ICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjwvKkVycm9yKi9JbnNwZWN0b3I6OlByb3RvY29sOjpVbmNo
ZWNrZWRPYmplY3Q+IHB0cikKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
U1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7
CiAgICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKQEAgLTUyOCw3ICs1MjgsNyBAQCBwdWJsaWM6
CiAgICAgICAgIG9wZXJhdG9yIFJlZlB0cjxFcnJvcj4mICgpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9y
ZWFkeSk7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoRXJyb3IpID09IHNpemVv
ZihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCksIGNhbm5vdF9jYXN0KTsKKyAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKHNpemVvZihFcnJvcikgPT0gc2l6ZW9mKEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlVuY2hlY2tlZE9iamVjdCksIGNhbm5vdF9jYXN0KTsKICAgICAgICAgICAgIHJldHVybiAq
cmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8RXJyb3I+Kj4oJm1fcmVzdWx0KTsKICAgICAgICAgfQog
CkBAIC01NDYsOSArNTQ2LDggQEAgcHVibGljOgogICAgICAqLwogICAgIHN0YXRpYyBCdWlsZGVy
PE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9G
aWVsZHNTZXQ+KEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7CisgICAgICAg
IHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNr
ZWRPYmplY3Q6OmNyZWF0ZSgpKTsKICAgICB9Ci0gICAgdHlwZWRlZiBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpTdHJ1Y3RJdGVtVHJhaXRzIEl0ZW1UcmFpdHM7CiB9OwogCiB9IC8vIERhdGFiYXNlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZXhwZWN0ZWQvZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uLXJlc3VsdCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9k
b21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24tcmVzdWx0CmluZGV4IDU1ZGJk
NTI1NmNjYzkxZThmMzQwZTgwMmNlYzBkM2IzYWE0NDFkMzguLmQ0MjkyYzdhMjk1Nzk3MmEzODEz
YmNkODVmZjUyY2Q3MzdkNzcxZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW5zLXdpdGgtdmFyeWluZy1jb21t
YW5kLXNpemVzLmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNp
emVzLmpzb24tcmVzdWx0CkBAIC0xMTAsOSArMTEwLDkgQEAgcHJvdGVjdGVkOgogY2xhc3MgSW5z
cGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3I6
Okluc3BlY3RvclN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyPiBjcmVh
dGUoSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciosIEluc3BlY3Rvck5ldHdv
cmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdmlydHVhbCB2b2lkIGRpc3BhdGNo
KGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6
Okluc3BlY3Rvck9iamVjdD4gbWVzc2FnZSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGRp
c3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUGFzc1JlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IG1lc3NhZ2UpIG92ZXJyaWRlOwogcHJp
dmF0ZToKLSAgICB2b2lkIGxvYWRSZXNvdXJjZTEobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rv
cjo6SW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTEobG9u
ZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdCYgbWVz
c2FnZSk7CiBwcml2YXRlOgogICAgIEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIo
SW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciosIEluc3BlY3Rvck5ldHdvcmsx
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CiAgICAgSW5zcGVjdG9yTmV0d29yazFCYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQ7CkBAIC0xMjEsMTUgKzEyMSwxNSBAQCBwcml2YXRl
OgogY2xhc3MgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1Ymxp
YyBJbnNwZWN0b3I6Okluc3BlY3RvclN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKIHB1
YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNw
YXRjaGVyPiBjcmVhdGUoSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciosIElu
c3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdmlydHVhbCB2
b2lkIGRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUGFzc1JlZlB0
cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gbWVzc2FnZSkgb3ZlcnJpZGU7CisgICAgdmly
dHVhbCB2b2lkIGRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUGFz
c1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IG1lc3NhZ2UpIG92
ZXJyaWRlOwogcHJpdmF0ZToKLSAgICB2b2lkIGxvYWRSZXNvdXJjZTEobG9uZyBjYWxsSWQsIGNv
bnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKLSAgICB2b2lkIGxvYWRS
ZXNvdXJjZTIobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBt
ZXNzYWdlKTsKLSAgICB2b2lkIGxvYWRSZXNvdXJjZTMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKLSAgICB2b2lkIGxvYWRSZXNvdXJjZTQo
bG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsK
LSAgICB2b2lkIGxvYWRSZXNvdXJjZTUobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5z
cGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKLSAgICB2b2lkIGxvYWRSZXNvdXJjZTYobG9uZyBjYWxs
SWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKLSAgICB2b2lk
IGxvYWRSZXNvdXJjZTcobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2Jq
ZWN0JiBtZXNzYWdlKTsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTEobG9uZyBjYWxsSWQsIGNvbnN0
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdCYgbWVzc2FnZSk7CisgICAgdm9p
ZCBsb2FkUmVzb3VyY2UyKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpV
bmNoZWNrZWRPYmplY3QmIG1lc3NhZ2UpOworICAgIHZvaWQgbG9hZFJlc291cmNlMyhsb25nIGNh
bGxJZCwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0JiBtZXNzYWdl
KTsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTQobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdCYgbWVzc2FnZSk7CisgICAgdm9pZCBsb2FkUmVzb3Vy
Y2U1KGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmpl
Y3QmIG1lc3NhZ2UpOworICAgIHZvaWQgbG9hZFJlc291cmNlNihsb25nIGNhbGxJZCwgY29uc3Qg
SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0JiBtZXNzYWdlKTsKKyAgICB2b2lk
IGxvYWRSZXNvdXJjZTcobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVu
Y2hlY2tlZE9iamVjdCYgbWVzc2FnZSk7CiBwcml2YXRlOgogICAgIEluc3BlY3Rvck5ldHdvcmsz
QmFja2VuZERpc3BhdGNoZXIoSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcios
IEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CiAgICAgSW5zcGVj
dG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQ7CkBAIC0xNzksNyAr
MTc5LDcgQEAgcHJpdmF0ZToKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogCiAjaW5jbHVkZSA8aW5z
cGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgotI2luY2x1ZGUgPGluc3BlY3Rvci9J
bnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xU
eXBlcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CkBAIC0xOTksNyArMTk5LDcgQEAgSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0
Y2hlcjo6SW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3IKICAgICBt
X2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oQVNDSUlMaXRl
cmFsKCJOZXR3b3JrMSIpLCB0aGlzKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JOZXR3b3JrMUJhY2tl
bmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2Qs
IFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlKQordm9pZCBJbnNwZWN0b3JOZXR3
b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5n
JiBtZXRob2QsIFBhc3NSZWZQdHI8UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gbWVzc2FnZSkK
IHsKICAgICBSZWY8SW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgq
dGhpcyk7CiAKQEAgLTIwOSwxMCArMjA5LDEwIEBAIHZvaWQgSW5zcGVjdG9yTmV0d29yazFCYWNr
ZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0CiAg
ICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwg
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCBtYWtlU3RyaW5nKCdc
JycsICJOZXR3b3JrMSIsICcuJywgbWV0aG9kLCAiJyB3YXMgbm90IGZvdW5kIikpOwogfQogCi12
b2lkIEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTEobG9u
ZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYpCit2b2lkIEluc3BlY3Rvck5ldHdvcmsx
QmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTEobG9uZyBjYWxsSWQsIGNvbnN0IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdCYpCiB7CiAgICAgRXJyb3JTdHJpbmcgZXJy
b3I7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2Jq
ZWN0PiByZXN1bHQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q6OmNyZWF0
ZSgpOwogICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTEoZXJyb3IpOwogCiAgICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgZXJyb3Ip
OwpAQCAtMjMwLDExICsyMzAsMTEgQEAgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hl
cjo6SW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3IKICAgICBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oQVNDSUlMaXRlcmFs
KCJOZXR3b3JrMyIpLCB0aGlzKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmRE
aXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFBh
c3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlKQordm9pZCBJbnNwZWN0b3JOZXR3b3Jr
M0JhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBt
ZXRob2QsIFBhc3NSZWZQdHI8UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gbWVzc2FnZSkKIHsK
ICAgICBSZWY8SW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhp
cyk7CiAKLSAgICB0eXBlZGVmIHZvaWQgKEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNo
ZXI6OipDYWxsSGFuZGxlcikobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9y
T2JqZWN0JiBtZXNzYWdlKTsKKyAgICB0eXBlZGVmIHZvaWQgKEluc3BlY3Rvck5ldHdvcmszQmFj
a2VuZERpc3BhdGNoZXI6OipDYWxsSGFuZGxlcikobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdCYgbWVzc2FnZSk7CiAgICAgdHlwZWRlZiBIYXNo
TWFwPFN0cmluZywgQ2FsbEhhbmRsZXI+IERpc3BhdGNoTWFwOwogICAgIERFUFJFQ0FURURfREVG
SU5FX1NUQVRJQ19MT0NBTChEaXNwYXRjaE1hcCwgZGlzcGF0Y2hNYXAsICgpKTsKICAgICBpZiAo
ZGlzcGF0Y2hNYXAuaXNFbXB0eSgpKSB7CkBAIC0yNjQsNjQgKzI2NCw2NCBAQCB2b2lkIEluc3Bl
Y3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25z
dCBTdHJpbmcmIG1ldAogICAgICgoKnRoaXMpLippdC0+dmFsdWUpKGNhbGxJZCwgKm1lc3NhZ2Uu
Z2V0KCkpOwogfQogCi12b2lkIEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6Omxv
YWRSZXNvdXJjZTEobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYpCit2b2lkIElu
c3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTEobG9uZyBjYWxs
SWQsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdCYpCiB7CiAgICAg
RXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0g
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6VW5jaGVja2VkT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNr
ZWRPYmplY3Q6OmNyZWF0ZSgpOwogICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTEoZXJyb3IpOwog
CiAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJl
bGVhc2UoKSwgZXJyb3IpOwogfQogCi12b2lkIEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3Bh
dGNoZXI6OmxvYWRSZXNvdXJjZTIobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYp
Cit2b2lkIEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTIo
bG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdCYp
CiB7CiAgICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
cmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3I6OlByb3RvY29s
OjpVbmNoZWNrZWRPYmplY3Q6OmNyZWF0ZSgpOwogICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTIo
ZXJyb3IpOwogCiAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwg
cmVzdWx0LnJlbGVhc2UoKSwgZXJyb3IpOwogfQogCi12b2lkIEluc3BlY3Rvck5ldHdvcmszQmFj
a2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rv
ck9iamVjdCYpCit2b2lkIEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRS
ZXNvdXJjZTMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tl
ZE9iamVjdCYpCiB7CiAgICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3I6
OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q6OmNyZWF0ZSgpOwogICAgIG1fYWdlbnQtPmxvYWRS
ZXNvdXJjZTMoZXJyb3IpOwogCiAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNl
KGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgZXJyb3IpOwogfQogCi12b2lkIEluc3BlY3Rvck5l
dHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTQobG9uZyBjYWxsSWQsIGNvbnN0
IEluc3BlY3Rvck9iamVjdCYpCit2b2lkIEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNo
ZXI6OmxvYWRSZXNvdXJjZTQobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlVuY2hlY2tlZE9iamVjdCYpCiB7CiAgICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAg
ICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiByZXN1bHQgPSBJ
bnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q6OmNyZWF0ZSgpOwogICAgIG1fYWdl
bnQtPmxvYWRSZXNvdXJjZTQoZXJyb3IpOwogCiAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2Vu
ZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgZXJyb3IpOwogfQogCi12b2lkIElu
c3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTUobG9uZyBjYWxs
SWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYpCit2b2lkIEluc3BlY3Rvck5ldHdvcmszQmFja2Vu
ZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTUobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdCYpCiB7CiAgICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0g
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBy
ZXN1bHQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q6OmNyZWF0ZSgpOwog
ICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTUoZXJyb3IpOwogCiAgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgZXJyb3IpOwogfQog
Ci12b2lkIEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTYo
bG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYpCit2b2lkIEluc3BlY3Rvck5ldHdv
cmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTYobG9uZyBjYWxsSWQsIGNvbnN0IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdCYpCiB7CiAgICAgRXJyb3JTdHJpbmcg
ZXJyb3I7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2Vk
T2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q6OmNy
ZWF0ZSgpOwogICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTYoZXJyb3IpOwogCiAgICAgbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgZXJy
b3IpOwogfQogCi12b2lkIEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRS
ZXNvdXJjZTcobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYpCit2b2lkIEluc3Bl
Y3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTcobG9uZyBjYWxsSWQs
IGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdCYpCiB7CiAgICAgRXJy
b3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
VW5jaGVja2VkT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRP
YmplY3Q6OmNyZWF0ZSgpOwogICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTcoZXJyb3IpOwogCiAg
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVh
c2UoKSwgZXJyb3IpOwpAQCAtMzcxLDcgKzM3MSw3IEBAIHZvaWQgSW5zcGVjdG9yTmV0d29yazNC
YWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVj
CiAKICNpbmNsdWRlICJJbnNwZWN0b3JUZXN0UHJvdG9jb2xUeXBlcy5oIgogI2luY2x1ZGUgPGlu
c3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KLSNpbmNsdWRlIDxpbnNwZWN0b3Iv
SW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclByb3RvY29s
VHlwZXMuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVy
cy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC9ldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0
CmluZGV4IGM5ODg3NjFjZTU2MjRkM2VlZWQzZDQ1Y2Y2YjEzMWIzOWQzNmI0ZTYuLjIwNTY0NGJm
YjUyZTVmYmU2ZjA1YzU4YzYyMmJhMjFlMjE4MmFiZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9ldmVudHMtd2l0aC1v
cHRpb25hbC1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9ldmVudHMtd2l0aC1vcHRpb25hbC1w
YXJhbWV0ZXJzLmpzb24tcmVzdWx0CkBAIC0xMjQsNyArMTI0LDcgQEAgdHlwZWRlZiBTdHJpbmcg
RXJyb3JTdHJpbmc7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKIAogI2luY2x1ZGUgPGluc3BlY3Rv
ci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KLSNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVj
dG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclByb3RvY29sVHlwZXMu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewpAQCAtMTc1LDcgKzE3NSw3IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiAjaW5jbHVkZSAi
SW5zcGVjdG9yVGVzdFByb3RvY29sVHlwZXMuaCIKICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsLmg+Ci0jaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVl
cy5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+CiAjaW5j
bHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
IApAQCAtMTg2LDggKzE4Niw4IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogY2xhc3MgSW5zcGVj
dG9yRGF0YWJhc2VGcm9udGVuZERpc3BhdGNoZXIgewogcHVibGljOgogICAgIEluc3BlY3RvckRh
dGFiYXNlRnJvbnRlbmREaXNwYXRjaGVyKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbCkgeyB9Ci0gICAgdm9pZCBkaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0
ZXJzKFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4gY29sdW1u
TmFtZXMsIGNvbnN0IFN0cmluZyogY29uc3Qgbm90ZXMsIGNvbnN0IGRvdWJsZSogY29uc3QgdGlt
ZXN0YW1wLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZXMsIFBh
c3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gcGF5bG9hZCwgUGFzc1JlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHNxbEVycm9yLCBjb25zdCBJbnNw
ZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyogY29uc3Qgc2NyZWVuQ29s
b3IsIGNvbnN0IFN0cmluZyogY29uc3QgcHJpbnRDb2xvcik7Ci0gICAgdm9pZCBkaWRFeGVjdXRl
Tm9PcHRpb25hbFBhcmFtZXRlcnMoUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJh
eTxTdHJpbmc+PiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBub3RlcywgZG91YmxlIHRpbWVz
dGFtcCwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gdmFsdWVzLCBQYXNz
UmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IHBheWxvYWQsIFBhc3NSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBzcWxFcnJvciwgY29uc3QgSW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMmIHNjcmVlbkNvbG9yLCBjb25z
dCBTdHJpbmcmIHByaW50Q29sb3IpOworICAgIHZvaWQgZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1l
dGVycyhQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+IGNvbHVt
bk5hbWVzLCBjb25zdCBTdHJpbmcqIGNvbnN0IG5vdGVzLCBjb25zdCBkb3VibGUqIGNvbnN0IHRp
bWVzdGFtcCwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+
IHZhbHVlcywgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRWYWx1ZT4g
cGF5bG9hZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+
IHNxbEVycm9yLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNv
bG9ycyogY29uc3Qgc2NyZWVuQ29sb3IsIGNvbnN0IFN0cmluZyogY29uc3QgcHJpbnRDb2xvcik7
CisgICAgdm9pZCBkaWRFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMoUGFzc1JlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5n
JiBub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpVbmNoZWNrZWRPYmplY3Q+IHZhbHVlcywgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpVbmNoZWNrZWRWYWx1ZT4gcGF5bG9hZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpEYXRhYmFzZTo6RXJyb3I+IHNxbEVycm9yLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpE
YXRhYmFzZTo6UHJpbWFyeUNvbG9ycyYgc2NyZWVuQ29sb3IsIGNvbnN0IFN0cmluZyYgcHJpbnRD
b2xvcik7CiBwcml2YXRlOgogICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0
b3JGcm9udGVuZENoYW5uZWw7CiB9OwpAQCAtMjM5LDExICsyMzksMTEgQEAgcHJpdmF0ZToKIAog
bmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXZvaWQgSW5zcGVjdG9yRGF0YWJhc2VGcm9udGVuZERp
c3BhdGNoZXI6OmRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnMoUGFzc1JlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nKiBj
b25zdCBub3RlcywgY29uc3QgZG91YmxlKiBjb25zdCB0aW1lc3RhbXAsIFBhc3NSZWZQdHI8SW5z
cGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHZhbHVlcywgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Oklu
c3BlY3RvclZhbHVlPiBwYXlsb2FkLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRh
dGFiYXNlOjpFcnJvcj4gc3FsRXJyb3IsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFi
YXNlOjpQcmltYXJ5Q29sb3JzKiBjb25zdCBzY3JlZW5Db2xvciwgY29uc3QgU3RyaW5nKiBjb25z
dCBwcmludENvbG9yKQordm9pZCBJbnNwZWN0b3JEYXRhYmFzZUZyb250ZW5kRGlzcGF0Y2hlcjo6
ZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyhQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkFycmF5PFN0cmluZz4+IGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcqIGNvbnN0IG5vdGVz
LCBjb25zdCBkb3VibGUqIGNvbnN0IHRpbWVzdGFtcCwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IHZhbHVlcywgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpVbmNoZWNrZWRWYWx1ZT4gcGF5bG9hZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHNxbEVycm9yLCBjb25zdCBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyogY29uc3Qgc2NyZWVuQ29sb3IsIGNvbnN0IFN0
cmluZyogY29uc3QgcHJpbnRDb2xvcikKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBq
c29uTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPFByb3Rv
Y29sOjpVbmNoZWNrZWRPYmplY3Q+IGpzb25NZXNzYWdlID0gUHJvdG9jb2w6OlVuY2hlY2tlZE9i
amVjdDo6Y3JlYXRlKCk7CiAgICAganNvbk1lc3NhZ2UtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwo
Im1ldGhvZCIpLCBBU0NJSUxpdGVyYWwoIkRhdGFiYXNlLmRpZEV4ZWN1dGVPcHRpb25hbFBhcmFt
ZXRlcnMiKSk7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8UHJvdG9jb2w6OlVuY2hlY2tlZE9i
amVjdD4gcGFyYW1zT2JqZWN0ID0gUHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdDo6Y3JlYXRlKCk7
CiAgICAgaWYgKGNvbHVtbk5hbWVzKQogICAgICAgICBwYXJhbXNPYmplY3QtPnNldEFycmF5KEFT
Q0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgY29sdW1uTmFtZXMpOwogICAgIGlmIChub3RlcykK
QEAgLTI2NSwxMSArMjY1LDExIEBAIHZvaWQgSW5zcGVjdG9yRGF0YWJhc2VGcm9udGVuZERpc3Bh
dGNoZXI6OmRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnMoUGFzc1JlZlB0CiAgICAgbV9pbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChqc29uTWVzc2FnZS0+
dG9KU09OU3RyaW5nKCkpOwogfQogCi12b2lkIEluc3BlY3RvckRhdGFiYXNlRnJvbnRlbmREaXNw
YXRjaGVyOjpkaWRFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMoUGFzc1JlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBu
b3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9i
amVjdD4gdmFsdWVzLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IHBheWxv
YWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBzcWxF
cnJvciwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMm
IHNjcmVlbkNvbG9yLCBjb25zdCBTdHJpbmcmIHByaW50Q29sb3IpCit2b2lkIEluc3BlY3RvckRh
dGFiYXNlRnJvbnRlbmREaXNwYXRjaGVyOjpkaWRFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMo
UGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiBjb2x1bW5OYW1l
cywgY29uc3QgU3RyaW5nJiBub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUGFzc1JlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IHZhbHVlcywgUGFzc1JlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRWYWx1ZT4gcGF5bG9hZCwgUGFzc1JlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHNxbEVycm9yLCBjb25zdCBJbnNwZWN0
b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyYgc2NyZWVuQ29sb3IsIGNvbnN0
IFN0cmluZyYgcHJpbnRDb2xvcikKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBqc29u
TWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPFByb3RvY29s
OjpVbmNoZWNrZWRPYmplY3Q+IGpzb25NZXNzYWdlID0gUHJvdG9jb2w6OlVuY2hlY2tlZE9iamVj
dDo6Y3JlYXRlKCk7CiAgICAganNvbk1lc3NhZ2UtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm1l
dGhvZCIpLCBBU0NJSUxpdGVyYWwoIkRhdGFiYXNlLmRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1l
dGVycyIpKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxQcm90b2NvbDo6VW5jaGVja2VkT2Jq
ZWN0PiBwYXJhbXNPYmplY3QgPSBQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0OjpjcmVhdGUoKTsK
ICAgICBwYXJhbXNPYmplY3QtPnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwg
Y29sdW1uTmFtZXMpOwogICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgi
bm90ZXMiKSwgbm90ZXMpOwogICAgIHBhcmFtc09iamVjdC0+c2V0RG91YmxlKEFTQ0lJTGl0ZXJh
bCgidGltZXN0YW1wIiksIHRpbWVzdGFtcCk7CkBAIC0zNjEsNyArMzYxLDcgQEAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4gU3RyaW5nIGdldFRlc3RFbnVtQ29uc3RhbnRWYWx1ZShUIGVudW1WYWx1ZSkK
IAogbmFtZXNwYWNlIERhdGFiYXNlIHsKIC8qIERhdGFiYXNlIGVycm9yLiAqLwotY2xhc3MgRXJy
b3IgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3RCYXNlIHsKK2NsYXNzIEVycm9y
IDogcHVibGljIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdEJhc2UgewogcHVi
bGljOgogICAgIGVudW0gewogICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCkBAIC0zNzMsMTQgKzM3
MywxNCBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgIGNsYXNzIEJ1aWxk
ZXIgewogICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9i
amVjdD4gbV9yZXN1bHQ7CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNo
ZWNrZWRPYmplY3Q+IG1fcmVzdWx0OwogCiAgICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWls
ZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJl
dHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAg
ICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjwvKkVycm9yKi9JbnNwZWN0b3I6
Okluc3BlY3Rvck9iamVjdD4gcHRyKQorICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8LypFcnJv
ciovSW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBwdHIpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVy
X2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7
CkBAIC00MDUsNyArNDA1LDcgQEAgcHVibGljOgogICAgICAgICBvcGVyYXRvciBSZWZQdHI8RXJy
b3I+JiAoKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBB
bGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwotICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoc2l6ZW9mKEVycm9yKSA9PSBzaXplb2YoSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Qp
LCBjYW5ub3RfY2FzdCk7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoRXJyb3Ip
ID09IHNpemVvZihJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3QpLCBjYW5ub3Rf
Y2FzdCk7CiAgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPEVycm9y
Pio+KCZtX3Jlc3VsdCk7CiAgICAgICAgIH0KIApAQCAtNDIzLDkgKzQyMyw4IEBAIHB1YmxpYzoK
ICAgICAgKi8KICAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgICB7
Ci0gICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihJbnNwZWN0b3I6Okluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCkpOworICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4o
SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0OjpjcmVhdGUoKSk7CiAgICAgfQot
ICAgIHR5cGVkZWYgSW5zcGVjdG9yOjpQcm90b2NvbDo6U3RydWN0SXRlbVRyYWl0cyBJdGVtVHJh
aXRzOwogfTsKIAogfSAvLyBEYXRhYmFzZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2dlbmVyYXRlLWRvbWFpbnMtd2l0
aC1mZWF0dXJlLWd1YXJkcy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9nZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVy
ZS1ndWFyZHMuanNvbi1yZXN1bHQKaW5kZXggYTIyY2FiYThlZmNlM2UyNzQzODY1NzBjMWU4NzI0
OWNmMzc5YjU1Mi4uOWNhN2YyYmU4OGM5NDY3MzJhMDg3N2YzOTk4YTEwZmU3ZGM5MDU5NSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4
cGVjdGVkL2dlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uLXJlc3VsdAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24tcmVzdWx0CkBAIC05
NSw5ICs5NSw5IEBAIHByb3RlY3RlZDoKIGNsYXNzIEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERp
c3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JTdXBwbGVtZW50YWxC
YWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVj
dG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEluc3BlY3Rvcjo6SW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXIqLCBJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlciopOwotICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3Ry
aW5nJiBtZXRob2QsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IG1lc3Nh
Z2UpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaChsb25nIGNhbGxJZCwgY29u
c3QgU3RyaW5nJiBtZXRob2QsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVj
a2VkT2JqZWN0PiBtZXNzYWdlKSBvdmVycmlkZTsKIHByaXZhdGU6Ci0gICAgdm9pZCBsb2FkUmVz
b3VyY2UobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBtZXNz
YWdlKTsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZShsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9y
OjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0JiBtZXNzYWdlKTsKIHByaXZhdGU6CiAgICAgSW5z
cGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyKiwgSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIq
KTsKICAgICBJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9hZ2Vu
dDsKQEAgLTE0OCw3ICsxNDgsNyBAQCBwcml2YXRlOgogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAK
ICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+Ci0jaW5jbHVk
ZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNw
ZWN0b3JQcm90b2NvbFR5cGVzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiBu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTE3MCw3ICsxNzAsNyBAQCBJbnNwZWN0b3JOZXR3b3Jr
MUJhY2tlbmREaXNwYXRjaGVyOjpJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKElu
c3BlY3RvcgogICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRv
bWFpbihBU0NJSUxpdGVyYWwoIk5ldHdvcmsxIiksIHRoaXMpOwogfQogCi12b2lkIEluc3BlY3Rv
ck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBT
dHJpbmcmIG1ldGhvZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2UpCit2b2lk
IEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgY2FsbElk
LCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUGFzc1JlZlB0cjxQcm90b2NvbDo6VW5jaGVja2VkT2Jq
ZWN0PiBtZXNzYWdlKQogewogICAgIFJlZjxJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRj
aGVyPiBwcm90ZWN0KCp0aGlzKTsKIApAQCAtMTgwLDEwICsxODAsMTAgQEAgdm9pZCBJbnNwZWN0
b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3Qg
U3RyaW5nJiBtZXQKICAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xF
cnJvcigmY2FsbElkLCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQs
IG1ha2VTdHJpbmcoJ1wnJywgIk5ldHdvcmsxIiwgJy4nLCBtZXRob2QsICInIHdhcyBub3QgZm91
bmQiKSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6bG9h
ZFJlc291cmNlKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmKQordm9pZCBJbnNw
ZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UobG9uZyBjYWxsSWQs
IGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdCYpCiB7CiAgICAgRXJy
b3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
VW5jaGVja2VkT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRP
YmplY3Q6OmNyZWF0ZSgpOwogICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZShlcnJvcik7CiAKICAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFz
ZSgpLCBlcnJvcik7CkBAIC0yMzQsNyArMjM0LDcgQEAgdm9pZCBJbnNwZWN0b3JOZXR3b3JrMUJh
Y2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3QK
IAogI2luY2x1ZGUgIkluc3BlY3RvclRlc3RQcm90b2NvbFR5cGVzLmgiCiAjaW5jbHVkZSA8aW5z
cGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgotI2luY2x1ZGUgPGluc3BlY3Rvci9J
bnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xU
eXBlcy5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CiAKQEAgLTMwMiw3ICszMDIsNyBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsK
ICNpZiBQTEFURk9STShXRUJfRVZFTlRTKQogdm9pZCBJbnNwZWN0b3JOZXR3b3JrM0Zyb250ZW5k
RGlzcGF0Y2hlcjo6cmVzb3VyY2VMb2FkZWQoKQogewotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IGpzb25NZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8
UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4ganNvbk1lc3NhZ2UgPSBQcm90b2NvbDo6VW5jaGVj
a2VkT2JqZWN0OjpjcmVhdGUoKTsKICAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKEFTQ0lJTGl0
ZXJhbCgibWV0aG9kIiksIEFTQ0lJTGl0ZXJhbCgiTmV0d29yazMucmVzb3VyY2VMb2FkZWQiKSk7
CiAKICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5k
KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CkBAIC0zODIsNyArMzgyLDcgQEAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4gU3RyaW5nIGdldFRlc3RFbnVtQ29uc3RhbnRWYWx1ZShUIGVudW1WYWx1
ZSkKIAogI2lmIFBMQVRGT1JNKFdFQl9UWVBFUykKIG5hbWVzcGFjZSBOZXR3b3JrMiB7Ci1jbGFz
cyBOZXR3b3JrRXJyb3IgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3RCYXNlIHsK
K2NsYXNzIE5ldHdvcmtFcnJvciA6IHB1YmxpYyBJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNr
ZWRPYmplY3RCYXNlIHsKIHB1YmxpYzoKICAgICBlbnVtIHsKICAgICAgICAgTm9GaWVsZHNTZXQg
PSAwLApAQCAtMzk0LDE0ICszOTQsMTQgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPGludCBTVEFU
RT4KICAgICBjbGFzcyBCdWlsZGVyIHsKICAgICBwcml2YXRlOgotICAgICAgICBSZWZQdHI8SW5z
cGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OworICAgICAgICBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBtX3Jlc3VsdDsKIAogICAgICAgICB0ZW1w
bGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAg
ICB7CiAgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8
IFNURVA+Kj4odGhpcyk7CiAgICAgICAgIH0KIAotICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8
LypOZXR3b3JrRXJyb3IqL0luc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBwdHIpCisgICAgICAg
IEJ1aWxkZXIoUGFzc1JlZlB0cjwvKk5ldHdvcmtFcnJvciovSW5zcGVjdG9yOjpQcm90b2NvbDo6
VW5jaGVja2VkT2JqZWN0PiBwdHIpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3Rh
dGUpOwogICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CkBAIC00MjYsNyArNDI2LDcgQEAgcHVi
bGljOgogICAgICAgICBvcGVyYXRvciBSZWZQdHI8TmV0d29ya0Vycm9yPiYgKCkKICAgICAgICAg
ewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1
bHRfaXNfbm90X3JlYWR5KTsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihOZXR3
b3JrRXJyb3IpID09IHNpemVvZihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCksIGNhbm5vdF9j
YXN0KTsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihOZXR3b3JrRXJyb3IpID09
IHNpemVvZihJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3QpLCBjYW5ub3RfY2Fz
dCk7CiAgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPE5ldHdvcmtF
cnJvcj4qPigmbV9yZXN1bHQpOwogICAgICAgICB9CiAKQEAgLTQ0NCw5ICs0NDQsOCBAQCBwdWJs
aWM6CiAgICAgICovCiAgICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAg
ICAgewotICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSW5zcGVjdG9yOjpJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNT
ZXQ+KEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdDo6Y3JlYXRlKCkpOwogICAg
IH0KLSAgICB0eXBlZGVmIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlN0cnVjdEl0ZW1UcmFpdHMgSXRl
bVRyYWl0czsKIH07CiAKIH0gLy8gTmV0d29yazIKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zYW1lLXR5cGUtaWQtZGlm
ZmVyZW50LWRvbWFpbi5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5q
c29uLXJlc3VsdAppbmRleCA1NDIxNTU0NjhhZmZjMzA0YzFlZWM1MTc5NDU2NmJjZWY5NjY0NWEy
Li5lODQyMTRjZDU0NWE5NTM0YTRkZGZmMzBmNzIwZmEyOTk2OTc4NDQyIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2Ft
ZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3NhbWUtdHlwZS1pZC1k
aWZmZXJlbnQtZG9tYWluLmpzb24tcmVzdWx0CkBAIC0xMTksNyArMTE5LDcgQEAgdHlwZWRlZiBT
dHJpbmcgRXJyb3JTdHJpbmc7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKIAogI2luY2x1ZGUgPGlu
c3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KLSNpbmNsdWRlIDxpbnNwZWN0b3Iv
SW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclByb3RvY29s
VHlwZXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNw
ZWN0b3IgewpAQCAtMTcwLDcgKzE3MCw3IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiAjaW5j
bHVkZSAiSW5zcGVjdG9yVGVzdFByb3RvY29sVHlwZXMuaCIKICNpbmNsdWRlIDxpbnNwZWN0b3Iv
SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+Ci0jaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3Rv
clZhbHVlcy5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+
CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL3NoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uLXJl
c3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC9zaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbi1yZXN1bHQKaW5kZXggZDlk
YjEzZjlhZWFmMTczNWYzZjFhZDZhOTIyMmI2NjU1YzNiNmE0NC4uOWVlMTNkY2UyM2EzNzM3YzY4
ZDIyMjc2NDJhMzc2MGM0NzNlNWRiOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3NoYWRvd2VkLW9wdGlvbmFsLXR5cGUt
c2V0dGVycy5qc29uLXJlc3VsdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpz
b24tcmVzdWx0CkBAIC0xMTksNyArMTE5LDcgQEAgdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7
CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKIAogI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwuaD4KLSNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+
CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewpAQCAtMTcwLDcg
KzE3MCw3IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiAjaW5jbHVkZSAiSW5zcGVjdG9yVGVz
dFByb3RvY29sVHlwZXMuaCIKICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsLmg+Ci0jaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1
ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+CiAjaW5jbHVkZSA8d3RmL1Bh
c3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtMjk2LDcg
KzI5Niw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBnZXRUZXN0RW51bUNvbnN0YW50
VmFsdWUoVCBlbnVtVmFsdWUpCiAKIG5hbWVzcGFjZSBSdW50aW1lIHsKIC8qIEtleSBwYXRoLiAq
LwotY2xhc3MgS2V5UGF0aCA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2Ug
eworY2xhc3MgS2V5UGF0aCA6IHB1YmxpYyBJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRP
YmplY3RCYXNlIHsKIHB1YmxpYzoKICAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICd0
eXBlJyB3aGlsZSBnZW5lcmF0aW5nIEtleVBhdGguCiAgICAgZW51bSBjbGFzcyBUeXBlIHsKQEAg
LTMxMywxNCArMzEzLDE0IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICAg
Y2xhc3MgQnVpbGRlciB7CiAgICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6
SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gbV9yZXN1bHQ7CiAKICAgICAgICAgdGVtcGxhdGU8aW50
IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICAgewogICAg
ICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+
KHRoaXMpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPC8qS2V5UGF0
aCovSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHB0cikKKyAgICAgICAgQnVpbGRlcihQYXNz
UmVmUHRyPC8qS2V5UGF0aCovSW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBw
dHIpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmll
bGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICAg
bV9yZXN1bHQgPSBwdHI7CkBAIC0zMzgsNyArMzM4LDcgQEAgcHVibGljOgogICAgICAgICBvcGVy
YXRvciBSZWZQdHI8S2V5UGF0aD4mICgpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7Ci0gICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoS2V5UGF0aCkgPT0gc2l6ZW9mKEluc3BlY3Rv
cjo6SW5zcGVjdG9yT2JqZWN0KSwgY2Fubm90X2Nhc3QpOworICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoc2l6ZW9mKEtleVBhdGgpID09IHNpemVvZihJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNo
ZWNrZWRPYmplY3QpLCBjYW5ub3RfY2FzdCk7CiAgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJw
cmV0X2Nhc3Q8UmVmUHRyPEtleVBhdGg+Kj4oJm1fcmVzdWx0KTsKICAgICAgICAgfQogCkBAIC0z
NTUsMTggKzM1NSwxNyBAQCBwdWJsaWM6CiAgICAgICovCiAgICAgc3RhdGljIEJ1aWxkZXI8Tm9G
aWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICAgewotICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxk
c1NldD4oSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICAgICAgcmV0
dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9i
amVjdDo6Y3JlYXRlKCkpOwogICAgIH0KLSAgICB0eXBlZGVmIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlN0cnVjdEl0ZW1UcmFpdHMgSXRlbVRyYWl0czsKIAogICAgIHZvaWQgc2V0U3RyaW5nKGNvbnN0
IFN0cmluZyYgdmFsdWUpCiAgICAgewotICAgICAgICBJbnNwZWN0b3JPYmplY3RCYXNlOjpzZXRT
dHJpbmcoQVNDSUlMaXRlcmFsKCJzdHJpbmciKSwgdmFsdWUpOworICAgICAgICBVbmNoZWNrZWRP
YmplY3RCYXNlOjpzZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJzdHJpbmciKSwgdmFsdWUpOwogICAg
IH0KIAogICAgIHZvaWQgc2V0QXJyYXkoUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpB
cnJheTxTdHJpbmc+PiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIEluc3BlY3Rvck9iamVjdEJhc2U6
OnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiYXJyYXkiKSwgdmFsdWUpOworICAgICAgICBVbmNoZWNr
ZWRPYmplY3RCYXNlOjpzZXRBcnJheShBU0NJSUxpdGVyYWwoImFycmF5IiksIHZhbHVlKTsKICAg
ICB9CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10
eXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5q
c29uLXJlc3VsdAppbmRleCA1ZjE1NmRjZDk4NmUwNzc0M2Y3NjgxNWZlYTE2YjAzY2M0ZTQ2ZGVj
Li5kOTczOWMyZTY0ZDlmZTIzN2M1YmNiMDJjYTRlYzEzMzViYjE2OGI3IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlw
ZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24tcmVzdWx0CisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBl
LWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbi1yZXN1bHQKQEAgLTExOSw3
ICsxMTksNyBAQCB0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKICNpZiBFTkFCTEUoSU5TUEVD
VE9SKQogCiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgot
I2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDxpbnNwZWN0
b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CkBAIC0xNzAsNyArMTcwLDcgQEAgbmFtZXNwYWNl
IEluc3BlY3RvciB7CiAKICNpbmNsdWRlICJJbnNwZWN0b3JUZXN0UHJvdG9jb2xUeXBlcy5oIgog
I2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KLSNpbmNsdWRl
IDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3Bl
Y3RvclByb3RvY29sVHlwZXMuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1h
cnJheS10eXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uLXJl
c3VsdAppbmRleCAyODhjOGQ5YzkzMWI3YmQwMTVkZTM4ZGIzYzQyMzZlYWZhYmExOTA4Li5mYmQz
NTQ4Nzg5NjViYzQxNDQ2YTFkMGYzNmUzMDhkYzg1MzJiNzllIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNs
YXJhdGlvbi1hcnJheS10eXBlLmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFycmF5
LXR5cGUuanNvbi1yZXN1bHQKQEAgLTEyMiw3ICsxMjIsNyBAQCB0eXBlZGVmIFN0cmluZyBFcnJv
clN0cmluZzsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogCiAjaW5jbHVkZSA8aW5zcGVjdG9yL0lu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgotI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JW
YWx1ZXMuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CkBA
IC0xNzMsNyArMTczLDcgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKICNpbmNsdWRlICJJbnNw
ZWN0b3JUZXN0UHJvdG9jb2xUeXBlcy5oIgogI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwuaD4KLSNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+
CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KICNpbmNsdWRl
IDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbi1yZXN1bHQgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNs
YXJhdGlvbi1lbnVtLXR5cGUuanNvbi1yZXN1bHQKaW5kZXggNmE4MmJkZTcwMDY2ZTY5MWU2MzE2
ZGFiYTA1ZDY0MzY0ZmE1ZjYyMi4uNzE4MDdiYTJlYTk5ZTU0ODE4ZWVkMzBlYTg4NjFlMGYyNThi
Yzc5NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24tcmVzdWx0Cisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3Rl
ZC90eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uLXJlc3VsdApAQCAtMTIzLDcgKzEyMyw3
IEBAIHR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAK
ICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+Ci0jaW5jbHVk
ZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNw
ZWN0b3JQcm90b2NvbFR5cGVzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiBu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTE3NCw3ICsxNzQsNyBAQCBuYW1lc3BhY2UgSW5zcGVj
dG9yIHsKIAogI2luY2x1ZGUgIkluc3BlY3RvclRlc3RQcm90b2NvbFR5cGVzLmgiCiAjaW5jbHVk
ZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgotI2luY2x1ZGUgPGluc3Bl
Y3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yUHJv
dG9jb2xUeXBlcy5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10
eXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbi1yZXN1bHQK
aW5kZXggY2E4ZmQyYTgyOWJmNmI5NzQwNjNkY2JlZjlhMzc2ODZlMzE2NmY1Ny4uZTE2NmU1YmUy
YzRjMTZlYWU4NTc3N2FiZTQ4MzRhMGYxMjEyNjMwNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRp
b24tb2JqZWN0LXR5cGUuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5
cGUuanNvbi1yZXN1bHQKQEAgLTExOSw3ICsxMTksNyBAQCB0eXBlZGVmIFN0cmluZyBFcnJvclN0
cmluZzsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogCiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbC5oPgotI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1
ZXMuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CkBAIC0x
NzAsNyArMTcwLDcgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKICNpbmNsdWRlICJJbnNwZWN0
b3JUZXN0UHJvdG9jb2xUeXBlcy5oIgogI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwuaD4KLSNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+Cisj
aW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KICNpbmNsdWRlIDx3
dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkBAIC0z
MDQsNyArMzA0LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGdldFRlc3RFbnVtQ29u
c3RhbnRWYWx1ZShUIGVudW1WYWx1ZSkKIAogbmFtZXNwYWNlIERhdGFiYXNlIHsKIC8qIERhdGFi
YXNlIGVycm9yLiAqLwotY2xhc3MgRXJyb3IgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JP
YmplY3RCYXNlIHsKK2NsYXNzIEVycm9yIDogcHVibGljIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVu
Y2hlY2tlZE9iamVjdEJhc2UgewogcHVibGljOgogICAgIGVudW0gewogICAgICAgICBOb0ZpZWxk
c1NldCA9IDAsCkBAIC0zMTYsMTQgKzMxNiwxNCBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8aW50
IFNUQVRFPgogICAgIGNsYXNzIEJ1aWxkZXIgewogICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZlB0
cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CisgICAgICAgIFJlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IG1fcmVzdWx0OwogCiAgICAgICAg
IHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAg
ICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNU
QVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXIoUGFzc1Jl
ZlB0cjwvKkVycm9yKi9JbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gcHRyKQorICAgICAgICBC
dWlsZGVyKFBhc3NSZWZQdHI8LypFcnJvciovSW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2Vk
T2JqZWN0PiBwdHIpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRF
ID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAg
ICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CkBAIC0zNDgsNyArMzQ4LDcgQEAgcHVibGljOgogICAg
ICAgICBvcGVyYXRvciBSZWZQdHI8RXJyb3I+JiAoKQogICAgICAgICB7CiAgICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkp
OwotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEVycm9yKSA9PSBzaXplb2YoSW5z
cGVjdG9yOjpJbnNwZWN0b3JPYmplY3QpLCBjYW5ub3RfY2FzdCk7CisgICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVChzaXplb2YoRXJyb3IpID09IHNpemVvZihJbnNwZWN0b3I6OlByb3RvY29sOjpV
bmNoZWNrZWRPYmplY3QpLCBjYW5ub3RfY2FzdCk7CiAgICAgICAgICAgICByZXR1cm4gKnJlaW50
ZXJwcmV0X2Nhc3Q8UmVmUHRyPEVycm9yPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgIH0KIApAQCAt
MzY2LDEyICszNjYsMTEgQEAgcHVibGljOgogICAgICAqLwogICAgIHN0YXRpYyBCdWlsZGVyPE5v
RmllbGRzU2V0PiBjcmVhdGUoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVs
ZHNTZXQ+KEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7CisgICAgICAgIHJl
dHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRP
YmplY3Q6OmNyZWF0ZSgpKTsKICAgICB9Ci0gICAgdHlwZWRlZiBJbnNwZWN0b3I6OlByb3RvY29s
OjpTdHJ1Y3RJdGVtVHJhaXRzIEl0ZW1UcmFpdHM7CiB9OwogCi1jbGFzcyBPcHRpb25hbFBhcmFt
ZXRlckJ1bmRsZSA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2UgeworY2xh
c3MgT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGUgOiBwdWJsaWMgSW5zcGVjdG9yOjpQcm90b2NvbDo6
VW5jaGVja2VkT2JqZWN0QmFzZSB7CiBwdWJsaWM6CiAgICAgZW51bSB7CiAgICAgICAgIE5vRmll
bGRzU2V0ID0gMCwKQEAgLTM4MSwxNCArMzgwLDE0IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTxp
bnQgU1RBVEU+CiAgICAgY2xhc3MgQnVpbGRlciB7CiAgICAgcHJpdmF0ZToKLSAgICAgICAgUmVm
UHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKKyAgICAgICAgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gbV9yZXN1bHQ7CiAKICAgICAg
ICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkK
ICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8
U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcihQYXNz
UmVmUHRyPC8qT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGUqL0luc3BlY3Rvcjo6SW5zcGVjdG9yT2Jq
ZWN0PiBwdHIpCisgICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjwvKk9wdGlvbmFsUGFyYW1ldGVy
QnVuZGxlKi9JbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IHB0cikKICAgICAg
ICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1
aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgICBtX3Jlc3VsdCA9
IHB0cjsKQEAgLTM5OSw3ICszOTgsNyBAQCBwdWJsaWM6CiAgICAgICAgIG9wZXJhdG9yIFJlZlB0
cjxPcHRpb25hbFBhcmFtZXRlckJ1bmRsZT4mICgpCiAgICAgICAgIHsKICAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7
Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoT3B0aW9uYWxQYXJhbWV0ZXJCdW5k
bGUpID09IHNpemVvZihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCksIGNhbm5vdF9jYXN0KTsK
KyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihPcHRpb25hbFBhcmFtZXRlckJ1bmRs
ZSkgPT0gc2l6ZW9mKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdCksIGNhbm5v
dF9jYXN0KTsKICAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8T3B0
aW9uYWxQYXJhbWV0ZXJCdW5kbGU+Kj4oJm1fcmVzdWx0KTsKICAgICAgICAgfQogCkBAIC00MTUs
NDIgKzQxNCw0MSBAQCBwdWJsaWM6CiAgICAgICovCiAgICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVs
ZHNTZXQ+IGNyZWF0ZSgpCiAgICAgewotICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1Nl
dD4oSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICAgICAgcmV0dXJu
IEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVj
dDo6Y3JlYXRlKCkpOwogICAgIH0KLSAgICB0eXBlZGVmIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlN0
cnVjdEl0ZW1UcmFpdHMgSXRlbVRyYWl0czsKIAogICAgIHZvaWQgc2V0Q29sdW1uTmFtZXMoUGFz
c1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiB2YWx1ZSkKICAgICB7
Ci0gICAgICAgIEluc3BlY3Rvck9iamVjdEJhc2U6OnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiY29s
dW1uTmFtZXMiKSwgdmFsdWUpOworICAgICAgICBVbmNoZWNrZWRPYmplY3RCYXNlOjpzZXRBcnJh
eShBU0NJSUxpdGVyYWwoImNvbHVtbk5hbWVzIiksIHZhbHVlKTsKICAgICB9CiAKICAgICB2b2lk
IHNldE5vdGVzKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgewotICAgICAgICBJbnNwZWN0b3JP
YmplY3RCYXNlOjpzZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJub3RlcyIpLCB2YWx1ZSk7CisgICAg
ICAgIFVuY2hlY2tlZE9iamVjdEJhc2U6OnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm5vdGVzIiks
IHZhbHVlKTsKICAgICB9CiAKICAgICB2b2lkIHNldFRpbWVzdGFtcChkb3VibGUgdmFsdWUpCiAg
ICAgewotICAgICAgICBJbnNwZWN0b3JPYmplY3RCYXNlOjpzZXREb3VibGUoQVNDSUlMaXRlcmFs
KCJ0aW1lc3RhbXAiKSwgdmFsdWUpOworICAgICAgICBVbmNoZWNrZWRPYmplY3RCYXNlOjpzZXRE
b3VibGUoQVNDSUlMaXRlcmFsKCJ0aW1lc3RhbXAiKSwgdmFsdWUpOwogICAgIH0KIAotICAgIHZv
aWQgc2V0VmFsdWVzKFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHZhbHVl
KQorICAgIHZvaWQgc2V0VmFsdWVzKFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5j
aGVja2VkT2JqZWN0PiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIEluc3BlY3Rvck9iamVjdEJhc2U6
OnNldE9iamVjdChBU0NJSUxpdGVyYWwoInZhbHVlcyIpLCB2YWx1ZSk7CisgICAgICAgIFVuY2hl
Y2tlZE9iamVjdEJhc2U6OnNldE9iamVjdChBU0NJSUxpdGVyYWwoInZhbHVlcyIpLCB2YWx1ZSk7
CiAgICAgfQogCi0gICAgdm9pZCBzZXRQYXlsb2FkKFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNw
ZWN0b3JWYWx1ZT4gdmFsdWUpCisgICAgdm9pZCBzZXRQYXlsb2FkKFBhc3NSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6VW5jaGVja2VkVmFsdWU+IHZhbHVlKQogICAgIHsKLSAgICAgICAgSW5z
cGVjdG9yT2JqZWN0QmFzZTo6c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJwYXlsb2FkIiksIHZhbHVl
KTsKKyAgICAgICAgVW5jaGVja2VkT2JqZWN0QmFzZTo6c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJw
YXlsb2FkIiksIHZhbHVlKTsKICAgICB9CiAKICAgICB2b2lkIHNldEVycm9yKFBhc3NSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiB2YWx1ZSkKICAgICB7Ci0gICAg
ICAgIEluc3BlY3Rvck9iamVjdEJhc2U6OnNldE9iamVjdChBU0NJSUxpdGVyYWwoImVycm9yIiks
IHZhbHVlKTsKKyAgICAgICAgVW5jaGVja2VkT2JqZWN0QmFzZTo6c2V0T2JqZWN0KEFTQ0lJTGl0
ZXJhbCgiZXJyb3IiKSwgdmFsdWUpOwogICAgIH0KIH07CiAKLWNsYXNzIFBhcmFtZXRlckJ1bmRs
ZSA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2UgeworY2xhc3MgUGFyYW1l
dGVyQnVuZGxlIDogcHVibGljIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdEJh
c2UgewogcHVibGljOgogICAgIGVudW0gewogICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCkBAIC00
NjYsMTQgKzQ2NCwxNCBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgIGNs
YXNzIEJ1aWxkZXIgewogICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6Oklu
c3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpVbmNoZWNrZWRPYmplY3Q+IG1fcmVzdWx0OwogCiAgICAgICAgIHRlbXBsYXRlPGludCBT
VEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgIHsKICAgICAg
ICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0
aGlzKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjwvKlBhcmFtZXRl
ckJ1bmRsZSovSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHB0cikKKyAgICAgICAgQnVpbGRl
cihQYXNzUmVmUHRyPC8qUGFyYW1ldGVyQnVuZGxlKi9JbnNwZWN0b3I6OlByb3RvY29sOjpVbmNo
ZWNrZWRPYmplY3Q+IHB0cikKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
U1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7
CiAgICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKQEAgLTUwMiwxNCArNTAwLDE0IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VGltZXN0YW1wU2V0PigpOwogICAgICAg
ICB9CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IFZhbHVlc1NldD4mIHNldFZhbHVlcyhQYXNz
UmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKKyAgICAgICAgQnVpbGRl
cjxTVEFURSB8IFZhbHVlc1NldD4mIHNldFZhbHVlcyhQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gdmFsdWUpCiAgICAgICAgIHsKICAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBWYWx1ZXNTZXQpLCBwcm9wZXJ0eV92YWx1ZXNfYWxyZWFk
eV9zZXQpOwogICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInZh
bHVlcyIpLCB2YWx1ZSk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFZhbHVlc1NldD4o
KTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBQYXlsb2FkU2V0PiYgc2V0
UGF5bG9hZChQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IHZhbHVlKQorICAg
ICAgICBCdWlsZGVyPFNUQVRFIHwgUGF5bG9hZFNldD4mIHNldFBheWxvYWQoUGFzc1JlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRWYWx1ZT4gdmFsdWUpCiAgICAgICAgIHsKICAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBQYXlsb2FkU2V0KSwgcHJvcGVydHlf
cGF5bG9hZF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0VmFsdWUoQVND
SUlMaXRlcmFsKCJwYXlsb2FkIiksIHZhbHVlKTsKQEAgLTUyNiw3ICs1MjQsNyBAQCBwdWJsaWM6
CiAgICAgICAgIG9wZXJhdG9yIFJlZlB0cjxQYXJhbWV0ZXJCdW5kbGU+JiAoKQogICAgICAgICB7
CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3Vs
dF9pc19ub3RfcmVhZHkpOwotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFBhcmFt
ZXRlckJ1bmRsZSkgPT0gc2l6ZW9mKEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0KSwgY2Fubm90
X2Nhc3QpOworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFBhcmFtZXRlckJ1bmRs
ZSkgPT0gc2l6ZW9mKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdCksIGNhbm5v
dF9jYXN0KTsKICAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8UGFy
YW1ldGVyQnVuZGxlPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgIH0KIApAQCAtNTQ4LDEzICs1NDYs
MTIgQEAgcHVibGljOgogICAgICAqLwogICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBj
cmVhdGUoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7CisgICAgICAgIHJldHVybiBCdWlsZGVy
PE5vRmllbGRzU2V0PihJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q6OmNyZWF0
ZSgpKTsKICAgICB9Ci0gICAgdHlwZWRlZiBJbnNwZWN0b3I6OlByb3RvY29sOjpTdHJ1Y3RJdGVt
VHJhaXRzIEl0ZW1UcmFpdHM7CiB9OwogCiAvKiBDb25mbGljdGVkIG5hbWVzIG1heSBjYXVzZSBn
ZW5lcmF0ZWQgZ2V0dGVycy9zZXR0ZXJzIHRvIGNsYXNoIHdpdGggYnVpbHQtaW4gSW5zcGVjdG9y
T2JqZWN0IG1ldGhvZHMuICovCi1jbGFzcyBPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3Rz
IDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZSB7CitjbGFzcyBPYmplY3RX
aXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzIDogcHVibGljIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVu
Y2hlY2tlZE9iamVjdEJhc2UgewogcHVibGljOgogICAgIGVudW0gewogICAgICAgICBOb0ZpZWxk
c1NldCA9IDAsCkBAIC01NjksMTQgKzU2NiwxNCBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8aW50
IFNUQVRFPgogICAgIGNsYXNzIEJ1aWxkZXIgewogICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZlB0
cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CisgICAgICAgIFJlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IG1fcmVzdWx0OwogCiAgICAgICAg
IHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAg
ICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNU
QVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXIoUGFzc1Jl
ZlB0cjwvKk9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHMqL0luc3BlY3Rvcjo6SW5zcGVj
dG9yT2JqZWN0PiBwdHIpCisgICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjwvKk9iamVjdFdpdGhQ
cm9wZXJ0eU5hbWVDb25mbGljdHMqL0luc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVj
dD4gcHRyKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBO
b0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAg
ICAgIG1fcmVzdWx0ID0gcHRyOwpAQCAtNjIyLDcgKzYxOSw3IEBAIHB1YmxpYzoKICAgICAgICAg
b3BlcmF0b3IgUmVmUHRyPE9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHM+JiAoKQogICAg
ICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQs
IHJlc3VsdF9pc19ub3RfcmVhZHkpOwotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9m
KE9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHMpID09IHNpemVvZihJbnNwZWN0b3I6Oklu
c3BlY3Rvck9iamVjdCksIGNhbm5vdF9jYXN0KTsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KHNpemVvZihPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzKSA9PSBzaXplb2YoSW5zcGVj
dG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0KSwgY2Fubm90X2Nhc3QpOwogICAgICAgICAg
ICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxPYmplY3RXaXRoUHJvcGVydHlOYW1l
Q29uZmxpY3RzPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgIH0KIApAQCAtNjQzLDE1ICs2NDAsMTQg
QEAgcHVibGljOgogICAgICAqLwogICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVh
dGUoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEluc3BlY3Rv
cjo6SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7CisgICAgICAgIHJldHVybiBCdWlsZGVyPE5v
RmllbGRzU2V0PihJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q6OmNyZWF0ZSgp
KTsKICAgICB9Ci0gICAgdHlwZWRlZiBJbnNwZWN0b3I6OlByb3RvY29sOjpTdHJ1Y3RJdGVtVHJh
aXRzIEl0ZW1UcmFpdHM7CiB9OwogCiB9IC8vIERhdGFiYXNlCiAKIG5hbWVzcGFjZSBUZXN0IHsK
LWNsYXNzIFBhcmFtZXRlckJ1bmRsZSA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVj
dEJhc2UgeworY2xhc3MgUGFyYW1ldGVyQnVuZGxlIDogcHVibGljIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlVuY2hlY2tlZE9iamVjdEJhc2UgewogcHVibGljOgogICAgIGVudW0gewogICAgICAgICBO
b0ZpZWxkc1NldCA9IDAsCkBAIC02NjcsMTQgKzY2MywxNCBAQCBwdWJsaWM6CiAgICAgdGVtcGxh
dGU8aW50IFNUQVRFPgogICAgIGNsYXNzIEJ1aWxkZXIgewogICAgIHByaXZhdGU6Ci0gICAgICAg
IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CisgICAgICAgIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IG1fcmVzdWx0OwogCiAg
ICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0
ZSgpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWls
ZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXIo
UGFzc1JlZlB0cjwvKlBhcmFtZXRlckJ1bmRsZSovSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+
IHB0cikKKyAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPC8qUGFyYW1ldGVyQnVuZGxlKi9JbnNw
ZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IHB0cikKICAgICAgICAgewogICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRl
ZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKQEAgLTcw
MywxNCArNjk5LDE0IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VGlt
ZXN0YW1wU2V0PigpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IFZhbHVl
c1NldD4mIHNldFZhbHVlcyhQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiB2
YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFZhbHVlc1NldD4mIHNldFZhbHVlcyhQYXNz
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gdmFsdWUpCiAgICAg
ICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBWYWx1ZXNTZXQpLCBw
cm9wZXJ0eV92YWx1ZXNfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9i
amVjdChBU0NJSUxpdGVyYWwoInZhbHVlcyIpLCB2YWx1ZSk7CiAgICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPFZhbHVlc1NldD4oKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBQYXlsb2FkU2V0PiYgc2V0UGF5bG9hZChQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVj
dG9yVmFsdWU+IHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgUGF5bG9hZFNldD4mIHNl
dFBheWxvYWQoUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRWYWx1ZT4g
dmFsdWUpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBQ
YXlsb2FkU2V0KSwgcHJvcGVydHlfcGF5bG9hZF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJwYXlsb2FkIiksIHZhbHVlKTsKQEAgLTcy
Nyw3ICs3MjMsNyBAQCBwdWJsaWM6CiAgICAgICAgIG9wZXJhdG9yIFJlZlB0cjxQYXJhbWV0ZXJC
dW5kbGU+JiAoKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9
PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwotICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoc2l6ZW9mKFBhcmFtZXRlckJ1bmRsZSkgPT0gc2l6ZW9mKEluc3BlY3Rvcjo6SW5z
cGVjdG9yT2JqZWN0KSwgY2Fubm90X2Nhc3QpOworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
c2l6ZW9mKFBhcmFtZXRlckJ1bmRsZSkgPT0gc2l6ZW9mKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVu
Y2hlY2tlZE9iamVjdCksIGNhbm5vdF9jYXN0KTsKICAgICAgICAgICAgIHJldHVybiAqcmVpbnRl
cnByZXRfY2FzdDxSZWZQdHI8UGFyYW1ldGVyQnVuZGxlPio+KCZtX3Jlc3VsdCk7CiAgICAgICAg
IH0KIApAQCAtNzQ5LDkgKzc0NSw4IEBAIHB1YmxpYzoKICAgICAgKi8KICAgICBzdGF0aWMgQnVp
bGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBCdWlsZGVy
PE5vRmllbGRzU2V0PihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOworICAg
ICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSW5zcGVjdG9yOjpQcm90b2NvbDo6VW5j
aGVja2VkT2JqZWN0OjpjcmVhdGUoKSk7CiAgICAgfQotICAgIHR5cGVkZWYgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6U3RydWN0SXRlbVRyYWl0cyBJdGVtVHJhaXRzOwogfTsKIAogfSAvLyBUZXN0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZXhwZWN0ZWQvdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uLXJlc3VsdCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLXJl
cXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24tcmVzdWx0CmluZGV4IGExODliYjkzNTRiM2Q0NDQ5
N2ZiZWZmMTU2YTllOGExMGJhNmY1NzQuLjIxMzVmYWM2MGMxZTM4ODkwY2FjNWYyZmU0Mjg2Yjc3
N2U5MWM2OTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24tcmVz
dWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC90eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24tcmVzdWx0CkBAIC0xMjMs
NyArMTIzLDcgQEAgdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAjaWYgRU5BQkxFKElOU1BF
Q1RPUikKIAogI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4K
LSNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8aW5zcGVj
dG9yL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewpAQCAtMTc0LDcgKzE3NCw3IEBAIG5hbWVzcGFj
ZSBJbnNwZWN0b3IgewogCiAjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdFByb3RvY29sVHlwZXMuaCIK
ICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+Ci0jaW5jbHVk
ZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNw
ZWN0b3JQcm90b2NvbFR5cGVzLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtMzEwLDcgKzMxMCw3IEBAIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+IFN0cmluZyBnZXRUZXN0RW51bUNvbnN0YW50VmFsdWUoVCBlbnVtVmFsdWUp
CiAKIG5hbWVzcGFjZSBUZXN0IHsKIC8qIEEgZHVtbXkgdHlwZSB0aGF0IHJlcXVpcmVzIHJ1bnRp
bWUgY2FzdHMsIGFuZCBmb3JjZXMgbm9uLXByaW1pdGl2ZSByZWZlcmVuY2VkIHR5cGVzIHRvIGFs
c28gZW1pdCBydW50aW1lIGNhc3QgaGVscGVycy4gKi8KLWNsYXNzIFR5cGVOZWVkaW5nQ2FzdCA6
IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2UgeworY2xhc3MgVHlwZU5lZWRp
bmdDYXN0IDogcHVibGljIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdEJhc2Ug
ewogcHVibGljOgogICAgIGVudW0gewogICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCkBAIC0zMjUs
MTQgKzMyNSwxNCBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgIGNsYXNz
IEJ1aWxkZXIgewogICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3Bl
Y3Rvck9iamVjdD4gbV9yZXN1bHQ7CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpVbmNoZWNrZWRPYmplY3Q+IG1fcmVzdWx0OwogCiAgICAgICAgIHRlbXBsYXRlPGludCBTVEVQ
PiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlz
KTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjwvKlR5cGVOZWVkaW5n
Q2FzdCovSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHB0cikKKyAgICAgICAgQnVpbGRlcihQ
YXNzUmVmUHRyPC8qVHlwZU5lZWRpbmdDYXN0Ki9JbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNr
ZWRPYmplY3Q+IHB0cikKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RB
VEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAg
ICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKQEAgLTM3OCw3ICszNzgsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIG9wZXJhdG9yIFJlZlB0cjxUeXBlTmVlZGluZ0Nhc3Q+JiAoKQogICAgICAgICB7CiAg
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9p
c19ub3RfcmVhZHkpOwotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFR5cGVOZWVk
aW5nQ2FzdCkgPT0gc2l6ZW9mKEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0KSwgY2Fubm90X2Nh
c3QpOworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFR5cGVOZWVkaW5nQ2FzdCkg
PT0gc2l6ZW9mKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdCksIGNhbm5vdF9j
YXN0KTsKICAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8VHlwZU5l
ZWRpbmdDYXN0Pio+KCZtX3Jlc3VsdCk7CiAgICAgICAgIH0KIApAQCAtMzk5LDkgKzM5OSw4IEBA
IHB1YmxpYzoKICAgICAgKi8KICAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRl
KCkKICAgICB7Ci0gICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihJbnNwZWN0b3I6
Okluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOworICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0Zp
ZWxkc1NldD4oSW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0OjpjcmVhdGUoKSk7
CiAgICAgfQotICAgIHR5cGVkZWYgSW5zcGVjdG9yOjpQcm90b2NvbDo6U3RydWN0SXRlbVRyYWl0
cyBJdGVtVHJhaXRzOwogfTsKIAogLyogICovCkBAIC00MTgsNyArNDE3LDcgQEAgZW51bSBjbGFz
cyBDYXN0ZWRBbmltYWxzIHsKICAgICBDcm93cyA9IDIsCiAgICAgRmxhbWluZ29zID0gMywKIH07
IC8vIGVudW0gY2xhc3MgQ2FzdGVkQW5pbWFscwotY2xhc3MgUmVjdXJzaXZlT2JqZWN0MSA6IHB1
YmxpYyBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2UgeworY2xhc3MgUmVjdXJzaXZlT2Jq
ZWN0MSA6IHB1YmxpYyBJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3RCYXNlIHsK
IHB1YmxpYzoKICAgICBlbnVtIHsKICAgICAgICAgTm9GaWVsZHNTZXQgPSAwLApAQCAtNDI4LDE0
ICs0MjcsMTQgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgICBjbGFzcyBC
dWlsZGVyIHsKICAgICBwcml2YXRlOgotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0
b3JPYmplY3Q+IG1fcmVzdWx0OworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
VW5jaGVja2VkT2JqZWN0PiBtX3Jlc3VsdDsKIAogICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4g
QnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgICB7CiAgICAgICAgICAg
ICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7
CiAgICAgICAgIH0KIAotICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8LypSZWN1cnNpdmVPYmpl
Y3QxKi9JbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gcHRyKQorICAgICAgICBCdWlsZGVyKFBh
c3NSZWZQdHI8LypSZWN1cnNpdmVPYmplY3QxKi9JbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNr
ZWRPYmplY3Q+IHB0cikKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RB
VEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAg
ICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKQEAgLTQ0Niw3ICs0NDUsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIG9wZXJhdG9yIFJlZlB0cjxSZWN1cnNpdmVPYmplY3QxPiYgKCkKICAgICAgICAgewog
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRf
aXNfbm90X3JlYWR5KTsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihSZWN1cnNp
dmVPYmplY3QxKSA9PSBzaXplb2YoSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QpLCBjYW5ub3Rf
Y2FzdCk7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoUmVjdXJzaXZlT2JqZWN0
MSkgPT0gc2l6ZW9mKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdCksIGNhbm5v
dF9jYXN0KTsKICAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8UmVj
dXJzaXZlT2JqZWN0MT4qPigmbV9yZXN1bHQpOwogICAgICAgICB9CiAKQEAgLTQ2MiwxNyArNDYx
LDE2IEBAIHB1YmxpYzoKICAgICAgKi8KICAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4g
Y3JlYXRlKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihJbnNw
ZWN0b3I6Okluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOworICAgICAgICByZXR1cm4gQnVpbGRl
cjxOb0ZpZWxkc1NldD4oSW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0OjpjcmVh
dGUoKSk7CiAgICAgfQotICAgIHR5cGVkZWYgSW5zcGVjdG9yOjpQcm90b2NvbDo6U3RydWN0SXRl
bVRyYWl0cyBJdGVtVHJhaXRzOwogCiAgICAgdm9pZCBzZXRPYmooUGFzc1JlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QyPiB2YWx1ZSkKICAgICB7Ci0gICAg
ICAgIEluc3BlY3Rvck9iamVjdEJhc2U6OnNldE9iamVjdChBU0NJSUxpdGVyYWwoIm9iaiIpLCB2
YWx1ZSk7CisgICAgICAgIFVuY2hlY2tlZE9iamVjdEJhc2U6OnNldE9iamVjdChBU0NJSUxpdGVy
YWwoIm9iaiIpLCB2YWx1ZSk7CiAgICAgfQogfTsKIAotY2xhc3MgUmVjdXJzaXZlT2JqZWN0MiA6
IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2UgeworY2xhc3MgUmVjdXJzaXZl
T2JqZWN0MiA6IHB1YmxpYyBJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3RCYXNl
IHsKIHB1YmxpYzoKICAgICBlbnVtIHsKICAgICAgICAgTm9GaWVsZHNTZXQgPSAwLApAQCAtNDgy
LDE0ICs0ODAsMTQgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgICBjbGFz
cyBCdWlsZGVyIHsKICAgICBwcml2YXRlOgotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNw
ZWN0b3JPYmplY3Q+IG1fcmVzdWx0OworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6VW5jaGVja2VkT2JqZWN0PiBtX3Jlc3VsdDsKIAogICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RF
UD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgICB7CiAgICAgICAg
ICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhp
cyk7CiAgICAgICAgIH0KIAotICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8LypSZWN1cnNpdmVP
YmplY3QyKi9JbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gcHRyKQorICAgICAgICBCdWlsZGVy
KFBhc3NSZWZQdHI8LypSZWN1cnNpdmVPYmplY3QyKi9JbnNwZWN0b3I6OlByb3RvY29sOjpVbmNo
ZWNrZWRPYmplY3Q+IHB0cikKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
U1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7
CiAgICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKQEAgLTUwMCw3ICs0OTgsNyBAQCBwdWJsaWM6
CiAgICAgICAgIG9wZXJhdG9yIFJlZlB0cjxSZWN1cnNpdmVPYmplY3QyPiYgKCkKICAgICAgICAg
ewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1
bHRfaXNfbm90X3JlYWR5KTsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihSZWN1
cnNpdmVPYmplY3QyKSA9PSBzaXplb2YoSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QpLCBjYW5u
b3RfY2FzdCk7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoUmVjdXJzaXZlT2Jq
ZWN0MikgPT0gc2l6ZW9mKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdCksIGNh
bm5vdF9jYXN0KTsKICAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8
UmVjdXJzaXZlT2JqZWN0Mj4qPigmbV9yZXN1bHQpOwogICAgICAgICB9CiAKQEAgLTUxNiwxMyAr
NTE0LDEyIEBAIHB1YmxpYzoKICAgICAgKi8KICAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1Nl
dD4gY3JlYXRlKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihJ
bnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOworICAgICAgICByZXR1cm4gQnVp
bGRlcjxOb0ZpZWxkc1NldD4oSW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0Ojpj
cmVhdGUoKSk7CiAgICAgfQotICAgIHR5cGVkZWYgSW5zcGVjdG9yOjpQcm90b2NvbDo6U3RydWN0
SXRlbVRyYWl0cyBJdGVtVHJhaXRzOwogCiAgICAgdm9pZCBzZXRPYmooUGFzc1JlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QxPiB2YWx1ZSkKICAgICB7Ci0g
ICAgICAgIEluc3BlY3Rvck9iamVjdEJhc2U6OnNldE9iamVjdChBU0NJSUxpdGVyYWwoIm9iaiIp
LCB2YWx1ZSk7CisgICAgICAgIFVuY2hlY2tlZE9iamVjdEJhc2U6OnNldE9iamVjdChBU0NJSUxp
dGVyYWwoIm9iaiIpLCB2YWx1ZSk7CiAgICAgfQogfTsKIApAQCAtNTMwLDIzICs1MjcsMjMgQEAg
cHVibGljOgogCiB0ZW1wbGF0ZTw+IHN0cnVjdCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+IHsKICNpZiAhQVNTRVJUX0RJU0FCTEVECi1zdGF0
aWMgdm9pZCBhc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShJbnNwZWN0b3I6Okluc3BlY3RvclZh
bHVlKik7CitzdGF0aWMgdm9pZCBhc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShJbnNwZWN0b3I6
OlByb3RvY29sOjpVbmNoZWNrZWRWYWx1ZSopOwogI2VuZGlmIC8vICFBU1NFUlRfRElTQUJMRUQK
IH07CiB0ZW1wbGF0ZTw+IHN0cnVjdCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD4gewotc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0PiBydW50aW1lQ2FzdChQYXNzUmVmUHRyPElu
c3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IHZhbHVlKTsKK3N0YXRpYyBQYXNzUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD4gcnVudGltZUNhc3QoUGFzc1Jl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRWYWx1ZT4gdmFsdWUpOwogI2lmICFB
U1NFUlRfRElTQUJMRUQKLXN0YXRpYyB2b2lkIGFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKElu
c3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqKTsKK3N0YXRpYyB2b2lkIGFzc2VydFZhbHVlSGFzRXhw
ZWN0ZWRUeXBlKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZFZhbHVlKik7CiAjZW5kaWYg
Ly8gIUFTU0VSVF9ESVNBQkxFRAogfTsKIHRlbXBsYXRlPD4gc3RydWN0IEJpbmRpbmdUcmFpdHM8
SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0MT4gewogI2lmICFBU1NF
UlRfRElTQUJMRUQKLXN0YXRpYyB2b2lkIGFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yVmFsdWUqKTsKK3N0YXRpYyB2b2lkIGFzc2VydFZhbHVlSGFzRXhwZWN0
ZWRUeXBlKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZFZhbHVlKik7CiAjZW5kaWYgLy8g
IUFTU0VSVF9ESVNBQkxFRAogfTsKIHRlbXBsYXRlPD4gc3RydWN0IEJpbmRpbmdUcmFpdHM8SW5z
cGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0Mj4gewogI2lmICFBU1NFUlRf
RElTQUJMRUQKLXN0YXRpYyB2b2lkIGFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEluc3BlY3Rv
cjo6SW5zcGVjdG9yVmFsdWUqKTsKK3N0YXRpYyB2b2lkIGFzc2VydFZhbHVlSGFzRXhwZWN0ZWRU
eXBlKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZFZhbHVlKik7CiAjZW5kaWYgLy8gIUFT
U0VSVF9ESVNBQkxFRAogfTsKIApAQCAtNjE4LDcgKzYxNSw3IEBAIFN0cmluZyBnZXRUZXN0RW51
bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpIHsKIAogCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAotdm9p
ZCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+
Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKiB2
YWx1ZSkKK3ZvaWQgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0
ZWRBbmltYWxzPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoUHJvdG9jb2w6OlVuY2hlY2tl
ZFZhbHVlKiB2YWx1ZSkKIHsKICAgICBTdHJpbmcgcmVzdWx0OwogICAgIGJvb2wgY2FzdFN1Y2Nl
ZWRlZCA9IHZhbHVlLT5hc1N0cmluZyhyZXN1bHQpOwpAQCAtNjI4LDMzICs2MjUsMzMgQEAgdm9p
ZCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+
Ojphc3NlcnRWYWx1ZUhhc0V4cGUKICNlbmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVECiAKICNpZiAh
QVNTRVJUX0RJU0FCTEVECi12b2lkIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6
VGVzdDo6VHlwZU5lZWRpbmdDYXN0Pjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSW5zcGVj
dG9yOjpJbnNwZWN0b3JWYWx1ZSogdmFsdWUpCit2b2lkIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9y
OjpQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0Pjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3Rl
ZFR5cGUoUHJvdG9jb2w6OlVuY2hlY2tlZFZhbHVlKiB2YWx1ZSkKIHsKLSAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBvYmplY3Q7CisgICAgUmVmUHRyPFByb3RvY29sOjpVbmNoZWNrZWRPYmpl
Y3Q+IG9iamVjdDsKICAgICBib29sIGNhc3RTdWNjZWVkZWQgPSB2YWx1ZS0+YXNPYmplY3Qob2Jq
ZWN0KTsKICAgICBBU1NFUlRfVU5VU0VEKGNhc3RTdWNjZWVkZWQsIGNhc3RTdWNjZWVkZWQpOwog
ICAgIHsKLSAgICAgICAgSW5zcGVjdG9yT2JqZWN0OjppdGVyYXRvciBzdHJpbmdQb3MgPSBvYmpl
Y3QtPmZpbmQoQVNDSUlMaXRlcmFsKCJzdHJpbmciKSk7CisgICAgICAgIFByb3RvY29sOjpVbmNo
ZWNrZWRPYmplY3Q6Oml0ZXJhdG9yIHN0cmluZ1BvcyA9IG9iamVjdC0+ZmluZChBU0NJSUxpdGVy
YWwoInN0cmluZyIpKTsKICAgICAgICAgQVNTRVJUKHN0cmluZ1BvcyAhPSBvYmplY3QtPmVuZCgp
KTsKICAgICAgICAgQmluZGluZ1RyYWl0czxTdHJpbmc+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVk
VHlwZShzdHJpbmdQb3MtPnZhbHVlLmdldCgpKTsKICAgICB9CiAgICAgewotICAgICAgICBJbnNw
ZWN0b3JPYmplY3Q6Oml0ZXJhdG9yIG51bWJlclBvcyA9IG9iamVjdC0+ZmluZChBU0NJSUxpdGVy
YWwoIm51bWJlciIpKTsKKyAgICAgICAgUHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdDo6aXRlcmF0
b3IgbnVtYmVyUG9zID0gb2JqZWN0LT5maW5kKEFTQ0lJTGl0ZXJhbCgibnVtYmVyIikpOwogICAg
ICAgICBBU1NFUlQobnVtYmVyUG9zICE9IG9iamVjdC0+ZW5kKCkpOwogICAgICAgICBCaW5kaW5n
VHJhaXRzPGludD46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKG51bWJlclBvcy0+dmFsdWUu
Z2V0KCkpOwogICAgIH0KICAgICB7Ci0gICAgICAgIEluc3BlY3Rvck9iamVjdDo6aXRlcmF0b3Ig
YW5pbWFsc1BvcyA9IG9iamVjdC0+ZmluZChBU0NJSUxpdGVyYWwoImFuaW1hbHMiKSk7CisgICAg
ICAgIFByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q6Oml0ZXJhdG9yIGFuaW1hbHNQb3MgPSBvYmpl
Y3QtPmZpbmQoQVNDSUlMaXRlcmFsKCJhbmltYWxzIikpOwogICAgICAgICBBU1NFUlQoYW5pbWFs
c1BvcyAhPSBvYmplY3QtPmVuZCgpKTsKICAgICAgICAgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6
OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5
cGUoYW5pbWFsc1Bvcy0+dmFsdWUuZ2V0KCkpOwogICAgIH0KICAgICB7Ci0gICAgICAgIEluc3Bl
Y3Rvck9iamVjdDo6aXRlcmF0b3IgaWRQb3MgPSBvYmplY3QtPmZpbmQoQVNDSUlMaXRlcmFsKCJp
ZCIpKTsKKyAgICAgICAgUHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdDo6aXRlcmF0b3IgaWRQb3Mg
PSBvYmplY3QtPmZpbmQoQVNDSUlMaXRlcmFsKCJpZCIpKTsKICAgICAgICAgQVNTRVJUKGlkUG9z
ICE9IG9iamVjdC0+ZW5kKCkpOwogICAgICAgICBCaW5kaW5nVHJhaXRzPGludD46OmFzc2VydFZh
bHVlSGFzRXhwZWN0ZWRUeXBlKGlkUG9zLT52YWx1ZS5nZXQoKSk7CiAgICAgfQogICAgIHsKLSAg
ICAgICAgSW5zcGVjdG9yT2JqZWN0OjppdGVyYXRvciB0cmVlUG9zID0gb2JqZWN0LT5maW5kKEFT
Q0lJTGl0ZXJhbCgidHJlZSIpKTsKKyAgICAgICAgUHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdDo6
aXRlcmF0b3IgdHJlZVBvcyA9IG9iamVjdC0+ZmluZChBU0NJSUxpdGVyYWwoInRyZWUiKSk7CiAg
ICAgICAgIEFTU0VSVCh0cmVlUG9zICE9IG9iamVjdC0+ZW5kKCkpOwogICAgICAgICBCaW5kaW5n
VHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDE+Ojphc3Nl
cnRWYWx1ZUhhc0V4cGVjdGVkVHlwZSh0cmVlUG9zLT52YWx1ZS5nZXQoKSk7CiAgICAgfQpAQCAt
NjY1LDI5ICs2NjIsMjkgQEAgdm9pZCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD46OmFzc2VydFZhbHVlSGFzRXgKIH0KICNlbmRpZiAvLyAh
QVNTRVJUX0RJU0FCTEVECiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6
VHlwZU5lZWRpbmdDYXN0PiBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6
OlR5cGVOZWVkaW5nQ2FzdD46OnJ1bnRpbWVDYXN0KFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNw
ZWN0b3JWYWx1ZT4gdmFsdWUpCitQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6
OlR5cGVOZWVkaW5nQ2FzdD4gQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0
OjpUeXBlTmVlZGluZ0Nhc3Q+OjpydW50aW1lQ2FzdChQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlVuY2hlY2tlZFZhbHVlPiB2YWx1ZSkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpJ
bnNwZWN0b3JPYmplY3Q+IHJlc3VsdDsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
VW5jaGVja2VkT2JqZWN0PiByZXN1bHQ7CiAgICAgYm9vbCBjYXN0U3VjY2VlZGVkID0gdmFsdWUt
PmFzT2JqZWN0KHJlc3VsdCk7CiAgICAgQVNTRVJUX1VOVVNFRChjYXN0U3VjY2VlZGVkLCBjYXN0
U3VjY2VlZGVkKTsKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgQmluZGluZ1RyYWl0czxJbnNw
ZWN0b3I6OlByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+Ojphc3NlcnRWYWx1ZUhhc0V4
cGVjdGVkVHlwZShyZXN1bHQuZ2V0KCkpOwogI2VuZGlmICAvLyAhQVNTRVJUX0RJU0FCTEVECi0g
ICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVO
ZWVkaW5nQ2FzdCkgPT0gc2l6ZW9mKEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZSksIHR5
cGVfY2FzdF9wcm9ibGVtKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SW5zcGVjdG9yOjpQcm90
b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0Kj4oc3RhdGljX2Nhc3Q8SW5zcGVjdG9yOjpJbnNw
ZWN0b3JPYmplY3RCYXNlKj4ocmVzdWx0LmdldCgpKSk7CisgICAgQ09NUElMRV9BU1NFUlQoc2l6
ZW9mKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdCkgPT0gc2l6ZW9m
KEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdEJhc2UpLCB0eXBlX2Nhc3RfcHJv
YmxlbSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6
OlR5cGVOZWVkaW5nQ2FzdCo+KHN0YXRpY19jYXN0PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hl
Y2tlZE9iamVjdEJhc2UqPihyZXN1bHQuZ2V0KCkpKTsKIH0KIAogCiAjaWYgIUFTU0VSVF9ESVNB
QkxFRAotdm9pZCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vy
c2l2ZU9iamVjdDE+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShJbnNwZWN0b3I6Okluc3Bl
Y3RvclZhbHVlKiB2YWx1ZSkKK3ZvaWQgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29s
OjpUZXN0OjpSZWN1cnNpdmVPYmplY3QxPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoUHJv
dG9jb2w6OlVuY2hlY2tlZFZhbHVlKiB2YWx1ZSkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBvYmplY3Q7CisgICAgUmVmUHRyPFByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IG9iamVj
dDsKICAgICBib29sIGNhc3RTdWNjZWVkZWQgPSB2YWx1ZS0+YXNPYmplY3Qob2JqZWN0KTsKICAg
ICBBU1NFUlRfVU5VU0VEKGNhc3RTdWNjZWVkZWQsIGNhc3RTdWNjZWVkZWQpOwogCiAgICAgaW50
IGZvdW5kUHJvcGVydGllc0NvdW50ID0gMDsKICAgICB7Ci0gICAgICAgIEluc3BlY3Rvck9iamVj
dDo6aXRlcmF0b3Igb2JqUG9zID0gb2JqZWN0LT5maW5kKEFTQ0lJTGl0ZXJhbCgib2JqIikpOwor
ICAgICAgICBQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0OjppdGVyYXRvciBvYmpQb3MgPSBvYmpl
Y3QtPmZpbmQoQVNDSUlMaXRlcmFsKCJvYmoiKSk7CiAgICAgICAgIGlmIChvYmpQb3MgIT0gb2Jq
ZWN0LT5lbmQoKSkgewogICAgICAgICAgICAgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QyPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUo
b2JqUG9zLT52YWx1ZS5nZXQoKSk7CiAgICAgICAgICAgICArK2ZvdW5kUHJvcGVydGllc0NvdW50
OwpAQCAtNjk5LDE1ICs2OTYsMTUgQEAgdm9pZCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDE+Ojphc3NlcnRWYWx1ZUhhc0UKICNlbmRpZiAv
LyAhQVNTRVJUX0RJU0FCTEVECiAKICNpZiAhQVNTRVJUX0RJU0FCTEVECi12b2lkIEJpbmRpbmdU
cmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0Mj46OmFzc2Vy
dFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqIHZhbHVlKQor
dm9pZCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9i
amVjdDI+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShQcm90b2NvbDo6VW5jaGVja2VkVmFs
dWUqIHZhbHVlKQogewotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG9iamVjdDsKKyAgICBS
ZWZQdHI8UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gb2JqZWN0OwogICAgIGJvb2wgY2FzdFN1
Y2NlZWRlZCA9IHZhbHVlLT5hc09iamVjdChvYmplY3QpOwogICAgIEFTU0VSVF9VTlVTRUQoY2Fz
dFN1Y2NlZWRlZCwgY2FzdFN1Y2NlZWRlZCk7CiAKICAgICBpbnQgZm91bmRQcm9wZXJ0aWVzQ291
bnQgPSAwOwogICAgIHsKLSAgICAgICAgSW5zcGVjdG9yT2JqZWN0OjppdGVyYXRvciBvYmpQb3Mg
PSBvYmplY3QtPmZpbmQoQVNDSUlMaXRlcmFsKCJvYmoiKSk7CisgICAgICAgIFByb3RvY29sOjpV
bmNoZWNrZWRPYmplY3Q6Oml0ZXJhdG9yIG9ialBvcyA9IG9iamVjdC0+ZmluZChBU0NJSUxpdGVy
YWwoIm9iaiIpKTsKICAgICAgICAgaWYgKG9ialBvcyAhPSBvYmplY3QtPmVuZCgpKSB7CiAgICAg
ICAgICAgICBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2
ZU9iamVjdDE+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShvYmpQb3MtPnZhbHVlLmdldCgp
KTsKICAgICAgICAgICAgICsrZm91bmRQcm9wZXJ0aWVzQ291bnQ7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcmVwbGF5L0VuY29kZWRWYWx1ZS5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcmVwbGF5L0VuY29kZWRWYWx1ZS5jcHAKaW5kZXggYzcxZGJjNjM5ZWJmMzAwYTA2
NmE0MTEyOTcyMzc2ZjU2Yzg4ZDdmNS4uNmIxMDRmMjQzNDI3MTAwODI1MjE0YzhjZmJmOTgyMzM5
OWExNGEwYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3JlcGxheS9FbmNvZGVk
VmFsdWUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9yZXBsYXkvRW5jb2RlZFZhbHVl
LmNwcApAQCAtMzAsMjUgKzMwLDI1IEBACiAKICNpZiBFTkFCTEUoV0VCX1JFUExBWSkKIAotI2lu
Y2x1ZGUgIkluc3BlY3RvclZhbHVlcy5oIgorI2luY2x1ZGUgIkluc3BlY3RvclByb3RvY29sVHlw
ZXMuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4KIAogdXNpbmcgbmFtZXNwYWNlIElu
c3BlY3RvcjsKIAogbmFtZXNwYWNlIEpTQyB7CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBFbmNvZGVkVmFsdWU6OmFzT2JqZWN0KCkKK1Bhc3NSZWZQdHI8UHJvdG9jb2w6OlVuY2hlY2tl
ZE9iamVjdD4gRW5jb2RlZFZhbHVlOjphc09iamVjdCgpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gcmVzdWx0OworICAgIFJlZlB0cjxQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBy
ZXN1bHQ7CiAgICAgYm9vbCBjYXN0U3VjY2VlZGVkID0gbV92YWx1ZS0+YXNPYmplY3QocmVzdWx0
KTsKICAgICBBU1NFUlRfVU5VU0VEKGNhc3RTdWNjZWVkZWQsIGNhc3RTdWNjZWVkZWQpOwogCiAg
ICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yQXJy
YXk+IEVuY29kZWRWYWx1ZTo6YXNBcnJheSgpCitQYXNzUmVmUHRyPFByb3RvY29sOjpVbmNoZWNr
ZWRBcnJheT4gRW5jb2RlZFZhbHVlOjphc0FycmF5KCkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+IHJlc3VsdDsKKyAgICBSZWZQdHI8UHJvdG9jb2w6OlVuY2hlY2tlZEFycmF5PiByZXN1
bHQ7CiAgICAgYm9vbCBjYXN0U3VjY2VlZGVkID0gbV92YWx1ZS0+YXNBcnJheShyZXN1bHQpOwog
ICAgIEFTU0VSVF9VTlVTRUQoY2FzdFN1Y2NlZWRlZCwgY2FzdFN1Y2NlZWRlZCk7CiAKQEAgLTY3
LDM3ICs2NywzNyBAQCBib29sIEVuY29kaW5nVHJhaXRzPFZlY3RvcjxjaGFyPj46OmRlY29kZVZh
bHVlKEVuY29kZWRWYWx1ZSYgZW5jb2RlZEJ1ZmZlciwgVmVjdAogCiB0ZW1wbGF0ZTw+IEVuY29k
ZWRWYWx1ZSBTY2FsYXJFbmNvZGluZ1RyYWl0czxib29sPjo6ZW5jb2RlVmFsdWUoY29uc3QgYm9v
bCYgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIEVuY29kZWRWYWx1ZShJbnNwZWN0b3JCYXNpY1ZhbHVl
OjpjcmVhdGUodmFsdWUpKTsKKyAgICByZXR1cm4gRW5jb2RlZFZhbHVlKFByb3RvY29sOjpTY2Fs
YXJWYWx1ZTo6Y3JlYXRlKHZhbHVlKSk7CiB9CiAKIHRlbXBsYXRlPD4gRW5jb2RlZFZhbHVlIFNj
YWxhckVuY29kaW5nVHJhaXRzPGRvdWJsZT46OmVuY29kZVZhbHVlKGNvbnN0IGRvdWJsZSYgdmFs
dWUpCiB7Ci0gICAgcmV0dXJuIEVuY29kZWRWYWx1ZShJbnNwZWN0b3JCYXNpY1ZhbHVlOjpjcmVh
dGUodmFsdWUpKTsKKyAgICByZXR1cm4gRW5jb2RlZFZhbHVlKFByb3RvY29sOjpTY2FsYXJWYWx1
ZTo6Y3JlYXRlKHZhbHVlKSk7CiB9CiAKIHRlbXBsYXRlPD4gRW5jb2RlZFZhbHVlIFNjYWxhckVu
Y29kaW5nVHJhaXRzPGZsb2F0Pjo6ZW5jb2RlVmFsdWUoY29uc3QgZmxvYXQmIHZhbHVlKQogewot
ICAgIHJldHVybiBFbmNvZGVkVmFsdWUoSW5zcGVjdG9yQmFzaWNWYWx1ZTo6Y3JlYXRlKChkb3Vi
bGUpdmFsdWUpKTsKKyAgICByZXR1cm4gRW5jb2RlZFZhbHVlKFByb3RvY29sOjpTY2FsYXJWYWx1
ZTo6Y3JlYXRlKChkb3VibGUpdmFsdWUpKTsKIH0KIAogdGVtcGxhdGU8PiBFbmNvZGVkVmFsdWUg
U2NhbGFyRW5jb2RpbmdUcmFpdHM8aW50MzJfdD46OmVuY29kZVZhbHVlKGNvbnN0IGludDMyX3Qm
IHZhbHVlKQogewotICAgIHJldHVybiBFbmNvZGVkVmFsdWUoSW5zcGVjdG9yQmFzaWNWYWx1ZTo6
Y3JlYXRlKChkb3VibGUpdmFsdWUpKTsKKyAgICByZXR1cm4gRW5jb2RlZFZhbHVlKFByb3RvY29s
OjpTY2FsYXJWYWx1ZTo6Y3JlYXRlKChkb3VibGUpdmFsdWUpKTsKIH0KIAogdGVtcGxhdGU8PiBF
bmNvZGVkVmFsdWUgU2NhbGFyRW5jb2RpbmdUcmFpdHM8aW50NjRfdD46OmVuY29kZVZhbHVlKGNv
bnN0IGludDY0X3QmIHZhbHVlKQogewotICAgIHJldHVybiBFbmNvZGVkVmFsdWUoSW5zcGVjdG9y
QmFzaWNWYWx1ZTo6Y3JlYXRlKChkb3VibGUpdmFsdWUpKTsKKyAgICByZXR1cm4gRW5jb2RlZFZh
bHVlKFByb3RvY29sOjpTY2FsYXJWYWx1ZTo6Y3JlYXRlKChkb3VibGUpdmFsdWUpKTsKIH0KIAog
dGVtcGxhdGU8PiBFbmNvZGVkVmFsdWUgU2NhbGFyRW5jb2RpbmdUcmFpdHM8dWludDMyX3Q+Ojpl
bmNvZGVWYWx1ZShjb25zdCB1aW50MzJfdCYgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIEVuY29kZWRW
YWx1ZShJbnNwZWN0b3JCYXNpY1ZhbHVlOjpjcmVhdGUoKGRvdWJsZSl2YWx1ZSkpOworICAgIHJl
dHVybiBFbmNvZGVkVmFsdWUoUHJvdG9jb2w6OlNjYWxhclZhbHVlOjpjcmVhdGUoKGRvdWJsZSl2
YWx1ZSkpOwogfQogCiB0ZW1wbGF0ZTw+IEVuY29kZWRWYWx1ZSBTY2FsYXJFbmNvZGluZ1RyYWl0
czx1aW50NjRfdD46OmVuY29kZVZhbHVlKGNvbnN0IHVpbnQ2NF90JiB2YWx1ZSkKIHsKLSAgICBy
ZXR1cm4gRW5jb2RlZFZhbHVlKEluc3BlY3RvckJhc2ljVmFsdWU6OmNyZWF0ZSgoZG91YmxlKXZh
bHVlKSk7CisgICAgcmV0dXJuIEVuY29kZWRWYWx1ZShQcm90b2NvbDo6U2NhbGFyVmFsdWU6OmNy
ZWF0ZSgoZG91YmxlKXZhbHVlKSk7CiB9CiAKIHRlbXBsYXRlPD4gYm9vbCBFbmNvZGVkVmFsdWU6
OmNvbnZlcnRUbzxib29sPigpCkBAIC0xODcsNyArMTg3LDcgQEAgdm9pZCBFbmNvZGVkVmFsdWU6
OmFwcGVuZDxFbmNvZGVkVmFsdWU+KGNvbnN0IHR5cGVuYW1lIEVuY29kaW5nVHJhaXRzPEVuY29k
ZWRWYWwKIHRlbXBsYXRlPD4KIGJvb2wgRW5jb2RlZFZhbHVlOjpnZXQ8RW5jb2RlZFZhbHVlPihj
b25zdCBTdHJpbmcmIGtleSwgdHlwZW5hbWUgRW5jb2RpbmdUcmFpdHM8RW5jb2RlZFZhbHVlPjo6
RGVjb2RlZFR5cGUmIGRlY29kZWRWYWx1ZSkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNw
ZWN0b3JWYWx1ZT4gaW5zcGVjdG9yVmFsdWUoYXNPYmplY3QoKS0+Z2V0KGtleSkpOworICAgIFJl
ZlB0cjxQcm90b2NvbDo6VW5jaGVja2VkVmFsdWU+IGluc3BlY3RvclZhbHVlKGFzT2JqZWN0KCkt
PmdldChrZXkpKTsKICAgICBpZiAoIWluc3BlY3RvclZhbHVlKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9yZXBsYXkvRW5jb2RlZFZh
bHVlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcmVwbGF5L0VuY29kZWRWYWx1ZS5oCmluZGV4
IGMwMDEwZThhOGEwZmY2NTkzYmNiZmEwNTY3MDMwOTE2NmE2MDY1NmQuLjk4YmRiYTNkNGRiODMz
MzRhZTczYjdjY2YxOWIzNWY5MzY1OTk4NzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9yZXBsYXkvRW5jb2RlZFZhbHVlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Jl
cGxheS9FbmNvZGVkVmFsdWUuaApAQCAtMzAsNyArMzAsNyBAQAogCiAjaWYgRU5BQkxFKFdFQl9S
RVBMQVkpCiAKLSNpbmNsdWRlICJJbnNwZWN0b3JWYWx1ZXMuaCIKKyNpbmNsdWRlICJJbnNwZWN0
b3JQcm90b2NvbFR5cGVzLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CiAKQEAgLTQxLDcgKzQxLDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3Ry
dWN0IEVuY29kaW5nVHJhaXRzOwogCiBjbGFzcyBFbmNvZGVkVmFsdWUgZmluYWwgewogcHVibGlj
OgotICAgIGV4cGxpY2l0IEVuY29kZWRWYWx1ZShQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVj
dG9yVmFsdWU+IHZhbHVlKQorICAgIGV4cGxpY2l0IEVuY29kZWRWYWx1ZShQYXNzUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZFZhbHVlPiB2YWx1ZSkKICAgICAgICAgOiBtX3Zh
bHVlKHZhbHVlKSB7IH0KIAogICAgIEVuY29kZWRWYWx1ZSgpCkBAIC00OSwyMiArNDksMjIgQEAg
cHVibGljOgogCiAgICAgc3RhdGljIEVuY29kZWRWYWx1ZSBjcmVhdGVPYmplY3QoKQogICAgIHsK
LSAgICAgICAgcmV0dXJuIEVuY29kZWRWYWx1ZShJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCkpOworICAgICAgICByZXR1cm4gRW5jb2RlZFZhbHVlKEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlVuY2hlY2tlZE9iamVjdDo6Y3JlYXRlKCkpOwogICAgIH0KIAogICAgIHN0YXRpYyBFbmNv
ZGVkVmFsdWUgY3JlYXRlQXJyYXkoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEVuY29kZWRWYWx1
ZShJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5OjpjcmVhdGUoKSk7CisgICAgICAgIHJldHVybiBF
bmNvZGVkVmFsdWUoSW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkQXJyYXk6OmNyZWF0ZSgp
KTsKICAgICB9CiAKICAgICBzdGF0aWMgRW5jb2RlZFZhbHVlIGNyZWF0ZVN0cmluZyhjb25zdCBT
dHJpbmcmIHZhbHVlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEVuY29kZWRWYWx1ZShJbnNwZWN0
b3I6Okluc3BlY3RvclN0cmluZzo6Y3JlYXRlKHZhbHVlKSk7CisgICAgICAgIHJldHVybiBFbmNv
ZGVkVmFsdWUoSW5zcGVjdG9yOjpQcm90b2NvbDo6U2NhbGFyVmFsdWU6OmNyZWF0ZSh2YWx1ZSkp
OwogICAgIH0KIAogICAgIHN0YXRpYyBFbmNvZGVkVmFsdWUgY3JlYXRlU3RyaW5nKGNvbnN0IGNo
YXIqIHZhbHVlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEVuY29kZWRWYWx1ZShJbnNwZWN0b3I6
Okluc3BlY3RvclN0cmluZzo6Y3JlYXRlKHZhbHVlKSk7CisgICAgICAgIHJldHVybiBFbmNvZGVk
VmFsdWUoSW5zcGVjdG9yOjpQcm90b2NvbDo6U2NhbGFyVmFsdWU6OmNyZWF0ZSh2YWx1ZSkpOwog
ICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CkBAIC03OCwxMSArNzgsMTEgQEAgcHVi
bGljOgogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gVCBjb252ZXJ0VG8oKTsKIAotICAgIEpT
X0VYUE9SVF9QUklWQVRFIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGFz
T2JqZWN0KCk7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Oklu
c3BlY3RvckFycmF5PiBhc0FycmF5KCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgUGFzc1JlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IGFzT2JqZWN0KCk7CisgICAg
SlNfRVhQT1JUX1BSSVZBVEUgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNr
ZWRBcnJheT4gYXNBcnJheSgpOwogCiBwcml2YXRlOgotICAgIFJlZlB0cjxJbnNwZWN0b3I6Oklu
c3BlY3RvclZhbHVlPiBtX3ZhbHVlOworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpV
bmNoZWNrZWRWYWx1ZT4gbV92YWx1ZTsKIH07CiAKIHRlbXBsYXRlPD4gSlNfRVhQT1JUX1BSSVZB
VEUgYm9vbCBFbmNvZGVkVmFsdWU6OmNvbnZlcnRUbzxib29sPigpOwpAQCAtMTE5LDcgKzExOSw3
IEBAIHN0cnVjdCBFbmNvZGluZ1RyYWl0czxWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJm
bG93SGFuZGxlcj4+IHsKIAogICAgIHN0YXRpYyBib29sIGRlY29kZVZhbHVlKEVuY29kZWRWYWx1
ZSYgZW5jb2RlZFZlY3RvciwgRGVjb2RlZFR5cGUmIGRlY29kZWRWYWx1ZSkKICAgICB7Ci0gICAg
ICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5PiBpbnNwZWN0b3JBcnJheSA9IGVu
Y29kZWRWZWN0b3IuYXNBcnJheSgpOworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6VW5jaGVja2VkQXJyYXk+IGluc3BlY3RvckFycmF5ID0gZW5jb2RlZFZlY3Rvci5hc0FycmF5
KCk7CiAgICAgICAgIGRlY29kZWRWYWx1ZSA9IFZlY3Rvcjx0eXBlbmFtZSBFbmNvZGluZ1RyYWl0
czxUPjo6RGVjb2RlZFR5cGUsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+KGluc3Bl
Y3RvckFycmF5LT5sZW5ndGgoKSk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5z
cGVjdG9yQXJyYXktPmxlbmd0aCgpOyArK2kpIHsKICAgICAgICAgICAgIEVuY29kZWRWYWx1ZSBl
bmNvZGVkRWxlbWVudChpbnNwZWN0b3JBcnJheS0+Z2V0KGkpKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9yUmVwbGF5SW5wdXRz
LnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL0NvZGVHZW5lcmF0b3JS
ZXBsYXlJbnB1dHMucHkKaW5kZXggZDk5MzVjMmM0ZmFmOTc2ODA4ZGEwZTcwNTQ0ZDE1MDg5Zjlm
Y2U4MS4uMGIwM2Y0OGVkNmQ5MTE3NmZmNTU4YTIzYjQ3Yjc3ZGNjNjA0ZTU1MSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL0NvZGVHZW5lcmF0b3JSZXBs
YXlJbnB1dHMucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JSZXBsYXlJbnB1dHMucHkKQEAgLTc1LDcgKzc1LDcgQEAgR0xPQkFMX0NPTkZJ
RyA9IHsKICAgICAgICAgICAgICgiV2ViQ29yZSIsICJyZXBsYXkvU2VyaWFsaXphdGlvbk1ldGhv
ZHMuaCIpCiAgICAgICAgICksCiAgICAgICAgIChbIldlYkNvcmUiLCAiSmF2YVNjcmlwdENvcmUi
XSwKLSAgICAgICAgICAgICgiSmF2YVNjcmlwdENvcmUiLCAiaW5zcGVjdG9yL0luc3BlY3RvclZh
bHVlcy5oIikKKyAgICAgICAgICAgICgiSmF2YVNjcmlwdENvcmUiLCAiaW5zcGVjdG9yL0luc3Bl
Y3RvclByb3RvY29sVHlwZXMuaCIpCiAgICAgICAgICksCiAgICAgICAgIChbIldlYkNvcmUiLCAi
SmF2YVNjcmlwdENvcmUiXSwKICAgICAgICAgICAgICgiV1RGIiwgInd0Zi9OZXZlckRlc3Ryb3ll
ZC5oIikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL2luc3Bl
Y3Rvci9JbnNwZWN0b3JWYWx1ZXMuaCBiL1NvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJz
L2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggYmQ5ODVmNjkxZjdiMjhiYmVlODVjYzdiYzc0NzZiMTAzZGZiM2NjNS4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Gb3J3YXJk
aW5nSGVhZGVycy9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmgKKysrIC9kZXYvbnVsbApAQCAt
MSw0ICswLDAgQEAKLSNpZm5kZWYgV2ViQ29yZV9GV0RfSW5zcGVjdG9yVmFsdWVzX2gKLSNkZWZp
bmUgV2ViQ29yZV9GV0RfSW5zcGVjdG9yVmFsdWVzX2gKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JWYWx1ZXMuaD4KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5vcmRlciBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUub3JkZXIKaW5kZXggOGNmMGU2
MTQ3ZGQ2ZjhiN2QwZTY0MTUzNzI3MTQ5NmY2NmRmNmQxMS4uNzVkNTJkYTk0NGEyMTVmYjMwODQy
ZDg3MjNjMDFjOWYyZDNmNzNiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5v
cmRlcgorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLm9yZGVyCkBAIC02OTQsMTIgKzY5NCwx
MiBAQCBfX1pON1dlYkNvcmUxNEluc3BlY3RvckFnZW50QzFFUE5TXzRQYWdlRVBOU18yMUluamVj
dGVkU2NyaXB0TWFuYWdlckVQTlNfMTlJbnN0cgogX19aTjdXZWJDb3JlMjdJbnNwZWN0b3JCYXNl
QWdlbnRJbnRlcmZhY2VDMkVSS04zV1RGNlN0cmluZ0VQTlNfMTlJbnN0cnVtZW50aW5nQWdlbnRz
RVBOU18yM0luc3BlY3RvckNvbXBvc2l0ZVN0YXRlRQogX19aTjdXZWJDb3JlMjNJbnNwZWN0b3JD
b21wb3NpdGVTdGF0ZTE2Y3JlYXRlQWdlbnRTdGF0ZUVSS04zV1RGNlN0cmluZ0UKIF9fWk43V2Vi
Q29yZTE5SW5zcGVjdG9yT2JqZWN0QmFzZTlzZXRPYmplY3RFUktOM1dURjZTdHJpbmdFTlMxXzEw
UGFzc1JlZlB0cklOU18xNUluc3BlY3Rvck9iamVjdEVFRQotX19aTjNXVEY5SGFzaFRhYmxlSU5T
XzZTdHJpbmdFTlNfMTJLZXlWYWx1ZVBhaXJJUzFfTlNfNlJlZlB0cklON1dlYkNvcmUxNEluc3Bl
Y3RvclZhbHVlRUVFRUVOU18yNEtleVZhbHVlUGFpcktleUV4dHJhY3RvcklTN19FRU5TXzEwU3Ry
aW5nSGFzaEVOU18xOEhhc2hNYXBWYWx1ZVRyYWl0c0lOU18xMEhhc2hUcmFpdHNJUzFfRUVOU0Nf
SVM2X0VFRUVTRF9FMTVkZWFsbG9jYXRlVGFibGVFUFM3X2kKLV9fWk4zV1RGOUhhc2hUYWJsZUlO
U182U3RyaW5nRU5TXzEyS2V5VmFsdWVQYWlySVMxX05TXzZSZWZQdHJJTjdXZWJDb3JlMTRJbnNw
ZWN0b3JWYWx1ZUVFRUVFTlNfMjRLZXlWYWx1ZVBhaXJLZXlFeHRyYWN0b3JJUzdfRUVOU18xMFN0
cmluZ0hhc2hFTlNfMThIYXNoTWFwVmFsdWVUcmFpdHNJTlNfMTBIYXNoVHJhaXRzSVMxX0VFTlND
X0lTNl9FRUVFU0RfRTE2bG9va3VwRm9yV3JpdGluZ0lOU18yMklkZW50aXR5SGFzaFRyYW5zbGF0
b3JJU0FfRUVTMV9FRU5TdDNfXzE0cGFpcklQUzdfYkVFUktUMF8KLV9fWk4zV1RGOUhhc2hUYWJs
ZUlOU182U3RyaW5nRU5TXzEyS2V5VmFsdWVQYWlySVMxX05TXzZSZWZQdHJJTjdXZWJDb3JlMTRJ
bnNwZWN0b3JWYWx1ZUVFRUVFTlNfMjRLZXlWYWx1ZVBhaXJLZXlFeHRyYWN0b3JJUzdfRUVOU18x
MFN0cmluZ0hhc2hFTlNfMThIYXNoTWFwVmFsdWVUcmFpdHNJTlNfMTBIYXNoVHJhaXRzSVMxX0VF
TlNDX0lTNl9FRUVFU0RfRTNhZGRJTlNfMTdIYXNoTWFwVHJhbnNsYXRvcklTRl9TQV9FRVMxX05T
XzEwUGFzc1JlZlB0cklTNV9FRUVFTlNfMThIYXNoVGFibGVBZGRSZXN1bHRJTlNfMTdIYXNoVGFi
bGVJdGVyYXRvcklTMV9TN19TOV9TQV9TRl9TRF9FRUVFUktUMF9SS1QxXwotX19aTjNXVEY5SGFz
aFRhYmxlSU5TXzZTdHJpbmdFTlNfMTJLZXlWYWx1ZVBhaXJJUzFfTlNfNlJlZlB0cklON1dlYkNv
cmUxNEluc3BlY3RvclZhbHVlRUVFRUVOU18yNEtleVZhbHVlUGFpcktleUV4dHJhY3RvcklTN19F
RU5TXzEwU3RyaW5nSGFzaEVOU18xOEhhc2hNYXBWYWx1ZVRyYWl0c0lOU18xMEhhc2hUcmFpdHNJ
UzFfRUVOU0NfSVM2X0VFRUVTRF9FNmxvb2t1cElOU18yMklkZW50aXR5SGFzaFRyYW5zbGF0b3JJ
U0FfRUVTMV9FRVBTN19SS1QwXwotX19aTjNXVEY5SGFzaFRhYmxlSU5TXzZTdHJpbmdFTlNfMTJL
ZXlWYWx1ZVBhaXJJUzFfTlNfNlJlZlB0cklON1dlYkNvcmUxNEluc3BlY3RvclZhbHVlRUVFRUVO
U18yNEtleVZhbHVlUGFpcktleUV4dHJhY3RvcklTN19FRU5TXzEwU3RyaW5nSGFzaEVOU18xOEhh
c2hNYXBWYWx1ZVRyYWl0c0lOU18xMEhhc2hUcmFpdHNJUzFfRUVOU0NfSVM2X0VFRUVTRF9FNnJl
aGFzaEVpCi1fX1pOM1dURjlIYXNoVGFibGVJTlNfNlN0cmluZ0VOU18xMktleVZhbHVlUGFpcklT
MV9OU182UmVmUHRySU43V2ViQ29yZTE0SW5zcGVjdG9yVmFsdWVFRUVFRU5TXzI0S2V5VmFsdWVQ
YWlyS2V5RXh0cmFjdG9ySVM3X0VFTlNfMTBTdHJpbmdIYXNoRU5TXzE4SGFzaE1hcFZhbHVlVHJh
aXRzSU5TXzEwSGFzaFRyYWl0c0lTMV9FRU5TQ19JUzZfRUVFRVNEX0U2cmVtb3ZlRVBTN18KK19f
Wk4zV1RGOUhhc2hUYWJsZUlOU182U3RyaW5nRU5TXzEyS2V5VmFsdWVQYWlySVMxX05TXzZSZWZQ
dHJJTjdXZWJDb3JlMTRVbmNoZWNrZWRWYWx1ZUVFRUVFTlNfMjRLZXlWYWx1ZVBhaXJLZXlFeHRy
YWN0b3JJUzdfRUVOU18xMFN0cmluZ0hhc2hFTlNfMThIYXNoTWFwVmFsdWVUcmFpdHNJTlNfMTBI
YXNoVHJhaXRzSVMxX0VFTlNDX0lTNl9FRUVFU0RfRTE1ZGVhbGxvY2F0ZVRhYmxlRVBTN19pCitf
X1pOM1dURjlIYXNoVGFibGVJTlNfNlN0cmluZ0VOU18xMktleVZhbHVlUGFpcklTMV9OU182UmVm
UHRySU43V2ViQ29yZTE0VW5jaGVja2VkVmFsdWVFRUVFRU5TXzI0S2V5VmFsdWVQYWlyS2V5RXh0
cmFjdG9ySVM3X0VFTlNfMTBTdHJpbmdIYXNoRU5TXzE4SGFzaE1hcFZhbHVlVHJhaXRzSU5TXzEw
SGFzaFRyYWl0c0lTMV9FRU5TQ19JUzZfRUVFRVNEX0UxNmxvb2t1cEZvcldyaXRpbmdJTlNfMjJJ
ZGVudGl0eUhhc2hUcmFuc2xhdG9ySVNBX0VFUzFfRUVOU3QzX18xNHBhaXJJUFM3X2JFRVJLVDBf
CitfX1pOM1dURjlIYXNoVGFibGVJTlNfNlN0cmluZ0VOU18xMktleVZhbHVlUGFpcklTMV9OU182
UmVmUHRySU43V2ViQ29yZTE0VW5jaGVja2VkVmFsdWVFRUVFRU5TXzI0S2V5VmFsdWVQYWlyS2V5
RXh0cmFjdG9ySVM3X0VFTlNfMTBTdHJpbmdIYXNoRU5TXzE4SGFzaE1hcFZhbHVlVHJhaXRzSU5T
XzEwSGFzaFRyYWl0c0lTMV9FRU5TQ19JUzZfRUVFRVNEX0UzYWRkSU5TXzE3SGFzaE1hcFRyYW5z
bGF0b3JJU0ZfU0FfRUVTMV9OU18xMFBhc3NSZWZQdHJJUzVfRUVFRU5TXzE4SGFzaFRhYmxlQWRk
UmVzdWx0SU5TXzE3SGFzaFRhYmxlSXRlcmF0b3JJUzFfUzdfUzlfU0FfU0ZfU0RfRUVFRVJLVDBf
UktUMV8KK19fWk4zV1RGOUhhc2hUYWJsZUlOU182U3RyaW5nRU5TXzEyS2V5VmFsdWVQYWlySVMx
X05TXzZSZWZQdHJJTjdXZWJDb3JlMTRVbmNoZWNrZWRWYWx1ZUVFRUVFTlNfMjRLZXlWYWx1ZVBh
aXJLZXlFeHRyYWN0b3JJUzdfRUVOU18xMFN0cmluZ0hhc2hFTlNfMThIYXNoTWFwVmFsdWVUcmFp
dHNJTlNfMTBIYXNoVHJhaXRzSVMxX0VFTlNDX0lTNl9FRUVFU0RfRTZsb29rdXBJTlNfMjJJZGVu
dGl0eUhhc2hUcmFuc2xhdG9ySVNBX0VFUzFfRUVQUzdfUktUMF8KK19fWk4zV1RGOUhhc2hUYWJs
ZUlOU182U3RyaW5nRU5TXzEyS2V5VmFsdWVQYWlySVMxX05TXzZSZWZQdHJJTjdXZWJDb3JlMTRV
bmNoZWNrZWRWYWx1ZUVFRUVFTlNfMjRLZXlWYWx1ZVBhaXJLZXlFeHRyYWN0b3JJUzdfRUVOU18x
MFN0cmluZ0hhc2hFTlNfMThIYXNoTWFwVmFsdWVUcmFpdHNJTlNfMTBIYXNoVHJhaXRzSVMxX0VF
TlNDX0lTNl9FRUVFU0RfRTZyZWhhc2hFaQorX19aTjNXVEY5SGFzaFRhYmxlSU5TXzZTdHJpbmdF
TlNfMTJLZXlWYWx1ZVBhaXJJUzFfTlNfNlJlZlB0cklON1dlYkNvcmUxNFVuY2hlY2tlZFZhbHVl
RUVFRUVOU18yNEtleVZhbHVlUGFpcktleUV4dHJhY3RvcklTN19FRU5TXzEwU3RyaW5nSGFzaEVO
U18xOEhhc2hNYXBWYWx1ZVRyYWl0c0lOU18xMEhhc2hUcmFpdHNJUzFfRUVOU0NfSVM2X0VFRUVT
RF9FNnJlbW92ZUVQUzdfCiBfX1pOM1dURjlIYXNoVGFibGVJTlNfNlN0cmluZ0VOU18xMktleVZh
bHVlUGFpcklTMV9OU182T3duUHRySU43V2ViQ29yZTE0SW5zcGVjdG9yU3RhdGVFRUVFRU5TXzI0
S2V5VmFsdWVQYWlyS2V5RXh0cmFjdG9ySVM3X0VFTlNfMTBTdHJpbmdIYXNoRU5TXzE4SGFzaE1h
cFZhbHVlVHJhaXRzSU5TXzEwSGFzaFRyYWl0c0lTMV9FRU5TQ19JUzZfRUVFRVNEX0UxNmxvb2t1
cEZvcldyaXRpbmdJTlNfMjJJZGVudGl0eUhhc2hUcmFuc2xhdG9ySVNBX0VFUzFfRUVOU3QzX18x
NHBhaXJJUFM3X2JFRVJLVDBfCiBfX1pOM1dURjlIYXNoVGFibGVJTlNfNlN0cmluZ0VOU18xMktl
eVZhbHVlUGFpcklTMV9OU182T3duUHRySU43V2ViQ29yZTE0SW5zcGVjdG9yU3RhdGVFRUVFRU5T
XzI0S2V5VmFsdWVQYWlyS2V5RXh0cmFjdG9ySVM3X0VFTlNfMTBTdHJpbmdIYXNoRU5TXzE4SGFz
aE1hcFZhbHVlVHJhaXRzSU5TXzEwSGFzaFRyYWl0c0lTMV9FRU5TQ19JUzZfRUVFRVNEX0UzYWRk
SU5TXzE3SGFzaE1hcFRyYW5zbGF0b3JJU0ZfU0FfRUVTMV9OU18xMFBhc3NPd25QdHJJUzVfRUVF
RU5TXzE4SGFzaFRhYmxlQWRkUmVzdWx0SU5TXzE3SGFzaFRhYmxlSXRlcmF0b3JJUzFfUzdfUzlf
U0FfU0ZfU0RfRUVFRVJLVDBfUktUMV8KIF9fWk4zV1RGOUhhc2hUYWJsZUlOU182U3RyaW5nRU5T
XzEyS2V5VmFsdWVQYWlySVMxX05TXzZPd25QdHJJTjdXZWJDb3JlMTRJbnNwZWN0b3JTdGF0ZUVF
RUVFTlNfMjRLZXlWYWx1ZVBhaXJLZXlFeHRyYWN0b3JJUzdfRUVOU18xMFN0cmluZ0hhc2hFTlNf
MThIYXNoTWFwVmFsdWVUcmFpdHNJTlNfMTBIYXNoVHJhaXRzSVMxX0VFTlNDX0lTNl9FRUVFU0Rf
RTZsb29rdXBJTlNfMjJJZGVudGl0eUhhc2hUcmFuc2xhdG9ySVNBX0VFUzFfRUVQUzdfUktUMF8K
QEAgLTcyNiw4ICs3MjYsOCBAQCBfX1pON1dlYkNvcmUxNlBhZ2VDb25zb2xlQWdlbnRDMUVQTlNf
MTlJbnN0cnVtZW50aW5nQWdlbnRzRVBOU18xNEluc3BlY3RvckFnZW50RQogX19aTjdXZWJDb3Jl
MjFJbnNwZWN0b3JDb25zb2xlQWdlbnRDMkVQTlNfMTlJbnN0cnVtZW50aW5nQWdlbnRzRVBOU18y
M0luc3BlY3RvckNvbXBvc2l0ZVN0YXRlRVBOU18yMUluamVjdGVkU2NyaXB0TWFuYWdlckUKIF9f
Wk43V2ViQ29yZTE3UGFnZURlYnVnZ2VyQWdlbnQ2Y3JlYXRlRVBOU18xOUluc3RydW1lbnRpbmdB
Z2VudHNFUE5TXzIzSW5zcGVjdG9yQ29tcG9zaXRlU3RhdGVFUE5TXzE4SW5zcGVjdG9yUGFnZUFn
ZW50RVBOU18yMUluamVjdGVkU2NyaXB0TWFuYWdlckVQTlNfMTZJbnNwZWN0b3JPdmVybGF5RQog
X19aTjdXZWJDb3JlMjJJbnNwZWN0b3JEZWJ1Z2dlckFnZW50QzJFUE5TXzE5SW5zdHJ1bWVudGlu
Z0FnZW50c0VQTlNfMjNJbnNwZWN0b3JDb21wb3NpdGVTdGF0ZUVQTlNfMjFJbmplY3RlZFNjcmlw
dE1hbmFnZXJFCi1fX1pON1dlYkNvcmUxNEluc3BlY3RvclN0YXRlOHNldFZhbHVlRVJLTjNXVEY2
U3RyaW5nRU5TMV8xMFBhc3NSZWZQdHJJTlNfMTRJbnNwZWN0b3JWYWx1ZUVFRQotX19aTjdXZWJD
b3JlMTlJbnNwZWN0b3JPYmplY3RCYXNlOHNldFZhbHVlRVJLTjNXVEY2U3RyaW5nRU5TMV8xMFBh
c3NSZWZQdHJJTlNfMTRJbnNwZWN0b3JWYWx1ZUVFRQorX19aTjdXZWJDb3JlMTRJbnNwZWN0b3JT
dGF0ZThzZXRWYWx1ZUVSS04zV1RGNlN0cmluZ0VOUzFfMTBQYXNzUmVmUHRySU5TXzE0VW5jaGVj
a2VkVmFsdWVFRUUKK19fWk43V2ViQ29yZTE5SW5zcGVjdG9yT2JqZWN0QmFzZThzZXRWYWx1ZUVS
S04zV1RGNlN0cmluZ0VOUzFfMTBQYXNzUmVmUHRySU5TXzE0VW5jaGVja2VkVmFsdWVFRUUKIF9f
Wk43V2ViQ29yZTIzSW5zcGVjdG9yQ29tcG9zaXRlU3RhdGUyMWluc3BlY3RvclN0YXRlVXBkYXRl
ZEV2CiBfX1pON1dlYkNvcmUyNUluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ2Y3JlYXRlRVBOU18x
OUluc3RydW1lbnRpbmdBZ2VudHNFUE5TXzIzSW5zcGVjdG9yQ29tcG9zaXRlU3RhdGVFUE5TXzE3
SW5zcGVjdG9yRE9NQWdlbnRFUE5TXzIySW5zcGVjdG9yRGVidWdnZXJBZ2VudEVQTlNfMTRJbnNw
ZWN0b3JBZ2VudEUKIF9fWk43V2ViQ29yZTIwSW5zcGVjdG9yV29ya2VyQWdlbnQ2Y3JlYXRlRVBO
U18xOUluc3RydW1lbnRpbmdBZ2VudHNFUE5TXzIzSW5zcGVjdG9yQ29tcG9zaXRlU3RhdGVFCkBA
IC0yMDk5Niw3ICsyMDk5Niw3IEBAIF9fWlRWTjdXZWJDb3JlMjJJbnNwZWN0b3JUaW1lbGluZUFn
ZW50RQogX19aTjdXZWJDb3JlOFByb3RvY29sTDIwZW51bV9jb25zdGFudF92YWx1ZXNFCiBfX1pU
Vk43V2ViQ29yZTE5SW5zcGVjdG9yT2JqZWN0QmFzZUUKIF9fWlRWTjdXZWJDb3JlMThJbnNwZWN0
b3JBcnJheUJhc2VFCi1fX1pUVk43V2ViQ29yZTE0SW5zcGVjdG9yVmFsdWVFCitfX1pUVk43V2Vi
Q29yZTE0VW5jaGVja2VkVmFsdWVFCiBfX1pUVk43V2ViQ29yZTE5SW5zcGVjdG9yQmFzaWNWYWx1
ZUUKIF9fWlRWTjdXZWJDb3JlMTVJbnNwZWN0b3JTdHJpbmdFCiBfX1pUVk43V2ViQ29yZTIwSW5z
cGVjdG9yV29ya2VyQWdlbnRFCkBAIC0yNDQwMiw3ICsyNDQwMiw3IEBAIF9fWlRWTjdXZWJDb3Jl
MTdJbnNwZWN0b3JDU1NBZ2VudDIwVG9nZ2xlUHJvcGVydHlBY3Rpb25FCiBfX1pUVk43V2ViQ29y
ZTE3SW5zcGVjdG9yQ1NTQWdlbnQyMVNldFByb3BlcnR5VGV4dEFjdGlvbkUKIF9fWlRWTjdXZWJD
b3JlMTdJbnNwZWN0b3JDU1NBZ2VudDIzU2V0U3R5bGVTaGVldFRleHRBY3Rpb25FCiBfX1pUVk43
V2ViQ29yZTE4SW5zcGVjdG9yQmFzZUFnZW50SU5TXzIySW5zcGVjdG9yRGF0YWJhc2VBZ2VudEVF
RQotX19aVFZON1dlYkNvcmU4UHJvdG9jb2w1QXJyYXlJTlNfMTRJbnNwZWN0b3JWYWx1ZUVFRQor
X19aVFZON1dlYkNvcmU4UHJvdG9jb2w1QXJyYXlJTlNfMTRVbmNoZWNrZWRWYWx1ZUVFRQogX19a
TjdXZWJDb3JlTDEybmV4dFVudXNlZElkRQogX19aTjdXZWJDb3JlMjJJbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50MjBiYWNrdHJhY2VPYmplY3RHcm91cEUKIF9fWlRWTjNXVEYyMU1lbW9yeUluc3RydW1l
bnRhdGlvbjdXcmFwcGVySU43V2ViQ29yZTE1SW5zcGVjdG9yT2JqZWN0RUVFCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagppbmRleCBhNTFmYjU3OWYw
NDAxMjlmNWYyMDFjMWJkNWNjOTlhZGIzMDUzMDAwLi5iZDk4NjU4NjQ4MDY2MDk2OTcyNjg2ZWY0
MjBhM2FmMGY4Mzc4MWI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHBy
b2ovV2ViQ29yZS52Y3hwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9X
ZWJDb3JlLnZjeHByb2oKQEAgLTE4ODYwLDcgKzE4ODYwLDYgQEAg77u/PD94bWwgdmVyc2lvbj0i
MS4wIiBlbmNvZGluZz0idXRmLTgiPz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXEZvcndh
cmRpbmdIZWFkZXJzXGluc3BlY3RvclxJbnNwZWN0b3JKU0Zyb250ZW5kRGlzcGF0Y2hlcnMuaCIg
Lz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXEZvcndhcmRpbmdIZWFkZXJzXGluc3BlY3Rv
clxJbnNwZWN0b3JKU1Byb3RvY29sVHlwZXMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXEZvcndhcmRpbmdIZWFkZXJzXGluc3BlY3RvclxJbnNwZWN0b3JQcm90b2NvbFR5cGVzLmgi
IC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxGb3J3YXJkaW5nSGVhZGVyc1xpbnNwZWN0
b3JcSW5zcGVjdG9yVmFsdWVzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxGb3J3
YXJkaW5nSGVhZGVyc1xpbnNwZWN0b3JcU2NyaXB0QXJndW1lbnRzLmgiIC8+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxGb3J3YXJkaW5nSGVhZGVyc1xpbnNwZWN0b3JcU2NyaXB0QnJlYWtw
b2ludC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cRm9yd2FyZGluZ0hlYWRlcnNc
aW5zcGVjdG9yXFNjcmlwdENhbGxGcmFtZS5oIiAvPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzCmluZGV4IGZmMTc0NDNm
MGYxMzg4M2VlMjY5YTU1MzI2ZjJhMDljYzk1OGJjZWUuLjViZjRmOTFiMDJmN2Y2N2EwM2IzOTVi
YmM3NmRmYTEzYjM2NWU1MWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4
cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycworKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnMKQEAgLTEyMzIxLDkgKzEyMzIxLDYgQEAg
77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXEZvcndhcmRpbmdIZWFkZXJzXGluc3BlY3RvclxJbnNwZWN0b3JQcm90b2Nv
bFR5cGVzLmgiPgogICAgICAgPEZpbHRlcj5Gb3J3YXJkaW5nSGVhZGVyc1xpbnNwZWN0b3I8L0Zp
bHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXEZvcndh
cmRpbmdIZWFkZXJzXGluc3BlY3RvclxJbnNwZWN0b3JWYWx1ZXMuaCI+Ci0gICAgICA8RmlsdGVy
PkZvcndhcmRpbmdIZWFkZXJzXGluc3BlY3RvcjwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cRm9yd2FyZGluZ0hlYWRlcnNcaW5zcGVjdG9yXFNj
cmlwdEFyZ3VtZW50cy5oIj4KICAgICAgIDxGaWx0ZXI+Rm9yd2FyZGluZ0hlYWRlcnNcaW5zcGVj
dG9yPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CkBAIC0xNTQ0OSw0ICsxNTQ0Niw0IEBAIO+7
vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+CiAgICAgICA8RmlsdGVyPnBs
YXRmb3JtXHdpbjwvRmlsdGVyPgogICAgIDwvTUFTTT4KICAgPC9JdGVtR3JvdXA+Ci08L1Byb2pl
Y3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorPC9Qcm9qZWN0PgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDb21tYW5kTGluZUFQSUhvc3RDdXN0b20uY3Bw
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDb21tYW5kTGluZUFQSUhvc3RDdXN0b20u
Y3BwCmluZGV4IDdlODZkYjYxODY3NjU3ZmFkMjY5ODY1NTRkZDcyZmUxNjFmZTM2NjUuLmNkMTM1
Njk5MGY0MDVjOGNjNWE3M2JjZmI1MjI2NDY5NDg3NjUzMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ29tbWFuZExpbmVBUElIb3N0Q3VzdG9tLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NvbW1hbmRMaW5lQVBJSG9zdEN1c3RvbS5jcHAK
QEAgLTQzLDcgKzQzLDcgQEAKICNpbmNsdWRlICJKU1N0b3JhZ2UuaCIKICNpbmNsdWRlICJTdG9y
YWdlLmgiCiAjaW5jbHVkZSA8YmluZGluZ3MvU2NyaXB0VmFsdWUuaD4KLSNpbmNsdWRlIDxpbnNw
ZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclBy
b3RvY29sVHlwZXMuaD4KICNpbmNsdWRlIDxwYXJzZXIvU291cmNlQ29kZS5oPgogI2luY2x1ZGUg
PHJ1bnRpbWUvSWRlbnRpZmllcklubGluZXMuaD4KICNpbmNsdWRlIDxydW50aW1lL0pTQXJyYXku
aD4KQEAgLTEzNyw3ICsxMzcsNyBAQCBKU1ZhbHVlIEpTQ29tbWFuZExpbmVBUElIb3N0OjppbnNw
ZWN0KEV4ZWNTdGF0ZSogZXhlYykKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID49IDIp
IHsKICAgICAgICAgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUgb2JqZWN0KGV4ZWMtPnZtKCksIGV4
ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKICAgICAgICAgRGVwcmVjYXRlZDo6U2NyaXB0VmFs
dWUgaGludHMoZXhlYy0+dm0oKSwgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSkpOwotICAgICAg
ICBpbXBsKCkuaW5zcGVjdEltcGwob2JqZWN0LnRvSW5zcGVjdG9yVmFsdWUoZXhlYyksIGhpbnRz
LnRvSW5zcGVjdG9yVmFsdWUoZXhlYykpOworICAgICAgICBpbXBsKCkuaW5zcGVjdEltcGwob2Jq
ZWN0LnRvVW5jaGVja2VkVmFsdWUoZXhlYyksIGhpbnRzLnRvVW5jaGVja2VkVmFsdWUoZXhlYykp
OwogICAgIH0KIAogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaHRtbC9wYXJzZXIvWFNTQXVkaXRvckRlbGVnYXRlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvcGFyc2VyL1hTU0F1ZGl0b3JEZWxlZ2F0ZS5jcHAKaW5kZXggYTMyZmEwODVjYTg5
NDljYWRiNjkzMjc0MTU0NDJiYjU2ZTdjZTE4NS4uZTBlNzg3YjQ2YmQxNWQzYWZmZTkxODViZDJm
OTQxNWI0N2RhN2NjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvWFNT
QXVkaXRvckRlbGVnYXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9YU1NB
dWRpdG9yRGVsZWdhdGUuY3BwCkBAIC0zNSw3ICszNSw3IEBACiAjaW5jbHVkZSAiSFRNTFBhcnNl
cklkaW9tcy5oIgogI2luY2x1ZGUgIlBpbmdMb2FkZXIuaCIKICNpbmNsdWRlICJTZWN1cml0eU9y
aWdpbi5oIgotI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRl
IDxpbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0J1aWxkZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKQEAgLTgy
LDExICs4MiwxMSBAQCBQYXNzUmVmUHRyPEZvcm1EYXRhPiBYU1NBdWRpdG9yRGVsZWdhdGU6Omdl
bmVyYXRlVmlvbGF0aW9uUmVwb3J0KGNvbnN0IFhTU0luZm8mCiAgICAgICAgICAgICBodHRwQm9k
eSA9IGZvcm1EYXRhLT5mbGF0dGVuVG9TdHJpbmcoKTsKICAgICB9CiAKLSAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiByZXBvcnREZXRhaWxzID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
KyAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiByZXBvcnRE
ZXRhaWxzID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0OjpjcmVhdGUoKTsK
ICAgICByZXBvcnREZXRhaWxzLT5zZXRTdHJpbmcoInJlcXVlc3QtdXJsIiwgeHNzSW5mby5tX29y
aWdpbmFsVVJMKTsKICAgICByZXBvcnREZXRhaWxzLT5zZXRTdHJpbmcoInJlcXVlc3QtYm9keSIs
IGh0dHBCb2R5KTsKIAotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlcG9ydE9iamVjdCA9
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlVuY2hlY2tlZE9iamVjdD4gcmVwb3J0T2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6
VW5jaGVja2VkT2JqZWN0OjpjcmVhdGUoKTsKICAgICByZXBvcnRPYmplY3QtPnNldE9iamVjdCgi
eHNzLXJlcG9ydCIsIHJlcG9ydERldGFpbHMucmVsZWFzZSgpKTsKIAogICAgIHJldHVybiBGb3Jt
RGF0YTo6Y3JlYXRlKHJlcG9ydE9iamVjdC0+dG9KU09OU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29tbWFuZExpbmVBUElIb3N0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db21tYW5kTGluZUFQSUhvc3QuY3BwCmlu
ZGV4IDk0NmE5MWZhY2ZmOTE4NWFlMWQwODVkNjhjYTAyYzgzODBjYjUxYmYuLjZjMDE5ZWM5MDRl
YTc4NTI5Mzc5ZjBmOGE3YjdjZGVjZDNjMGNkNTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9Db21tYW5kTGluZUFQSUhvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9Db21tYW5kTGluZUFQSUhvc3QuY3BwCkBAIC00Niw3ICs0Niw3IEBACiAjaW5jbHVk
ZSAiU3RvcmFnZS5oIgogI2luY2x1ZGUgIm1hcmt1cC5oIgogI2luY2x1ZGUgPGJpbmRpbmdzL1Nj
cmlwdFZhbHVlLmg+Ci0jaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2lu
Y2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+CiAjaW5jbHVkZSA8aW5z
cGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBZ2VudC5oPgogI2luY2x1ZGUgPGluc3BlY3Rvci9hZ2Vu
dHMvSW5zcGVjdG9yQ29uc29sZUFnZW50Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgpAQCAt
OTIsMTIgKzkyLDEyIEBAIHZvaWQgQ29tbWFuZExpbmVBUElIb3N0OjpkaXNjb25uZWN0KCkKICNl
bmRpZgogfQogCi12b2lkIENvbW1hbmRMaW5lQVBJSG9zdDo6aW5zcGVjdEltcGwoUGFzc1JlZlB0
cjxJbnNwZWN0b3JWYWx1ZT4gb2JqZWN0LCBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBoaW50
cykKK3ZvaWQgQ29tbWFuZExpbmVBUElIb3N0OjppbnNwZWN0SW1wbChQYXNzUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZFZhbHVlPiBvYmplY3QsIFBhc3NSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6VW5jaGVja2VkVmFsdWU+IGhpbnRzKQogewogICAgIGlmICghbV9pbnNw
ZWN0b3JBZ2VudCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gaGludHNPYmplY3Q7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tl
ZE9iamVjdD4gaGludHNPYmplY3Q7CiAgICAgaWYgKCFoaW50cy0+YXNPYmplY3QoaGludHNPYmpl
Y3QpKQogICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9Db21tYW5kTGluZUFQSUhvc3QuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db21t
YW5kTGluZUFQSUhvc3QuaAppbmRleCBjNDk0ZTM2NDNiODBiNWU2NTg0YzdlMjNiMjUzNWVmZjc2
OTBjMzQxLi5iMDVmMjNkNTE2ZDQ1ODdkYWVkZjVjMjdhNmM0ODVmMWU5N2NjODQ0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29tbWFuZExpbmVBUElIb3N0LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvbW1hbmRMaW5lQVBJSG9zdC5oCkBAIC00MSwxMCAr
NDEsMTIgQEAgY2xhc3MgU2NyaXB0VmFsdWU7CiB9CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3Igewor
bmFtZXNwYWNlIFByb3RvY29sIHsKK2NsYXNzIFVuY2hlY2tlZE9iamVjdDsKK2NsYXNzIFVuY2hl
Y2tlZFZhbHVlOworfQogY2xhc3MgSW5zcGVjdG9yQWdlbnQ7CiBjbGFzcyBJbnNwZWN0b3JDb25z
b2xlQWdlbnQ7Ci1jbGFzcyBJbnNwZWN0b3JPYmplY3Q7Ci1jbGFzcyBJbnNwZWN0b3JWYWx1ZTsK
IH0KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtOTUsNyArOTcsNyBAQCBwdWJsaWM6CiAgICAg
dm9pZCBhZGRJbnNwZWN0ZWRPYmplY3Qoc3RkOjp1bmlxdWVfcHRyPEluc3BlY3RhYmxlT2JqZWN0
Pik7CiAgICAgdm9pZCBjbGVhckluc3BlY3RlZE9iamVjdHMoKTsKICAgICBJbnNwZWN0YWJsZU9i
amVjdCogaW5zcGVjdGVkT2JqZWN0KHVuc2lnbmVkIGluZGV4KTsKLSAgICB2b2lkIGluc3BlY3RJ
bXBsKFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gb2JqZWN0VG9JbnNwZWN0
LCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IGhpbnRzKTsKKyAgICB2b2lk
IGluc3BlY3RJbXBsKFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkVmFs
dWU+IG9iamVjdFRvSW5zcGVjdCwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNo
ZWNrZWRWYWx1ZT4gaGludHMpOwogCiAgICAgdm9pZCBnZXRFdmVudExpc3RlbmVyc0ltcGwoTm9k
ZSosIFZlY3RvcjxFdmVudExpc3RlbmVySW5mbz4mIGxpc3RlbmVyc0FycmF5KTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVB
Z2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQXBwbGljYXRpb25D
YWNoZUFnZW50LmNwcAppbmRleCBkNzU1ZWZjYTJlMzVmOWU2MmVmNDczM2U0MGUxZWVlYzkzZWUz
YTQzLi4yOTQ2NjIzNTlmNDAxOWUwZmMxMjFjMGQ4MGNmYjZmNDdlMDMyOGZiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQXBwbGljYXRpb25D
YWNoZUFnZW50LmNwcApAQCAtMzksNyArMzksNyBAQAogI2luY2x1ZGUgIk5ldHdvcmtTdGF0ZU5v
dGlmaWVyLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2Uu
aCIKLSNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8aW5z
cGVjdG9yL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdCdWlsZGVyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50
LmgKaW5kZXggN2VjNzcyYzg1NWVjZjhmMjAyOTZiN2U2YTI3MjlmODJkYjQ3ZTMxZS4uNDQ0OWI4
MGIzZGNhYjg4ZDllZGE5ODQ4ZTdkNjkwNDAyZDQxYzU0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuaApA
QCAtMzUsOCArMzUsOCBAQAogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIGNsYXNzIEluc3BlY3Rv
ckFwcGxpY2F0aW9uQ2FjaGVGcm9udGVuZERpc3BhdGNoZXI7Ci1jbGFzcyBJbnNwZWN0b3JPYmpl
Y3Q7Ci1jbGFzcyBJbnNwZWN0b3JWYWx1ZTsKK2NsYXNzIFVuY2hlY2tlZE9iamVjdDsKK2NsYXNz
IFVuY2hlY2tlZFZhbHVlOwogfQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcAppbmRleCBjNTNlN2M1NjQyYzcy
NmMxYjI2YTFkYzg1MDBmNWUyNzM5NGI4Yzg5Li43MDdhNzBiZjEzMWJkYmM3YzdjNTBjNjFhNWJl
MGU4MzhkNjYxOTFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQ1NTQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JD
U1NBZ2VudC5jcHAKQEAgLTU2LDcgKzU2LDcgQEAKICNpbmNsdWRlICJTdHlsZVJ1bGUuaCIKICNp
bmNsdWRlICJTdHlsZVNoZWV0TGlzdC5oIgogI2luY2x1ZGUgIldlYktpdE5hbWVkRmxvdy5oIgot
I2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDxpbnNwZWN0
b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5o
PgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZi5oPgpAQCAtNzYs
NyArNzYsNyBAQCBlbnVtIEZvcmNlUHNldWRvQ2xhc3NGbGFncyB7CiAgICAgUHNldWRvQ2xhc3NW
aXNpdGVkID0gMSA8PCAzCiB9OwogCi1zdGF0aWMgdW5zaWduZWQgY29tcHV0ZVBzZXVkb0NsYXNz
TWFzayhJbnNwZWN0b3JBcnJheSogcHNldWRvQ2xhc3NBcnJheSkKK3N0YXRpYyB1bnNpZ25lZCBj
b21wdXRlUHNldWRvQ2xhc3NNYXNrKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZEFycmF5
KiBwc2V1ZG9DbGFzc0FycmF5KQogewogICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NB
TChTdHJpbmcsIGFjdGl2ZSwgKEFTQ0lJTGl0ZXJhbCgiYWN0aXZlIikpKTsKICAgICBERVBSRUNB
VEVEX0RFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBob3ZlciwgKEFTQ0lJTGl0ZXJhbCgiaG92
ZXIiKSkpOwpAQCAtODcsNyArODcsNyBAQCBzdGF0aWMgdW5zaWduZWQgY29tcHV0ZVBzZXVkb0Ns
YXNzTWFzayhJbnNwZWN0b3JBcnJheSogcHNldWRvQ2xhc3NBcnJheSkKIAogICAgIHVuc2lnbmVk
IHJlc3VsdCA9IFBzZXVkb0NsYXNzTm9uZTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBz
ZXVkb0NsYXNzQXJyYXktPmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgUmVmUHRyPEluc3BlY3Rv
clZhbHVlPiBwc2V1ZG9DbGFzc1ZhbHVlID0gcHNldWRvQ2xhc3NBcnJheS0+Z2V0KGkpOworICAg
ICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkVmFsdWU+IHBzZXVkb0Ns
YXNzVmFsdWUgPSBwc2V1ZG9DbGFzc0FycmF5LT5nZXQoaSk7CiAgICAgICAgIFN0cmluZyBwc2V1
ZG9DbGFzczsKICAgICAgICAgYm9vbCBzdWNjZXNzID0gcHNldWRvQ2xhc3NWYWx1ZS0+YXNTdHJp
bmcocHNldWRvQ2xhc3MpOwogICAgICAgICBpZiAoIXN1Y2Nlc3MpCkBAIC03MTksNyArNzE5LDcg
QEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6c2V0U3R5bGVTaGVldFRleHQoRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcKICAgICBlcnJvclN0cmluZyA9IEluc3BlY3RvckRP
TUFnZW50Ojp0b0Vycm9yU3RyaW5nKGVjKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6
c2V0U3R5bGVUZXh0KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4mIGZ1bGxTdHlsZUlkLCBjb25zdCBTdHJpbmcmIHRleHQsIFJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiYgcmVzdWx0KQordm9pZCBJbnNwZWN0b3JD
U1NBZ2VudDo6c2V0U3R5bGVUZXh0KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4mIGZ1bGxTdHlsZUlkLCBj
b25zdCBTdHJpbmcmIHRleHQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0
eWxlPiYgcmVzdWx0KQogewogICAgIEluc3BlY3RvckNTU0lkIGNvbXBvdW5kSWQoZnVsbFN0eWxl
SWQpOwogICAgIEFTU0VSVCghY29tcG91bmRJZC5pc0VtcHR5KCkpOwpAQCAtNzM1LDcgKzczNSw3
IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnNldFN0eWxlVGV4dChFcnJvclN0cmluZyYgZXJy
b3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJbnNwCiAgICAgZXJyb3JTdHJpbmcgPSBJbnNwZWN0b3JE
T01BZ2VudDo6dG9FcnJvclN0cmluZyhlYyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6
OnNldFByb3BlcnR5VGV4dChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+JiBmdWxsU3R5bGVJZCwgaW50IHByb3BlcnR5SW5kZXgsIGNvbnN0IFN0
cmluZyYgdGV4dCwgYm9vbCBvdmVyd3JpdGUsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpD
U1M6OkNTU1N0eWxlPiYgcmVzdWx0KQordm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6c2V0UHJvcGVy
dHlUZXh0KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4mIGZ1bGxTdHlsZUlkLCBpbnQgcHJvcGVydHlJbmRl
eCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBib29sIG92ZXJ3cml0ZSwgUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+JiByZXN1bHQpCiB7CiAgICAgSW5zcGVjdG9yQ1NTSWQg
Y29tcG91bmRJZChmdWxsU3R5bGVJZCk7CiAgICAgQVNTRVJUKCFjb21wb3VuZElkLmlzRW1wdHko
KSk7CkBAIC03NTEsNyArNzUxLDcgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6c2V0UHJvcGVy
dHlUZXh0KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgUmVmUHRyPEkKICAgICBlcnJv
clN0cmluZyA9IEluc3BlY3RvckRPTUFnZW50Ojp0b0Vycm9yU3RyaW5nKGVjKTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JDU1NBZ2VudDo6dG9nZ2xlUHJvcGVydHkoRXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW5nLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgZnVsbFN0eWxlSWQsIGludCBwcm9w
ZXJ0eUluZGV4LCBib29sIGRpc2FibGUsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6
OkNTU1N0eWxlPiYgcmVzdWx0KQordm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6dG9nZ2xlUHJvcGVy
dHkoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6VW5jaGVja2VkT2JqZWN0PiYgZnVsbFN0eWxlSWQsIGludCBwcm9wZXJ0eUluZGV4LCBi
b29sIGRpc2FibGUsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiYg
cmVzdWx0KQogewogICAgIEluc3BlY3RvckNTU0lkIGNvbXBvdW5kSWQoZnVsbFN0eWxlSWQpOwog
ICAgIEFTU0VSVCghY29tcG91bmRJZC5pc0VtcHR5KCkpOwpAQCAtNzY3LDcgKzc2Nyw3IEBAIHZv
aWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnRvZ2dsZVByb3BlcnR5KEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgY29uc3QgUmVmUHRyPEluCiAgICAgZXJyb3JTdHJpbmcgPSBJbnNwZWN0b3JET01BZ2Vu
dDo6dG9FcnJvclN0cmluZyhlYyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnNldFJ1
bGVTZWxlY3RvcihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+JiBmdWxsUnVsZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPiYgcmVzdWx0KQordm9pZCBJbnNwZWN0b3JD
U1NBZ2VudDo6c2V0UnVsZVNlbGVjdG9yKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3Qg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4mIGZ1bGxSdWxlSWQs
IGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6
OkNTU1J1bGU+JiByZXN1bHQpCiB7CiAgICAgSW5zcGVjdG9yQ1NTSWQgY29tcG91bmRJZChmdWxs
UnVsZUlkKTsKICAgICBBU1NFUlQoIWNvbXBvdW5kSWQuaXNFbXB0eSgpKTsKQEAgLTgzNCw3ICs4
MzQsNyBAQCB2b2lkIEluc3BlY3RvckNTU0FnZW50OjpnZXRTdXBwb3J0ZWRDU1NQcm9wZXJ0aWVz
KEVycm9yU3RyaW5nJiwgUmVmUHRyPEluc3BlY3RvcgogICAgIGNzc1Byb3BlcnRpZXMgPSBwcm9w
ZXJ0aWVzLnJlbGVhc2UoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Zm9yY2VQc2V1
ZG9TdGF0ZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIGNvbnN0IFJlZlB0
cjxJbnNwZWN0b3JBcnJheT4mIGZvcmNlZFBzZXVkb0NsYXNzZXMpCit2b2lkIEluc3BlY3RvckNT
U0FnZW50Ojpmb3JjZVBzZXVkb1N0YXRlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5v
ZGVJZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZEFycmF5PiYg
Zm9yY2VkUHNldWRvQ2xhc3NlcykKIHsKICAgICBFbGVtZW50KiBlbGVtZW50ID0gbV9kb21BZ2Vu
dC0+YXNzZXJ0RWxlbWVudChlcnJvclN0cmluZywgbm9kZUlkKTsKICAgICBpZiAoIWVsZW1lbnQp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQu
aCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5oCmluZGV4IDgy
YTM4ZWQzOWQ2NmY5MDIyOTA5Y2UwMmFlM2Y0YzE4OTU5OWM0YjUuLmJhZDQ3MTM0NjMwZmYzOTEz
ZjNiZGE5NjdmNDU2ZGEzZTBlNWE2ODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JDU1NBZ2VudC5oCkBAIC0zMiw3ICszMiw3IEBACiAjaW5jbHVkZSAiSW5zcGVjdG9y
V2ViQWdlbnRCYXNlLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yV2ViQmFja2VuZERpc3BhdGNoZXJz
LmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlDb250ZXh0LmgiCi0jaW5jbHVkZSA8aW5zcGVjdG9yL0lu
c3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JQcm90b2NvbFR5
cGVzLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5o
PgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CkBAIC0xMTYsMTMgKzExNiwxMyBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCB2b2lkIGdldFN0eWxlU2hlZXQoRXJyb3JTdHJpbmcmLCBjb25zdCBT
dHJpbmcmIHN0eWxlU2hlZXRJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NT
U3R5bGVTaGVldEJvZHk+JiByZXN1bHQpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBnZXRT
dHlsZVNoZWV0VGV4dChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgc3R5bGVTaGVldElkLCBT
dHJpbmcqIHJlc3VsdCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHNldFN0eWxlU2hlZXRU
ZXh0KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBzdHlsZVNoZWV0SWQsIGNvbnN0IFN0cmlu
ZyYgdGV4dCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHNldFN0eWxlVGV4dChFcnJvclN0
cmluZyYsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mIHN0eWxlSWQs
IGNvbnN0IFN0cmluZyYgdGV4dCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NT
U3R5bGU+JiByZXN1bHQpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBzZXRQcm9wZXJ0eVRl
eHQoRXJyb3JTdHJpbmcmLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+
JiBzdHlsZUlkLCBpbnQgcHJvcGVydHlJbmRleCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBib29sIG92
ZXJ3cml0ZSwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+JiByZXN1
bHQpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCB0b2dnbGVQcm9wZXJ0eShFcnJvclN0cmlu
ZyYsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mIHN0eWxlSWQsIGlu
dCBwcm9wZXJ0eUluZGV4LCBib29sIGRpc2FibGUsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpDU1M6OkNTU1N0eWxlPiYgcmVzdWx0KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0
UnVsZVNlbGVjdG9yKEVycm9yU3RyaW5nJiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVj
dG9yT2JqZWN0PiYgcnVsZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPiYgcmVzdWx0KSBvdmVycmlkZTsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0U3R5bGVUZXh0KEVycm9yU3RyaW5nJiwgY29uc3QgUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4mIHN0eWxlSWQsIGNvbnN0IFN0cmluZyYgdGV4
dCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+JiByZXN1bHQpIG92
ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBzZXRQcm9wZXJ0eVRleHQoRXJyb3JTdHJpbmcmLCBj
b25zdCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiYgc3R5bGVJ
ZCwgaW50IHByb3BlcnR5SW5kZXgsIGNvbnN0IFN0cmluZyYgdGV4dCwgYm9vbCBvdmVyd3JpdGUs
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiYgcmVzdWx0KSBvdmVy
cmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgdG9nZ2xlUHJvcGVydHkoRXJyb3JTdHJpbmcmLCBjb25z
dCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiYgc3R5bGVJZCwg
aW50IHByb3BlcnR5SW5kZXgsIGJvb2wgZGlzYWJsZSwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkNTUzo6Q1NTU3R5bGU+JiByZXN1bHQpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBz
ZXRSdWxlU2VsZWN0b3IoRXJyb3JTdHJpbmcmLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6VW5jaGVja2VkT2JqZWN0PiYgcnVsZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPiYgcmVzdWx0KSBvdmVycmlk
ZTsKICAgICB2aXJ0dWFsIHZvaWQgYWRkUnVsZShFcnJvclN0cmluZyYsIGludCBjb250ZXh0Tm9k
ZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
Q1NTOjpDU1NSdWxlPiYgcmVzdWx0KSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgZ2V0U3Vw
cG9ydGVkQ1NTUHJvcGVydGllcyhFcnJvclN0cmluZyYsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5SW5mbz4+JiBy
ZXN1bHQpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBmb3JjZVBzZXVkb1N0YXRlKEVycm9y
U3RyaW5nJiwgaW50IG5vZGVJZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJy
YXk+JiBmb3JjZWRQc2V1ZG9DbGFzc2VzKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZm9y
Y2VQc2V1ZG9TdGF0ZShFcnJvclN0cmluZyYsIGludCBub2RlSWQsIGNvbnN0IFJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRBcnJheT4mIGZvcmNlZFBzZXVkb0NsYXNzZXMpIG92
ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBnZXROYW1lZEZsb3dDb2xsZWN0aW9uKEVycm9yU3Ry
aW5nJiwgaW50IGRvY3VtZW50Tm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJy
YXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpOYW1lZEZsb3c+PiYgcmVzdWx0KSBvdmVycmlk
ZTsKIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JD
b250cm9sbGVyLmNwcAppbmRleCA4MjAwNDgxODIyODM1YWJhMWFhMmI0NWZiMzIzNDVkMGM2N2M2
NjEzLi5lZmI2YTk0ZDFmOTk2ODBhM2MwMjMwY2I1OWIyNTkzZDkwMDBmMDAzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCkBAIC0zMjks
NyArMzI5LDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpnZXRIaWdobGlnaHQoSGlnaGxp
Z2h0KiBoaWdobGlnaHQsIEluc3BlY3Rvck92ZXJsYXk6OkMKICAgICBtX292ZXJsYXktPmdldEhp
Z2hsaWdodChoaWdobGlnaHQsIGNvb3JkaW5hdGVTeXN0ZW0pOwogfQogCi1QYXNzUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gSW5zcGVjdG9yQ29udHJvbGxlcjo6YnVpbGRPYmplY3RGb3JIaWdobGln
aHRlZE5vZGUoKSBjb25zdAorUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNr
ZWRPYmplY3Q+IEluc3BlY3RvckNvbnRyb2xsZXI6OmJ1aWxkT2JqZWN0Rm9ySGlnaGxpZ2h0ZWRO
b2RlKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9vdmVybGF5LT5idWlsZE9iamVjdEZvckhpZ2hs
aWdodGVkTm9kZSgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JD
b250cm9sbGVyLmgKaW5kZXggOTQ3NWJjMjUwNzg2MjIxMmUxNTk0MjEwYWU2Y2M0OThiZmU5MTg1
NS4uNjZlOTlhMzJjNWRkY2Q4MGY3ZTM4ZDU2YjhlMDMzYjg0ZmU4ZDQ4MiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCkBAIC00Nyw3ICs0Nyw3
IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogY2xhc3MgSW5zcGVjdG9yQWdlbnQ7CiBjbGFzcyBJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjsKIGNsYXNzIEluc3BlY3RvckZyb250ZW5kQ2hhbm5l
bDsKLWNsYXNzIEluc3BlY3Rvck9iamVjdDsKK2NsYXNzIFVuY2hlY2tlZE9iamVjdDsKIH0KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMTA5LDcgKzEwOSw3IEBAIHB1YmxpYzoKIAogICAgIHZv
aWQgc2V0SW5kaWNhdGluZyhib29sKTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIFBhc3NSZWZQdHI8
SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9ySGlnaGxpZ2h0ZWROb2Rl
KCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpVbmNoZWNrZWRPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9ySGlnaGxpZ2h0ZWROb2RlKCkgY29u
c3Q7CiAKICAgICBib29sIGlzVW5kZXJUZXN0KCkgY29uc3QgeyByZXR1cm4gbV9pc1VuZGVyVGVz
dDsgfQogICAgIHZvaWQgc2V0SXNVbmRlclRlc3QoYm9vbCBpc1VuZGVyVGVzdCkgeyBtX2lzVW5k
ZXJUZXN0ID0gaXNVbmRlclRlc3Q7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yRE9NQWdlbnQuY3BwCmluZGV4IDliYjA4MThhMzEyY2IxZDM3ODVlZjEyYWQyNTY5MzAz
ZWIxNmZkYWUuLmEyN2M0OWRhYjFlZjYwNTM5ODgzY2ExNTRkMmUzYjE0MDNjZjJiYzcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcApAQCAtMTEx
LDcgKzExMSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiBzdGF0aWMgY29uc3Qgc2l6
ZV90IG1heFRleHRTaXplID0gMTAwMDA7CiBzdGF0aWMgY29uc3QgVUNoYXIgZWxsaXBzaXNVQ2hh
cltdID0geyAweDIwMjYsIDAgfTsKIAotc3RhdGljIENvbG9yIHBhcnNlQ29sb3IoY29uc3QgUGFz
c1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGNvbG9yT2JqZWN0KQorc3RhdGljIENvbG9yIHBhcnNl
Q29sb3IoY29uc3QgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmpl
Y3Q+IGNvbG9yT2JqZWN0KQogewogICAgIGlmICghY29sb3JPYmplY3QpCiAgICAgICAgIHJldHVy
biBDb2xvcjo6dHJhbnNwYXJlbnQ7CkBAIC0xMzUsMTMgKzEzNSwxMyBAQCBzdGF0aWMgQ29sb3Ig
cGFyc2VDb2xvcihjb25zdCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gY29sb3JPYmplY3Qp
CiAgICAgcmV0dXJuIENvbG9yKHIsIGcsIGIsIHN0YXRpY19jYXN0PGludD4oYSAqIDI1NSkpOwog
fQogCi1zdGF0aWMgQ29sb3IgcGFyc2VDb25maWdDb2xvcihjb25zdCBTdHJpbmcmIGZpZWxkTmFt
ZSwgSW5zcGVjdG9yT2JqZWN0KiBjb25maWdPYmplY3QpCitzdGF0aWMgQ29sb3IgcGFyc2VDb25m
aWdDb2xvcihjb25zdCBTdHJpbmcmIGZpZWxkTmFtZSwgSW5zcGVjdG9yOjpQcm90b2NvbDo6VW5j
aGVja2VkT2JqZWN0KiBjb25maWdPYmplY3QpCiB7Ci0gICAgY29uc3QgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gY29sb3JPYmplY3QgPSBjb25maWdPYmplY3QtPmdldE9iamVjdChmaWVsZE5hbWUp
OworICAgIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+
IGNvbG9yT2JqZWN0ID0gY29uZmlnT2JqZWN0LT5nZXRPYmplY3QoZmllbGROYW1lKTsKICAgICBy
ZXR1cm4gcGFyc2VDb2xvcihjb2xvck9iamVjdCk7CiB9CiAKLXN0YXRpYyBib29sIHBhcnNlUXVh
ZChjb25zdCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+JiBxdWFkQXJyYXksIEZsb2F0UXVhZCogcXVh
ZCkKK3N0YXRpYyBib29sIHBhcnNlUXVhZChjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6VW5jaGVja2VkQXJyYXk+JiBxdWFkQXJyYXksIEZsb2F0UXVhZCogcXVhZCkKIHsKICAgICBp
ZiAoIXF1YWRBcnJheSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtODgxLDE1ICs4ODEsMTUg
QEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0QWNjZXNzaWJpbGl0eVByb3BlcnRpZXNGb3JO
b2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmkKICAgICBheFByb3BlcnRpZXMgPSBidWlsZE9iamVj
dEZvckFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzKG5vZGUpOwogfQogCi12b2lkIEluc3BlY3RvckRP
TUFnZW50OjpwZXJmb3JtU2VhcmNoKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3Ry
aW5nJiB3aGl0ZXNwYWNlVHJpbW1lZFF1ZXJ5LCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
KiBub2RlSWRzLCBTdHJpbmcqIHNlYXJjaElkLCBpbnQqIHJlc3VsdENvdW50KQordm9pZCBJbnNw
ZWN0b3JET01BZ2VudDo6cGVyZm9ybVNlYXJjaChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNv
bnN0IFN0cmluZyYgd2hpdGVzcGFjZVRyaW1tZWRRdWVyeSwgY29uc3QgUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlVuY2hlY2tlZEFycmF5Piogbm9kZUlkcywgU3RyaW5nKiBzZWFyY2hJZCwg
aW50KiByZXN1bHRDb3VudCkKIHsKICAgICAvLyBGSVhNRTogU2VhcmNoIHdvcmtzIHdpdGggbm9k
ZSBncmFudWxhcml0eSAtIG51bWJlciBvZiBtYXRjaGVzIHdpdGhpbiBub2RlIGlzIG5vdCBjYWxj
dWxhdGVkLgogICAgIEluc3BlY3Rvck5vZGVGaW5kZXIgZmluZGVyKHdoaXRlc3BhY2VUcmltbWVk
UXVlcnkpOwogCiAgICAgaWYgKG5vZGVJZHMpIHsKLSAgICAgICAgY29uc3QgUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiYgbm9kZUlkc1JlZiA9ICpub2RlSWRzOworICAgICAgICBjb25zdCBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkQXJyYXk+JiBub2RlSWRzUmVmID0gKm5vZGVJ
ZHM7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBub2RlSWRzUmVmLT5sZW5ndGgo
KTsgKytpKSB7Ci0gICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IG5vZGVWYWx1ZSA9
IG5vZGVJZHNSZWYtPmdldChpKTsKKyAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpVbmNoZWNrZWRWYWx1ZT4gbm9kZVZhbHVlID0gbm9kZUlkc1JlZi0+Z2V0KGkpOwogICAg
ICAgICAgICAgaWYgKCFub2RlVmFsdWUpIHsKICAgICAgICAgICAgICAgICBlcnJvclN0cmluZyA9
IEFTQ0lJTGl0ZXJhbCgiSW52YWxpZCBub2RlSWRzIGl0ZW0uIik7CiAgICAgICAgICAgICAgICAg
cmV0dXJuOwpAQCAtMTAxNywxMyArMTAxNywxMyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50Ojpt
b3VzZURpZE1vdmVPdmVyRWxlbWVudChjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIHVucwog
ICAgICAgICBtX292ZXJsYXktPmhpZ2hsaWdodE5vZGUobm9kZSwgKm1faW5zcGVjdE1vZGVIaWdo
bGlnaHRDb25maWcpOwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRTZWFyY2hpbmdG
b3JOb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgYm9vbCBlbmFibGVkLCBJbnNwZWN0b3JP
YmplY3QqIGhpZ2hsaWdodEluc3BlY3Rvck9iamVjdCkKK3ZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6
OnNldFNlYXJjaGluZ0Zvck5vZGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBib29sIGVuYWJs
ZWQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdCogaGlnaGxpZ2h0VW5jaGVj
a2VkT2JqZWN0KQogewogICAgIGlmIChtX3NlYXJjaGluZ0Zvck5vZGUgPT0gZW5hYmxlZCkKICAg
ICAgICAgcmV0dXJuOwogICAgIG1fc2VhcmNoaW5nRm9yTm9kZSA9IGVuYWJsZWQ7CiAgICAgaWYg
KGVuYWJsZWQpIHsKLSAgICAgICAgbV9pbnNwZWN0TW9kZUhpZ2hsaWdodENvbmZpZyA9IGhpZ2hs
aWdodENvbmZpZ0Zyb21JbnNwZWN0b3JPYmplY3QoZXJyb3JTdHJpbmcsIGhpZ2hsaWdodEluc3Bl
Y3Rvck9iamVjdCk7CisgICAgICAgIG1faW5zcGVjdE1vZGVIaWdobGlnaHRDb25maWcgPSBoaWdo
bGlnaHRDb25maWdGcm9tVW5jaGVja2VkT2JqZWN0KGVycm9yU3RyaW5nLCBoaWdobGlnaHRVbmNo
ZWNrZWRPYmplY3QpOwogICAgICAgICBpZiAoIW1faW5zcGVjdE1vZGVIaWdobGlnaHRDb25maWcp
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgfSBlbHNlCkBAIC0xMDMyLDM3ICsxMDMyLDM3IEBA
IHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldFNlYXJjaGluZ0Zvck5vZGUoRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBib29sIGVuYWJsCiAgICAgbV9vdmVybGF5LT5kaWRTZXRTZWFyY2hpbmdG
b3JOb2RlKG1fc2VhcmNoaW5nRm9yTm9kZSk7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxIaWdobGln
aHRDb25maWc+IEluc3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHRDb25maWdGcm9tSW5zcGVjdG9y
T2JqZWN0KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgSW5zcGVjdG9yT2JqZWN0KiBoaWdobGln
aHRJbnNwZWN0b3JPYmplY3QpCitzdGQ6OnVuaXF1ZV9wdHI8SGlnaGxpZ2h0Q29uZmlnPiBJbnNw
ZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0Q29uZmlnRnJvbVVuY2hlY2tlZE9iamVjdChFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdCog
aGlnaGxpZ2h0VW5jaGVja2VkT2JqZWN0KQogewotICAgIGlmICghaGlnaGxpZ2h0SW5zcGVjdG9y
T2JqZWN0KSB7CisgICAgaWYgKCFoaWdobGlnaHRVbmNoZWNrZWRPYmplY3QpIHsKICAgICAgICAg
ZXJyb3JTdHJpbmcgPSBBU0NJSUxpdGVyYWwoIkludGVybmFsIGVycm9yOiBoaWdobGlnaHQgY29u
ZmlndXJhdGlvbiBwYXJhbWV0ZXIgaXMgbWlzc2luZyIpOwogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICB9CiAKICAgICBhdXRvIGhpZ2hsaWdodENvbmZpZyA9IHN0ZDo6bWFrZV91bmlxdWU8
SGlnaGxpZ2h0Q29uZmlnPigpOwogICAgIGJvb2wgc2hvd0luZm8gPSBmYWxzZTsgLy8gRGVmYXVs
dDogZmFsc2UgKGRvIG5vdCBzaG93IGEgdG9vbHRpcCkuCi0gICAgaGlnaGxpZ2h0SW5zcGVjdG9y
T2JqZWN0LT5nZXRCb29sZWFuKCJzaG93SW5mbyIsIHNob3dJbmZvKTsKKyAgICBoaWdobGlnaHRV
bmNoZWNrZWRPYmplY3QtPmdldEJvb2xlYW4oInNob3dJbmZvIiwgc2hvd0luZm8pOwogICAgIGhp
Z2hsaWdodENvbmZpZy0+c2hvd0luZm8gPSBzaG93SW5mbzsKLSAgICBoaWdobGlnaHRDb25maWct
PmNvbnRlbnQgPSBwYXJzZUNvbmZpZ0NvbG9yKCJjb250ZW50Q29sb3IiLCBoaWdobGlnaHRJbnNw
ZWN0b3JPYmplY3QpOwotICAgIGhpZ2hsaWdodENvbmZpZy0+Y29udGVudE91dGxpbmUgPSBwYXJz
ZUNvbmZpZ0NvbG9yKCJjb250ZW50T3V0bGluZUNvbG9yIiwgaGlnaGxpZ2h0SW5zcGVjdG9yT2Jq
ZWN0KTsKLSAgICBoaWdobGlnaHRDb25maWctPnBhZGRpbmcgPSBwYXJzZUNvbmZpZ0NvbG9yKCJw
YWRkaW5nQ29sb3IiLCBoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QpOwotICAgIGhpZ2hsaWdodENv
bmZpZy0+Ym9yZGVyID0gcGFyc2VDb25maWdDb2xvcigiYm9yZGVyQ29sb3IiLCBoaWdobGlnaHRJ
bnNwZWN0b3JPYmplY3QpOwotICAgIGhpZ2hsaWdodENvbmZpZy0+bWFyZ2luID0gcGFyc2VDb25m
aWdDb2xvcigibWFyZ2luQ29sb3IiLCBoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QpOworICAgIGhp
Z2hsaWdodENvbmZpZy0+Y29udGVudCA9IHBhcnNlQ29uZmlnQ29sb3IoImNvbnRlbnRDb2xvciIs
IGhpZ2hsaWdodFVuY2hlY2tlZE9iamVjdCk7CisgICAgaGlnaGxpZ2h0Q29uZmlnLT5jb250ZW50
T3V0bGluZSA9IHBhcnNlQ29uZmlnQ29sb3IoImNvbnRlbnRPdXRsaW5lQ29sb3IiLCBoaWdobGln
aHRVbmNoZWNrZWRPYmplY3QpOworICAgIGhpZ2hsaWdodENvbmZpZy0+cGFkZGluZyA9IHBhcnNl
Q29uZmlnQ29sb3IoInBhZGRpbmdDb2xvciIsIGhpZ2hsaWdodFVuY2hlY2tlZE9iamVjdCk7Cisg
ICAgaGlnaGxpZ2h0Q29uZmlnLT5ib3JkZXIgPSBwYXJzZUNvbmZpZ0NvbG9yKCJib3JkZXJDb2xv
ciIsIGhpZ2hsaWdodFVuY2hlY2tlZE9iamVjdCk7CisgICAgaGlnaGxpZ2h0Q29uZmlnLT5tYXJn
aW4gPSBwYXJzZUNvbmZpZ0NvbG9yKCJtYXJnaW5Db2xvciIsIGhpZ2hsaWdodFVuY2hlY2tlZE9i
amVjdCk7CiAgICAgcmV0dXJuIGhpZ2hsaWdodENvbmZpZzsKIH0KIAotdm9pZCBJbnNwZWN0b3JE
T01BZ2VudDo6c2V0SW5zcGVjdE1vZGVFbmFibGVkKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
Ym9vbCBlbmFibGVkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiogaGlnaGxpZ2h0Q29u
ZmlnKQordm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0SW5zcGVjdE1vZGVFbmFibGVkKEVycm9y
U3RyaW5nJiBlcnJvclN0cmluZywgYm9vbCBlbmFibGVkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiogaGlnaGxpZ2h0Q29uZmlnKQogewogICAgIHNl
dFNlYXJjaGluZ0Zvck5vZGUoZXJyb3JTdHJpbmcsIGVuYWJsZWQsIGhpZ2hsaWdodENvbmZpZyA/
IGhpZ2hsaWdodENvbmZpZy0+Z2V0KCkgOiAwKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2Vu
dDo6aGlnaGxpZ2h0UmVjdChFcnJvclN0cmluZyYsIGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBp
bnQgaGVpZ2h0LCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiogY29sb3IsIGNvbnN0IFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiBvdXRsaW5lQ29sb3IsIGNvbnN0IGJvb2wqIHVzZVBhZ2VD
b29yZGluYXRlcykKK3ZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdodFJlY3QoRXJyb3JT
dHJpbmcmLCBpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwgY29uc3QgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4qIGNvbG9yLCBjb25zdCBSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0Piogb3V0bGluZUNvbG9yLCBj
b25zdCBib29sKiB1c2VQYWdlQ29vcmRpbmF0ZXMpCiB7CiAgICAgYXV0byBxdWFkID0gc3RkOjpt
YWtlX3VuaXF1ZTxGbG9hdFF1YWQ+KEZsb2F0UmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KSk7CiAg
ICAgaW5uZXJIaWdobGlnaHRRdWFkKFdURjo6bW92ZShxdWFkKSwgY29sb3IsIG91dGxpbmVDb2xv
ciwgdXNlUGFnZUNvb3JkaW5hdGVzKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6aGln
aGxpZ2h0UXVhZChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJbnNwZWN0
b3JBcnJheT4mIHF1YWRBcnJheSwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIGNvbG9y
LCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0Piogb3V0bGluZUNvbG9yLCBjb25zdCBib29s
KiB1c2VQYWdlQ29vcmRpbmF0ZXMpCit2b2lkIEluc3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHRR
dWFkKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlVuY2hlY2tlZEFycmF5PiYgcXVhZEFycmF5LCBjb25zdCBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiogY29sb3IsIGNvbnN0IFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+KiBvdXRsaW5lQ29sb3IsIGNvbnN0IGJvb2wq
IHVzZVBhZ2VDb29yZGluYXRlcykKIHsKICAgICBhdXRvIHF1YWQgPSBzdGQ6Om1ha2VfdW5pcXVl
PEZsb2F0UXVhZD4oKTsKICAgICBpZiAoIXBhcnNlUXVhZChxdWFkQXJyYXksIHF1YWQuZ2V0KCkp
KSB7CkBAIC0xMDcyLDcgKzEwNzIsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpoaWdobGln
aHRRdWFkKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgUmVmUHRyPElucwogICAgIGlu
bmVySGlnaGxpZ2h0UXVhZChXVEY6Om1vdmUocXVhZCksIGNvbG9yLCBvdXRsaW5lQ29sb3IsIHVz
ZVBhZ2VDb29yZGluYXRlcyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmlubmVySGln
aGxpZ2h0UXVhZChzdGQ6OnVuaXF1ZV9wdHI8RmxvYXRRdWFkPiBxdWFkLCBjb25zdCBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiogY29sb3IsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiBv
dXRsaW5lQ29sb3IsIGNvbnN0IGJvb2wqIHVzZVBhZ2VDb29yZGluYXRlcykKK3ZvaWQgSW5zcGVj
dG9yRE9NQWdlbnQ6OmlubmVySGlnaGxpZ2h0UXVhZChzdGQ6OnVuaXF1ZV9wdHI8RmxvYXRRdWFk
PiBxdWFkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0
PiogY29sb3IsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmpl
Y3Q+KiBvdXRsaW5lQ29sb3IsIGNvbnN0IGJvb2wqIHVzZVBhZ2VDb29yZGluYXRlcykKIHsKICAg
ICBhdXRvIGhpZ2hsaWdodENvbmZpZyA9IHN0ZDo6bWFrZV91bmlxdWU8SGlnaGxpZ2h0Q29uZmln
PigpOwogICAgIGhpZ2hsaWdodENvbmZpZy0+Y29udGVudCA9IHBhcnNlQ29sb3IoKmNvbG9yKTsK
QEAgLTEwODEsNyArMTA4MSw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmlubmVySGlnaGxp
Z2h0UXVhZChzdGQ6OnVuaXF1ZV9wdHI8RmxvYXRRdWFkPiBxdWFkLCBjb25zCiAgICAgbV9vdmVy
bGF5LT5oaWdobGlnaHRRdWFkKFdURjo6bW92ZShxdWFkKSwgKmhpZ2hsaWdodENvbmZpZyk7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdodE5vZGUoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgaGlnaGxpZ2h0SW5zcGVj
dG9yT2JqZWN0LCBjb25zdCBpbnQqIG5vZGVJZCwgY29uc3QgU3RyaW5nKiBvYmplY3RJZCkKK3Zv
aWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdodE5vZGUoRXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW5nLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiYg
aGlnaGxpZ2h0VW5jaGVja2VkT2JqZWN0LCBjb25zdCBpbnQqIG5vZGVJZCwgY29uc3QgU3RyaW5n
KiBvYmplY3RJZCkKIHsKICAgICBOb2RlKiBub2RlID0gMDsKICAgICBpZiAobm9kZUlkKSB7CkBA
IC0xMDk2LDE0ICsxMDk2LDE0IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdodE5v
ZGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8SW5zCiAgICAgaWYgKCFu
b2RlKQogICAgICAgICByZXR1cm47CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SGlnaGxpZ2h0Q29u
ZmlnPiBoaWdobGlnaHRDb25maWcgPSBoaWdobGlnaHRDb25maWdGcm9tSW5zcGVjdG9yT2JqZWN0
KGVycm9yU3RyaW5nLCBoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QuZ2V0KCkpOworICAgIHN0ZDo6
dW5pcXVlX3B0cjxIaWdobGlnaHRDb25maWc+IGhpZ2hsaWdodENvbmZpZyA9IGhpZ2hsaWdodENv
bmZpZ0Zyb21VbmNoZWNrZWRPYmplY3QoZXJyb3JTdHJpbmcsIGhpZ2hsaWdodFVuY2hlY2tlZE9i
amVjdC5nZXQoKSk7CiAgICAgaWYgKCFoaWdobGlnaHRDb25maWcpCiAgICAgICAgIHJldHVybjsK
IAogICAgIG1fb3ZlcmxheS0+aGlnaGxpZ2h0Tm9kZShub2RlLCAqaGlnaGxpZ2h0Q29uZmlnKTsK
IH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0RnJhbWUoRXJyb3JTdHJpbmcm
LCBjb25zdCBTdHJpbmcmIGZyYW1lSWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiBj
b2xvciwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIG91dGxpbmVDb2xvcikKK3ZvaWQg
SW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdodEZyYW1lKEVycm9yU3RyaW5nJiwgY29uc3QgU3Ry
aW5nJiBmcmFtZUlkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2Vk
T2JqZWN0PiogY29sb3IsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNr
ZWRPYmplY3Q+KiBvdXRsaW5lQ29sb3IpCiB7CiAgICAgRnJhbWUqIGZyYW1lID0gbV9wYWdlQWdl
bnQtPmZyYW1lRm9ySWQoZnJhbWVJZCk7CiAgICAgaWYgKGZyYW1lICYmIGZyYW1lLT5vd25lckVs
ZW1lbnQoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckRPTUFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQu
aAppbmRleCAzMWM5Y2U3MmEyOGNlNDY5ZjE1NWZhZDdhNmFkNGQxYzkxZTU0OTJjLi41ZTkzYmJl
NDU0ODY1ZDY1ZTE0MTExMzk5NmFjNDBhMDQ2ZjUwNDMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaApAQCAtMzcsNyArMzcsNyBAQAogI2luY2x1ZGUg
Ikluc3BlY3RvcldlYkZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKICNpbmNsdWRlICJSZW5kZXJMYXll
ci5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCi0jaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZh
bHVlcy5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+CiAj
aW5jbHVkZSA8d3RmL0RlcXVlLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRl
IDx3dGYvSGFzaFNldC5oPgpAQCAtMTMyLDIxICsxMzIsMjEgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgdm9pZCBzZXROb2RlVmFsdWUoRXJyb3JTdHJpbmcmLCBpbnQgbm9kZUlkLCBjb25zdCBTdHJp
bmcmIHZhbHVlKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgZ2V0RXZlbnRMaXN0ZW5lcnNG
b3JOb2RlKEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCwgY29uc3QgV1RGOjpTdHJpbmcqIG9iamVj
dEdyb3VwLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90
b2NvbDo6RE9NOjpFdmVudExpc3RlbmVyPj4mIGxpc3RlbmVyc0FycmF5KSBvdmVycmlkZTsKICAg
ICB2aXJ0dWFsIHZvaWQgZ2V0QWNjZXNzaWJpbGl0eVByb3BlcnRpZXNGb3JOb2RlKEVycm9yU3Ry
aW5nJiwgaW50IG5vZGVJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNz
aWJpbGl0eVByb3BlcnRpZXM+JiBheFByb3BlcnRpZXMpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwg
dm9pZCBwZXJmb3JtU2VhcmNoKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiB3aGl0ZXNwYWNl
VHJpbW1lZFF1ZXJ5LCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4qIG5v
ZGVJZHMsIFN0cmluZyogc2VhcmNoSWQsIGludCogcmVzdWx0Q291bnQpIG92ZXJyaWRlOworICAg
IHZpcnR1YWwgdm9pZCBwZXJmb3JtU2VhcmNoKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiB3
aGl0ZXNwYWNlVHJpbW1lZFF1ZXJ5LCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
VW5jaGVja2VkQXJyYXk+KiBub2RlSWRzLCBTdHJpbmcqIHNlYXJjaElkLCBpbnQqIHJlc3VsdENv
dW50KSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgZ2V0U2VhcmNoUmVzdWx0cyhFcnJvclN0
cmluZyYsIGNvbnN0IFN0cmluZyYgc2VhcmNoSWQsIGludCBmcm9tSW5kZXgsIGludCB0b0luZGV4
LCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8aW50Pj4mKSBvdmVycmlkZTsKICAg
ICB2aXJ0dWFsIHZvaWQgZGlzY2FyZFNlYXJjaFJlc3VsdHMoRXJyb3JTdHJpbmcmLCBjb25zdCBT
dHJpbmcmIHNlYXJjaElkKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgcmVzb2x2ZU5vZGUo
RXJyb3JTdHJpbmcmLCBpbnQgbm9kZUlkLCBjb25zdCBTdHJpbmcqIG9iamVjdEdyb3VwLCBSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0KSBv
dmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgZ2V0QXR0cmlidXRlcyhFcnJvclN0cmluZyYsIGlu
dCBub2RlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiYgcmVz
dWx0KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0SW5zcGVjdE1vZGVFbmFibGVkKEVy
cm9yU3RyaW5nJiwgYm9vbCBlbmFibGVkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0
b3JPYmplY3Q+KiBoaWdobGlnaHRDb25maWcpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBz
ZXRJbnNwZWN0TW9kZUVuYWJsZWQoRXJyb3JTdHJpbmcmLCBib29sIGVuYWJsZWQsIGNvbnN0IFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+KiBoaWdobGlnaHRDb25m
aWcpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0Tm9kZShFcnJvclN0cmluZyYs
IGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGludCogbm9kZUlkKSBvdmVycmlkZTsKICAgICB2aXJ0
dWFsIHZvaWQgcHVzaE5vZGVCeVBhdGhUb0Zyb250ZW5kKEVycm9yU3RyaW5nJiwgY29uc3QgU3Ry
aW5nJiBwYXRoLCBpbnQqIG5vZGVJZCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHB1c2hO
b2RlQnlCYWNrZW5kSWRUb0Zyb250ZW5kKEVycm9yU3RyaW5nJiwgQmFja2VuZE5vZGVJZCwgaW50
KiBub2RlSWQpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlQmFja2VuZE5vZGVJ
ZHMoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG5vZGVHcm91cCkgb3ZlcnJpZGU7CiAgICAg
dmlydHVhbCB2b2lkIGhpZGVIaWdobGlnaHQoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2
aXJ0dWFsIHZvaWQgaGlnaGxpZ2h0UmVjdChFcnJvclN0cmluZyYsIGludCB4LCBpbnQgeSwgaW50
IHdpZHRoLCBpbnQgaGVpZ2h0LCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmpl
Y3Q+KiBjb2xvciwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0Piogb3V0
bGluZUNvbG9yLCBjb25zdCBib29sKiB1c2VQYWdlQ29vcmRpbmF0ZXMpIG92ZXJyaWRlOwotICAg
IHZpcnR1YWwgdm9pZCBoaWdobGlnaHRRdWFkKEVycm9yU3RyaW5nJiwgY29uc3QgUmVmUHRyPElu
c3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+JiBxdWFkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJ
bnNwZWN0b3JPYmplY3Q+KiBjb2xvciwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9y
T2JqZWN0Piogb3V0bGluZUNvbG9yLCBjb25zdCBib29sKiB1c2VQYWdlQ29vcmRpbmF0ZXMpIG92
ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBoaWdobGlnaHROb2RlKEVycm9yU3RyaW5nJiwgY29u
c3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYgaGlnaGxpZ2h0Q29uZmlnLCBj
b25zdCBpbnQqIG5vZGVJZCwgY29uc3QgU3RyaW5nKiBvYmplY3RJZCkgb3ZlcnJpZGU7Ci0gICAg
dmlydHVhbCB2b2lkIGhpZ2hsaWdodEZyYW1lKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBm
cmFtZUlkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+KiBjb2xvciwg
Y29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0Piogb3V0bGluZUNvbG9yKSBv
dmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgaGlnaGxpZ2h0UmVjdChFcnJvclN0cmluZyYsIGlu
dCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBjb25zdCBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiogY29sb3IsIGNvbnN0IFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+KiBvdXRsaW5lQ29sb3IsIGNvbnN0IGJvb2wq
IHVzZVBhZ2VDb29yZGluYXRlcykgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGhpZ2hsaWdo
dFF1YWQoRXJyb3JTdHJpbmcmLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5j
aGVja2VkQXJyYXk+JiBxdWFkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5j
aGVja2VkT2JqZWN0PiogY29sb3IsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpV
bmNoZWNrZWRPYmplY3Q+KiBvdXRsaW5lQ29sb3IsIGNvbnN0IGJvb2wqIHVzZVBhZ2VDb29yZGlu
YXRlcykgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGhpZ2hsaWdodE5vZGUoRXJyb3JTdHJp
bmcmLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiYg
aGlnaGxpZ2h0Q29uZmlnLCBjb25zdCBpbnQqIG5vZGVJZCwgY29uc3QgU3RyaW5nKiBvYmplY3RJ
ZCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGhpZ2hsaWdodEZyYW1lKEVycm9yU3RyaW5n
JiwgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6VW5jaGVja2VkT2JqZWN0PiogY29sb3IsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpVbmNoZWNrZWRPYmplY3Q+KiBvdXRsaW5lQ29sb3IpIG92ZXJyaWRlOwogCiAgICAgdmly
dHVhbCB2b2lkIG1vdmVUbyhFcnJvclN0cmluZyYsIGludCBub2RlSWQsIGludCB0YXJnZXROb2Rl
SWQsIGNvbnN0IGludCogYW5jaG9yTm9kZUlkLCBpbnQqIG5ld05vZGVJZCkgb3ZlcnJpZGU7CiAg
ICAgdmlydHVhbCB2b2lkIHVuZG8oRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKQEAgLTIxMiw4ICsy
MTIsOCBAQCBwdWJsaWM6CiAgICAgSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdlQWdlbnQoKSB7IHJl
dHVybiBtX3BhZ2VBZ2VudDsgfQogCiBwcml2YXRlOgotICAgIHZvaWQgc2V0U2VhcmNoaW5nRm9y
Tm9kZShFcnJvclN0cmluZyYsIGJvb2wgZW5hYmxlZCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmpl
Y3QqIGhpZ2hsaWdodENvbmZpZyk7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEhpZ2hsaWdodENvbmZp
Zz4gaGlnaGxpZ2h0Q29uZmlnRnJvbUluc3BlY3Rvck9iamVjdChFcnJvclN0cmluZyYsIEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yT2JqZWN0KiBoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QpOworICAgIHZv
aWQgc2V0U2VhcmNoaW5nRm9yTm9kZShFcnJvclN0cmluZyYsIGJvb2wgZW5hYmxlZCwgSW5zcGVj
dG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0KiBoaWdobGlnaHRDb25maWcpOworICAgIHN0
ZDo6dW5pcXVlX3B0cjxIaWdobGlnaHRDb25maWc+IGhpZ2hsaWdodENvbmZpZ0Zyb21VbmNoZWNr
ZWRPYmplY3QoRXJyb3JTdHJpbmcmLCBJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmpl
Y3QqIGhpZ2hsaWdodFVuY2hlY2tlZE9iamVjdCk7CiAKICAgICAvLyBOb2RlLXJlbGF0ZWQgbWV0
aG9kcy4KICAgICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRyPE5vZGU+LCBpbnQ+IE5vZGVUb0lkTWFw
OwpAQCAtMjI4LDcgKzIyOCw3IEBAIHByaXZhdGU6CiAKICAgICBib29sIGhhc0JyZWFrcG9pbnQo
Tm9kZSosIGludCB0eXBlKTsKICAgICB2b2lkIHVwZGF0ZVN1YnRyZWVCcmVha3BvaW50cyhOb2Rl
KiByb290LCB1aW50MzJfdCByb290TWFzaywgYm9vbCB2YWx1ZSk7Ci0gICAgdm9pZCBkZXNjcmlw
dGlvbkZvckRPTUV2ZW50KE5vZGUqIHRhcmdldCwgaW50IGJyZWFrcG9pbnRUeXBlLCBib29sIGlu
c2VydGlvbiwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gZGVzY3JpcHRp
b24pOworICAgIHZvaWQgZGVzY3JpcHRpb25Gb3JET01FdmVudChOb2RlKiB0YXJnZXQsIGludCBi
cmVha3BvaW50VHlwZSwgYm9vbCBpbnNlcnRpb24sIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBkZXNjcmlwdGlvbik7CiAKICAgICBQYXNzUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZT4gYnVpbGRPYmplY3RGb3JOb2RlKE5vZGUqLCBp
bnQgZGVwdGgsIE5vZGVUb0lkTWFwKik7CiAgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBcnJheTxTdHJpbmc+PiBidWlsZEFycmF5Rm9yRWxlbWVudEF0dHJpYnV0ZXMoRWxlbWVu
dCopOwpAQCAtMjQyLDcgKzI0Miw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGRpc2NhcmRCaW5k
aW5ncygpOwogCi0gICAgdm9pZCBpbm5lckhpZ2hsaWdodFF1YWQoc3RkOjp1bmlxdWVfcHRyPEZs
b2F0UXVhZD4sIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4qIGNvbG9y
LCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+KiBvdXRsaW5lQ29sb3Is
IGNvbnN0IGJvb2wqIHVzZVBhZ2VDb29yZGluYXRlcyk7CisgICAgdm9pZCBpbm5lckhpZ2hsaWdo
dFF1YWQoc3RkOjp1bmlxdWVfcHRyPEZsb2F0UXVhZD4sIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+KiBjb2xvciwgY29uc3QgUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4qIG91dGxpbmVDb2xvciwgY29uc3QgYm9vbCog
dXNlUGFnZUNvb3JkaW5hdGVzKTsKIAogICAgIEluc3BlY3RvclBhZ2VBZ2VudCogbV9wYWdlQWdl
bnQ7CiAgICAgSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdE1hbmFnZXIqIG1faW5qZWN0ZWRTY3Jp
cHRNYW5hZ2VyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckRPTURlYnVnZ2VyQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckRPTURlYnVnZ2VyQWdlbnQuY3BwCmluZGV4IDJmMmU2NjQ0MmE4NzVhOTA5N2ZhZWRlNTQ0MDUz
M2EzNDRmMTU1NWMuLmY3MmZmMjAyMmY5NTExMTNmY2MzMDczMzVlOTg2YzM2OTBiNzhlNGQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01EZWJ1Z2dlckFn
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NRGVidWdn
ZXJBZ2VudC5jcHAKQEAgLTM4LDcgKzM4LDcgQEAKICNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb24uaCIKICNpbmNsdWRlICJJbnNwZWN0b3JXZWJGcm9udGVuZERpc3BhdGNoZXJzLmgi
CiAjaW5jbHVkZSAiSW5zdHJ1bWVudGluZ0FnZW50cy5oIgotI2luY2x1ZGUgPGluc3BlY3Rvci9J
bnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xU
eXBlcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgewpA
QCAtMTcxLDcgKzE3MSw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6cmVtb3Zl
QnJlYWtwb2ludChFcnJvclN0cmluZyYgZXJyb3IsIGNvbnN0IFN0cmluCiB2b2lkIEluc3BlY3Rv
ckRPTURlYnVnZ2VyQWdlbnQ6OmRpZEludmFsaWRhdGVTdHlsZUF0dHIoTm9kZSogbm9kZSkKIHsK
ICAgICBpZiAoaGFzQnJlYWtwb2ludChub2RlLCBBdHRyaWJ1dGVNb2RpZmllZCkpIHsKLSAgICAg
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZXZlbnREYXRhID0gSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKTsKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9i
amVjdD4gZXZlbnREYXRhID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0Ojpj
cmVhdGUoKTsKICAgICAgICAgZGVzY3JpcHRpb25Gb3JET01FdmVudChub2RlLCBBdHRyaWJ1dGVN
b2RpZmllZCwgZmFsc2UsIGV2ZW50RGF0YS5nZXQoKSk7CiAgICAgICAgIG1fZGVidWdnZXJBZ2Vu
dC0+YnJlYWtQcm9ncmFtKEluc3BlY3RvckRlYnVnZ2VyRnJvbnRlbmREaXNwYXRjaGVyOjpSZWFz
b246OkRPTSwgZXZlbnREYXRhLnJlbGVhc2UoKSk7CiAgICAgfQpAQCAtMjcxLDcgKzI3MSw3IEBA
IHZvaWQgSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6cmVtb3ZlRE9NQnJlYWtwb2ludChFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGluCiB2b2lkIEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6
OndpbGxJbnNlcnRET01Ob2RlKE5vZGUqIHBhcmVudCkKIHsKICAgICBpZiAoaGFzQnJlYWtwb2lu
dChwYXJlbnQsIFN1YnRyZWVNb2RpZmllZCkpIHsKLSAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gZXZlbnREYXRhID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gZXZlbnREYXRhID0gSW5z
cGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgZGVz
Y3JpcHRpb25Gb3JET01FdmVudChwYXJlbnQsIFN1YnRyZWVNb2RpZmllZCwgdHJ1ZSwgZXZlbnRE
YXRhLmdldCgpKTsKICAgICAgICAgbV9kZWJ1Z2dlckFnZW50LT5icmVha1Byb2dyYW0oSW5zcGVj
dG9yRGVidWdnZXJGcm9udGVuZERpc3BhdGNoZXI6OlJlYXNvbjo6RE9NLCBldmVudERhdGEucmVs
ZWFzZSgpKTsKICAgICB9CkBAIC0yODEsMTEgKzI4MSwxMSBAQCB2b2lkIEluc3BlY3RvckRPTURl
YnVnZ2VyQWdlbnQ6OndpbGxSZW1vdmVET01Ob2RlKE5vZGUqIG5vZGUpCiB7CiAgICAgTm9kZSog
cGFyZW50Tm9kZSA9IEluc3BlY3RvckRPTUFnZW50Ojppbm5lclBhcmVudE5vZGUobm9kZSk7CiAg
ICAgaWYgKGhhc0JyZWFrcG9pbnQobm9kZSwgTm9kZVJlbW92ZWQpKSB7Ci0gICAgICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IGV2ZW50RGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IGV2
ZW50RGF0YSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdDo6Y3JlYXRlKCk7
CiAgICAgICAgIGRlc2NyaXB0aW9uRm9yRE9NRXZlbnQobm9kZSwgTm9kZVJlbW92ZWQsIGZhbHNl
LCBldmVudERhdGEuZ2V0KCkpOwogICAgICAgICBtX2RlYnVnZ2VyQWdlbnQtPmJyZWFrUHJvZ3Jh
bShJbnNwZWN0b3JEZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVhc29uOjpET00sIGV2ZW50
RGF0YS5yZWxlYXNlKCkpOwogICAgIH0gZWxzZSBpZiAocGFyZW50Tm9kZSAmJiBoYXNCcmVha3Bv
aW50KHBhcmVudE5vZGUsIFN1YnRyZWVNb2RpZmllZCkpIHsKLSAgICAgICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gZXZlbnREYXRhID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICAg
ICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gZXZlbnREYXRh
ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0OjpjcmVhdGUoKTsKICAgICAg
ICAgZGVzY3JpcHRpb25Gb3JET01FdmVudChub2RlLCBTdWJ0cmVlTW9kaWZpZWQsIGZhbHNlLCBl
dmVudERhdGEuZ2V0KCkpOwogICAgICAgICBtX2RlYnVnZ2VyQWdlbnQtPmJyZWFrUHJvZ3JhbShJ
bnNwZWN0b3JEZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVhc29uOjpET00sIGV2ZW50RGF0
YS5yZWxlYXNlKCkpOwogICAgIH0KQEAgLTI5NCwxMyArMjk0LDEzIEBAIHZvaWQgSW5zcGVjdG9y
RE9NRGVidWdnZXJBZ2VudDo6d2lsbFJlbW92ZURPTU5vZGUoTm9kZSogbm9kZSkKIHZvaWQgSW5z
cGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6d2lsbE1vZGlmeURPTUF0dHIoRWxlbWVudCogZWxlbWVu
dCkKIHsKICAgICBpZiAoaGFzQnJlYWtwb2ludChlbGVtZW50LCBBdHRyaWJ1dGVNb2RpZmllZCkp
IHsKLSAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZXZlbnREYXRhID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVu
Y2hlY2tlZE9iamVjdD4gZXZlbnREYXRhID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2Vk
T2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgZGVzY3JpcHRpb25Gb3JET01FdmVudChlbGVtZW50
LCBBdHRyaWJ1dGVNb2RpZmllZCwgZmFsc2UsIGV2ZW50RGF0YS5nZXQoKSk7CiAgICAgICAgIG1f
ZGVidWdnZXJBZ2VudC0+YnJlYWtQcm9ncmFtKEluc3BlY3RvckRlYnVnZ2VyRnJvbnRlbmREaXNw
YXRjaGVyOjpSZWFzb246OkRPTSwgZXZlbnREYXRhLnJlbGVhc2UoKSk7CiAgICAgfQogfQogCi12
b2lkIEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OmRlc2NyaXB0aW9uRm9yRE9NRXZlbnQoTm9k
ZSogdGFyZ2V0LCBpbnQgYnJlYWtwb2ludFR5cGUsIGJvb2wgaW5zZXJ0aW9uLCBJbnNwZWN0b3JP
YmplY3QqIGRlc2NyaXB0aW9uKQordm9pZCBJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50OjpkZXNj
cmlwdGlvbkZvckRPTUV2ZW50KE5vZGUqIHRhcmdldCwgaW50IGJyZWFrcG9pbnRUeXBlLCBib29s
IGluc2VydGlvbiwgSW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0KiBkZXNjcmlw
dGlvbikKIHsKICAgICBBU1NFUlQoaGFzQnJlYWtwb2ludCh0YXJnZXQsIGJyZWFrcG9pbnRUeXBl
KSk7CiAKQEAgLTM2Nyw3ICszNjcsNyBAQCB2b2lkIEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6
OnBhdXNlT25OYXRpdmVFdmVudElmTmVlZGVkKGJvb2wgaXNET01FdmVudCwgY29ucwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGV2ZW50
RGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gZXZlbnREYXRhID0gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6VW5jaGVja2VkT2JqZWN0OjpjcmVhdGUoKTsKICAgICBldmVudERhdGEtPnNldFN0cmluZygi
ZXZlbnROYW1lIiwgZnVsbEV2ZW50TmFtZSk7CiAgICAgaWYgKHN5bmNocm9ub3VzKQogICAgICAg
ICBtX2RlYnVnZ2VyQWdlbnQtPmJyZWFrUHJvZ3JhbShJbnNwZWN0b3JEZWJ1Z2dlckZyb250ZW5k
RGlzcGF0Y2hlcjo6UmVhc29uOjpFdmVudExpc3RlbmVyLCBldmVudERhdGEucmVsZWFzZSgpKTsK
QEAgLTQxMiw3ICs0MTIsNyBAQCB2b2lkIEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OndpbGxT
ZW5kWE1MSHR0cFJlcXVlc3QoY29uc3QgU3RyaW5nJiB1cmwpCiAgICAgaWYgKGJyZWFrcG9pbnRV
UkwuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IGV2ZW50RGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gZXZlbnREYXRhID0gSW5zcGVjdG9y
OjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0OjpjcmVhdGUoKTsKICAgICBldmVudERhdGEtPnNl
dFN0cmluZygiYnJlYWtwb2ludFVSTCIsIGJyZWFrcG9pbnRVUkwpOwogICAgIGV2ZW50RGF0YS0+
c2V0U3RyaW5nKCJ1cmwiLCB1cmwpOwogICAgIG1fZGVidWdnZXJBZ2VudC0+YnJlYWtQcm9ncmFt
KEluc3BlY3RvckRlYnVnZ2VyRnJvbnRlbmREaXNwYXRjaGVyOjpSZWFzb246OlhIUiwgZXZlbnRE
YXRhLnJlbGVhc2UoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yRE9NRGVidWdnZXJBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckRPTURlYnVnZ2VyQWdlbnQuaAppbmRleCA3OWE4MWIxNTljMGI2NGYwNjE2MWQzMmVkOThm
OGNlNThlMjViOGQyLi5mMDdhY2RjMGJhYmJmMTllYWM3OTc4ZGMzNzhjNGVhMDE4NzlkNTg3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NRGVidWdnZXJB
Z2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01EZWJ1Z2dl
ckFnZW50LmgKQEAgLTQxLDcgKzQxLDcgQEAKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7Ci1jbGFzcyBJbnNwZWN0b3JPYmplY3Q7CitjbGFz
cyBVbmNoZWNrZWRPYmplY3Q7CiB9CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTkyLDcgKzky
LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgZGlkUGF1c2UoKSBvdmVycmlkZTsKICAg
ICB2b2lkIGRpc2FibGUoKTsKIAotICAgIHZvaWQgZGVzY3JpcHRpb25Gb3JET01FdmVudChOb2Rl
KiB0YXJnZXQsIGludCBicmVha3BvaW50VHlwZSwgYm9vbCBpbnNlcnRpb24sIEluc3BlY3Rvcjo6
SW5zcGVjdG9yT2JqZWN0KiBkZXNjcmlwdGlvbik7CisgICAgdm9pZCBkZXNjcmlwdGlvbkZvckRP
TUV2ZW50KE5vZGUqIHRhcmdldCwgaW50IGJyZWFrcG9pbnRUeXBlLCBib29sIGluc2VydGlvbiwg
SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0KiBkZXNjcmlwdGlvbik7CiAgICAg
dm9pZCB1cGRhdGVTdWJ0cmVlQnJlYWtwb2ludHMoTm9kZSosIHVpbnQzMl90IHJvb3RNYXNrLCBi
b29sIHNldCk7CiAgICAgYm9vbCBoYXNCcmVha3BvaW50KE5vZGUqLCBpbnQgdHlwZSk7CiAgICAg
dm9pZCBkaXNjYXJkQmluZGluZ3MoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5jcHAKaW5kZXggZmY5NGVjOGQ3ODc5MjZjMDg2
NDExNGM0NDc5YTI5NzJiZTBhZjdiZC4uZWM4ODNiNDEyYTJlZDZkYzcwMGE5MmI4NWZhNTExMDgz
NzZhZWI0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRP
TVN0b3JhZ2VBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckRPTVN0b3JhZ2VBZ2VudC5jcHAKQEAgLTQ5LDcgKzQ5LDcgQEAKICNpbmNsdWRlICJTdG9yYWdl
QXJlYS5oIgogI2luY2x1ZGUgIlN0b3JhZ2VOYW1lc3BhY2UuaCIKICNpbmNsdWRlICJWb2lkQ2Fs
bGJhY2suaCIKLSNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVk
ZSA8aW5zcGVjdG9yL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KICNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CkBAIC05NSw3ICs5NSw3IEBAIHZv
aWQgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpkaXNhYmxlKEVycm9yU3RyaW5nJikKICAgICBt
X2VuYWJsZWQgPSBmYWxzZTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6Omdl
dERPTVN0b3JhZ2VJdGVtcyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+JiBzdG9yYWdlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpB
cnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+Pj4mIGl0ZW1zKQordm9pZCBJ
bnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OmdldERPTVN0b3JhZ2VJdGVtcyhFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRP
YmplY3Q+JiBzdG9yYWdlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNw
ZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+Pj4mIGl0ZW1zKQogewogICAgIEZyYW1lKiBm
cmFtZTsKICAgICBSZWZQdHI8U3RvcmFnZUFyZWE+IHN0b3JhZ2VBcmVhID0gZmluZFN0b3JhZ2VB
cmVhKGVycm9yU3RyaW5nLCBzdG9yYWdlSWQsIGZyYW1lKTsKQEAgLTExOSw3ICsxMTksNyBAQCB2
b2lkIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6Z2V0RE9NU3RvcmFnZUl0ZW1zKEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgY29ucwogICAgIGl0ZW1zID0gc3RvcmFnZUl0ZW1zLnJlbGVhc2Uo
KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OnNldERPTVN0b3JhZ2VJdGVt
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4m
IHN0b3JhZ2VJZCwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpCit2b2lk
IEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6c2V0RE9NU3RvcmFnZUl0ZW0oRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2Vk
T2JqZWN0PiYgc3RvcmFnZUlkLCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1
ZSkKIHsKICAgICBGcmFtZSogZnJhbWU7CiAgICAgUmVmUHRyPFN0b3JhZ2VBcmVhPiBzdG9yYWdl
QXJlYSA9IGZpbmRTdG9yYWdlQXJlYShlcnJvclN0cmluZywgc3RvcmFnZUlkLCBmcmFtZSk7CkBA
IC0xMzQsNyArMTM0LDcgQEAgdm9pZCBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OnNldERPTVN0
b3JhZ2VJdGVtKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QKICAgICAgICAgZXJyb3JT
dHJpbmcgPSBFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24oUVVPVEFfRVhDRUVERURfRVJSKS5uYW1l
OwogfQogCi12b2lkIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6cmVtb3ZlRE9NU3RvcmFnZUl0
ZW0oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiYgc3RvcmFnZUlkLCBjb25zdCBTdHJpbmcmIGtleSkKK3ZvaWQgSW5zcGVjdG9yRE9NU3RvcmFn
ZUFnZW50OjpyZW1vdmVET01TdG9yYWdlSXRlbShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNv
bnN0IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+JiBzdG9yYWdl
SWQsIGNvbnN0IFN0cmluZyYga2V5KQogewogICAgIEZyYW1lKiBmcmFtZTsKICAgICBSZWZQdHI8
U3RvcmFnZUFyZWE+IHN0b3JhZ2VBcmVhID0gZmluZFN0b3JhZ2VBcmVhKGVycm9yU3RyaW5nLCBz
dG9yYWdlSWQsIGZyYW1lKTsKQEAgLTE4Miw3ICsxODIsNyBAQCB2b2lkIEluc3BlY3RvckRPTVN0
b3JhZ2VBZ2VudDo6ZGlkRGlzcGF0Y2hET01TdG9yYWdlRXZlbnQoY29uc3QgU3RyaW5nJiBrZXks
IGNvbgogICAgICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+ZG9tU3RvcmFnZUl0ZW1VcGRhdGVk
KGlkLCBrZXksIG9sZFZhbHVlLCBuZXdWYWx1ZSk7CiB9CiAKLVBhc3NSZWZQdHI8U3RvcmFnZUFy
ZWE+IEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6ZmluZFN0b3JhZ2VBcmVhKEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZywgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIHN0b3JhZ2VJZCwg
RnJhbWUqJiB0YXJnZXRGcmFtZSkKK1Bhc3NSZWZQdHI8U3RvcmFnZUFyZWE+IEluc3BlY3RvckRP
TVN0b3JhZ2VBZ2VudDo6ZmluZFN0b3JhZ2VBcmVhKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
Y29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4mIHN0b3Jh
Z2VJZCwgRnJhbWUqJiB0YXJnZXRGcmFtZSkKIHsKICAgICBTdHJpbmcgc2VjdXJpdHlPcmlnaW47
CiAgICAgYm9vbCBpc0xvY2FsU3RvcmFnZSA9IGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5oIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5oCmluZGV4IGJmZmZhMjIxZGU0
NDE1ZmMxM2UwOTc3NWExNzM4NDAxZTAxMTM5ZmMuLmNhMTU1MzAwZjk5ZTUzZDFiYmYxYTI0MTM0
MTUzOThkY2NkOWM1NTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JET01TdG9yYWdlQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yRE9NU3RvcmFnZUFnZW50LmgKQEAgLTM2LDcgKzM2LDcgQEAKICNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7Ci1jbGFzcyBJbnNwZWN0
b3JBcnJheTsKK2NsYXNzIFVuY2hlY2tlZEFycmF5OwogY2xhc3MgSW5zcGVjdG9yRE9NU3RvcmFn
ZUZyb250ZW5kRGlzcGF0Y2hlcjsKIH0KIApAQCAtNjMsOSArNjMsOSBAQCBwdWJsaWM6CiAgICAg
Ly8gQ2FsbGVkIGZyb20gdGhlIGZyb250LWVuZC4KICAgICB2aXJ0dWFsIHZvaWQgZW5hYmxlKEVy
cm9yU3RyaW5nJikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGRpc2FibGUoRXJyb3JTdHJp
bmcmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0RE9NU3RvcmFnZUl0ZW1zKEVycm9y
U3RyaW5nJiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYgc3RvcmFn
ZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXJyYXk8U3RyaW5nPj4+JiBpdGVtcykgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHNl
dERPTVN0b3JhZ2VJdGVtKEVycm9yU3RyaW5nJiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5z
cGVjdG9yT2JqZWN0PiYgc3RvcmFnZUlkLCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5n
JiB2YWx1ZSkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZURPTVN0b3JhZ2VJdGVt
KEVycm9yU3RyaW5nJiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYg
c3RvcmFnZUlkLCBjb25zdCBTdHJpbmcmIGtleSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lk
IGdldERPTVN0b3JhZ2VJdGVtcyhFcnJvclN0cmluZyYsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+JiBzdG9yYWdlSWQsIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+Pj4mIGl0
ZW1zKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RE9NU3RvcmFnZUl0ZW0oRXJyb3JT
dHJpbmcmLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0
PiYgc3RvcmFnZUlkLCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkgb3Zl
cnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZURPTVN0b3JhZ2VJdGVtKEVycm9yU3RyaW5n
JiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4mIHN0
b3JhZ2VJZCwgY29uc3QgU3RyaW5nJiBrZXkpIG92ZXJyaWRlOwogCiAgICAgLy8gQ2FsbGVkIGZy
b20gdGhlIGluamVjdGVkIHNjcmlwdC4KICAgICBTdHJpbmcgc3RvcmFnZUlkKFN0b3JhZ2UqKTsK
QEAgLTc1LDcgKzc1LDcgQEAgcHVibGljOgogICAgIHZvaWQgZGlkRGlzcGF0Y2hET01TdG9yYWdl
RXZlbnQoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgb2xkVmFsdWUsIGNvbnN0IFN0
cmluZyYgbmV3VmFsdWUsIFN0b3JhZ2VUeXBlLCBTZWN1cml0eU9yaWdpbiosIFBhZ2UqKTsKIAog
cHJpdmF0ZToKLSAgICBQYXNzUmVmUHRyPFN0b3JhZ2VBcmVhPiBmaW5kU3RvcmFnZUFyZWEoRXJy
b3JTdHJpbmcmLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiwgRnJh
bWUqJik7CisgICAgUGFzc1JlZlB0cjxTdG9yYWdlQXJlYT4gZmluZFN0b3JhZ2VBcmVhKEVycm9y
U3RyaW5nJiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVj
dD4mLCBGcmFtZSomKTsKIAogICAgIEluc3BlY3RvclBhZ2VBZ2VudCogbV9wYWdlQWdlbnQ7CiAg
ICAgc3RkOjp1bmlxdWVfcHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yRE9NU3RvcmFnZUZyb250ZW5k
RGlzcGF0Y2hlcj4gbV9mcm9udGVuZERpc3BhdGNoZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5jcHAKaW5kZXggODg5MWVmYzVhNzc0
MWQ1MTFiNjU1NWJjZjFkYjc2ZDdmYTJmMzUxYy4uNTBmNGQ0ODRjMzg5ZTE0Zjg1NjJmOWZjYTc0
Nzc4OWU3MTAxNWFhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckRhdGFiYXNlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JEYXRhYmFzZUFnZW50LmNwcApAQCAtNDgsNyArNDgsNyBAQAogI2luY2x1ZGUgIlNRTFRy
YW5zYWN0aW9uRXJyb3JDYWxsYmFjay5oIgogI2luY2x1ZGUgIlNRTFZhbHVlLmgiCiAjaW5jbHVk
ZSAiVm9pZENhbGxiYWNrLmgiCi0jaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5o
PgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+CiAjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgogCiB0eXBlZGVmIEluc3BlY3Rvcjo6SW5zcGVjdG9yRGF0YWJhc2VC
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxDYWxsYmFjayBFeGVjdXRlU1FMQ2Fs
bGJhY2s7CkBAIC04NSwxNCArODUsMTQgQEAgcHVibGljOgogICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGNvbHVtbnMuc2l6ZSgpOyArK2kpCiAgICAgICAgICAgICBjb2x1bW5OYW1lcy0+
YWRkSXRlbShjb2x1bW5zW2ldKTsKIAotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXJyYXk8SW5zcGVjdG9yVmFsdWU+PiB2YWx1ZXMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpB
cnJheTxJbnNwZWN0b3JWYWx1ZT46OmNyZWF0ZSgpOworICAgICAgICBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkVmFsdWU+PiB2
YWx1ZXMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpV
bmNoZWNrZWRWYWx1ZT46OmNyZWF0ZSgpOwogICAgICAgICBjb25zdCBWZWN0b3I8U1FMVmFsdWU+
JiBkYXRhID0gcm93TGlzdC0+dmFsdWVzKCk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgZGF0YS5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgY29uc3QgU1FMVmFsdWUmIHZhbHVl
ID0gcm93TGlzdC0+dmFsdWVzKClbaV07CiAgICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLnR5cGUo
KSkgewotICAgICAgICAgICAgY2FzZSBTUUxWYWx1ZTo6U3RyaW5nVmFsdWU6IHZhbHVlcy0+YWRk
SXRlbShJbnNwZWN0b3JTdHJpbmc6OmNyZWF0ZSh2YWx1ZS5zdHJpbmcoKSkpOyBicmVhazsKLSAg
ICAgICAgICAgIGNhc2UgU1FMVmFsdWU6Ok51bWJlclZhbHVlOiB2YWx1ZXMtPmFkZEl0ZW0oSW5z
cGVjdG9yQmFzaWNWYWx1ZTo6Y3JlYXRlKHZhbHVlLm51bWJlcigpKSk7IGJyZWFrOwotICAgICAg
ICAgICAgY2FzZSBTUUxWYWx1ZTo6TnVsbFZhbHVlOiB2YWx1ZXMtPmFkZEl0ZW0oSW5zcGVjdG9y
VmFsdWU6Om51bGwoKSk7IGJyZWFrOworICAgICAgICAgICAgY2FzZSBTUUxWYWx1ZTo6U3RyaW5n
VmFsdWU6IHZhbHVlcy0+YWRkSXRlbShJbnNwZWN0b3I6OlByb3RvY29sOjpTY2FsYXJWYWx1ZTo6
Y3JlYXRlKHZhbHVlLnN0cmluZygpKSk7IGJyZWFrOworICAgICAgICAgICAgY2FzZSBTUUxWYWx1
ZTo6TnVtYmVyVmFsdWU6IHZhbHVlcy0+YWRkSXRlbShJbnNwZWN0b3I6OlByb3RvY29sOjpTY2Fs
YXJWYWx1ZTo6Y3JlYXRlKHZhbHVlLm51bWJlcigpKSk7IGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSBTUUxWYWx1ZTo6TnVsbFZhbHVlOiB2YWx1ZXMtPmFkZEl0ZW0oSW5zcGVjdG9yOjpQcm90b2Nv
bDo6VW5jaGVja2VkVmFsdWU6Om51bGwoKSk7IGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAg
ICB9CiAgICAgICAgIG1fcmVxdWVzdENhbGxiYWNrLT5zZW5kU3VjY2Vzcyhjb2x1bW5OYW1lcy5y
ZWxlYXNlKCksIHZhbHVlcy5yZWxlYXNlKCksIG51bGxwdHIpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuaCBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZUFnZW50LmgKaW5kZXggZGJjZGRjYjg3Yjcz
ODU0ZmYwYTlkZTlmZmFhNjhlZTZmZTQxN2YxMS4uODY3ODk2ZTFlMWNjNTMzYWU5OTcxMzdhNzZh
YTRlYjBhODdhNTJjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckRhdGFiYXNlQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yRGF0YWJhc2VBZ2VudC5oCkBAIC0zOCw3ICszOCw3IEBACiAjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewotY2xhc3MgSW5zcGVjdG9yQXJy
YXk7CitjbGFzcyBVbmNoZWNrZWRBcnJheTsKIH0KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlUmVzb3Vy
Y2UuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlUmVzb3Vy
Y2UuY3BwCmluZGV4IGFhNDk2ZmNlN2I1YzI2YzdmZTk0ODQ2MzA0ODBjMTRiMWI3OWRkMWQuLmEx
M2FkOTdmYzkyMzQwMGVhZWFmMTEzNjRjNThkYmExNzA1ZDY5ZTUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5jcHAKQEAg
LTM2LDcgKzM2LDcgQEAKIAogI2luY2x1ZGUgIkRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiSW5zcGVj
dG9yV2ViRnJvbnRlbmREaXNwYXRjaGVycy5oIgotI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0
b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5o
PgogCiB1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckluZGV4ZWREQkFnZW50LmNwcAppbmRleCBjMjc4M2Y3NDdl
MTE3NzgyM2RkODgyMTJmMzdkYjQxNDY5N2Y2ZjUwLi5lMjc4ZDQ2NWRhMjUzMjQxNWZmYjkyYTVi
NWVhZDQ3MzdjMThjNmZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9ySW5kZXhlZERCQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JJbmRleGVkREJBZ2VudC5jcHAKQEAgLTY0LDcgKzY0LDcgQEAKICNpbmNsdWRlICJT
ZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgPGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5oPgog
I2luY2x1ZGUgPGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdE1hbmFnZXIuaD4KLSNpbmNsdWRlIDxp
bnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3Rv
clByb3RvY29sVHlwZXMuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CiAKQEAgLTMyMiw3ICszMjIsNyBAQCBwcml2YXRlOgogICAgIFJl
ZlB0cjxSZXF1ZXN0RGF0YWJhc2VDYWxsYmFjaz4gbV9yZXF1ZXN0Q2FsbGJhY2s7CiB9OwogCi1z
dGF0aWMgUGFzc1JlZlB0cjxJREJLZXk+IGlkYktleUZyb21JbnNwZWN0b3JPYmplY3QoSW5zcGVj
dG9yT2JqZWN0KiBrZXkpCitzdGF0aWMgUGFzc1JlZlB0cjxJREJLZXk+IGlkYktleUZyb21VbmNo
ZWNrZWRPYmplY3QoSW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0KiBrZXkpCiB7
CiAgICAgUmVmUHRyPElEQktleT4gaWRiS2V5OwogCkBAIC0zNTIsMTMgKzM1MiwxMyBAQCBzdGF0
aWMgUGFzc1JlZlB0cjxJREJLZXk+IGlkYktleUZyb21JbnNwZWN0b3JPYmplY3QoSW5zcGVjdG9y
T2JqZWN0KiBrZXkpCiAgICAgICAgIGlkYktleSA9IElEQktleTo6Y3JlYXRlRGF0ZShkYXRlKTsK
ICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gYXJyYXlUeXBlKSB7CiAgICAgICAgIElEQktleTo6S2V5
QXJyYXkga2V5QXJyYXk7Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJyYXkgPSBr
ZXktPmdldEFycmF5KCJhcnJheSIpOworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6VW5jaGVja2VkQXJyYXk+IGFycmF5ID0ga2V5LT5nZXRBcnJheSgiYXJyYXkiKTsKICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcnJheS0+bGVuZ3RoKCk7ICsraSkgewotICAgICAg
ICAgICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1ZSA9IGFycmF5LT5nZXQoaSk7Ci0gICAg
ICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvYmplY3Q7CisgICAgICAgICAgICBSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkVmFsdWU+IHZhbHVlID0gYXJyYXktPmdl
dChpKTsKKyAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRP
YmplY3Q+IG9iamVjdDsKICAgICAgICAgICAgIGlmICghdmFsdWUtPmFzT2JqZWN0KG9iamVjdCkp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICBrZXlBcnJheS5h
cHBlbmQoaWRiS2V5RnJvbUluc3BlY3Rvck9iamVjdChvYmplY3QuZ2V0KCkpKTsKKyAgICAgICAg
ICAgIGtleUFycmF5LmFwcGVuZChpZGJLZXlGcm9tVW5jaGVja2VkT2JqZWN0KG9iamVjdC5nZXQo
KSkpOwogICAgICAgICB9CiAgICAgICAgIGlkYktleSA9IElEQktleTo6Y3JlYXRlQXJyYXkoa2V5
QXJyYXkpOwogICAgIH0gZWxzZQpAQCAtMzY3LDE1ICszNjcsMTUgQEAgc3RhdGljIFBhc3NSZWZQ
dHI8SURCS2V5PiBpZGJLZXlGcm9tSW5zcGVjdG9yT2JqZWN0KEluc3BlY3Rvck9iamVjdCoga2V5
KQogICAgIHJldHVybiBpZGJLZXkucmVsZWFzZSgpOwogfQogCi1zdGF0aWMgUGFzc1JlZlB0cjxJ
REJLZXlSYW5nZT4gaWRiS2V5UmFuZ2VGcm9tS2V5UmFuZ2UoSW5zcGVjdG9yT2JqZWN0KiBrZXlS
YW5nZSkKK3N0YXRpYyBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBpZGJLZXlSYW5nZUZyb21LZXlS
YW5nZShJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3QqIGtleVJhbmdlKQogewot
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGxvd2VyID0ga2V5UmFuZ2UtPmdldE9iamVjdCgi
bG93ZXIiKTsKLSAgICBSZWZQdHI8SURCS2V5PiBpZGJMb3dlciA9IGxvd2VyID8gaWRiS2V5RnJv
bUluc3BlY3Rvck9iamVjdChsb3dlci5nZXQoKSkgOiBudWxscHRyOworICAgIFJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IGxvd2VyID0ga2V5UmFuZ2UtPmdldE9i
amVjdCgibG93ZXIiKTsKKyAgICBSZWZQdHI8SURCS2V5PiBpZGJMb3dlciA9IGxvd2VyID8gaWRi
S2V5RnJvbVVuY2hlY2tlZE9iamVjdChsb3dlci5nZXQoKSkgOiBudWxscHRyOwogICAgIGlmIChs
b3dlciAmJiAhaWRiTG93ZXIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gdXBwZXIgPSBrZXlSYW5nZS0+Z2V0T2JqZWN0KCJ1cHBlciIpOwot
ICAgIFJlZlB0cjxJREJLZXk+IGlkYlVwcGVyID0gdXBwZXIgPyBpZGJLZXlGcm9tSW5zcGVjdG9y
T2JqZWN0KHVwcGVyLmdldCgpKSA6IG51bGxwdHI7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gdXBwZXIgPSBrZXlSYW5nZS0+Z2V0T2JqZWN0KCJ1cHBl
ciIpOworICAgIFJlZlB0cjxJREJLZXk+IGlkYlVwcGVyID0gdXBwZXIgPyBpZGJLZXlGcm9tVW5j
aGVja2VkT2JqZWN0KHVwcGVyLmdldCgpKSA6IG51bGxwdHI7CiAgICAgaWYgKHVwcGVyICYmICFp
ZGJVcHBlcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKQEAgLTY0MSw3ICs2NDEsNyBAQCB2
b2lkIEluc3BlY3RvckluZGV4ZWREQkFnZW50OjpyZXF1ZXN0RGF0YWJhc2UoRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBjb25zdCBTdAogICAgIGRhdGFiYXNlTG9hZGVyLT5zdGFydChpZGJGYWN0
b3J5LCBkb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKSwgZGF0YWJhc2VOYW1lKTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JJbmRleGVkREJBZ2VudDo6cmVxdWVzdERhdGEoRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBjb25zdCBTdHJpbmcmIHNlY3VyaXR5T3JpZ2luLCBjb25zdCBTdHJpbmcmIGRhdGFi
YXNlTmFtZSwgY29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5hbWUsIGNvbnN0IFN0cmluZyYgaW5k
ZXhOYW1lLCBpbnQgc2tpcENvdW50LCBpbnQgcGFnZVNpemUsIGNvbnN0IFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+KiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxSZXF1ZXN0RGF0YUNhbGxiYWNrPiByZXF1
ZXN0Q2FsbGJhY2spCit2b2lkIEluc3BlY3RvckluZGV4ZWREQkFnZW50OjpyZXF1ZXN0RGF0YShF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgc2VjdXJpdHlPcmlnaW4sIGNv
bnN0IFN0cmluZyYgZGF0YWJhc2VOYW1lLCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSwg
Y29uc3QgU3RyaW5nJiBpbmRleE5hbWUsIGludCBza2lwQ291bnQsIGludCBwYWdlU2l6ZSwgY29u
c3QgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4qIGtleVJhbmdl
LCBQYXNzUmVmUHRyPFJlcXVlc3REYXRhQ2FsbGJhY2s+IHJlcXVlc3RDYWxsYmFjaykKIHsKICAg
ICBGcmFtZSogZnJhbWUgPSBtX3BhZ2VBZ2VudC0+ZmluZEZyYW1lV2l0aFNlY3VyaXR5T3JpZ2lu
KHNlY3VyaXR5T3JpZ2luKTsKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBhc3NlcnREb2N1bWVu
dChlcnJvclN0cmluZywgZnJhbWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckluZGV4ZWREQkFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuaAppbmRleCA2NzRiYzM2NmJhOTA3ODFkNGNmMTY3ZDU1
ODc3MjVkMGQ0MDgxNThiLi5iZDEyYWQ3NWRmMjk1ZmViMzczMWYyNTZlZGVlYjA3Yjg1YTUwZTgx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5kZXhlZERC
QWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5kZXhlZERC
QWdlbnQuaApAQCAtNjAsNyArNjAsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRpc2Fi
bGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdERhdGFi
YXNlTmFtZXMoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHNlY3VyaXR5T3JpZ2luLCBQYXNz
UmVmUHRyPFJlcXVlc3REYXRhYmFzZU5hbWVzQ2FsbGJhY2s+KSBvdmVycmlkZTsKICAgICB2aXJ0
dWFsIHZvaWQgcmVxdWVzdERhdGFiYXNlKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBzZWN1
cml0eU9yaWdpbiwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZU5hbWUsIFBhc3NSZWZQdHI8UmVxdWVz
dERhdGFiYXNlQ2FsbGJhY2s+KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdERh
dGEoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHNlY3VyaXR5T3JpZ2luLCBjb25zdCBTdHJp
bmcmIGRhdGFiYXNlTmFtZSwgY29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5hbWUsIGNvbnN0IFN0
cmluZyYgaW5kZXhOYW1lLCBpbnQgc2tpcENvdW50LCBpbnQgcGFnZVNpemUsIGNvbnN0IFJlZlB0
cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4qIGtleVJhbmdlLCBQYXNzUmVmUHRyPFJlcXVl
c3REYXRhQ2FsbGJhY2s+KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdERhdGEo
RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHNlY3VyaXR5T3JpZ2luLCBjb25zdCBTdHJpbmcm
IGRhdGFiYXNlTmFtZSwgY29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5hbWUsIGNvbnN0IFN0cmlu
ZyYgaW5kZXhOYW1lLCBpbnQgc2tpcENvdW50LCBpbnQgcGFnZVNpemUsIGNvbnN0IFJlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+KiBrZXlSYW5nZSwgUGFzc1JlZlB0
cjxSZXF1ZXN0RGF0YUNhbGxiYWNrPikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGNsZWFy
T2JqZWN0U3RvcmUoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGluX3NlY3VyaXR5T3JpZ2lu
LCBjb25zdCBTdHJpbmcmIGluX2RhdGFiYXNlTmFtZSwgY29uc3QgU3RyaW5nJiBpbl9vYmplY3RT
dG9yZU5hbWUsIFBhc3NSZWZQdHI8Q2xlYXJPYmplY3RTdG9yZUNhbGxiYWNrPikgb3ZlcnJpZGU7
CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yT3ZlcmxheS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3Zlcmxh
eS5jcHAKaW5kZXggY2FjYThlNGExODgxZTQ5NTM2OTQ1YWQ5YWY1ZDZjYzcyOTE5NGFmOC4uMDhj
MDEzNWVhMDdlOGZmZGY1MjMwODBkZTkzMjhiODlkY2NmOTk2MyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcApAQCAtNTYsNyArNTYsNyBAQAogI2lu
Y2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiU3R5bGVkRWxlbWVudC5oIgogI2luY2x1ZGUg
PGJpbmRpbmdzL1NjcmlwdFZhbHVlLmg+Ci0jaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZh
bHVlcy5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiB1c2luZyBuYW1lc3BhY2UgSW5z
cGVjdG9yOwpAQCAtMzMwLDE3ICszMzAsMTcgQEAgdm9pZCBJbnNwZWN0b3JPdmVybGF5Ojp1cGRh
dGUoKQogICAgIGZvcmNlUGFpbnQoKTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBidWlsZE9iamVjdEZvclBvaW50KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQorc3Rh
dGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBidWls
ZE9iamVjdEZvclBvaW50KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQogewotICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IG9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gb2JqZWN0ID0gSW5z
cGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0OjpjcmVhdGUoKTsKICAgICBvYmplY3Qt
PnNldERvdWJsZShBU0NJSUxpdGVyYWwoIngiKSwgcG9pbnQueCgpKTsKICAgICBvYmplY3QtPnNl
dERvdWJsZShBU0NJSUxpdGVyYWwoInkiKSwgcG9pbnQueSgpKTsKICAgICByZXR1cm4gb2JqZWN0
LnJlbGVhc2UoKTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBidWls
ZE9iamVjdEZvclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorc3RhdGljIFBhc3NSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBidWlsZE9iamVjdEZvclJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG9i
amVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gb2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6
VW5jaGVja2VkT2JqZWN0OjpjcmVhdGUoKTsKICAgICBvYmplY3QtPnNldERvdWJsZShBU0NJSUxp
dGVyYWwoIngiKSwgcmVjdC54KCkpOwogICAgIG9iamVjdC0+c2V0RG91YmxlKEFTQ0lJTGl0ZXJh
bCgieSIpLCByZWN0LnkoKSk7CiAgICAgb2JqZWN0LT5zZXREb3VibGUoQVNDSUlMaXRlcmFsKCJ3
aWR0aCIpLCByZWN0LndpZHRoKCkpOwpAQCAtMzQ4LDkgKzM0OCw5IEBAIHN0YXRpYyBQYXNzUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmplY3RGb3JSZWN0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKICAgICByZXR1cm4gb2JqZWN0LnJlbGVhc2UoKTsKIH0KIAotc3RhdGljIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+IGJ1aWxkQXJyYXlGb3JRdWFkKGNvbnN0IEZsb2F0UXVhZCYgcXVh
ZCkKK3N0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZEFycmF5
PiBidWlsZEFycmF5Rm9yUXVhZChjb25zdCBGbG9hdFF1YWQmIHF1YWQpCiB7Ci0gICAgUmVmUHRy
PEluc3BlY3RvckFycmF5PiBhcnJheSA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKKyAgICBS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkQXJyYXk+IGFycmF5ID0gSW5zcGVj
dG9yOjpQcm90b2NvbDo6VW5jaGVja2VkQXJyYXk6OmNyZWF0ZSgpOwogICAgIGFycmF5LT5wdXNo
T2JqZWN0KGJ1aWxkT2JqZWN0Rm9yUG9pbnQocXVhZC5wMSgpKSk7CiAgICAgYXJyYXktPnB1c2hP
YmplY3QoYnVpbGRPYmplY3RGb3JQb2ludChxdWFkLnAyKCkpKTsKICAgICBhcnJheS0+cHVzaE9i
amVjdChidWlsZE9iamVjdEZvclBvaW50KHF1YWQucDMoKSkpOwpAQCAtMzU4LDEwICszNTgsMTAg
QEAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGJ1aWxkQXJyYXlGb3JRdWFkKGNv
bnN0IEZsb2F0UXVhZCYgcXVhZCkKICAgICByZXR1cm4gYXJyYXkucmVsZWFzZSgpOwogfQogCi1z
dGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9ySGlnaGxpZ2h0
KGNvbnN0IEhpZ2hsaWdodCYgaGlnaGxpZ2h0KQorc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBidWlsZE9iamVjdEZvckhpZ2hsaWdodChjb25z
dCBIaWdobGlnaHQmIGhpZ2hsaWdodCkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBv
YmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgIFJlZlB0cjxJbnNwZWN0b3JB
cnJheT4gYXJyYXkgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gb2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90
b2NvbDo6VW5jaGVja2VkT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6VW5jaGVja2VkQXJyYXk+IGFycmF5ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6VW5j
aGVja2VkQXJyYXk6OmNyZWF0ZSgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaGlnaGxp
Z2h0LnF1YWRzLnNpemUoKTsgKytpKQogICAgICAgICBhcnJheS0+cHVzaEFycmF5KGJ1aWxkQXJy
YXlGb3JRdWFkKGhpZ2hsaWdodC5xdWFkc1tpXSkpOwogICAgIG9iamVjdC0+c2V0QXJyYXkoInF1
YWRzIiwgYXJyYXkucmVsZWFzZSgpKTsKQEAgLTM3Myw3ICszNzMsNyBAQCBzdGF0aWMgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9ySGlnaGxpZ2h0KGNvbnN0IEhpZ2hs
aWdodCYgaGlnaAogICAgIHJldHVybiBvYmplY3QucmVsZWFzZSgpOwogfQogCi1zdGF0aWMgUGFz
c1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9yUmVnaW9uSGlnaGxpZ2h0KEZy
YW1lVmlldyogbWFpblZpZXcsIFJlbmRlclJlZ2lvbiogcmVnaW9uKQorc3RhdGljIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBidWlsZE9iamVjdEZvclJl
Z2lvbkhpZ2hsaWdodChGcmFtZVZpZXcqIG1haW5WaWV3LCBSZW5kZXJSZWdpb24qIHJlZ2lvbikK
IHsKICAgICBGcmFtZVZpZXcqIGNvbnRhaW5pbmdWaWV3ID0gcmVnaW9uLT5mcmFtZSgpLnZpZXco
KTsKICAgICBpZiAoIWNvbnRhaW5pbmdWaWV3KQpAQCAtNDA1LDcgKzQwNSw3IEBAIHN0YXRpYyBQ
YXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmplY3RGb3JSZWdpb25IaWdobGlnaHQo
RnJhbWVWaWV3KiBtYWluCiAgICAgY29udGVudHNRdWFkVG9QYWdlKG1haW5WaWV3LCBjb250YWlu
aW5nVmlldywgaW5jb21pbmdSZWN0UXVhZCk7CiAgICAgY29udGVudHNRdWFkVG9QYWdlKG1haW5W
aWV3LCBjb250YWluaW5nVmlldywgb3V0Z29pbmdSZWN0UXVhZCk7CiAKLSAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiByZWdpb25PYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwor
ICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IHJlZ2lvbk9i
amVjdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdDo6Y3JlYXRlKCk7CiAK
ICAgICByZWdpb25PYmplY3QtPnNldEFycmF5KCJib3JkZXJRdWFkIiwgYnVpbGRBcnJheUZvclF1
YWQoYm9yZGVyUmVjdFF1YWQpKTsKICAgICByZWdpb25PYmplY3QtPnNldEFycmF5KCJpbmNvbWlu
Z1F1YWQiLCBidWlsZEFycmF5Rm9yUXVhZChpbmNvbWluZ1JlY3RRdWFkKSk7CkBAIC00MTQsMTcg
KzQxNCwxNyBAQCBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0
Rm9yUmVnaW9uSGlnaGxpZ2h0KEZyYW1lVmlldyogbWFpbgogICAgIHJldHVybiByZWdpb25PYmpl
Y3QucmVsZWFzZSgpOwogfQogCi1zdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gYnVp
bGRPYmplY3RGb3JDU1NSZWdpb25zSGlnaGxpZ2h0KFJlbmRlclJlZ2lvbiogcmVnaW9uLCBSZW5k
ZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkKQorc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6VW5jaGVja2VkQXJyYXk+IGJ1aWxkT2JqZWN0Rm9yQ1NTUmVnaW9uc0hpZ2hsaWdo
dChSZW5kZXJSZWdpb24qIHJlZ2lvbiwgUmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZCkKIHsK
ICAgICBGcmFtZVZpZXcqIG1haW5GcmFtZVZpZXcgPSByZWdpb24tPmRvY3VtZW50KCkucGFnZSgp
LT5tYWluRnJhbWUoKS52aWV3KCk7CiAKLSAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFycmF5
ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpVbmNoZWNrZWRBcnJheT4gYXJyYXkgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNr
ZWRBcnJheTo6Y3JlYXRlKCk7CiAKICAgICBjb25zdCBSZW5kZXJSZWdpb25MaXN0JiByZWdpb25M
aXN0ID0gZmxvd1RocmVhZC0+cmVuZGVyUmVnaW9uTGlzdCgpOwogICAgIGZvciAoYXV0byYgaXRl
clJlZ2lvbiA6IHJlZ2lvbkxpc3QpIHsKICAgICAgICAgaWYgKCFpdGVyUmVnaW9uLT5pc1ZhbGlk
KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gcmVnaW9uSGlnaGxpZ2h0T2JqZWN0ID0gYnVpbGRPYmplY3RGb3JSZWdpb25IaWdobGlnaHQo
bWFpbkZyYW1lVmlldywgaXRlclJlZ2lvbik7CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IHJlZ2lvbkhpZ2hsaWdodE9iamVjdCA9IGJ1aWxkT2Jq
ZWN0Rm9yUmVnaW9uSGlnaGxpZ2h0KG1haW5GcmFtZVZpZXcsIGl0ZXJSZWdpb24pOwogICAgICAg
ICBpZiAoIXJlZ2lvbkhpZ2hsaWdodE9iamVjdCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICBpZiAocmVnaW9uID09IGl0ZXJSZWdpb24pIHsKQEAgLTQzNywxNSArNDM3LDE1IEBAIHN0
YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBidWlsZE9iamVjdEZvckNTU1JlZ2lvbnNI
aWdobGlnaHQoUmVuZGVyUmVnaW9uCiAgICAgcmV0dXJuIGFycmF5LnJlbGVhc2UoKTsKIH0KIAot
c3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBidWlsZE9iamVjdEZvclNpemUoY29u
c3QgSW50U2l6ZSYgc2l6ZSkKK3N0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlVuY2hlY2tlZE9iamVjdD4gYnVpbGRPYmplY3RGb3JTaXplKGNvbnN0IEludFNpemUmIHNpemUp
CiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2Jq
ZWN0PiByZXN1bHQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q6OmNyZWF0
ZSgpOwogICAgIHJlc3VsdC0+c2V0SW50ZWdlcigid2lkdGgiLCBzaXplLndpZHRoKCkpOwogICAg
IHJlc3VsdC0+c2V0SW50ZWdlcigiaGVpZ2h0Iiwgc2l6ZS5oZWlnaHQoKSk7CiAgICAgcmV0dXJu
IHJlc3VsdC5yZWxlYXNlKCk7CiB9CiAKLXN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gYnVpbGRPYmplY3RGb3JDU1NSZWdpb25Db250ZW50Q2xpcChSZW5kZXJSZWdpb24qIHJlZ2lv
bikKK3N0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVj
dD4gYnVpbGRPYmplY3RGb3JDU1NSZWdpb25Db250ZW50Q2xpcChSZW5kZXJSZWdpb24qIHJlZ2lv
bikKIHsKICAgICBGcmFtZSogY29udGFpbmluZ0ZyYW1lID0gcmVnaW9uLT5kb2N1bWVudCgpLmZy
YW1lKCk7CiAgICAgaWYgKCFjb250YWluaW5nRnJhbWUpCkBAIC00NjUsNyArNDY1LDcgQEAgc3Rh
dGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBidWlsZE9iamVjdEZvckNTU1JlZ2lvbkNv
bnRlbnRDbGlwKFJlbmRlclJlZ2kKICAgICBGbG9hdFF1YWQgY2xpcFF1YWQgPSByZWdpb24tPmxv
Y2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0KGZsaXBwZWRSZWdpb25SZWN0KSk7CiAgICAgY29u
dGVudHNRdWFkVG9QYWdlKG1haW5WaWV3LCBjb250YWluaW5nVmlldywgY2xpcFF1YWQpOwogCi0g
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVnaW9uT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2Jq
ZWN0PiByZWdpb25PYmplY3QgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q6
OmNyZWF0ZSgpOwogICAgIHJlZ2lvbk9iamVjdC0+c2V0QXJyYXkoInF1YWQiLCBidWlsZEFycmF5
Rm9yUXVhZChjbGlwUXVhZCkpOwogICAgIHJldHVybiByZWdpb25PYmplY3QucmVsZWFzZSgpOwog
fQpAQCAtNTI1LDcgKzUyNSw3IEBAIHZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6dXBkYXRlUGFpbnRS
ZWN0c1RpbWVyRmlyZWQoVGltZXI8SW5zcGVjdG9yT3ZlcmxheT4mKQogCiB2b2lkIEluc3BlY3Rv
ck92ZXJsYXk6OmRyYXdQYWludFJlY3RzKCkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
IGZyYWdtZW50c0FycmF5ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRBcnJheT4gZnJhZ21lbnRzQXJyYXkgPSBJbnNw
ZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRBcnJheTo6Y3JlYXRlKCk7CiAgICAgZm9yIChjb25z
dCBhdXRvJiBwYWlyIDogbV9wYWludFJlY3RzKQogICAgICAgICBmcmFnbWVudHNBcnJheS0+cHVz
aE9iamVjdChidWlsZE9iamVjdEZvclJlY3QocGFpci5zZWNvbmQpKTsKIApAQCAtNTM3LDkgKzUz
Nyw5IEBAIHZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6ZHJhd0d1dHRlcigpCiAgICAgZXZhbHVhdGVJ
bk92ZXJsYXkoQVNDSUlMaXRlcmFsKCJkcmF3R3V0dGVyIikpOwogfQogCi1zdGF0aWMgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JBcnJheT4gYnVpbGRPYmplY3RGb3JSZW5kZXJlckZyYWdtZW50cyhSZW5k
ZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBIaWdobGlnaHRDb25maWcmIGNvbmZpZykKK3N0YXRp
YyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZEFycmF5PiBidWlsZE9i
amVjdEZvclJlbmRlcmVyRnJhZ21lbnRzKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IEhp
Z2hsaWdodENvbmZpZyYgY29uZmlnKQogewotICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gZnJh
Z21lbnRzQXJyYXkgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZEFycmF5PiBmcmFnbWVudHNBcnJheSA9IEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlVuY2hlY2tlZEFycmF5OjpjcmVhdGUoKTsKIAogICAgIFJlbmRlckZsb3dU
aHJlYWQqIGNvbnRhaW5pbmdGbG93VGhyZWFkID0gcmVuZGVyZXItPmZsb3dUaHJlYWRDb250YWlu
aW5nQmxvY2soKTsKICAgICBpZiAoIWNvbnRhaW5pbmdGbG93VGhyZWFkKSB7CkBAIC01NjEsNyAr
NTYxLDcgQEAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGJ1aWxkT2JqZWN0Rm9y
UmVuZGVyZXJGcmFnbWVudHMoUmVuZGVyT2JqZWN0KgogICAgICAgICAgICAgICAgIC8vIENvbXB1
dGUgdGhlIGhpZ2hsaWdodCBvZiB0aGUgZnJhZ21lbnQgaW5zaWRlIHRoZSBjdXJyZW50IHJlZ2lv
bi4KICAgICAgICAgICAgICAgICBIaWdobGlnaHQgaGlnaGxpZ2h0OwogICAgICAgICAgICAgICAg
IGJ1aWxkUmVuZGVyZXJIaWdobGlnaHQocmVuZGVyZXIsIHJlZ2lvbiwgY29uZmlnLCAmaGlnaGxp
Z2h0LCBJbnNwZWN0b3JPdmVybGF5OjpDb29yZGluYXRlU3lzdGVtOjpWaWV3KTsKLSAgICAgICAg
ICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBmcmFnbWVudE9iamVjdCA9IGJ1aWxkT2Jq
ZWN0Rm9ySGlnaGxpZ2h0KGhpZ2hsaWdodCk7CisgICAgICAgICAgICAgICAgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gZnJhZ21lbnRPYmplY3QgPSBidWlsZE9i
amVjdEZvckhpZ2hsaWdodChoaWdobGlnaHQpOwogCiAgICAgICAgICAgICAgICAgLy8gQ29tcHV0
ZSB0aGUgY2xpcHBpbmcgYXJlYSBvZiB0aGUgcmVnaW9uLgogICAgICAgICAgICAgICAgIGZyYWdt
ZW50T2JqZWN0LT5zZXRPYmplY3QoInJlZ2lvbiIsIGJ1aWxkT2JqZWN0Rm9yQ1NTUmVnaW9uQ29u
dGVudENsaXAocmVnaW9uKSk7CkBAIC01ODcsNyArNTg3LDcgQEAgc3RhdGljIEZsb2F0UG9pbnQg
bG9jYWxQb2ludFRvUm9vdChSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBGcmFtZVZpZXcq
IG1haW4KIHN0cnVjdCBQYXRoQXBwbHlJbmZvIHsKICAgICBGcmFtZVZpZXcqIHJvb3RWaWV3Owog
ICAgIEZyYW1lVmlldyogdmlldzsKLSAgICBJbnNwZWN0b3JBcnJheSogYXJyYXk7CisgICAgSW5z
cGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkQXJyYXkqIGFycmF5OwogICAgIFJlbmRlck9iamVj
dCogcmVuZGVyZXI7CiAgICAgY29uc3QgU2hhcGVPdXRzaWRlSW5mbyogc2hhcGVPdXRzaWRlSW5m
bzsKIH07CkBAIC02MzIsMTMgKzYzMiwxMyBAQCBzdGF0aWMgdm9pZCBhcHBlbmRQYXRoU2VnbWVu
dCh2b2lkKiBpbmZvLCBjb25zdCBQYXRoRWxlbWVudCogcGF0aEVsZW1lbnQpCiAgICAgfQogfQog
Ci1zdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9yU2hhcGVP
dXRzaWRlKEZyYW1lKiBjb250YWluaW5nRnJhbWUsIFJlbmRlckJveCogcmVuZGVyZXIpCitzdGF0
aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IGJ1aWxk
T2JqZWN0Rm9yU2hhcGVPdXRzaWRlKEZyYW1lKiBjb250YWluaW5nRnJhbWUsIFJlbmRlckJveCog
cmVuZGVyZXIpCiB7CiAgICAgY29uc3QgU2hhcGVPdXRzaWRlSW5mbyogc2hhcGVPdXRzaWRlSW5m
byA9IHJlbmRlcmVyLT5zaGFwZU91dHNpZGVJbmZvKCk7CiAgICAgaWYgKCFzaGFwZU91dHNpZGVJ
bmZvKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHNoYXBlT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBzaGFwZU9iamVjdCA9IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdDo6Y3JlYXRlKCk7CiAgICAgTGF5b3V0UmVj
dCBzaGFwZUJvdW5kcyA9IHNoYXBlT3V0c2lkZUluZm8tPmNvbXB1dGVkU2hhcGVQaHlzaWNhbEJv
dW5kaW5nQm94KCk7CiAgICAgRmxvYXRRdWFkIHNoYXBlUXVhZCA9IHJlbmRlcmVyLT5sb2NhbFRv
QWJzb2x1dGVRdWFkKEZsb2F0UmVjdChzaGFwZUJvdW5kcykpOwogICAgIGNvbnRlbnRzUXVhZFRv
UGFnZShjb250YWluaW5nRnJhbWUtPnBhZ2UoKS0+bWFpbkZyYW1lKCkudmlldygpLCBjb250YWlu
aW5nRnJhbWUtPnZpZXcoKSwgc2hhcGVRdWFkKTsKQEAgLTY0OCw3ICs2NDgsNyBAQCBzdGF0aWMg
UGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9yU2hhcGVPdXRzaWRlKEZy
YW1lKiBjb250YWluaW5nRgogICAgIHNoYXBlT3V0c2lkZUluZm8tPmNvbXB1dGVkU2hhcGUoKS5i
dWlsZERpc3BsYXlQYXRocyhwYXRocyk7CiAKICAgICBpZiAocGF0aHMuc2hhcGUubGVuZ3RoKCkp
IHsKLSAgICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBzaGFwZVBhdGggPSBJbnNwZWN0b3JB
cnJheTo6Y3JlYXRlKCk7CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNo
ZWNrZWRBcnJheT4gc2hhcGVQYXRoID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkQXJy
YXk6OmNyZWF0ZSgpOwogICAgICAgICBQYXRoQXBwbHlJbmZvIGluZm87CiAgICAgICAgIGluZm8u
cm9vdFZpZXcgPSBjb250YWluaW5nRnJhbWUtPnBhZ2UoKS0+bWFpbkZyYW1lKCkudmlldygpOwog
ICAgICAgICBpbmZvLnZpZXcgPSBjb250YWluaW5nRnJhbWUtPnZpZXcoKTsKQEAgLTY2MSw3ICs2
NjEsNyBAQCBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9y
U2hhcGVPdXRzaWRlKEZyYW1lKiBjb250YWluaW5nRgogICAgICAgICBzaGFwZU9iamVjdC0+c2V0
QXJyYXkoQVNDSUlMaXRlcmFsKCJzaGFwZSIpLCBzaGFwZVBhdGgucmVsZWFzZSgpKTsKIAogICAg
ICAgICBpZiAocGF0aHMubWFyZ2luU2hhcGUubGVuZ3RoKCkpIHsKLSAgICAgICAgICAgIHNoYXBl
UGF0aCA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKKyAgICAgICAgICAgIHNoYXBlUGF0aCA9
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZEFycmF5OjpjcmVhdGUoKTsKICAgICAgICAg
ICAgIGluZm8uYXJyYXkgPSBzaGFwZVBhdGguZ2V0KCk7CiAKICAgICAgICAgICAgIHBhdGhzLm1h
cmdpblNoYXBlLmFwcGx5KCZpbmZvLCAmYXBwZW5kUGF0aFNlZ21lbnQpOwpAQCAtNjc0LDEzICs2
NzQsMTMgQEAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBidWlsZE9iamVjdEZv
clNoYXBlT3V0c2lkZShGcmFtZSogY29udGFpbmluZ0YKIH0KICNlbmRpZgogCi1zdGF0aWMgUGFz
c1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9yRWxlbWVudEluZm8oTm9kZSog
bm9kZSkKK3N0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9i
amVjdD4gYnVpbGRPYmplY3RGb3JFbGVtZW50SW5mbyhOb2RlKiBub2RlKQogewogICAgIEFTU0VS
VChub2RlKTsKICAgICBpZiAoIWlzPEVsZW1lbnQ+KCpub2RlKSB8fCAhbm9kZS0+ZG9jdW1lbnQo
KS5mcmFtZSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IGVsZW1lbnRJbmZvID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBlbGVtZW50SW5mbyA9
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdDo6Y3JlYXRlKCk7CiAKICAgICBF
bGVtZW50JiBlbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpOwogICAgIGJvb2wgaXNY
SFRNTCA9IGVsZW1lbnQuZG9jdW1lbnQoKS5pc1hIVE1MRG9jdW1lbnQoKTsKQEAgLTcxNCw3ICs3
MTQsNyBAQCBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9y
RWxlbWVudEluZm8oTm9kZSogbm9kZSkKICAgICAgICAgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQm
IHJlZ2lvbiA9ICpkb3duY2FzdDxSZW5kZXJCbG9ja0Zsb3c+KCpyZW5kZXJlcikucmVuZGVyTmFt
ZWRGbG93RnJhZ21lbnQoKTsKICAgICAgICAgaWYgKHJlZ2lvbi5pc1ZhbGlkKCkpIHsKICAgICAg
ICAgICAgIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQgPSByZWdpb24uZmxvd1RocmVhZCgp
OwotICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVnaW9uRmxvd0luZm8gPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gcmVnaW9uRmxvd0luZm8gPSBJbnNwZWN0b3I6OlBy
b3RvY29sOjpVbmNoZWNrZWRPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICAgICAgcmVnaW9uRmxv
d0luZm8tPnNldFN0cmluZygibmFtZSIsIGRvd25jYXN0PFJlbmRlck5hbWVkRmxvd1RocmVhZD4o
KmZsb3dUaHJlYWQpLmZsb3dUaHJlYWROYW1lKCkpOwogICAgICAgICAgICAgcmVnaW9uRmxvd0lu
Zm8tPnNldEFycmF5KCJyZWdpb25zIiwgYnVpbGRPYmplY3RGb3JDU1NSZWdpb25zSGlnaGxpZ2h0
KCZyZWdpb24sIGZsb3dUaHJlYWQpKTsKICAgICAgICAgICAgIGVsZW1lbnRJbmZvLT5zZXRPYmpl
Y3QoInJlZ2lvbkZsb3dJbmZvIiwgcmVnaW9uRmxvd0luZm8ucmVsZWFzZSgpKTsKQEAgLTcyMyw3
ICs3MjMsNyBAQCBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0
Rm9yRWxlbWVudEluZm8oTm9kZSogbm9kZSkKIAogICAgIFJlbmRlckZsb3dUaHJlYWQqIGNvbnRh
aW5pbmdGbG93VGhyZWFkID0gcmVuZGVyZXItPmZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKTsK
ICAgICBpZiAoY29udGFpbmluZ0Zsb3dUaHJlYWQgJiYgY29udGFpbmluZ0Zsb3dUaHJlYWQtPmlz
UmVuZGVyTmFtZWRGbG93VGhyZWFkKCkpIHsKLSAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gY29udGVudEZsb3dJbmZvID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gY29udGVudEZsb3dJ
bmZvID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0OjpjcmVhdGUoKTsKICAg
ICAgICAgY29udGVudEZsb3dJbmZvLT5zZXRTdHJpbmcoIm5hbWUiLCB0b1JlbmRlck5hbWVkRmxv
d1RocmVhZChjb250YWluaW5nRmxvd1RocmVhZCktPmZsb3dUaHJlYWROYW1lKCkpOwogICAgICAg
ICBlbGVtZW50SW5mby0+c2V0T2JqZWN0KCJjb250ZW50Rmxvd0luZm8iLCBjb250ZW50Rmxvd0lu
Zm8ucmVsZWFzZSgpKTsKICAgICB9CkBAIC03MzEsNyArNzMxLDcgQEAgc3RhdGljIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBidWlsZE9iamVjdEZvckVsZW1lbnRJbmZvKE5vZGUqIG5vZGUp
CiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCiAgICAgaWYgKHJlbmRlcmVyLT5pc0JveCgpKSB7CiAg
ICAgICAgIFJlbmRlckJveCogcmVuZGVyQm94ID0gdG9SZW5kZXJCb3gocmVuZGVyZXIpOwotICAg
ICAgICBpZiAoUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gc2hhcGVPYmplY3QgPSBidWlsZE9iamVj
dEZvclNoYXBlT3V0c2lkZShjb250YWluaW5nRnJhbWUsIHJlbmRlckJveCkpCisgICAgICAgIGlm
IChSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBzaGFwZU9iamVj
dCA9IGJ1aWxkT2JqZWN0Rm9yU2hhcGVPdXRzaWRlKGNvbnRhaW5pbmdGcmFtZSwgcmVuZGVyQm94
KSkKICAgICAgICAgICAgIGVsZW1lbnRJbmZvLT5zZXRPYmplY3QoInNoYXBlT3V0c2lkZUluZm8i
LCBzaGFwZU9iamVjdC5yZWxlYXNlKCkpOwogICAgIH0KICNlbmRpZgpAQCAtNzQ4LDcgKzc0OCw3
IEBAIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmplY3RGb3JFbGVt
ZW50SW5mbyhOb2RlKiBub2RlKQogICAgIHJldHVybiBlbGVtZW50SW5mby5yZWxlYXNlKCk7CiB9
CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JPdmVybGF5OjpidWlsZE9i
amVjdEZvckhpZ2hsaWdodGVkTm9kZSgpIGNvbnN0CitQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gSW5zcGVjdG9yT3ZlcmxheTo6YnVpbGRPYmplY3RGb3JI
aWdobGlnaHRlZE5vZGUoKSBjb25zdAogewogICAgIGlmICghbV9oaWdobGlnaHROb2RlKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTc1OCwxMSArNzU4LDExIEBAIFBhc3NSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JPdmVybGF5OjpidWlsZE9iamVjdEZvckhpZ2hsaWdodGVk
Tm9kZSgpIGNvCiAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
LSAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGhpZ2hsaWdodEZyYWdtZW50cyA9IGJ1aWxkT2Jq
ZWN0Rm9yUmVuZGVyZXJGcmFnbWVudHMocmVuZGVyZXIsIG1fbm9kZUhpZ2hsaWdodENvbmZpZyk7
CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZEFycmF5PiBoaWdobGln
aHRGcmFnbWVudHMgPSBidWlsZE9iamVjdEZvclJlbmRlcmVyRnJhZ21lbnRzKHJlbmRlcmVyLCBt
X25vZGVIaWdobGlnaHRDb25maWcpOwogICAgIGlmICghaGlnaGxpZ2h0RnJhZ21lbnRzKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGhpZ2hs
aWdodE9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gaGlnaGxpZ2h0T2JqZWN0ID0gSW5zcGVj
dG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0OjpjcmVhdGUoKTsKIAogICAgIC8vIFRoZSBt
YWluIHZpZXcncyBzY3JvbGwgb2Zmc2V0IGlzIHNoYXJlZCBhY3Jvc3MgYWxsIHF1YWRzLgogICAg
IEZyYW1lVmlldyogbWFpblZpZXcgPSBtX3BhZ2UubWFpbkZyYW1lKCkudmlldygpOwpAQCAtNzcx
LDcgKzc3MSw3IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JPdmVybGF5
OjpidWlsZE9iamVjdEZvckhpZ2hsaWdodGVkTm9kZSgpIGNvCiAgICAgaGlnaGxpZ2h0T2JqZWN0
LT5zZXRBcnJheSgiZnJhZ21lbnRzIiwgaGlnaGxpZ2h0RnJhZ21lbnRzLnJlbGVhc2UoKSk7CiAK
ICAgICBpZiAobV9ub2RlSGlnaGxpZ2h0Q29uZmlnLnNob3dJbmZvKSB7Ci0gICAgICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IGVsZW1lbnRJbmZvID0gYnVpbGRPYmplY3RGb3JFbGVtZW50SW5m
byhub2RlKTsKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9i
amVjdD4gZWxlbWVudEluZm8gPSBidWlsZE9iamVjdEZvckVsZW1lbnRJbmZvKG5vZGUpOwogICAg
ICAgICBpZiAoZWxlbWVudEluZm8pCiAgICAgICAgICAgICBoaWdobGlnaHRPYmplY3QtPnNldE9i
amVjdCgiZWxlbWVudEluZm8iLCBlbGVtZW50SW5mby5yZWxlYXNlKCkpOwogICAgIH0KQEAgLTc4
MSw3ICs3ODEsNyBAQCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gSW5zcGVjdG9yT3Zlcmxh
eTo6YnVpbGRPYmplY3RGb3JIaWdobGlnaHRlZE5vZGUoKSBjbwogCiB2b2lkIEluc3BlY3Rvck92
ZXJsYXk6OmRyYXdOb2RlSGlnaGxpZ2h0KCkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBoaWdobGlnaHRPYmplY3QgPSBidWlsZE9iamVjdEZvckhpZ2hsaWdodGVkTm9kZSgpOworICAg
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IGhpZ2hsaWdodE9i
amVjdCA9IGJ1aWxkT2JqZWN0Rm9ySGlnaGxpZ2h0ZWROb2RlKCk7CiAgICAgaWYgKCFoaWdobGln
aHRPYmplY3QpCiAgICAgICAgIHJldHVybjsKICAgICBldmFsdWF0ZUluT3ZlcmxheSgiZHJhd05v
ZGVIaWdobGlnaHQiLCBoaWdobGlnaHRPYmplY3QpOwpAQCAtODU4LDcgKzg1OCw3IEBAIHZvaWQg
SW5zcGVjdG9yT3ZlcmxheTo6Zm9yY2VQYWludCgpCiAKIHZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6
cmVzZXQoY29uc3QgSW50U2l6ZSYgdmlld3BvcnRTaXplLCBjb25zdCBJbnRTaXplJiBmcmFtZVZp
ZXdGdWxsU2l6ZSkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXNldERhdGEgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpVbmNoZWNrZWRPYmplY3Q+IHJlc2V0RGF0YSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hl
Y2tlZE9iamVjdDo6Y3JlYXRlKCk7CiAgICAgcmVzZXREYXRhLT5zZXREb3VibGUoImRldmljZVNj
YWxlRmFjdG9yIiwgbV9wYWdlLmRldmljZVNjYWxlRmFjdG9yKCkpOwogICAgIHJlc2V0RGF0YS0+
c2V0T2JqZWN0KCJ2aWV3cG9ydFNpemUiLCBidWlsZE9iamVjdEZvclNpemUodmlld3BvcnRTaXpl
KSk7CiAgICAgcmVzZXREYXRhLT5zZXRPYmplY3QoImZyYW1lVmlld0Z1bGxTaXplIiwgYnVpbGRP
YmplY3RGb3JTaXplKGZyYW1lVmlld0Z1bGxTaXplKSk7CkBAIC04NjcsMjIgKzg2NywyMiBAQCB2
b2lkIEluc3BlY3Rvck92ZXJsYXk6OnJlc2V0KGNvbnN0IEludFNpemUmIHZpZXdwb3J0U2l6ZSwg
Y29uc3QgSW50U2l6ZSYgZnJhbWVWaQogCiB2b2lkIEluc3BlY3Rvck92ZXJsYXk6OmV2YWx1YXRl
SW5PdmVybGF5KGNvbnN0IFN0cmluZyYgbWV0aG9kKQogewotICAgIFJlZlB0cjxJbnNwZWN0b3JB
cnJheT4gY29tbWFuZCA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkQXJyYXk+IGNvbW1hbmQgPSBJbnNwZWN0b3I6OlBy
b3RvY29sOjpVbmNoZWNrZWRBcnJheTo6Y3JlYXRlKCk7CiAgICAgY29tbWFuZC0+cHVzaFN0cmlu
ZyhtZXRob2QpOwogICAgIG92ZXJsYXlQYWdlKCktPm1haW5GcmFtZSgpLnNjcmlwdCgpLmV2YWx1
YXRlKFNjcmlwdFNvdXJjZUNvZGUobWFrZVN0cmluZygiZGlzcGF0Y2goIiwgY29tbWFuZC0+dG9K
U09OU3RyaW5nKCksICcpJykpKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JPdmVybGF5OjpldmFsdWF0
ZUluT3ZlcmxheShjb25zdCBTdHJpbmcmIG1ldGhvZCwgY29uc3QgU3RyaW5nJiBhcmd1bWVudCkK
IHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGNvbW1hbmQgPSBJbnNwZWN0b3JBcnJheTo6
Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZEFycmF5
PiBjb21tYW5kID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkQXJyYXk6OmNyZWF0ZSgp
OwogICAgIGNvbW1hbmQtPnB1c2hTdHJpbmcobWV0aG9kKTsKICAgICBjb21tYW5kLT5wdXNoU3Ry
aW5nKGFyZ3VtZW50KTsKICAgICBvdmVybGF5UGFnZSgpLT5tYWluRnJhbWUoKS5zY3JpcHQoKS5l
dmFsdWF0ZShTY3JpcHRTb3VyY2VDb2RlKG1ha2VTdHJpbmcoImRpc3BhdGNoKCIsIGNvbW1hbmQt
PnRvSlNPTlN0cmluZygpLCAnKScpKSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6ZXZh
bHVhdGVJbk92ZXJsYXkoY29uc3QgU3RyaW5nJiBtZXRob2QsIFBhc3NSZWZQdHI8SW5zcGVjdG9y
VmFsdWU+IGFyZ3VtZW50KQordm9pZCBJbnNwZWN0b3JPdmVybGF5OjpldmFsdWF0ZUluT3Zlcmxh
eShjb25zdCBTdHJpbmcmIG1ldGhvZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpV
bmNoZWNrZWRWYWx1ZT4gYXJndW1lbnQpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBj
b21tYW5kID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpVbmNoZWNrZWRBcnJheT4gY29tbWFuZCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlVuY2hlY2tlZEFycmF5OjpjcmVhdGUoKTsKICAgICBjb21tYW5kLT5wdXNoU3RyaW5nKG1ldGhv
ZCk7CiAgICAgY29tbWFuZC0+cHVzaFZhbHVlKGFyZ3VtZW50KTsKICAgICBvdmVybGF5UGFnZSgp
LT5tYWluRnJhbWUoKS5zY3JpcHQoKS5ldmFsdWF0ZShTY3JpcHRTb3VyY2VDb2RlKG1ha2VTdHJp
bmcoImRpc3BhdGNoKCIsIGNvbW1hbmQtPnRvSlNPTlN0cmluZygpLCAnKScpKSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5oIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuaAppbmRleCA0YjgxM2YzNjk4YjYy
ZjZiOTYwZGVmOGIyYWIzMGQ3MzdkNWRhNzlhLi4yYTE3OWNlMjBlNWM5MGRiYTc1Zjk5ZGVhN2M5
YTcyZTlhNTc3MWQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yT3ZlcmxheS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVy
bGF5LmgKQEAgLTM5LDggKzM5LDEwIEBACiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewotY2xhc3MgSW5zcGVjdG9yT2JqZWN0OwotY2xhc3Mg
SW5zcGVjdG9yVmFsdWU7CituYW1lc3BhY2UgUHJvdG9jb2wgeworY2xhc3MgVW5jaGVja2VkT2Jq
ZWN0OworY2xhc3MgVW5jaGVja2VkVmFsdWU7Cit9CiB9CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
QEAgLTEyOSw3ICsxMzEsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldEluZGljYXRpbmcoYm9v
bCBpbmRpY2F0aW5nKTsKIAotICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmpl
Y3Q+IGJ1aWxkT2JqZWN0Rm9ySGlnaGxpZ2h0ZWROb2RlKCkgY29uc3Q7CisgICAgUGFzc1JlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9ySGln
aGxpZ2h0ZWROb2RlKCkgY29uc3Q7CiAKICAgICB2b2lkIGZyZWVQYWdlKCk7CiBwcml2YXRlOgpA
QCAtMTQ3LDcgKzE0OSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCByZXNldChjb25zdCBJbnRTaXpl
JiB2aWV3cG9ydFNpemUsIGNvbnN0IEludFNpemUmIGZyYW1lVmlld0Z1bGxTaXplKTsKICAgICB2
b2lkIGV2YWx1YXRlSW5PdmVybGF5KGNvbnN0IFN0cmluZyYgbWV0aG9kKTsKICAgICB2b2lkIGV2
YWx1YXRlSW5PdmVybGF5KGNvbnN0IFN0cmluZyYgbWV0aG9kLCBjb25zdCBTdHJpbmcmIGFyZ3Vt
ZW50KTsKLSAgICB2b2lkIGV2YWx1YXRlSW5PdmVybGF5KGNvbnN0IFN0cmluZyYgbWV0aG9kLCBQ
YXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IGFyZ3VtZW50KTsKKyAgICB2b2lk
IGV2YWx1YXRlSW5PdmVybGF5KGNvbnN0IFN0cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZFZhbHVlPiBhcmd1bWVudCk7CiAKICAgICBQYWdlJiBt
X3BhZ2U7CiAgICAgSW5zcGVjdG9yQ2xpZW50KiBtX2NsaWVudDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKaW5kZXggZmMzYmMyN2QxOTQ1ZjBh
YjY4MmVkYWVkYzkzNzA5ZmI0NTUxYjE5Ni4uYmI1YjA0YThhZmY3YjlmZTY5YzU1MDI2NjczZjZi
Njk0N2RmZTA4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
clBhZ2VBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBh
Z2VBZ2VudC5jcHAKQEAgLTcyLDcgKzcyLDcgQEAKICNpbmNsdWRlIDxiaW5kaW5ncy9TY3JpcHRW
YWx1ZS5oPgogI2luY2x1ZGUgPGluc3BlY3Rvci9Db250ZW50U2VhcmNoVXRpbGl0aWVzLmg+CiAj
aW5jbHVkZSA8aW5zcGVjdG9yL0lkZW50aWZpZXJzRmFjdG9yeS5oPgotI2luY2x1ZGUgPGluc3Bl
Y3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yUHJv
dG9jb2xUeXBlcy5oPgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogI2luY2x1ZGUgPHd0
Zi9MaXN0SGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTM4OCw3ICszODgs
NyBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyYpCiB2b2lk
IEluc3BlY3RvclBhZ2VBZ2VudDo6YWRkU2NyaXB0VG9FdmFsdWF0ZU9uTG9hZChFcnJvclN0cmlu
ZyYsIGNvbnN0IFN0cmluZyYgc291cmNlLCBTdHJpbmcqIGlkZW50aWZpZXIpCiB7CiAgICAgaWYg
KCFtX3NjcmlwdHNUb0V2YWx1YXRlT25Mb2FkKQotICAgICAgICBtX3NjcmlwdHNUb0V2YWx1YXRl
T25Mb2FkID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgbV9zY3JpcHRzVG9F
dmFsdWF0ZU9uTG9hZCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdDo6Y3Jl
YXRlKCk7CiAKICAgICAvLyBBc3N1cmUgd2UgZG9uJ3Qgb3ZlcnJpZGUgZXhpc3RpbmcgaWRzIC0t
IG1fbGFzdFNjcmlwdElkZW50aWZpZXIgY291bGQgZ2V0IG91dCBvZiBzeW5jIFdSVCBhY3R1YWwK
ICAgICAvLyBzY3JpcHRzIG9uY2Ugd2UgcmVzdG9yZWQgdGhlIHNjcmlwdHMgZnJvbSB0aGUgY29v
a2llIGR1cmluZyBuYXZpZ2F0aW9uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvclBhZ2VBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvclBhZ2VBZ2VudC5oCmluZGV4IDE4ZGNjM2ZhMTkwYTc1YTJkOGM1NTU1ZDM0MDM1ZGYxOGMx
YjkyOGQuLmNhZTU0M2U5ZGE4MTRlZjc1OWJjZmVmZjNjYmY1NTFkNDc5ZjdmMjMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmgKQEAgLTQ0LDggKzQ0
LDggQEAKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3Bl
Y3RvciB7Ci1jbGFzcyBJbnNwZWN0b3JBcnJheTsKLWNsYXNzIEluc3BlY3Rvck9iamVjdDsKK2Ns
YXNzIFVuY2hlY2tlZEFycmF5OworY2xhc3MgVW5jaGVja2VkT2JqZWN0OwogfQogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CkBAIC0xODksNyArMTg5LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1faWdu
b3JlU2NyaXB0c0VuYWJsZWROb3RpZmljYXRpb247CiAgICAgYm9vbCBtX3Nob3dQYWludFJlY3Rz
OwogICAgIFN0cmluZyBtX2VtdWxhdGVkTWVkaWE7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5z
cGVjdG9yT2JqZWN0PiBtX3NjcmlwdHNUb0V2YWx1YXRlT25Mb2FkOworICAgIFJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IG1fc2NyaXB0c1RvRXZhbHVhdGVPbkxv
YWQ7CiB9OwogCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JSZXBsYXlBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVw
bGF5QWdlbnQuY3BwCmluZGV4IDYxOWJmMmQ0OTc5OThjYzkxNjNmZGVhMDFkMjJkMDI1NTZiNzA0
ZWIuLmEzMDQ0MjM2MDA4NzhmYTU2YWVjMDQ5MjMyOGUwMzJjZDAwMDhmOTggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXBsYXlBZ2VudC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlcGxheUFnZW50LmNwcApAQCAtNDYs
NyArNDYsNyBAQAogI2luY2x1ZGUgIlJlcGxheVNlc3Npb25TZWdtZW50LmgiCiAjaW5jbHVkZSAi
U2VyaWFsaXphdGlvbk1ldGhvZHMuaCIKICNpbmNsdWRlICJXZWJSZXBsYXlJbnB1dHMuaCIgLy8g
Rm9yIEVuY29kaW5nVHJhaXRzPElucHV0UXVldWU+LgotI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNw
ZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBl
cy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KIApAQCAtNTQsNyArNTQsNyBAQCB1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9y
OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlJlcGxheTo6UmVwbGF5UG9zaXRpb24+IGJ1aWxkSW5zcGVjdG9yT2JqZWN0Rm9y
UG9zaXRpb24oY29uc3QgUmVwbGF5UG9zaXRpb24mIHBvc2l0aW9uKQorc3RhdGljIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UmVwbGF5OjpSZXBsYXlQb3NpdGlvbj4gYnVpbGRVbmNo
ZWNrZWRPYmplY3RGb3JQb3NpdGlvbihjb25zdCBSZXBsYXlQb3NpdGlvbiYgcG9zaXRpb24pCiB7
CiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlcGxheTo6UmVwbGF5UG9zaXRpb24+
IHBvc2l0aW9uT2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6UmVwbGF5OjpSZXBsYXlQb3Np
dGlvbjo6Y3JlYXRlKCkKICAgICAgICAgLnNldFNlZ21lbnRPZmZzZXQocG9zaXRpb24uc2VnbWVu
dE9mZnNldCkKQEAgLTYzLDcgKzYzLDcgQEAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6UmVwbGF5OjpSZXBsYXlQb3NpdGlvbj4gYnVpbGRJbnNwZWN0b3JPYmoKICAgICBy
ZXR1cm4gcG9zaXRpb25PYmplY3QucmVsZWFzZSgpOwogfQogCi1zdGF0aWMgUGFzc1JlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpSZXBsYXk6OlJlcGxheUlucHV0PiBidWlsZEluc3BlY3Rvck9i
amVjdEZvcklucHV0KGNvbnN0IE5vbmRldGVybWluaXN0aWNJbnB1dEJhc2UmIGlucHV0LCBzaXpl
X3Qgb2Zmc2V0KQorc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UmVwbGF5
OjpSZXBsYXlJbnB1dD4gYnVpbGRVbmNoZWNrZWRPYmplY3RGb3JJbnB1dChjb25zdCBOb25kZXRl
cm1pbmlzdGljSW5wdXRCYXNlJiBpbnB1dCwgc2l6ZV90IG9mZnNldCkKIHsKICAgICBFbmNvZGVk
VmFsdWUgZW5jb2RlZElucHV0ID0gRW5jb2RpbmdUcmFpdHM8Tm9uZGV0ZXJtaW5pc3RpY0lucHV0
QmFzZT46OmVuY29kZVZhbHVlKGlucHV0KTsKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6UmVwbGF5OjpSZXBsYXlJbnB1dD4gaW5wdXRPYmplY3QgPSBJbnNwZWN0b3I6OlByb3RvY29s
OjpSZXBsYXk6OlJlcGxheUlucHV0OjpjcmVhdGUoKQpAQCAtNzQsNyArNzQsNyBAQCBzdGF0aWMg
UGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSZXBsYXk6OlJlcGxheUlucHV0PiBidWls
ZEluc3BlY3Rvck9iamVjdAogICAgIHJldHVybiBpbnB1dE9iamVjdC5yZWxlYXNlKCk7CiB9CiAK
LXN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlcGxheTo6UmVwbGF5U2Vz
c2lvbj4gYnVpbGRJbnNwZWN0b3JPYmplY3RGb3JTZXNzaW9uKFBhc3NSZWZQdHI8UmVwbGF5U2Vz
c2lvbj4gcHJwU2Vzc2lvbikKK3N0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlJlcGxheTo6UmVwbGF5U2Vzc2lvbj4gYnVpbGRVbmNoZWNrZWRPYmplY3RGb3JTZXNzaW9uKFBh
c3NSZWZQdHI8UmVwbGF5U2Vzc2lvbj4gcHJwU2Vzc2lvbikKIHsKICAgICBSZWZQdHI8UmVwbGF5
U2Vzc2lvbj4gc2Vzc2lvbiA9IHBycFNlc3Npb247CiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkFycmF5PFNlZ21lbnRJZGVudGlmaWVyPj4gc2VnbWVudHMgPSBJbnNwZWN0b3I6OlBy
b3RvY29sOjpBcnJheTxTZWdtZW50SWRlbnRpZmllcj46OmNyZWF0ZSgpOwpAQCAtOTAsNyArOTAs
NyBAQCBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSZXBsYXk6OlJlcGxh
eVNlc3Npb24+IGJ1aWxkSW5zcGVjdG9yT2JqZQogICAgIHJldHVybiBzZXNzaW9uT2JqZWN0LnJl
bGVhc2UoKTsKIH0KIAotc3RhdGljIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlcGxheTo6U2Vzc2lv
blN0YXRlIGJ1aWxkSW5zcGVjdG9yT2JqZWN0Rm9yU2Vzc2lvblN0YXRlKFdlYkNvcmU6OlNlc3Np
b25TdGF0ZSBzZXNzaW9uU3RhdGUpCitzdGF0aWMgSW5zcGVjdG9yOjpQcm90b2NvbDo6UmVwbGF5
OjpTZXNzaW9uU3RhdGUgYnVpbGRVbmNoZWNrZWRPYmplY3RGb3JTZXNzaW9uU3RhdGUoV2ViQ29y
ZTo6U2Vzc2lvblN0YXRlIHNlc3Npb25TdGF0ZSkKIHsKICAgICBzd2l0Y2ggKHNlc3Npb25TdGF0
ZSkgewogICAgIGNhc2UgV2ViQ29yZTo6U2Vzc2lvblN0YXRlOjpDYXB0dXJpbmc6IHJldHVybiBJ
bnNwZWN0b3I6OlByb3RvY29sOjpSZXBsYXk6OlNlc3Npb25TdGF0ZTo6Q2FwdHVyaW5nOwpAQCAt
OTksNyArOTksNyBAQCBzdGF0aWMgSW5zcGVjdG9yOjpQcm90b2NvbDo6UmVwbGF5OjpTZXNzaW9u
U3RhdGUgYnVpbGRJbnNwZWN0b3JPYmplY3RGb3JTZXNzaW9uUwogICAgIH0KIH0KIAotc3RhdGlj
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlcGxheTo6U2VnbWVudFN0YXRlIGJ1aWxkSW5zcGVjdG9y
T2JqZWN0Rm9yU2VnbWVudFN0YXRlKFdlYkNvcmU6OlNlZ21lbnRTdGF0ZSBzZWdtZW50U3RhdGUp
CitzdGF0aWMgSW5zcGVjdG9yOjpQcm90b2NvbDo6UmVwbGF5OjpTZWdtZW50U3RhdGUgYnVpbGRV
bmNoZWNrZWRPYmplY3RGb3JTZWdtZW50U3RhdGUoV2ViQ29yZTo6U2VnbWVudFN0YXRlIHNlZ21l
bnRTdGF0ZSkKIHsKICAgICBzd2l0Y2ggKHNlZ21lbnRTdGF0ZSkgewogICAgIGNhc2UgV2ViQ29y
ZTo6U2VnbWVudFN0YXRlOjpBcHBlbmRpbmc6IHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpS
ZXBsYXk6OlNlZ21lbnRTdGF0ZTo6QXBwZW5kaW5nOwpAQCAtMTIxLDcgKzEyMSw3IEBAIHB1Ymxp
YzoKICAgICB7CiAgICAgICAgIExPRyhXZWJSZXBsYXksICIlLTI1cyBXcml0aW5nICU1enU6ICVz
XG4iLCAiW1NlcmlhbGl6ZUlucHV0XSIsIGluZGV4LCBpbnB1dC0+dHlwZSgpLmFzY2lpKCkuZGF0
YSgpKTsKIAotICAgICAgICBpZiAoUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlcGxheTo6
UmVwbGF5SW5wdXQ+IHNlcmlhbGl6ZWRJbnB1dCA9IGJ1aWxkSW5zcGVjdG9yT2JqZWN0Rm9ySW5w
dXQoKmlucHV0LCBpbmRleCkpCisgICAgICAgIGlmIChSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6UmVwbGF5OjpSZXBsYXlJbnB1dD4gc2VyaWFsaXplZElucHV0ID0gYnVpbGRVbmNoZWNrZWRP
YmplY3RGb3JJbnB1dCgqaW5wdXQsIGluZGV4KSkKICAgICAgICAgICAgIG1faW5wdXRzLT5hZGRJ
dGVtKHNlcmlhbGl6ZWRJbnB1dC5yZWxlYXNlKCkpOwogICAgIH0KIApAQCAtMTMwLDcgKzEzMCw3
IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlJlcGxheTo6UmVwbGF5SW5wdXQ+PiBtX2lucHV0czsKIH07CiAKLXN0
YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlcGxheTo6U2Vzc2lvblNlZ21l
bnQ+IGJ1aWxkSW5zcGVjdG9yT2JqZWN0Rm9yU2VnbWVudChQYXNzUmVmUHRyPFJlcGxheVNlc3Np
b25TZWdtZW50PiBwcnBTZWdtZW50KQorc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6UmVwbGF5OjpTZXNzaW9uU2VnbWVudD4gYnVpbGRVbmNoZWNrZWRPYmplY3RGb3JTZWdt
ZW50KFBhc3NSZWZQdHI8UmVwbGF5U2Vzc2lvblNlZ21lbnQ+IHBycFNlZ21lbnQpCiB7CiAgICAg
UmVmUHRyPFJlcGxheVNlc3Npb25TZWdtZW50PiBzZWdtZW50ID0gcHJwU2VnbWVudDsKICAgICBS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6UmVw
bGF5OjpSZXBsYXlJbnB1dFF1ZXVlPj4gcXVldWVzT2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6UmVwbGF5OjpSZXBsYXlJbnB1dFF1ZXVlPjo6
Y3JlYXRlKCk7CkBAIC0zMDIsMTIgKzMwMiwxMiBAQCB2b2lkIEluc3BlY3RvclJlcGxheUFnZW50
OjpwbGF5YmFja1BhdXNlZChjb25zdCBSZXBsYXlQb3NpdGlvbiYgcG9zaXRpb24pCiB7CiAgICAg
TE9HKFdlYlJlcGxheSwgIi0tLS0tUkVQTEFZIFBBVVNFRC0tLS0tIik7CiAKLSAgICBtX2Zyb250
ZW5kRGlzcGF0Y2hlci0+cGxheWJhY2tQYXVzZWQoYnVpbGRJbnNwZWN0b3JPYmplY3RGb3JQb3Np
dGlvbihwb3NpdGlvbikpOworICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5wbGF5YmFja1BhdXNl
ZChidWlsZFVuY2hlY2tlZE9iamVjdEZvclBvc2l0aW9uKHBvc2l0aW9uKSk7CiB9CiAKIHZvaWQg
SW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnBsYXliYWNrSGl0UG9zaXRpb24oY29uc3QgUmVwbGF5UG9z
aXRpb24mIHBvc2l0aW9uKQogewotICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5wbGF5YmFja0hp
dFBvc2l0aW9uKGJ1aWxkSW5zcGVjdG9yT2JqZWN0Rm9yUG9zaXRpb24ocG9zaXRpb24pLCBtb25v
dG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSk7CisgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnBs
YXliYWNrSGl0UG9zaXRpb24oYnVpbGRVbmNoZWNrZWRPYmplY3RGb3JQb3NpdGlvbihwb3NpdGlv
biksIG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JS
ZXBsYXlBZ2VudDo6cGxheWJhY2tGaW5pc2hlZCgpCkBAIC0zMzcsNyArMzM3LDcgQEAgdm9pZCBJ
bnNwZWN0b3JSZXBsYXlBZ2VudDo6c3RvcENhcHR1cmluZyhFcnJvclN0cmluZyYgZXJyb3JTdHJp
bmcpCiAgICAgbV9wYWdlLnJlcGxheUNvbnRyb2xsZXIoKS5zdG9wQ2FwdHVyaW5nKCk7CiB9CiAK
LXZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnJlcGxheVRvUG9zaXRpb24oRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgcG9zaXRpb25PYmpl
Y3QsIGJvb2wgZmFzdFJlcGxheSkKK3ZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnJlcGxheVRv
UG9zaXRpb24oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiYgcG9zaXRpb25PYmplY3QsIGJvb2wgZmFzdFJl
cGxheSkKIHsKICAgICBSZXBsYXlQb3NpdGlvbiBwb3NpdGlvbjsKICAgICBpZiAoIXBvc2l0aW9u
T2JqZWN0LT5nZXRJbnRlZ2VyKEFTQ0lJTGl0ZXJhbCgic2VnbWVudE9mZnNldCIpLCBwb3NpdGlv
bi5zZWdtZW50T2Zmc2V0KSkgewpAQCAtNDgyLDE0ICs0ODIsMTQgQEAgUGFzc1JlZlB0cjxSZXBs
YXlTZXNzaW9uU2VnbWVudD4gSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OmZpbmRTZWdtZW50KEVycm9y
U3RyaW5nJgogCiB2b2lkIEluc3BlY3RvclJlcGxheUFnZW50OjpjdXJyZW50UmVwbGF5U3RhdGUo
RXJyb3JTdHJpbmcmLCBJbnNwZWN0b3I6OlByb3RvY29sOjpSZXBsYXk6OlNlc3Npb25JZGVudGlm
aWVyKiBzZXNzaW9uSWRlbnRpZmllciwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlJlcGxheTo6U2VnbWVudElkZW50aWZpZXI+KiBzZWdtZW50SWRl
bnRpZmllciwgSW5zcGVjdG9yOjpQcm90b2NvbDo6UmVwbGF5OjpTZXNzaW9uU3RhdGUqIHNlc3Np
b25TdGF0ZSwgSW5zcGVjdG9yOjpQcm90b2NvbDo6UmVwbGF5OjpTZWdtZW50U3RhdGUqIHNlZ21l
bnRTdGF0ZSwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlcGxheTo6UmVwbGF5UG9zaXRp
b24+JiByZXBsYXlQb3NpdGlvbikKIHsKLSAgICAqc2Vzc2lvblN0YXRlID0gYnVpbGRJbnNwZWN0
b3JPYmplY3RGb3JTZXNzaW9uU3RhdGUobV9wYWdlLnJlcGxheUNvbnRyb2xsZXIoKS5zZXNzaW9u
U3RhdGUoKSk7Ci0gICAgKnNlZ21lbnRTdGF0ZSA9IGJ1aWxkSW5zcGVjdG9yT2JqZWN0Rm9yU2Vn
bWVudFN0YXRlKG1fcGFnZS5yZXBsYXlDb250cm9sbGVyKCkuc2VnbWVudFN0YXRlKCkpOworICAg
ICpzZXNzaW9uU3RhdGUgPSBidWlsZFVuY2hlY2tlZE9iamVjdEZvclNlc3Npb25TdGF0ZShtX3Bh
Z2UucmVwbGF5Q29udHJvbGxlcigpLnNlc3Npb25TdGF0ZSgpKTsKKyAgICAqc2VnbWVudFN0YXRl
ID0gYnVpbGRVbmNoZWNrZWRPYmplY3RGb3JTZWdtZW50U3RhdGUobV9wYWdlLnJlcGxheUNvbnRy
b2xsZXIoKS5zZWdtZW50U3RhdGUoKSk7CiAKICAgICAqc2Vzc2lvbklkZW50aWZpZXIgPSBtX3Bh
Z2UucmVwbGF5Q29udHJvbGxlcigpLmxvYWRlZFNlc3Npb24oKS0+aWRlbnRpZmllcigpOwogICAg
IGlmIChtX3BhZ2UucmVwbGF5Q29udHJvbGxlcigpLmxvYWRlZFNlZ21lbnQoKSkKICAgICAgICAg
KnNlZ21lbnRJZGVudGlmaWVyID0gbV9wYWdlLnJlcGxheUNvbnRyb2xsZXIoKS5sb2FkZWRTZWdt
ZW50KCktPmlkZW50aWZpZXIoKTsKIAotICAgIHJlcGxheVBvc2l0aW9uID0gYnVpbGRJbnNwZWN0
b3JPYmplY3RGb3JQb3NpdGlvbihtX3BhZ2UucmVwbGF5Q29udHJvbGxlcigpLmN1cnJlbnRQb3Np
dGlvbigpKTsKKyAgICByZXBsYXlQb3NpdGlvbiA9IGJ1aWxkVW5jaGVja2VkT2JqZWN0Rm9yUG9z
aXRpb24obV9wYWdlLnJlcGxheUNvbnRyb2xsZXIoKS5jdXJyZW50UG9zaXRpb24oKSk7CiB9CiAK
IHZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OmdldEF2YWlsYWJsZVNlc3Npb25zKEVycm9yU3Ry
aW5nJiwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFNlc3Npb25JZGVudGlmaWVy
Pj4mIHNlc3Npb25zTGlzdCkKQEAgLTUwNyw3ICs1MDcsNyBAQCB2b2lkIEluc3BlY3RvclJlcGxh
eUFnZW50OjpnZXRTZXNzaW9uRGF0YShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIEluc3BlY3Rv
cjo6UAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgc2VyaWFsaXplZE9iamVjdCA9IGJ1
aWxkSW5zcGVjdG9yT2JqZWN0Rm9yU2Vzc2lvbihzZXNzaW9uKTsKKyAgICBzZXJpYWxpemVkT2Jq
ZWN0ID0gYnVpbGRVbmNoZWNrZWRPYmplY3RGb3JTZXNzaW9uKHNlc3Npb24pOwogfQogCiB2b2lk
IEluc3BlY3RvclJlcGxheUFnZW50OjpnZXRTZWdtZW50RGF0YShFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlcGxheTo6U2VnbWVudElkZW50aWZpZXIgaWRl
bnRpZmllciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlcGxheTo6U2Vzc2lvblNlZ21l
bnQ+JiBzZXJpYWxpemVkT2JqZWN0KQpAQCAtNTE4LDcgKzUxOCw3IEBAIHZvaWQgSW5zcGVjdG9y
UmVwbGF5QWdlbnQ6OmdldFNlZ21lbnREYXRhKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgSW5z
cGVjdG9yOjpQCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBzZXJpYWxpemVkT2JqZWN0
ID0gYnVpbGRJbnNwZWN0b3JPYmplY3RGb3JTZWdtZW50KHNlZ21lbnQpOworICAgIHNlcmlhbGl6
ZWRPYmplY3QgPSBidWlsZFVuY2hlY2tlZE9iamVjdEZvclNlZ21lbnQoc2VnbWVudCk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JSZXBsYXlBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvclJlcGxheUFnZW50LmgKaW5kZXggMTJjMTg0NmI3NTFhZjA4NzJjNTc3NGFhZDQwYzEw
MGFlMWFlODUxZS4uOWQyMThjZmRjY2M2MGQwNGJiNTc4Y2ZmZjkyMjg3MjlkYmZkOTVjZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlcGxheUFnZW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlcGxheUFnZW50LmgKQEAg
LTk1LDcgKzk1LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzdGFydENhcHR1cmluZyhF
cnJvclN0cmluZyYpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBzdG9wQ2FwdHVyaW5nKEVy
cm9yU3RyaW5nJikgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFsIHZvaWQgcmVwbGF5VG9Qb3NpdGlv
bihFcnJvclN0cmluZyYsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4m
LCBib29sIHNob3VsZEZhc3RGb3J3YXJkKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVw
bGF5VG9Qb3NpdGlvbihFcnJvclN0cmluZyYsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpVbmNoZWNrZWRPYmplY3Q+JiwgYm9vbCBzaG91bGRGYXN0Rm9yd2FyZCkgb3ZlcnJpZGU7
CiAgICAgdmlydHVhbCB2b2lkIHJlcGxheVRvQ29tcGxldGlvbihFcnJvclN0cmluZyYsIGJvb2wg
c2hvdWxkRmFzdEZvcndhcmQpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBwYXVzZVBsYXli
YWNrKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGNhbmNlbFBsYXli
YWNrKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5jcHAKaW5kZXggNjFiYmQ4ZjE0ODEyMmRhOGU0
MzJmZThhMWFiZmJkNTgzYjNjZjhkOC4uMzhjNDExYjMzMDZmZDYzMjBjY2ZmZTZkNWUzMmU2NmRk
ZTIwZTE5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJl
c291cmNlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JS
ZXNvdXJjZUFnZW50LmNwcApAQCAtNjYsNyArNjYsNyBAQAogI2luY2x1ZGUgIldlYlNvY2tldEZy
YW1lLmgiCiAjaW5jbHVkZSAiWE1MSHR0cFJlcXVlc3QuaCIKICNpbmNsdWRlIDxpbnNwZWN0b3Iv
SWRlbnRpZmllcnNGYWN0b3J5Lmg+Ci0jaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVl
cy5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+CiAjaW5j
bHVkZSA8aW5zcGVjdG9yL1NjcmlwdENhbGxTdGFjay5oPgogI2luY2x1ZGUgPGluc3BlY3Rvci9T
Y3JpcHRDYWxsU3RhY2tGYWN0b3J5Lmg+CiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CkBA
IC0xOTIsOSArMTkyLDkgQEAgdm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50Ojp3aWxsRGVzdHJv
eUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3JEaXNjb25uZWN0UmUKICAgICBkaXNhYmxlKHVu
dXNlZCk7CiB9CiAKLXN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmpl
Y3RGb3JIZWFkZXJzKGNvbnN0IEhUVFBIZWFkZXJNYXAmIGhlYWRlcnMpCitzdGF0aWMgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9y
SGVhZGVycyhjb25zdCBIVFRQSGVhZGVyTWFwJiBoZWFkZXJzKQogewotICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IGhlYWRlcnNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwor
ICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IGhlYWRlcnNP
YmplY3QgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q6OmNyZWF0ZSgpOwog
ICAgIAogICAgIGZvciAoY29uc3QgYXV0byYgaGVhZGVyIDogaGVhZGVycykKICAgICAgICAgaGVh
ZGVyc09iamVjdC0+c2V0U3RyaW5nKGhlYWRlci5rZXksIGhlYWRlci52YWx1ZSk7CkBAIC0yMzIs
NyArMjMyLDcgQEAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29y
azo6UmVzcG9uc2U+IGJ1aWxkT2JqZWN0Rm9yUmVzb3VyY2UKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKICAgICBkb3VibGUgc3RhdHVzID0gcmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKTsKLSAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBoZWFkZXJzID0gYnVpbGRPYmplY3RGb3JIZWFkZXJz
KHJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZHMoKSk7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gaGVhZGVycyA9IGJ1aWxkT2JqZWN0Rm9ySGVhZGVycyhy
ZXNwb25zZS5odHRwSGVhZGVyRmllbGRzKCkpOwogCiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6Ok5ldHdvcms6OlJlc3BvbnNlPiByZXNwb25zZU9iamVjdCA9IEluc3BlY3Rvcjo6UHJv
dG9jb2w6Ok5ldHdvcms6OlJlc3BvbnNlOjpjcmVhdGUoKQogICAgICAgICAuc2V0VXJsKHJlc3Bv
bnNlLnVybCgpLnN0cmluZygpKQpAQCAtMzAwLDggKzMwMCw4IEBAIHZvaWQgSW5zcGVjdG9yUmVz
b3VyY2VBZ2VudDo6d2lsbFNlbmRSZXF1ZXN0KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgRG9j
dW1lbnRMCiAgICAgbV9yZXNvdXJjZXNEYXRhLT5zZXRSZXNvdXJjZVR5cGUocmVxdWVzdElkLCB0
eXBlKTsKIAogICAgIGlmIChtX2V4dHJhUmVxdWVzdEhlYWRlcnMpIHsKLSAgICAgICAgSW5zcGVj
dG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX2V4dHJhUmVxdWVzdEhlYWRlcnMtPmVu
ZCgpOwotICAgICAgICBmb3IgKEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBt
X2V4dHJhUmVxdWVzdEhlYWRlcnMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAg
ICBJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IG1fZXh0cmFSZXF1ZXN0SGVhZGVycy0+ZW5kKCk7CisgICAgICAgIGZvciAoSW5zcGVjdG9y
OjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fZXh0cmFS
ZXF1ZXN0SGVhZGVycy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICBT
dHJpbmcgdmFsdWU7CiAgICAgICAgICAgICBpZiAoaXQtPnZhbHVlLT5hc1N0cmluZyh2YWx1ZSkp
CiAgICAgICAgICAgICAgICAgcmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGQoaXQtPmtleSwgdmFs
dWUpOwpAQCAtNTU2LDcgKzU1Niw3IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
TmV0d29yazo6SW5pdGlhdG9yPiBJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjpidWlsCiAgICAgaWYg
KHN0YWNrVHJhY2UgJiYgc3RhY2tUcmFjZS0+c2l6ZSgpID4gMCkgewogICAgICAgICBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6SW5pdGlhdG9yPiBpbml0aWF0b3JPYmplY3Qg
PSBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpJbml0aWF0b3I6OmNyZWF0ZSgpCiAgICAg
ICAgICAgICAuc2V0VHlwZShJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpJbml0aWF0b3I6
OlR5cGU6OlNjcmlwdCk7Ci0gICAgICAgIGluaXRpYXRvck9iamVjdC0+c2V0U3RhY2tUcmFjZShz
dGFja1RyYWNlLT5idWlsZEluc3BlY3RvckFycmF5KCkpOworICAgICAgICBpbml0aWF0b3JPYmpl
Y3QtPnNldFN0YWNrVHJhY2Uoc3RhY2tUcmFjZS0+YnVpbGRVbmNoZWNrZWRBcnJheSgpKTsKICAg
ICAgICAgcmV0dXJuIGluaXRpYXRvck9iamVjdDsKICAgICB9CiAKQEAgLTY1MCw3ICs2NTAsNyBA
QCB2b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJpbmcmKQogICAg
IG1fZXh0cmFSZXF1ZXN0SGVhZGVycy5jbGVhcigpOwogfQogCi12b2lkIEluc3BlY3RvclJlc291
cmNlQWdlbnQ6OnNldEV4dHJhSFRUUEhlYWRlcnMoRXJyb3JTdHJpbmcmLCBjb25zdCBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiYgaGVhZGVycykKK3ZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6
c2V0RXh0cmFIVFRQSGVhZGVycyhFcnJvclN0cmluZyYsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+JiBoZWFkZXJzKQogewogICAgIG1fZXh0cmFSZXF1
ZXN0SGVhZGVycyA9IGhlYWRlcnM7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvclJlc291cmNlQWdlbnQuaAppbmRleCAyODM5MjBkZmU1NjMwNzkyMWQ0Njc0OWU2
MTM0MDMwNGNjZjVjNmMyLi5hZGYyYjc5YmJhOWFlNjI3MzVlYTY4ZGFhMjgxN2IwOWM0MjJiNmY2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VB
Z2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFn
ZW50LmgKQEAgLTQyLDggKzQyLDggQEAKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogCiBuYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKLWNsYXNzIEluc3BlY3RvckFycmF5OwotY2xhc3MgSW5zcGVjdG9yT2Jq
ZWN0OworY2xhc3MgVW5jaGVja2VkQXJyYXk7CitjbGFzcyBVbmNoZWNrZWRPYmplY3Q7CiB9CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTEyNSw3ICsxMjUsNyBAQCBwdWJsaWM6CiAgICAgLy8g
Q2FsbGVkIGZyb20gZnJvbnRlbmQuCiAgICAgdmlydHVhbCB2b2lkIGVuYWJsZShFcnJvclN0cmlu
ZyYpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBkaXNhYmxlKEVycm9yU3RyaW5nJikgb3Zl
cnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHNldEV4dHJhSFRUUEhlYWRlcnMoRXJyb3JTdHJpbmcm
LCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+Jikgb3ZlcnJpZGU7Cisg
ICAgdmlydHVhbCB2b2lkIHNldEV4dHJhSFRUUEhlYWRlcnMoRXJyb3JTdHJpbmcmLCBjb25zdCBS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiYpIG92ZXJyaWRlOwog
ICAgIHZpcnR1YWwgdm9pZCBnZXRSZXNwb25zZUJvZHkoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJp
bmcmIHJlcXVlc3RJZCwgU3RyaW5nKiBjb250ZW50LCBib29sKiBiYXNlNjRFbmNvZGVkKSBvdmVy
cmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgcmVwbGF5WEhSKEVycm9yU3RyaW5nJiwgY29uc3QgU3Ry
aW5nJiByZXF1ZXN0SWQpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBjYW5DbGVhckJyb3dz
ZXJDYWNoZShFcnJvclN0cmluZyYsIGJvb2wqKSBvdmVycmlkZTsKQEAgLTE0Niw3ICsxNDYsNyBA
QCBwcml2YXRlOgogICAgIGJvb2wgbV9lbmFibGVkOwogICAgIGJvb2wgbV9jYWNoZURpc2FibGVk
OwogICAgIGJvb2wgbV9sb2FkaW5nWEhSU3luY2hyb25vdXNseTsKLSAgICBSZWZQdHI8SW5zcGVj
dG9yOjpJbnNwZWN0b3JPYmplY3Q+IG1fZXh0cmFSZXF1ZXN0SGVhZGVyczsKKyAgICBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBtX2V4dHJhUmVxdWVzdEhlYWRl
cnM7CiAKICAgICBIYXNoU2V0PHVuc2lnbmVkIGxvbmc+IG1faGlkZGVuUmVxdWVzdElkZW50aWZp
ZXJzOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5
bGVTaGVldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVl
dC5jcHAKaW5kZXggZTQzYzZjZDI0ZTk1OTM5MWYzNjI4MGM0ZTEyMTBjOWYyNzU5ODZhZC4uNmIy
ZWI1ZThlOTQ1YjkyNmQwYzA5YjFhMDRhYzljMmVmYzllN2Y4NiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcApAQCAtNTgsNyArNTgsNyBA
QAogI2luY2x1ZGUgIlN0eWxlU2hlZXRMaXN0LmgiCiAjaW5jbHVkZSAiV2ViS2l0Q1NTS2V5ZnJh
bWVzUnVsZS5oIgogI2luY2x1ZGUgPGluc3BlY3Rvci9Db250ZW50U2VhcmNoVXRpbGl0aWVzLmg+
Ci0jaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPGluc3Bl
Y3Rvci9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KICNpbmNsdWRlIDx5YXJyL1JlZ3Vs
YXJFeHByZXNzaW9uLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yU3R5bGVTaGVldC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0
eWxlU2hlZXQuaAppbmRleCBjMWZhZDA5NTYyMzRmYjliOTA1MzQ2MmFmYzBmNDQ2YzJiNjkwMDA0
Li43OWMyNzYzZTY5MWY0NTQzMGVkZTlmZjJhNDQ0ODVhYjQ1Y2FhNThkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmgKQEAgLTMwLDcgKzMwLDcg
QEAKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yU3R5bGVU
ZXh0RWRpdG9yLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yV2ViUHJvdG9jb2xUeXBlcy5oIgotI2lu
Y2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3Iv
SW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5j
bHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgpAQCAtNjMs
MTIgKzYzLDEyIEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCi0gICAgZXhwbGljaXQgSW5zcGVj
dG9yQ1NTSWQoUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKKyAgICBl
eHBsaWNpdCBJbnNwZWN0b3JDU1NJZChSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVj
a2VkT2JqZWN0PiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICghdmFsdWUtPmdldFN0cmluZygi
c3R5bGVTaGVldElkIiwgbV9zdHlsZVNoZWV0SWQpKQogICAgICAgICAgICAgcmV0dXJuOwogCi0g
ICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiBvcmRpbmFsVmFsdWUgPSB2
YWx1ZS0+Z2V0KCJvcmRpbmFsIik7CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpVbmNoZWNrZWRWYWx1ZT4gb3JkaW5hbFZhbHVlID0gdmFsdWUtPmdldCgib3JkaW5hbCIpOwog
ICAgICAgICBpZiAoIW9yZGluYWxWYWx1ZSB8fCAhb3JkaW5hbFZhbHVlLT5hc0ludGVnZXIobV9v
cmRpbmFsKSkKICAgICAgICAgICAgIG1fc3R5bGVTaGVldElkID0gIiI7CiAgICAgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuY3BwCmlu
ZGV4IGE4NmNhODk5MDQ3OWQzZTY1ZGY3ZmIwNTI1NGQwY2QyNmM2MmNiOGQuLmEwOTg5ZGFiNWJj
NWJhZmZmMTExNzM5ZmZmYzRjOGY3NmM5YTBkMGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JUaW1lbGluZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5jcHAKQEAgLTI3MSw3ICsyNzEsNyBA
QCB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmRpZERpc3BhdGNoRXZlbnQoKQogCiB2b2lk
IEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmRpZEludmFsaWRhdGVMYXlvdXQoRnJhbWUqIGZyYW1l
KQogewotICAgIGFwcGVuZFJlY29yZChJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpLCBUaW1lbGlu
ZVJlY29yZFR5cGU6OkludmFsaWRhdGVMYXlvdXQsIHRydWUsIGZyYW1lKTsKKyAgICBhcHBlbmRS
ZWNvcmQoSW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0OjpjcmVhdGUoKSwgVGlt
ZWxpbmVSZWNvcmRUeXBlOjpJbnZhbGlkYXRlTGF5b3V0LCB0cnVlLCBmcmFtZSk7CiB9CiAKIHZv
aWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6d2lsbExheW91dChGcmFtZSogZnJhbWUpCkBAIC0z
MDksMTIgKzMwOSwxMiBAQCB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmRpZExheW91dChS
ZW5kZXJPYmplY3QqIHJvb3QpCiAKIHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6ZGlkU2No
ZWR1bGVTdHlsZVJlY2FsY3VsYXRpb24oRnJhbWUqIGZyYW1lKQogewotICAgIGFwcGVuZFJlY29y
ZChJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpLCBUaW1lbGluZVJlY29yZFR5cGU6OlNjaGVkdWxl
U3R5bGVSZWNhbGN1bGF0aW9uLCB0cnVlLCBmcmFtZSk7CisgICAgYXBwZW5kUmVjb3JkKEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdDo6Y3JlYXRlKCksIFRpbWVsaW5lUmVjb3Jk
VHlwZTo6U2NoZWR1bGVTdHlsZVJlY2FsY3VsYXRpb24sIHRydWUsIGZyYW1lKTsKIH0KIAogdm9p
ZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50Ojp3aWxsUmVjYWxjdWxhdGVTdHlsZShGcmFtZSogZnJh
bWUpCiB7Ci0gICAgcHVzaEN1cnJlbnRSZWNvcmQoSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSwg
VGltZWxpbmVSZWNvcmRUeXBlOjpSZWNhbGN1bGF0ZVN0eWxlcywgdHJ1ZSwgZnJhbWUpOworICAg
IHB1c2hDdXJyZW50UmVjb3JkKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdDo6
Y3JlYXRlKCksIFRpbWVsaW5lUmVjb3JkVHlwZTo6UmVjYWxjdWxhdGVTdHlsZXMsIHRydWUsIGZy
YW1lKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpkaWRSZWNhbGN1bGF0ZVN0
eWxlKCkKQEAgLTMyNCw3ICszMjQsNyBAQCB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmRp
ZFJlY2FsY3VsYXRlU3R5bGUoKQogCiB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OndpbGxQ
YWludChGcmFtZSogZnJhbWUpCiB7Ci0gICAgcHVzaEN1cnJlbnRSZWNvcmQoSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKSwgVGltZWxpbmVSZWNvcmRUeXBlOjpQYWludCwgdHJ1ZSwgZnJhbWUpOwor
ICAgIHB1c2hDdXJyZW50UmVjb3JkKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVj
dDo6Y3JlYXRlKCksIFRpbWVsaW5lUmVjb3JkVHlwZTo6UGFpbnQsIHRydWUsIGZyYW1lKTsKIH0K
IAogdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpkaWRQYWludChSZW5kZXJPYmplY3QqIHJl
bmRlcmVyLCBjb25zdCBMYXlvdXRSZWN0JiBjbGlwUmVjdCkKQEAgLTMzOSw3ICszMzksNyBAQCB2
b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmRpZFBhaW50KFJlbmRlck9iamVjdCogcmVuZGVy
ZXIsIGNvbnN0IExheW91dFJlY3QmCiAKIHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6d2ls
bFNjcm9sbChGcmFtZSogZnJhbWUpCiB7Ci0gICAgcHVzaEN1cnJlbnRSZWNvcmQoSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKSwgVGltZWxpbmVSZWNvcmRUeXBlOjpTY3JvbGxMYXllciwgZmFsc2Us
IGZyYW1lKTsKKyAgICBwdXNoQ3VycmVudFJlY29yZChJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNo
ZWNrZWRPYmplY3Q6OmNyZWF0ZSgpLCBUaW1lbGluZVJlY29yZFR5cGU6OlNjcm9sbExheWVyLCBm
YWxzZSwgZnJhbWUpOwogfQogCiB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmRpZFNjcm9s
bCgpCkBAIC02NDIsNyArNjQyLDcgQEAgc3RhdGljIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRpbWVs
aW5lOjpFdmVudFR5cGUgdG9Qcm90b2NvbChUaW1lbGluZVJlY29yZFR5cGUgdHkKICAgICByZXR1
cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6VGltZVN0YW1wOwog
fQogCi12b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmFkZFJlY29yZFRvVGltZWxpbmUoUGFz
c1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBycFJlY29yZCwgVGltZWxpbmVSZWNvcmRUeXBlIHR5
cGUpCit2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmFkZFJlY29yZFRvVGltZWxpbmUoUGFz
c1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IHBycFJlY29yZCwg
VGltZWxpbmVSZWNvcmRUeXBlIHR5cGUpCiB7CiAgICAgcHJwUmVjb3JkLT5zZXRTdHJpbmcoInR5
cGUiLCBJbnNwZWN0b3I6OlByb3RvY29sOjpnZXRXZWJFbnVtQ29uc3RhbnRWYWx1ZSh0b1Byb3Rv
Y29sKHR5cGUpKSk7CiAKQEAgLTY1Niw3ICs2NTYsNyBAQCB2b2lkIEluc3BlY3RvclRpbWVsaW5l
QWdlbnQ6OmFkZFJlY29yZFRvVGltZWxpbmUoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBy
cAogICAgIH0KIH0KIAotdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpzZXRGcmFtZUlkZW50
aWZpZXIoSW5zcGVjdG9yT2JqZWN0KiByZWNvcmQsIEZyYW1lKiBmcmFtZSkKK3ZvaWQgSW5zcGVj
dG9yVGltZWxpbmVBZ2VudDo6c2V0RnJhbWVJZGVudGlmaWVyKEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlVuY2hlY2tlZE9iamVjdCogcmVjb3JkLCBGcmFtZSogZnJhbWUpCiB7CiAgICAgaWYgKCFmcmFt
ZSB8fCAhbV9wYWdlQWdlbnQpCiAgICAgICAgIHJldHVybjsKQEAgLTcwMCwxNSArNzAwLDE1IEBA
IEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6Okluc3BlY3RvclRpbWVsaW5lQWdlbnQoSW5zdHJ1bWVu
dGluZ0FnZW50cyogaW5zdHJ1bWVudGluCiB7CiB9CiAKLXZvaWQgSW5zcGVjdG9yVGltZWxpbmVB
Z2VudDo6YXBwZW5kUmVjb3JkKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkYXRhLCBUaW1l
bGluZVJlY29yZFR5cGUgdHlwZSwgYm9vbCBjYXB0dXJlQ2FsbFN0YWNrLCBGcmFtZSogZnJhbWUp
Cit2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmFwcGVuZFJlY29yZChQYXNzUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gZGF0YSwgVGltZWxpbmVSZWNvcmRU
eXBlIHR5cGUsIGJvb2wgY2FwdHVyZUNhbGxTdGFjaywgRnJhbWUqIGZyYW1lKQogewotICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlY29yZCA9IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3Jl
YXRlR2VuZXJpY1JlY29yZCh0aW1lc3RhbXAoKSwgY2FwdHVyZUNhbGxTdGFjayA/IG1fbWF4Q2Fs
bFN0YWNrRGVwdGggOiAwKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVj
a2VkT2JqZWN0PiByZWNvcmQgPSBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZUdlbmVyaWNS
ZWNvcmQodGltZXN0YW1wKCksIGNhcHR1cmVDYWxsU3RhY2sgPyBtX21heENhbGxTdGFja0RlcHRo
IDogMCk7CiAgICAgcmVjb3JkLT5zZXRPYmplY3QoImRhdGEiLCBkYXRhKTsKICAgICBzZXRGcmFt
ZUlkZW50aWZpZXIocmVjb3JkLmdldCgpLCBmcmFtZSk7CiAgICAgYWRkUmVjb3JkVG9UaW1lbGlu
ZShyZWNvcmQucmVsZWFzZSgpLCB0eXBlKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFn
ZW50OjpzZW5kRXZlbnQoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGV2ZW50KQordm9pZCBJ
bnNwZWN0b3JUaW1lbGluZUFnZW50OjpzZW5kRXZlbnQoUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IGV2ZW50KQogewogICAgIGlmICghbV9mcm9udGVuZERp
c3BhdGNoZXIpCiAgICAgICAgIHJldHVybjsKQEAgLTcxOCwxNCArNzE4LDE0IEBAIHZvaWQgSW5z
cGVjdG9yVGltZWxpbmVBZ2VudDo6c2VuZEV2ZW50KFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBldmVudCkKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+ZXZlbnRSZWNvcmRlZChyZWNvcmRD
aGVja2VkLnJlbGVhc2UoKSk7CiB9CiAKLUluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OlRpbWVsaW5l
UmVjb3JkRW50cnkgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6Y3JlYXRlUmVjb3JkRW50cnkoUGFz
c1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEsIFRpbWVsaW5lUmVjb3JkVHlwZSB0eXBlLCBi
b29sIGNhcHR1cmVDYWxsU3RhY2ssIEZyYW1lKiBmcmFtZSkKK0luc3BlY3RvclRpbWVsaW5lQWdl
bnQ6OlRpbWVsaW5lUmVjb3JkRW50cnkgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6Y3JlYXRlUmVj
b3JkRW50cnkoUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+
IGRhdGEsIFRpbWVsaW5lUmVjb3JkVHlwZSB0eXBlLCBib29sIGNhcHR1cmVDYWxsU3RhY2ssIEZy
YW1lKiBmcmFtZSkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZWNvcmQgPSBUaW1l
bGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZUdlbmVyaWNSZWNvcmQodGltZXN0YW1wKCksIGNhcHR1
cmVDYWxsU3RhY2sgPyBtX21heENhbGxTdGFja0RlcHRoIDogMCk7CisgICAgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gcmVjb3JkID0gVGltZWxpbmVSZWNvcmRG
YWN0b3J5OjpjcmVhdGVHZW5lcmljUmVjb3JkKHRpbWVzdGFtcCgpLCBjYXB0dXJlQ2FsbFN0YWNr
ID8gbV9tYXhDYWxsU3RhY2tEZXB0aCA6IDApOwogICAgIHNldEZyYW1lSWRlbnRpZmllcihyZWNv
cmQuZ2V0KCksIGZyYW1lKTsKLSAgICByZXR1cm4gVGltZWxpbmVSZWNvcmRFbnRyeShyZWNvcmQu
cmVsZWFzZSgpLCBkYXRhLCBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCksIHR5cGUpOworICAgIHJl
dHVybiBUaW1lbGluZVJlY29yZEVudHJ5KHJlY29yZC5yZWxlYXNlKCksIGRhdGEsIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlVuY2hlY2tlZEFycmF5OjpjcmVhdGUoKSwgdHlwZSk7CiB9CiAKLXZvaWQg
SW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6cHVzaEN1cnJlbnRSZWNvcmQoUGFzc1JlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IGRhdGEsIFRpbWVsaW5lUmVjb3JkVHlwZSB0eXBlLCBib29sIGNhcHR1cmVD
YWxsU3RhY2ssIEZyYW1lKiBmcmFtZSkKK3ZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6cHVz
aEN1cnJlbnRSZWNvcmQoUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRP
YmplY3Q+IGRhdGEsIFRpbWVsaW5lUmVjb3JkVHlwZSB0eXBlLCBib29sIGNhcHR1cmVDYWxsU3Rh
Y2ssIEZyYW1lKiBmcmFtZSkKIHsKICAgICBwdXNoQ3VycmVudFJlY29yZChjcmVhdGVSZWNvcmRF
bnRyeShkYXRhLCB0eXBlLCBjYXB0dXJlQ2FsbFN0YWNrLCBmcmFtZSkpOwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuaCBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JUaW1lbGluZUFnZW50LmgKaW5kZXggYTRj
YjRjNGUyZWYyM2VjZDM3ZDBlZjA0ZGMxNTNhOTg2YzY1ZjRiZS4uMzkyZGJjMWRkNzBkNDFmYTgy
MTNhMWVlZjdjZGU0MzU1MmViNmI5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oCkBAIC0zOCw3ICszOCw3IEBACiAjaW5jbHVkZSAi
SW5zcGVjdG9yV2ViQmFja2VuZERpc3BhdGNoZXJzLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yV2Vi
RnJvbnRlbmREaXNwYXRjaGVycy5oIgogI2luY2x1ZGUgIkxheW91dFJlY3QuaCIKLSNpbmNsdWRl
IDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3Bl
Y3RvclByb3RvY29sVHlwZXMuaD4KICNpbmNsdWRlIDxpbnNwZWN0b3IvU2NyaXB0RGVidWdMaXN0
ZW5lci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvV2Vha1B0ci5o
PgpAQCAtMjM0LDMzICsyMzQsMzMgQEAgcHJpdmF0ZToKICAgICBzdHJ1Y3QgVGltZWxpbmVSZWNv
cmRFbnRyeSB7CiAgICAgICAgIFRpbWVsaW5lUmVjb3JkRW50cnkoKQogICAgICAgICAgICAgOiB0
eXBlKFRpbWVsaW5lUmVjb3JkVHlwZTo6RXZlbnREaXNwYXRjaCkgeyB9Ci0gICAgICAgIFRpbWVs
aW5lUmVjb3JkRW50cnkoUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gcmVj
b3JkLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBkYXRhLCBQYXNzUmVm
UHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+IGNoaWxkcmVuLCBUaW1lbGluZVJlY29yZFR5
cGUgdHlwZSkKKyAgICAgICAgVGltZWxpbmVSZWNvcmRFbnRyeShQYXNzUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gcmVjb3JkLCBQYXNzUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gZGF0YSwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpVbmNoZWNrZWRBcnJheT4gY2hpbGRyZW4sIFRpbWVsaW5lUmVjb3JkVHlwZSB0
eXBlKQogICAgICAgICAgICAgOiByZWNvcmQocmVjb3JkKSwgZGF0YShkYXRhKSwgY2hpbGRyZW4o
Y2hpbGRyZW4pLCB0eXBlKHR5cGUpCiAgICAgICAgIHsKICAgICAgICAgfQogCi0gICAgICAgIFJl
ZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gcmVjb3JkOwotICAgICAgICBSZWZQdHI8
SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGRhdGE7Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0
b3I6Okluc3BlY3RvckFycmF5PiBjaGlsZHJlbjsKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gcmVjb3JkOworICAgICAgICBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBkYXRhOworICAgICAgICBSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkQXJyYXk+IGNoaWxkcmVuOwogICAgICAgICBUaW1l
bGluZVJlY29yZFR5cGUgdHlwZTsKICAgICB9OwogCiAgICAgdm9pZCBpbnRlcm5hbFN0YXJ0KGNv
bnN0IGludCogbWF4Q2FsbFN0YWNrRGVwdGggPSBudWxscHRyKTsKICAgICB2b2lkIGludGVybmFs
U3RvcCgpOwogCi0gICAgdm9pZCBzZW5kRXZlbnQoUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3Bl
Y3Rvck9iamVjdD4pOwotICAgIHZvaWQgYXBwZW5kUmVjb3JkKFBhc3NSZWZQdHI8SW5zcGVjdG9y
OjpJbnNwZWN0b3JPYmplY3Q+IGRhdGEsIFRpbWVsaW5lUmVjb3JkVHlwZSwgYm9vbCBjYXB0dXJl
Q2FsbFN0YWNrLCBGcmFtZSopOwotICAgIHZvaWQgcHVzaEN1cnJlbnRSZWNvcmQoUGFzc1JlZlB0
cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4sIFRpbWVsaW5lUmVjb3JkVHlwZSwgYm9vbCBj
YXB0dXJlQ2FsbFN0YWNrLCBGcmFtZSopOworICAgIHZvaWQgc2VuZEV2ZW50KFBhc3NSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0Pik7CisgICAgdm9pZCBhcHBlbmRS
ZWNvcmQoUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IGRh
dGEsIFRpbWVsaW5lUmVjb3JkVHlwZSwgYm9vbCBjYXB0dXJlQ2FsbFN0YWNrLCBGcmFtZSopOwor
ICAgIHZvaWQgcHVzaEN1cnJlbnRSZWNvcmQoUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpVbmNoZWNrZWRPYmplY3Q+LCBUaW1lbGluZVJlY29yZFR5cGUsIGJvb2wgY2FwdHVyZUNhbGxT
dGFjaywgRnJhbWUqKTsKICAgICB2b2lkIHB1c2hDdXJyZW50UmVjb3JkKGNvbnN0IFRpbWVsaW5l
UmVjb3JkRW50cnkmIHJlY29yZCkgeyBtX3JlY29yZFN0YWNrLmFwcGVuZChyZWNvcmQpOyB9CiAK
LSAgICBUaW1lbGluZVJlY29yZEVudHJ5IGNyZWF0ZVJlY29yZEVudHJ5KFBhc3NSZWZQdHI8SW5z
cGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGRhdGEsIFRpbWVsaW5lUmVjb3JkVHlwZSwgYm9vbCBj
YXB0dXJlQ2FsbFN0YWNrLCBGcmFtZSopOworICAgIFRpbWVsaW5lUmVjb3JkRW50cnkgY3JlYXRl
UmVjb3JkRW50cnkoUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmpl
Y3Q+IGRhdGEsIFRpbWVsaW5lUmVjb3JkVHlwZSwgYm9vbCBjYXB0dXJlQ2FsbFN0YWNrLCBGcmFt
ZSopOwogCi0gICAgdm9pZCBzZXRGcmFtZUlkZW50aWZpZXIoSW5zcGVjdG9yOjpJbnNwZWN0b3JP
YmplY3QqIHJlY29yZCwgRnJhbWUqKTsKKyAgICB2b2lkIHNldEZyYW1lSWRlbnRpZmllcihJbnNw
ZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3QqIHJlY29yZCwgRnJhbWUqKTsKIAogICAg
IHZvaWQgZGlkQ29tcGxldGVSZWNvcmRFbnRyeShjb25zdCBUaW1lbGluZVJlY29yZEVudHJ5Jik7
CiAgICAgdm9pZCBkaWRDb21wbGV0ZUN1cnJlbnRSZWNvcmQoVGltZWxpbmVSZWNvcmRUeXBlKTsK
IAotICAgIHZvaWQgYWRkUmVjb3JkVG9UaW1lbGluZShQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5z
cGVjdG9yT2JqZWN0PiwgVGltZWxpbmVSZWNvcmRUeXBlKTsKKyAgICB2b2lkIGFkZFJlY29yZFRv
VGltZWxpbmUoUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+
LCBUaW1lbGluZVJlY29yZFR5cGUpOwogICAgIHZvaWQgY2xlYXJSZWNvcmRTdGFjaygpOwogCiAg
ICAgdm9pZCBsb2NhbFRvUGFnZVF1YWQoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgTGF5b3V0
UmVjdCYsIEZsb2F0UXVhZCopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvcldvcmtlckFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JXb3JrZXJBZ2VudC5jcHAKaW5kZXggZWU1YWJiMzI4NDk4ZTgwZmQ1MTVhZjFiNGViZGQz
ZTMxNTQxNzEyMy4uM2QzZWMxNDA5MDQ3ZWNkZDgzNmJjYjQ3YzczMmM5OTQxZjZlMDliMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvcldvcmtlckFnZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yV29ya2VyQWdlbnQuY3Bw
CkBAIC0zOSw3ICszOSw3IEBACiAjaW5jbHVkZSAiSW5zdHJ1bWVudGluZ0FnZW50cy5oIgogI2lu
Y2x1ZGUgIlVSTC5oIgogI2luY2x1ZGUgIldvcmtlckdsb2JhbFNjb3BlUHJveHkuaCIKLSNpbmNs
dWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8aW5zcGVjdG9yL0lu
c3BlY3RvclByb3RvY29sVHlwZXMuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKIHVzaW5n
IG5hbWVzcGFjZSBJbnNwZWN0b3I7CkBAIC04NCwxMSArODQsMTEgQEAgcHJpdmF0ZToKICAgICAv
LyBXb3JrZXJHbG9iYWxTY29wZVByb3h5OjpQYWdlSW5zcGVjdG9yIGltcGxlbWVudGF0aW9uCiAg
ICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoTWVzc2FnZUZyb21Xb3JrZXIoY29uc3QgU3RyaW5nJiBt
ZXNzYWdlU3RyaW5nKSBvdmVycmlkZQogICAgIHsKLSAgICAgICAgUmVmUHRyPEluc3BlY3RvclZh
bHVlPiBwYXJzZWRNZXNzYWdlOwotICAgICAgICBpZiAoIUluc3BlY3RvclZhbHVlOjpwYXJzZUpT
T04obWVzc2FnZVN0cmluZywgcGFyc2VkTWVzc2FnZSkpCisgICAgICAgIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpVbmNoZWNrZWRWYWx1ZT4gcGFyc2VkTWVzc2FnZTsKKyAgICAgICAgaWYg
KCFJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRWYWx1ZTo6cGFyc2VKU09OKG1lc3NhZ2VT
dHJpbmcsIHBhcnNlZE1lc3NhZ2UpKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2VPYmplY3Q7CisgICAgICAgIFJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IG1lc3NhZ2VPYmplY3Q7CiAgICAgICAg
IGlmICghcGFyc2VkTWVzc2FnZS0+YXNPYmplY3QobWVzc2FnZU9iamVjdCkpCiAgICAgICAgICAg
ICByZXR1cm47CiAKQEAgLTE3NCw3ICsxNzQsNyBAQCB2b2lkIEluc3BlY3RvcldvcmtlckFnZW50
OjpkaXNjb25uZWN0RnJvbVdvcmtlcihFcnJvclN0cmluZyYgZXJyb3IsIGludCB3b3JrZXJJZAog
ICAgICAgICBlcnJvciA9IEFTQ0lJTGl0ZXJhbCgiV29ya2VyIGlzIGdvbmUiKTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JXb3JrZXJBZ2VudDo6c2VuZE1lc3NhZ2VUb1dvcmtlcihFcnJvclN0cmluZyYg
ZXJyb3IsIGludCB3b3JrZXJJZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIG1lc3Nh
Z2UpCit2b2lkIEluc3BlY3RvcldvcmtlckFnZW50OjpzZW5kTWVzc2FnZVRvV29ya2VyKEVycm9y
U3RyaW5nJiBlcnJvciwgaW50IHdvcmtlcklkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6VW5jaGVja2VkT2JqZWN0PiYgbWVzc2FnZSkKIHsKICAgICBXb3JrZXJGcm9udGVuZENo
YW5uZWwqIGNoYW5uZWwgPSBtX2lkVG9DaGFubmVsLmdldCh3b3JrZXJJZCk7CiAgICAgaWYgKGNo
YW5uZWwpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yV29y
a2VyQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JXb3JrZXJBZ2Vu
dC5oCmluZGV4IDUxODRmMWU2NGVjZjlmYTNlMTY2ZGY0ZTJlYmYyMmVhY2Y5OGVmMzIuLmJmZDYz
YmFjNGE4MTFmYWZiMWY3YmExYzgwNDFjODE1YTEwYjFiZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JXb3JrZXJBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JXb3JrZXJBZ2VudC5oCkBAIC0zNyw3ICszNyw3IEBACiAj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7Ci1jbGFzcyBJ
bnNwZWN0b3JPYmplY3Q7CitjbGFzcyBVbmNoZWNrZWRPYmplY3Q7CiBjbGFzcyBJbnNwZWN0b3JX
b3JrZXJGcm9udGVuZERpc3BhdGNoZXI7CiB9CiAKQEAgLTY4LDcgKzY4LDcgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgdm9pZCBjYW5JbnNwZWN0V29ya2VycyhFcnJvclN0cmluZyYsIGJvb2wqKSBv
dmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgY29ubmVjdFRvV29ya2VyKEVycm9yU3RyaW5nJiwg
aW50IHdvcmtlcklkKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgZGlzY29ubmVjdEZyb21X
b3JrZXIoRXJyb3JTdHJpbmcmLCBpbnQgd29ya2VySWQpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwg
dm9pZCBzZW5kTWVzc2FnZVRvV29ya2VyKEVycm9yU3RyaW5nJiwgaW50IHdvcmtlcklkLCBjb25z
dCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiBtZXNzYWdlKSBvdmVycmlkZTsK
KyAgICB2aXJ0dWFsIHZvaWQgc2VuZE1lc3NhZ2VUb1dvcmtlcihFcnJvclN0cmluZyYsIGludCB3
b3JrZXJJZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVj
dD4mIG1lc3NhZ2UpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBzZXRBdXRvY29ubmVjdFRv
V29ya2VycyhFcnJvclN0cmluZyYsIGJvb2wgdmFsdWUpIG92ZXJyaWRlOwogCiBwcml2YXRlOgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1RpbWVsaW5lUmVjb3JkRmFjdG9y
eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvVGltZWxpbmVSZWNvcmRGYWN0b3J5LmNw
cAppbmRleCAzZmVjNDAwYWIxMjI0MjU4ZDc4OGQyOWQzZTY1Yjk1YzE2YmMyMzBjLi5mM2MxZTZl
Mjg2MzE4MTZhYmZjY2ZjZjRjODBmY2JmYTk4NTc0NTMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvVGltZWxpbmVSZWNvcmRGYWN0b3J5LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvVGltZWxpbmVSZWNvcmRGYWN0b3J5LmNwcApAQCAtNTMsMTM4ICs1Mywx
MzggQEAgdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1QYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVh
dGVHZW5lcmljUmVjb3JkKGRvdWJsZSBzdGFydFRpbWUsIGludCBtYXhDYWxsU3RhY2tEZXB0aCkK
K1Bhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBUaW1lbGlu
ZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZUdlbmVyaWNSZWNvcmQoZG91YmxlIHN0YXJ0VGltZSwgaW50
IG1heENhbGxTdGFja0RlcHRoKQogewotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlY29y
ZCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gcmVjb3JkID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6VW5j
aGVja2VkT2JqZWN0OjpjcmVhdGUoKTsKICAgICByZWNvcmQtPnNldERvdWJsZSgic3RhcnRUaW1l
Iiwgc3RhcnRUaW1lKTsKIAogICAgIGlmIChtYXhDYWxsU3RhY2tEZXB0aCkgewogICAgICAgICBS
ZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiBzdGFja1RyYWNlID0gY3JlYXRlU2NyaXB0Q2FsbFN0YWNr
KEpTTWFpblRocmVhZEV4ZWNTdGF0ZTo6Y3VycmVudFN0YXRlKCksIG1heENhbGxTdGFja0RlcHRo
KTsKICAgICAgICAgaWYgKHN0YWNrVHJhY2UgJiYgc3RhY2tUcmFjZS0+c2l6ZSgpKQotICAgICAg
ICAgICAgcmVjb3JkLT5zZXRWYWx1ZSgic3RhY2tUcmFjZSIsIHN0YWNrVHJhY2UtPmJ1aWxkSW5z
cGVjdG9yQXJyYXkoKSk7CisgICAgICAgICAgICByZWNvcmQtPnNldFZhbHVlKCJzdGFja1RyYWNl
Iiwgc3RhY2tUcmFjZS0+YnVpbGRVbmNoZWNrZWRBcnJheSgpKTsKICAgICB9CiAgICAgcmV0dXJu
IHJlY29yZC5yZWxlYXNlKCk7CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBUaW1l
bGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZUJhY2tncm91bmRSZWNvcmQoZG91YmxlIHN0YXJ0VGlt
ZSwgY29uc3QgU3RyaW5nJiB0aHJlYWROYW1lKQorUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpVbmNoZWNrZWRPYmplY3Q+IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlQmFja2dy
b3VuZFJlY29yZChkb3VibGUgc3RhcnRUaW1lLCBjb25zdCBTdHJpbmcmIHRocmVhZE5hbWUpCiB7
Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVjb3JkID0gSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0
PiByZWNvcmQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q6OmNyZWF0ZSgp
OwogICAgIHJlY29yZC0+c2V0RG91YmxlKCJzdGFydFRpbWUiLCBzdGFydFRpbWUpOwogICAgIHJl
Y29yZC0+c2V0U3RyaW5nKCJ0aHJlYWQiLCB0aHJlYWROYW1lKTsKICAgICByZXR1cm4gcmVjb3Jk
LnJlbGVhc2UoKTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IFRpbWVsaW5lUmVj
b3JkRmFjdG9yeTo6Y3JlYXRlR0NFdmVudERhdGEoY29uc3Qgc2l6ZV90IHVzZWRIZWFwU2l6ZURl
bHRhKQorUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IFRp
bWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlR0NFdmVudERhdGEoY29uc3Qgc2l6ZV90IHVzZWRI
ZWFwU2l6ZURlbHRhKQogewotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpV
bmNoZWNrZWRPYmplY3Q+IGRhdGEgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmpl
Y3Q6OmNyZWF0ZSgpOwogICAgIGRhdGEtPnNldEludGVnZXIoInVzZWRIZWFwU2l6ZURlbHRhIiwg
dXNlZEhlYXBTaXplRGVsdGEpOwogICAgIHJldHVybiBkYXRhLnJlbGVhc2UoKTsKIH0KIAotUGFz
c1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlRnVu
Y3Rpb25DYWxsRGF0YShjb25zdCBTdHJpbmcmIHNjcmlwdE5hbWUsIGludCBzY3JpcHRMaW5lKQor
UGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IFRpbWVsaW5l
UmVjb3JkRmFjdG9yeTo6Y3JlYXRlRnVuY3Rpb25DYWxsRGF0YShjb25zdCBTdHJpbmcmIHNjcmlw
dE5hbWUsIGludCBzY3JpcHRMaW5lKQogewotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRh
dGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IGRhdGEgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNo
ZWNrZWRPYmplY3Q6OmNyZWF0ZSgpOwogICAgIGRhdGEtPnNldFN0cmluZygic2NyaXB0TmFtZSIs
IHNjcmlwdE5hbWUpOwogICAgIGRhdGEtPnNldEludGVnZXIoInNjcmlwdExpbmUiLCBzY3JpcHRM
aW5lKTsKICAgICByZXR1cm4gZGF0YS5yZWxlYXNlKCk7CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZUNvbnNvbGVQcm9maWxlRGF0
YShjb25zdCBTdHJpbmcmIHRpdGxlKQorUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpV
bmNoZWNrZWRPYmplY3Q+IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlQ29uc29sZVByb2Zp
bGVEYXRhKGNvbnN0IFN0cmluZyYgdGl0bGUpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gZGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gZGF0YSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlVuY2hlY2tlZE9iamVjdDo6Y3JlYXRlKCk7CiAgICAgZGF0YS0+c2V0U3RyaW5nKCJ0aXRsZSIs
IHRpdGxlKTsKICAgICByZXR1cm4gZGF0YS5yZWxlYXNlKCk7CiB9CiAKLVBhc3NSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZVByb2JlU2FtcGxlRGF0
YShjb25zdCBTY3JpcHRCcmVha3BvaW50QWN0aW9uJiBhY3Rpb24sIGludCBoaXRDb3VudCkKK1Bh
c3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBUaW1lbGluZVJl
Y29yZEZhY3Rvcnk6OmNyZWF0ZVByb2JlU2FtcGxlRGF0YShjb25zdCBTY3JpcHRCcmVha3BvaW50
QWN0aW9uJiBhY3Rpb24sIGludCBoaXRDb3VudCkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBkYXRhID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBkYXRhID0gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6VW5jaGVja2VkT2JqZWN0OjpjcmVhdGUoKTsKICAgICBkYXRhLT5zZXRJbnRlZ2VyKEFTQ0lJ
TGl0ZXJhbCgicHJvYmVJZCIpLCBhY3Rpb24uaWRlbnRpZmllcik7CiAgICAgZGF0YS0+c2V0SW50
ZWdlcihBU0NJSUxpdGVyYWwoImhpdENvdW50IiksIGhpdENvdW50KTsKICAgICByZXR1cm4gZGF0
YS5yZWxlYXNlKCk7CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBUaW1lbGluZVJl
Y29yZEZhY3Rvcnk6OmNyZWF0ZUV2ZW50RGlzcGF0Y2hEYXRhKGNvbnN0IEV2ZW50JiBldmVudCkK
K1Bhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBUaW1lbGlu
ZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZUV2ZW50RGlzcGF0Y2hEYXRhKGNvbnN0IEV2ZW50JiBldmVu
dCkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkYXRhID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2Jq
ZWN0PiBkYXRhID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0OjpjcmVhdGUo
KTsKICAgICBkYXRhLT5zZXRTdHJpbmcoInR5cGUiLCBldmVudC50eXBlKCkuc3RyaW5nKCkpOwog
ICAgIHJldHVybiBkYXRhLnJlbGVhc2UoKTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlR2VuZXJpY1RpbWVyRGF0YShpbnQgdGlt
ZXJJZCkKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBU
aW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZUdlbmVyaWNUaW1lckRhdGEoaW50IHRpbWVySWQp
CiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGF0YSA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVj
dD4gZGF0YSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdDo6Y3JlYXRlKCk7
CiAgICAgZGF0YS0+c2V0SW50ZWdlcigidGltZXJJZCIsIHRpbWVySWQpOwogICAgIHJldHVybiBk
YXRhLnJlbGVhc2UoKTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IFRpbWVsaW5l
UmVjb3JkRmFjdG9yeTo6Y3JlYXRlVGltZXJJbnN0YWxsRGF0YShpbnQgdGltZXJJZCwgaW50IHRp
bWVvdXQsIGJvb2wgc2luZ2xlU2hvdCkKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
VW5jaGVja2VkT2JqZWN0PiBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZVRpbWVySW5zdGFs
bERhdGEoaW50IHRpbWVySWQsIGludCB0aW1lb3V0LCBib29sIHNpbmdsZVNob3QpCiB7Ci0gICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gZGF0YSA9
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdDo6Y3JlYXRlKCk7CiAgICAgZGF0
YS0+c2V0SW50ZWdlcigidGltZXJJZCIsIHRpbWVySWQpOwogICAgIGRhdGEtPnNldEludGVnZXIo
InRpbWVvdXQiLCB0aW1lb3V0KTsKICAgICBkYXRhLT5zZXRCb29sZWFuKCJzaW5nbGVTaG90Iiwg
c2luZ2xlU2hvdCk7CiAgICAgcmV0dXJuIGRhdGEucmVsZWFzZSgpOwogfQogCi1QYXNzUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVYSFJSZWFkeVN0
YXRlQ2hhbmdlRGF0YShjb25zdCBTdHJpbmcmIHVybCwgaW50IHJlYWR5U3RhdGUpCitQYXNzUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gVGltZWxpbmVSZWNvcmRG
YWN0b3J5OjpjcmVhdGVYSFJSZWFkeVN0YXRlQ2hhbmdlRGF0YShjb25zdCBTdHJpbmcmIHVybCwg
aW50IHJlYWR5U3RhdGUpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGF0YSA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlVuY2hlY2tlZE9iamVjdD4gZGF0YSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9i
amVjdDo6Y3JlYXRlKCk7CiAgICAgZGF0YS0+c2V0U3RyaW5nKCJ1cmwiLCB1cmwpOwogICAgIGRh
dGEtPnNldEludGVnZXIoInJlYWR5U3RhdGUiLCByZWFkeVN0YXRlKTsKICAgICByZXR1cm4gZGF0
YS5yZWxlYXNlKCk7CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBUaW1lbGluZVJl
Y29yZEZhY3Rvcnk6OmNyZWF0ZVhIUkxvYWREYXRhKGNvbnN0IFN0cmluZyYgdXJsKQorUGFzc1Jl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IFRpbWVsaW5lUmVjb3Jk
RmFjdG9yeTo6Y3JlYXRlWEhSTG9hZERhdGEoY29uc3QgU3RyaW5nJiB1cmwpCiB7Ci0gICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gZGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Cisg
ICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gZGF0YSA9IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdDo6Y3JlYXRlKCk7CiAgICAgZGF0YS0+
c2V0U3RyaW5nKCJ1cmwiLCB1cmwpOwogICAgIHJldHVybiBkYXRhLnJlbGVhc2UoKTsKIH0KIAot
UGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRl
RXZhbHVhdGVTY3JpcHREYXRhKGNvbnN0IFN0cmluZyYgdXJsLCBkb3VibGUgbGluZU51bWJlcikK
K1Bhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBUaW1lbGlu
ZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZUV2YWx1YXRlU2NyaXB0RGF0YShjb25zdCBTdHJpbmcmIHVy
bCwgZG91YmxlIGxpbmVOdW1iZXIpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGF0
YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gZGF0YSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hl
Y2tlZE9iamVjdDo6Y3JlYXRlKCk7CiAgICAgZGF0YS0+c2V0U3RyaW5nKCJ1cmwiLCB1cmwpOwog
ICAgIGRhdGEtPnNldEludGVnZXIoImxpbmVOdW1iZXIiLCBsaW5lTnVtYmVyKTsKICAgICByZXR1
cm4gZGF0YS5yZWxlYXNlKCk7CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBUaW1l
bGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZVRpbWVTdGFtcERhdGEoY29uc3QgU3RyaW5nJiBtZXNz
YWdlKQorUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IFRp
bWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlVGltZVN0YW1wRGF0YShjb25zdCBTdHJpbmcmIG1l
c3NhZ2UpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGF0YSA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tl
ZE9iamVjdD4gZGF0YSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdDo6Y3Jl
YXRlKCk7CiAgICAgZGF0YS0+c2V0U3RyaW5nKCJtZXNzYWdlIiwgbWVzc2FnZSk7CiAgICAgcmV0
dXJuIGRhdGEucmVsZWFzZSgpOwogfQogCi1QYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gVGlt
ZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVTY2hlZHVsZVJlc291cmNlUmVxdWVzdERhdGEoY29u
c3QgU3RyaW5nJiB1cmwpCitQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tl
ZE9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVTY2hlZHVsZVJlc291cmNlUmVx
dWVzdERhdGEoY29uc3QgU3RyaW5nJiB1cmwpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gZGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gZGF0YSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlVuY2hlY2tlZE9iamVjdDo6Y3JlYXRlKCk7CiAgICAgZGF0YS0+c2V0U3RyaW5nKCJ1cmwiLCB1
cmwpOwogICAgIHJldHVybiBkYXRhLnJlbGVhc2UoKTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlUmVzb3VyY2VTZW5kUmVxdWVz
dERhdGEoY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdCkKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBU
aW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZVJlc291cmNlU2VuZFJlcXVlc3REYXRhKGNvbnN0
IFN0cmluZyYgcmVxdWVzdElkLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCiB7Ci0g
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gZGF0
YSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdDo6Y3JlYXRlKCk7CiAgICAg
ZGF0YS0+c2V0U3RyaW5nKCJyZXF1ZXN0SWQiLCByZXF1ZXN0SWQpOwogICAgIGRhdGEtPnNldFN0
cmluZygidXJsIiwgcmVxdWVzdC51cmwoKS5zdHJpbmcoKSk7CiAgICAgZGF0YS0+c2V0U3RyaW5n
KCJyZXF1ZXN0TWV0aG9kIiwgcmVxdWVzdC5odHRwTWV0aG9kKCkpOwogICAgIHJldHVybiBkYXRh
LnJlbGVhc2UoKTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IFRpbWVsaW5lUmVj
b3JkRmFjdG9yeTo6Y3JlYXRlUmVzb3VyY2VSZWNlaXZlUmVzcG9uc2VEYXRhKGNvbnN0IFN0cmlu
ZyYgcmVxdWVzdElkLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK1Bhc3NSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBUaW1lbGluZVJlY29yZEZh
Y3Rvcnk6OmNyZWF0ZVJlc291cmNlUmVjZWl2ZVJlc3BvbnNlRGF0YShjb25zdCBTdHJpbmcmIHJl
cXVlc3RJZCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCiB7Ci0gICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gZGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gZGF0YSA9IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdDo6Y3JlYXRlKCk7CiAgICAgZGF0YS0+c2V0
U3RyaW5nKCJyZXF1ZXN0SWQiLCByZXF1ZXN0SWQpOwogICAgIGRhdGEtPnNldEludGVnZXIoInN0
YXR1c0NvZGUiLCByZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpKTsKICAgICBkYXRhLT5zZXRTdHJp
bmcoIm1pbWVUeXBlIiwgcmVzcG9uc2UubWltZVR5cGUoKSk7CiAgICAgcmV0dXJuIGRhdGEucmVs
ZWFzZSgpOwogfQogCi1QYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gVGltZWxpbmVSZWNvcmRG
YWN0b3J5OjpjcmVhdGVSZXNvdXJjZUZpbmlzaERhdGEoY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQs
IGJvb2wgZGlkRmFpbCwgZG91YmxlIGZpbmlzaFRpbWUpCitQYXNzUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVS
ZXNvdXJjZUZpbmlzaERhdGEoY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGJvb2wgZGlkRmFpbCwg
ZG91YmxlIGZpbmlzaFRpbWUpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGF0YSA9
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlVuY2hlY2tlZE9iamVjdD4gZGF0YSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tl
ZE9iamVjdDo6Y3JlYXRlKCk7CiAgICAgZGF0YS0+c2V0U3RyaW5nKCJyZXF1ZXN0SWQiLCByZXF1
ZXN0SWQpOwogICAgIGRhdGEtPnNldEJvb2xlYW4oImRpZEZhaWwiLCBkaWRGYWlsKTsKICAgICBp
ZiAoZmluaXNoVGltZSkKQEAgLTE5Miw2MSArMTkyLDYxIEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZVJlc291cmNlRmluaXNoRGF0YShj
b25zCiAgICAgcmV0dXJuIGRhdGEucmVsZWFzZSgpOwogfQogCi1QYXNzUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVSZWNlaXZlUmVzb3VyY2VEYXRh
KGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBpbnQgbGVuZ3RoKQorUGFzc1JlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3Jl
YXRlUmVjZWl2ZVJlc291cmNlRGF0YShjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgaW50IGxlbmd0
aCkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkYXRhID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2Jq
ZWN0PiBkYXRhID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0OjpjcmVhdGUo
KTsKICAgICBkYXRhLT5zZXRTdHJpbmcoInJlcXVlc3RJZCIsIHJlcXVlc3RJZCk7CiAgICAgZGF0
YS0+c2V0SW50ZWdlcigiZW5jb2RlZERhdGFMZW5ndGgiLCBsZW5ndGgpOwogICAgIHJldHVybiBk
YXRhLnJlbGVhc2UoKTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IFRpbWVsaW5l
UmVjb3JkRmFjdG9yeTo6Y3JlYXRlTGF5b3V0RGF0YSh1bnNpZ25lZCBkaXJ0eU9iamVjdHMsIHVu
c2lnbmVkIHRvdGFsT2JqZWN0cywgYm9vbCBwYXJ0aWFsTGF5b3V0KQorUGFzc1JlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6
Y3JlYXRlTGF5b3V0RGF0YSh1bnNpZ25lZCBkaXJ0eU9iamVjdHMsIHVuc2lnbmVkIHRvdGFsT2Jq
ZWN0cywgYm9vbCBwYXJ0aWFsTGF5b3V0KQogewotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IGRhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IGRhdGEgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpV
bmNoZWNrZWRPYmplY3Q6OmNyZWF0ZSgpOwogICAgIGRhdGEtPnNldEludGVnZXIoImRpcnR5T2Jq
ZWN0cyIsIGRpcnR5T2JqZWN0cyk7CiAgICAgZGF0YS0+c2V0SW50ZWdlcigidG90YWxPYmplY3Rz
IiwgdG90YWxPYmplY3RzKTsKICAgICBkYXRhLT5zZXRCb29sZWFuKCJwYXJ0aWFsTGF5b3V0Iiwg
cGFydGlhbExheW91dCk7CiAgICAgcmV0dXJuIGRhdGEucmVsZWFzZSgpOwogfQogICAgIAotUGFz
c1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlRGVj
b2RlSW1hZ2VEYXRhKGNvbnN0IFN0cmluZyYgaW1hZ2VUeXBlKQorUGFzc1JlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3Jl
YXRlRGVjb2RlSW1hZ2VEYXRhKGNvbnN0IFN0cmluZyYgaW1hZ2VUeXBlKQogewotICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAg
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IGRhdGEgPSBJbnNw
ZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q6OmNyZWF0ZSgpOwogICAgIGRhdGEtPnNl
dFN0cmluZygiaW1hZ2VUeXBlIiwgaW1hZ2VUeXBlKTsKICAgICByZXR1cm4gZGF0YS5yZWxlYXNl
KCk7CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBUaW1lbGluZVJlY29yZEZhY3Rv
cnk6OmNyZWF0ZVJlc2l6ZUltYWdlRGF0YShib29sIHNob3VsZENhY2hlKQorUGFzc1JlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IFRpbWVsaW5lUmVjb3JkRmFjdG9y
eTo6Y3JlYXRlUmVzaXplSW1hZ2VEYXRhKGJvb2wgc2hvdWxkQ2FjaGUpCiB7Ci0gICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gZGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gZGF0YSA9IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdDo6Y3JlYXRlKCk7CiAgICAgZGF0YS0+c2V0
Qm9vbGVhbigiY2FjaGVkIiwgc2hvdWxkQ2FjaGUpOwogICAgIHJldHVybiBkYXRhLnJlbGVhc2Uo
KTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IFRpbWVsaW5lUmVjb3JkRmFjdG9y
eTo6Y3JlYXRlTWFya0RhdGEoYm9vbCBpc01haW5GcmFtZSkKK1Bhc3NSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0
ZU1hcmtEYXRhKGJvb2wgaXNNYWluRnJhbWUpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gZGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gZGF0YSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlVuY2hlY2tlZE9iamVjdDo6Y3JlYXRlKCk7CiAgICAgZGF0YS0+c2V0Qm9vbGVhbigiaXNNYWlu
RnJhbWUiLCBpc01haW5GcmFtZSk7CiAgICAgcmV0dXJuIGRhdGEucmVsZWFzZSgpOwogfQogCi1Q
YXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVQ
YXJzZUhUTUxEYXRhKHVuc2lnbmVkIHN0YXJ0TGluZSkKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZVBh
cnNlSFRNTERhdGEodW5zaWduZWQgc3RhcnRMaW5lKQogewotICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IGRhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IGRhdGEgPSBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpVbmNoZWNrZWRPYmplY3Q6OmNyZWF0ZSgpOwogICAgIGRhdGEtPnNldEludGVnZXIoInN0
YXJ0TGluZSIsIHN0YXJ0TGluZSk7CiAgICAgcmV0dXJuIGRhdGEucmVsZWFzZSgpOwogfQogCi1Q
YXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVB
bmltYXRpb25GcmFtZURhdGEoaW50IGNhbGxiYWNrSWQpCitQYXNzUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVB
bmltYXRpb25GcmFtZURhdGEoaW50IGNhbGxiYWNrSWQpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gZGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gZGF0YSA9IEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlVuY2hlY2tlZE9iamVjdDo6Y3JlYXRlKCk7CiAgICAgZGF0YS0+c2V0SW50ZWdlcigi
aWQiLCBjYWxsYmFja0lkKTsKICAgICByZXR1cm4gZGF0YS5yZWxlYXNlKCk7CiB9CiAKLXN0YXRp
YyBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBjcmVhdGVRdWFkKGNvbnN0IEZsb2F0UXVhZCYg
cXVhZCkKK3N0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZEFy
cmF5PiBjcmVhdGVRdWFkKGNvbnN0IEZsb2F0UXVhZCYgcXVhZCkKIHsKLSAgICBSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+IGFycmF5ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgIFJlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRBcnJheT4gYXJyYXkgPSBJbnNwZWN0b3I6
OlByb3RvY29sOjpVbmNoZWNrZWRBcnJheTo6Y3JlYXRlKCk7CiAgICAgYXJyYXktPnB1c2hEb3Vi
bGUocXVhZC5wMSgpLngoKSk7CiAgICAgYXJyYXktPnB1c2hEb3VibGUocXVhZC5wMSgpLnkoKSk7
CiAgICAgYXJyYXktPnB1c2hEb3VibGUocXVhZC5wMigpLngoKSk7CkBAIC0yNTgsMzMgKzI1OCwz
MyBAQCBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gY3JlYXRlUXVhZChjb25zdCBG
bG9hdFF1YWQmIHF1YWQpCiAgICAgcmV0dXJuIGFycmF5LnJlbGVhc2UoKTsKIH0KIAotUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlUGFpbnRE
YXRhKGNvbnN0IEZsb2F0UXVhZCYgcXVhZCkKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6VW5jaGVja2VkT2JqZWN0PiBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZVBhaW50RGF0
YShjb25zdCBGbG9hdFF1YWQmIHF1YWQpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
ZGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gZGF0YSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVu
Y2hlY2tlZE9iamVjdDo6Y3JlYXRlKCk7CiAgICAgZGF0YS0+c2V0QXJyYXkoImNsaXAiLCBjcmVh
dGVRdWFkKHF1YWQpKTsKICAgICByZXR1cm4gZGF0YS5yZWxlYXNlKCk7CiB9CiAKLXZvaWQgVGlt
ZWxpbmVSZWNvcmRGYWN0b3J5OjphcHBlbmRMYXlvdXRSb290KEluc3BlY3Rvck9iamVjdCogZGF0
YSwgY29uc3QgRmxvYXRRdWFkJiBxdWFkKQordm9pZCBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmFw
cGVuZExheW91dFJvb3QoSW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0KiBkYXRh
LCBjb25zdCBGbG9hdFF1YWQmIHF1YWQpCiB7CiAgICAgZGF0YS0+c2V0QXJyYXkoInJvb3QiLCBj
cmVhdGVRdWFkKHF1YWQpKTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8UHJvdG9jb2w6OlRpbWVs
aW5lOjpDUFVQcm9maWxlTm9kZUNhbGw+IGJ1aWxkSW5zcGVjdG9yT2JqZWN0KGNvbnN0IEpTQzo6
UHJvZmlsZU5vZGU6OkNhbGwmIGNhbGwpCitzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpUaW1lbGluZTo6Q1BVUHJvZmlsZU5vZGVDYWxsPiBidWlsZFVuY2hlY2tlZE9iamVj
dChjb25zdCBKU0M6OlByb2ZpbGVOb2RlOjpDYWxsJiBjYWxsKQogewotICAgIFJlZlB0cjxQcm90
b2NvbDo6VGltZWxpbmU6OkNQVVByb2ZpbGVOb2RlQ2FsbD4gcmVzdWx0ID0gUHJvdG9jb2w6OlRp
bWVsaW5lOjpDUFVQcm9maWxlTm9kZUNhbGw6OmNyZWF0ZSgpCisgICAgUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlRpbWVsaW5lOjpDUFVQcm9maWxlTm9kZUNhbGw+IHJlc3VsdCA9IFByb3Rv
Y29sOjpUaW1lbGluZTo6Q1BVUHJvZmlsZU5vZGVDYWxsOjpjcmVhdGUoKQogICAgICAgICAuc2V0
U3RhcnRUaW1lKGNhbGwuc3RhcnRUaW1lKCkpCiAgICAgICAgIC5zZXRUb3RhbFRpbWUoY2FsbC5l
bGFwc2VkVGltZSgpKTsKICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKIH0KIAotc3RhdGlj
IFBhc3NSZWZQdHI8UHJvdG9jb2w6OlRpbWVsaW5lOjpDUFVQcm9maWxlTm9kZT4gYnVpbGRJbnNw
ZWN0b3JPYmplY3QoY29uc3QgSlNDOjpQcm9maWxlTm9kZSogbm9kZSkKK3N0YXRpYyBQYXNzUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRpbWVsaW5lOjpDUFVQcm9maWxlTm9kZT4gYnVpbGRV
bmNoZWNrZWRPYmplY3QoY29uc3QgSlNDOjpQcm9maWxlTm9kZSogbm9kZSkKIHsKLSAgICBSZWZQ
dHI8UHJvdG9jb2w6OkFycmF5PFByb3RvY29sOjpUaW1lbGluZTo6Q1BVUHJvZmlsZU5vZGVDYWxs
Pj4gY2FsbHMgPSBQcm90b2NvbDo6QXJyYXk8UHJvdG9jb2w6OlRpbWVsaW5lOjpDUFVQcm9maWxl
Tm9kZUNhbGw+OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJy
YXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGltZWxpbmU6OkNQVVByb2ZpbGVOb2RlQ2FsbD4+IGNh
bGxzID0gUHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRpbWVsaW5lOjpDUFVQ
cm9maWxlTm9kZUNhbGw+OjpjcmVhdGUoKTsKICAgICBmb3IgKGNvbnN0IEpTQzo6UHJvZmlsZU5v
ZGU6OkNhbGwmIGNhbGwgOiBub2RlLT5jYWxscygpKQotICAgICAgICBjYWxscy0+YWRkSXRlbShi
dWlsZEluc3BlY3Rvck9iamVjdChjYWxsKSk7CisgICAgICAgIGNhbGxzLT5hZGRJdGVtKGJ1aWxk
VW5jaGVja2VkT2JqZWN0KGNhbGwpKTsKIAotICAgIFJlZlB0cjxQcm90b2NvbDo6VGltZWxpbmU6
OkNQVVByb2ZpbGVOb2RlPiByZXN1bHQgPSBQcm90b2NvbDo6VGltZWxpbmU6OkNQVVByb2ZpbGVO
b2RlOjpjcmVhdGUoKQorICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpUaW1lbGluZTo6
Q1BVUHJvZmlsZU5vZGU+IHJlc3VsdCA9IFByb3RvY29sOjpUaW1lbGluZTo6Q1BVUHJvZmlsZU5v
ZGU6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRJZChub2RlLT5pZCgpKQogICAgICAgICAuc2V0Q2Fs
bHMoY2FsbHMucmVsZWFzZSgpKTsKIApAQCAtMjk4LDMwICsyOTgsMzAgQEAgc3RhdGljIFBhc3NS
ZWZQdHI8UHJvdG9jb2w6OlRpbWVsaW5lOjpDUFVQcm9maWxlTm9kZT4gYnVpbGRJbnNwZWN0b3JP
YmplY3QoY29uc3QKICAgICB9CiAKICAgICBpZiAoIW5vZGUtPmNoaWxkcmVuKCkuaXNFbXB0eSgp
KSB7Ci0gICAgICAgIFJlZlB0cjxQcm90b2NvbDo6QXJyYXk8UHJvdG9jb2w6OlRpbWVsaW5lOjpD
UFVQcm9maWxlTm9kZT4+IGNoaWxkcmVuID0gUHJvdG9jb2w6OkFycmF5PFByb3RvY29sOjpUaW1l
bGluZTo6Q1BVUHJvZmlsZU5vZGU+OjpjcmVhdGUoKTsKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRpbWVsaW5lOjpDUFVQcm9m
aWxlTm9kZT4+IGNoaWxkcmVuID0gUHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlRpbWVsaW5lOjpDUFVQcm9maWxlTm9kZT46OmNyZWF0ZSgpOwogICAgICAgICBmb3IgKFJlZlB0
cjxKU0M6OlByb2ZpbGVOb2RlPiBwcm9maWxlTm9kZSA6IG5vZGUtPmNoaWxkcmVuKCkpCi0gICAg
ICAgICAgICBjaGlsZHJlbi0+YWRkSXRlbShidWlsZEluc3BlY3Rvck9iamVjdChwcm9maWxlTm9k
ZS5nZXQoKSkpOworICAgICAgICAgICAgY2hpbGRyZW4tPmFkZEl0ZW0oYnVpbGRVbmNoZWNrZWRP
YmplY3QocHJvZmlsZU5vZGUuZ2V0KCkpKTsKICAgICAgICAgcmVzdWx0LT5zZXRDaGlsZHJlbihj
aGlsZHJlbik7CiAgICAgfQogCiAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CiB9CiAKLXN0
YXRpYyBQYXNzUmVmUHRyPFByb3RvY29sOjpUaW1lbGluZTo6Q1BVUHJvZmlsZT4gYnVpbGRQcm9m
aWxlSW5zcGVjdG9yT2JqZWN0KGNvbnN0IEpTQzo6UHJvZmlsZSogcHJvZmlsZSkKK3N0YXRpYyBQ
YXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRpbWVsaW5lOjpDUFVQcm9maWxlPiBidWls
ZFByb2ZpbGVVbmNoZWNrZWRPYmplY3QoY29uc3QgSlNDOjpQcm9maWxlKiBwcm9maWxlKQogewot
ICAgIFJlZlB0cjxQcm90b2NvbDo6QXJyYXk8UHJvdG9jb2w6OlRpbWVsaW5lOjpDUFVQcm9maWxl
Tm9kZT4+IHJvb3ROb2RlcyA9IFByb3RvY29sOjpBcnJheTxQcm90b2NvbDo6VGltZWxpbmU6OkNQ
VVByb2ZpbGVOb2RlPjo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRpbWVsaW5lOjpDUFVQcm9maWxlTm9kZT4+IHJv
b3ROb2RlcyA9IFByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpUaW1lbGluZTo6
Q1BVUHJvZmlsZU5vZGU+OjpjcmVhdGUoKTsKICAgICBmb3IgKFJlZlB0cjxKU0M6OlByb2ZpbGVO
b2RlPiBwcm9maWxlTm9kZSA6IHByb2ZpbGUtPnJvb3ROb2RlKCktPmNoaWxkcmVuKCkpCi0gICAg
ICAgIHJvb3ROb2Rlcy0+YWRkSXRlbShidWlsZEluc3BlY3Rvck9iamVjdChwcm9maWxlTm9kZS5n
ZXQoKSkpOworICAgICAgICByb290Tm9kZXMtPmFkZEl0ZW0oYnVpbGRVbmNoZWNrZWRPYmplY3Qo
cHJvZmlsZU5vZGUuZ2V0KCkpKTsKIAotICAgIFJlZlB0cjxQcm90b2NvbDo6VGltZWxpbmU6OkNQ
VVByb2ZpbGU+IHJlc3VsdCA9IFByb3RvY29sOjpUaW1lbGluZTo6Q1BVUHJvZmlsZTo6Y3JlYXRl
KCkKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGltZWxpbmU6OkNQVVByb2ZpbGU+
IHJlc3VsdCA9IFByb3RvY29sOjpUaW1lbGluZTo6Q1BVUHJvZmlsZTo6Y3JlYXRlKCkKICAgICAg
ICAgLnNldFJvb3ROb2Rlcyhyb290Tm9kZXMpOwogCiAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNl
KCk7CiB9CiAKLXZvaWQgVGltZWxpbmVSZWNvcmRGYWN0b3J5OjphcHBlbmRQcm9maWxlKEluc3Bl
Y3Rvck9iamVjdCogZGF0YSwgUGFzc1JlZlB0cjxKU0M6OlByb2ZpbGU+IHByb2ZpbGUpCit2b2lk
IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6YXBwZW5kUHJvZmlsZShJbnNwZWN0b3I6OlByb3RvY29s
OjpVbmNoZWNrZWRPYmplY3QqIGRhdGEsIFBhc3NSZWZQdHI8SlNDOjpQcm9maWxlPiBwcm9maWxl
KQogewotICAgIGRhdGEtPnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgicHJvZmlsZSIpLCBidWlsZFBy
b2ZpbGVJbnNwZWN0b3JPYmplY3QocHJvZmlsZS5nZXQoKSkpOworICAgIGRhdGEtPnNldFZhbHVl
KEFTQ0lJTGl0ZXJhbCgicHJvZmlsZSIpLCBidWlsZFByb2ZpbGVVbmNoZWNrZWRPYmplY3QocHJv
ZmlsZS5nZXQoKSkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvVGltZWxpbmVSZWNvcmRGYWN0b3J5LmggYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvVGltZWxpbmVSZWNvcmRGYWN0b3J5LmgKaW5kZXggOWYxMTMxMTBk
OTRlNjM3YTQ1YjBmNjBhNDU0NTNkMTRlNDQxNTlkMy4uZWRiYzI5ZWYyZWViYTRiYzk1MTY0NzQ0
MTMzMTQ0Yjk3NTQ0ZDgzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1Rp
bWVsaW5lUmVjb3JkRmFjdG9yeS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9UaW1l
bGluZVJlY29yZEZhY3RvcnkuaApAQCAtMzMsNyArMzMsNyBAQAogI2RlZmluZSBUaW1lbGluZVJl
Y29yZEZhY3RvcnlfaAogCiAjaW5jbHVkZSAiVVJMLmgiCi0jaW5jbHVkZSA8aW5zcGVjdG9yL0lu
c3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JQcm90b2NvbFR5
cGVzLmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KIApAQCAtNTUsNjIgKzU1LDYyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAg
IGNsYXNzIFRpbWVsaW5lUmVjb3JkRmFjdG9yeSB7CiAgICAgcHVibGljOgotICAgICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gY3JlYXRlR2VuZXJpY1Jl
Y29yZChkb3VibGUgc3RhcnRUaW1lLCBpbnQgbWF4Q2FsbFN0YWNrRGVwdGgpOwotICAgICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gY3JlYXRlQmFja2dy
b3VuZFJlY29yZChkb3VibGUgc3RhcnRUaW1lLCBjb25zdCBTdHJpbmcmIHRocmVhZCk7CisgICAg
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVj
dD4gY3JlYXRlR2VuZXJpY1JlY29yZChkb3VibGUgc3RhcnRUaW1lLCBpbnQgbWF4Q2FsbFN0YWNr
RGVwdGgpOworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpV
bmNoZWNrZWRPYmplY3Q+IGNyZWF0ZUJhY2tncm91bmRSZWNvcmQoZG91YmxlIHN0YXJ0VGltZSwg
Y29uc3QgU3RyaW5nJiB0aHJlYWQpOwogCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVHQ0V2ZW50RGF0YShjb25zdCBzaXplX3QgdXNl
ZEhlYXBTaXplRGVsdGEpOworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IGNyZWF0ZUdDRXZlbnREYXRhKGNvbnN0IHNpemVfdCB1
c2VkSGVhcFNpemVEZWx0YSk7CiAKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9y
OjpJbnNwZWN0b3JPYmplY3Q+IGNyZWF0ZUZ1bmN0aW9uQ2FsbERhdGEoY29uc3QgU3RyaW5nJiBz
Y3JpcHROYW1lLCBpbnQgc2NyaXB0TGluZSk7Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPElu
c3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVDb25zb2xlUHJvZmlsZURhdGEoY29uc3Qg
U3RyaW5nJiB0aXRsZSk7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gY3JlYXRlRnVuY3Rpb25DYWxsRGF0YShjb25zdCBTdHJp
bmcmIHNjcmlwdE5hbWUsIGludCBzY3JpcHRMaW5lKTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBjcmVhdGVDb25zb2xlUHJv
ZmlsZURhdGEoY29uc3QgU3RyaW5nJiB0aXRsZSk7CiAKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGNyZWF0ZVByb2JlU2FtcGxlRGF0YShjb25z
dCBJbnNwZWN0b3I6OlNjcmlwdEJyZWFrcG9pbnRBY3Rpb24mLCBpbnQgaGl0Q291bnQpOworICAg
ICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmpl
Y3Q+IGNyZWF0ZVByb2JlU2FtcGxlRGF0YShjb25zdCBJbnNwZWN0b3I6OlNjcmlwdEJyZWFrcG9p
bnRBY3Rpb24mLCBpbnQgaGl0Q291bnQpOwogCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPElu
c3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVFdmVudERpc3BhdGNoRGF0YShjb25zdCBF
dmVudCYpOworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpV
bmNoZWNrZWRPYmplY3Q+IGNyZWF0ZUV2ZW50RGlzcGF0Y2hEYXRhKGNvbnN0IEV2ZW50Jik7CiAK
LSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGNy
ZWF0ZUdlbmVyaWNUaW1lckRhdGEoaW50IHRpbWVySWQpOworICAgICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IGNyZWF0ZUdlbmVyaWNU
aW1lckRhdGEoaW50IHRpbWVySWQpOwogCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVUaW1lckluc3RhbGxEYXRhKGludCB0aW1lcklk
LCBpbnQgdGltZW91dCwgYm9vbCBzaW5nbGVTaG90KTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBjcmVhdGVUaW1lckluc3Rh
bGxEYXRhKGludCB0aW1lcklkLCBpbnQgdGltZW91dCwgYm9vbCBzaW5nbGVTaG90KTsKIAotICAg
ICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gY3JlYXRl
WEhSUmVhZHlTdGF0ZUNoYW5nZURhdGEoY29uc3QgU3RyaW5nJiB1cmwsIGludCByZWFkeVN0YXRl
KTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVj
a2VkT2JqZWN0PiBjcmVhdGVYSFJSZWFkeVN0YXRlQ2hhbmdlRGF0YShjb25zdCBTdHJpbmcmIHVy
bCwgaW50IHJlYWR5U3RhdGUpOwogCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rv
cjo6SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVYSFJMb2FkRGF0YShjb25zdCBTdHJpbmcmIHVybCk7
CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tl
ZE9iamVjdD4gY3JlYXRlWEhSTG9hZERhdGEoY29uc3QgU3RyaW5nJiB1cmwpOwogCi0gICAgICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVFdmFs
dWF0ZVNjcmlwdERhdGEoY29uc3QgU3RyaW5nJiwgZG91YmxlIGxpbmVOdW1iZXIpOworICAgICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+
IGNyZWF0ZUV2YWx1YXRlU2NyaXB0RGF0YShjb25zdCBTdHJpbmcmLCBkb3VibGUgbGluZU51bWJl
cik7CiAKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmpl
Y3Q+IGNyZWF0ZVRpbWVTdGFtcERhdGEoY29uc3QgU3RyaW5nJik7CisgICAgICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gY3JlYXRlVGlt
ZVN0YW1wRGF0YShjb25zdCBTdHJpbmcmKTsKIAotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJ
bnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gY3JlYXRlUmVzb3VyY2VTZW5kUmVxdWVzdERhdGEo
Y29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYpOworICAgICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+
IGNyZWF0ZVJlc291cmNlU2VuZFJlcXVlc3REYXRhKGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBj
b25zdCBSZXNvdXJjZVJlcXVlc3QmKTsKIAotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNw
ZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gY3JlYXRlU2NoZWR1bGVSZXNvdXJjZVJlcXVlc3REYXRh
KGNvbnN0IFN0cmluZyYpOworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IGNyZWF0ZVNjaGVkdWxlUmVzb3VyY2VSZXF1ZXN0RGF0
YShjb25zdCBTdHJpbmcmKTsKIAotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3I6
Okluc3BlY3Rvck9iamVjdD4gY3JlYXRlUmVzb3VyY2VSZWNlaXZlUmVzcG9uc2VEYXRhKGNvbnN0
IFN0cmluZyYgcmVxdWVzdElkLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CisgICAgICAgIHN0
YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gY3Jl
YXRlUmVzb3VyY2VSZWNlaXZlUmVzcG9uc2VEYXRhKGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBj
b25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CiAKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5z
cGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGNyZWF0ZVJlY2VpdmVSZXNvdXJjZURhdGEoY29uc3Qg
U3RyaW5nJiByZXF1ZXN0SWQsIGludCBsZW5ndGgpOworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IGNyZWF0ZVJlY2VpdmVSZXNv
dXJjZURhdGEoY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGludCBsZW5ndGgpOwogCi0gICAgICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVSZXNv
dXJjZUZpbmlzaERhdGEoY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGJvb2wgZGlkRmFpbCwgZG91
YmxlIGZpbmlzaFRpbWUpOworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IGNyZWF0ZVJlc291cmNlRmluaXNoRGF0YShjb25zdCBT
dHJpbmcmIHJlcXVlc3RJZCwgYm9vbCBkaWRGYWlsLCBkb3VibGUgZmluaXNoVGltZSk7CiAKLSAg
ICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGNyZWF0
ZUxheW91dERhdGEodW5zaWduZWQgZGlydHlPYmplY3RzLCB1bnNpZ25lZCB0b3RhbE9iamVjdHMs
IGJvb2wgcGFydGlhbExheW91dCk7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gY3JlYXRlTGF5b3V0RGF0YSh1bnNpZ25lZCBk
aXJ0eU9iamVjdHMsIHVuc2lnbmVkIHRvdGFsT2JqZWN0cywgYm9vbCBwYXJ0aWFsTGF5b3V0KTsK
IAotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4g
Y3JlYXRlRGVjb2RlSW1hZ2VEYXRhKGNvbnN0IFN0cmluZyYgaW1hZ2VUeXBlKTsKKyAgICAgICAg
c3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBj
cmVhdGVEZWNvZGVJbWFnZURhdGEoY29uc3QgU3RyaW5nJiBpbWFnZVR5cGUpOwogCi0gICAgICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVSZXNp
emVJbWFnZURhdGEoYm9vbCBzaG91bGRDYWNoZSk7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gY3JlYXRlUmVzaXplSW1hZ2VE
YXRhKGJvb2wgc2hvdWxkQ2FjaGUpOwogCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVNYXJrRGF0YShib29sIGlzTWFpbkZyYW1lKTsK
KyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2Vk
T2JqZWN0PiBjcmVhdGVNYXJrRGF0YShib29sIGlzTWFpbkZyYW1lKTsKIAotICAgICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gY3JlYXRlUGFyc2VIVE1M
RGF0YSh1bnNpZ25lZCBzdGFydExpbmUpOworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IGNyZWF0ZVBhcnNlSFRNTERhdGEodW5z
aWduZWQgc3RhcnRMaW5lKTsKIAotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3I6
Okluc3BlY3Rvck9iamVjdD4gY3JlYXRlQW5pbWF0aW9uRnJhbWVEYXRhKGludCBjYWxsYmFja0lk
KTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVj
a2VkT2JqZWN0PiBjcmVhdGVBbmltYXRpb25GcmFtZURhdGEoaW50IGNhbGxiYWNrSWQpOwogCi0g
ICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBjcmVh
dGVQYWludERhdGEoY29uc3QgRmxvYXRRdWFkJik7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gY3JlYXRlUGFpbnREYXRhKGNv
bnN0IEZsb2F0UXVhZCYpOwogCi0gICAgICAgIHN0YXRpYyB2b2lkIGFwcGVuZExheW91dFJvb3Qo
SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QqIGRhdGEsIGNvbnN0IEZsb2F0UXVhZCYpOworICAg
ICAgICBzdGF0aWMgdm9pZCBhcHBlbmRMYXlvdXRSb290KEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVu
Y2hlY2tlZE9iamVjdCogZGF0YSwgY29uc3QgRmxvYXRRdWFkJik7CiAKLSAgICAgICAgc3RhdGlj
IHZvaWQgYXBwZW5kUHJvZmlsZShJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCosIFBhc3NSZWZQ
dHI8SlNDOjpQcm9maWxlPik7CisgICAgICAgIHN0YXRpYyB2b2lkIGFwcGVuZFByb2ZpbGUoSW5z
cGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0KiwgUGFzc1JlZlB0cjxKU0M6OlByb2Zp
bGU+KTsKIAogI2lmIEVOQUJMRShXRUJfU09DS0VUUykKLSAgICAgICAgc3RhdGljIGlubGluZSBQ
YXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVXZWJTb2NrZXRDcmVh
dGVEYXRhKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0
cmluZyYgcHJvdG9jb2wpCisgICAgICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IGNyZWF0ZVdlYlNvY2tldENyZWF0ZURhdGEo
dW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBw
cm90b2NvbCkKICAgICAgICAgewotICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVj
dG9yT2JqZWN0PiBkYXRhID0gSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwor
ICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4g
ZGF0YSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdDo6Y3JlYXRlKCk7CiAg
ICAgICAgICAgICBkYXRhLT5zZXRJbnRlZ2VyKCJpZGVudGlmaWVyIiwgaWRlbnRpZmllcik7CiAg
ICAgICAgICAgICBkYXRhLT5zZXRTdHJpbmcoInVybCIsIHVybC5zdHJpbmcoKSk7CiAgICAgICAg
ICAgICBpZiAoIXByb3RvY29sLmlzTnVsbCgpKQpAQCAtMTE4LDkgKzExOCw5IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgICAgIHJldHVybiBkYXRhLnJlbGVhc2UoKTsKICAgICAgICAg
fQogCi0gICAgICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rv
ck9iamVjdD4gY3JlYXRlR2VuZXJpY1dlYlNvY2tldERhdGEodW5zaWduZWQgbG9uZyBpZGVudGlm
aWVyKQorICAgICAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6VW5jaGVja2VkT2JqZWN0PiBjcmVhdGVHZW5lcmljV2ViU29ja2V0RGF0YSh1bnNpZ25lZCBs
b25nIGlkZW50aWZpZXIpCiAgICAgICAgIHsKLSAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6
Okluc3BlY3Rvck9iamVjdD4gZGF0YSA9IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKKyAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRP
YmplY3Q+IGRhdGEgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q6OmNyZWF0
ZSgpOwogICAgICAgICAgICAgZGF0YS0+c2V0SW50ZWdlcigiaWRlbnRpZmllciIsIGlkZW50aWZp
ZXIpOwogICAgICAgICAgICAgcmV0dXJuIGRhdGEucmVsZWFzZSgpOwogICAgICAgICB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NvbnRlbnRTZWN1cml0eVBvbGljeS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL0NvbnRlbnRTZWN1cml0eVBvbGljeS5jcHAKaW5kZXggNDRhZmYx
NmVmOTM3MTc5NDAzNTI2NzczZTkwNjA2ZTY5MWIwOTdjZC4uNzRjZDdhMTgxN2NmMzZiNzQ0ODNk
YTEwMzI3ODcxN2RiN2UxNDIyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9Db250
ZW50U2VjdXJpdHlQb2xpY3kuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ29udGVudFNl
Y3VyaXR5UG9saWN5LmNwcApAQCAtNDIsNyArNDIsNyBAQAogI2luY2x1ZGUgIlNlY3VyaXR5UG9s
aWN5VmlvbGF0aW9uRXZlbnQuaCIKICNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKICNpbmNsdWRl
ICJVUkwuaCIKLSNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVk
ZSA8aW5zcGVjdG9yL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KICNpbmNsdWRlIDxpbnNwZWN0
b3IvU2NyaXB0Q2FsbFN0YWNrLmg+CiAjaW5jbHVkZSA8aW5zcGVjdG9yL1NjcmlwdENhbGxTdGFj
a0ZhY3RvcnkuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgpAQCAtMTY0Myw3ICsxNjQzLDcg
QEAgdm9pZCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OnJlcG9ydFZpb2xhdGlvbihjb25zdCBTdHJp
bmcmIGRpcmVjdGl2ZVRleHQsIGNvbnN0IFMKICAgICAvLyBzZW50IGV4cGxpY2l0bHkuIEFzIGZv
ciB3aGljaCBkaXJlY3RpdmUgd2FzIHZpb2xhdGVkLCB0aGF0J3MgcHJldHR5CiAgICAgLy8gaGFy
bWxlc3MgaW5mb3JtYXRpb24uCiAKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBjc3BSZXBv
cnQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IGNzcFJlcG9ydCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlVuY2hlY2tlZE9iamVjdDo6Y3JlYXRlKCk7CiAgICAgY3NwUmVwb3J0LT5zZXRTdHJpbmcoQVND
SUlMaXRlcmFsKCJkb2N1bWVudC11cmkiKSwgZG9jdW1lbnQudXJsKCkuc3RyaXBwZWRGb3JVc2VB
c1JlZmVycmVyKCkpOwogICAgIGNzcFJlcG9ydC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgicmVm
ZXJyZXIiKSwgZG9jdW1lbnQucmVmZXJyZXIoKSk7CiAgICAgY3NwUmVwb3J0LT5zZXRTdHJpbmco
QVNDSUlMaXRlcmFsKCJ2aW9sYXRlZC1kaXJlY3RpdmUiKSwgZGlyZWN0aXZlVGV4dCk7CkBAIC0x
NjY0LDcgKzE2NjQsNyBAQCB2b2lkIENvbnRlbnRTZWN1cml0eVBvbGljeTo6cmVwb3J0VmlvbGF0
aW9uKGNvbnN0IFN0cmluZyYgZGlyZWN0aXZlVGV4dCwgY29uc3QgUwogICAgICAgICBjc3BSZXBv
cnQtPnNldEludGVnZXIoQVNDSUlMaXRlcmFsKCJsaW5lLW51bWJlciIpLCBjYWxsRnJhbWUtPmxp
bmVOdW1iZXIoKSk7CiAgICAgfQogCi0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVwb3J0
T2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiByZXBvcnRPYmplY3QgPSBJbnNwZWN0b3I6OlBy
b3RvY29sOjpVbmNoZWNrZWRPYmplY3Q6OmNyZWF0ZSgpOwogICAgIHJlcG9ydE9iamVjdC0+c2V0
T2JqZWN0KEFTQ0lJTGl0ZXJhbCgiY3NwLXJlcG9ydCIpLCBjc3BSZXBvcnQucmVsZWFzZSgpKTsK
IAogICAgIFJlZlB0cjxGb3JtRGF0YT4gcmVwb3J0ID0gRm9ybURhdGE6OmNyZWF0ZShyZXBvcnRP
YmplY3QtPnRvSlNPTlN0cmluZygpLnV0ZjgoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS90ZXN0aW5nL0ludGVybmFscy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFs
cy5jcHAKaW5kZXggM2UzYmEzM2VjZTY1N2RjNmRlYTkyYjFhOTUxMjRkYWI1N2YyMDlhYi4uZTFi
Zjk1MzA3NjEyN2ZjYzYzZThhMWQ0ZjFjZGFmMmVhZTE3ZjZmMCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3Rp
bmcvSW50ZXJuYWxzLmNwcApAQCAtMTAzLDcgKzEwMyw3IEBACiAjaW5jbHVkZSAiV29ya2VyVGhy
ZWFkLmgiCiAjaW5jbHVkZSA8Ynl0ZWNvZGUvQ29kZUJsb2NrLmg+CiAjaW5jbHVkZSA8aW5zcGVj
dG9yL0luc3BlY3RvckFnZW50QmFzZS5oPgotI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JW
YWx1ZXMuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgog
I2luY2x1ZGUgPHJ1bnRpbWUvSlNDSW5saW5lcy5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNDSlNW
YWx1ZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KQEAgLTc1Myw3ICs3NTMsNyBA
QCBTdHJpbmcgSW50ZXJuYWxzOjppbnNwZWN0b3JIaWdobGlnaHRPYmplY3QoRXhjZXB0aW9uQ29k
ZSYgZWMpCiAgICAgICAgIGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJSOwogICAgICAgICByZXR1cm4g
U3RyaW5nKCk7CiAgICAgfQotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG9iamVjdCA9IGRv
Y3VtZW50LT5wYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5idWlsZE9iamVjdEZvckhpZ2hs
aWdodGVkTm9kZSgpOworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRP
YmplY3Q+IG9iamVjdCA9IGRvY3VtZW50LT5wYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5i
dWlsZE9iamVjdEZvckhpZ2hsaWdodGVkTm9kZSgpOwogICAgIHJldHVybiBvYmplY3QgPyBvYmpl
Y3QtPnRvSlNPTlN0cmluZygpIDogU3RyaW5nKCk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShl
Yyk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>239688</attachid>
            <date>2014-10-11 15:29:08 -0700</date>
            <delta_ts>2014-10-16 12:09:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137636-20141011152911.patch</filename>
            <type>text/plain</type>
            <size>441414</size>
            <attacher name="Brian Burg">burg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc0NjMzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA0
ZWUyMDEyZDUxM2Y5MWJlZmM0YTdjYmNiZjI0MGRmMGJlNjcwOWI3Li4wZjc3YTBmZjliN2EyNTc3
MGJkZTVhNGRkODNhZmU2YjBhNWY5NTBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMzAgQEAKKzIwMTQtMTAtMTEgIEJyaWFuIEouIEJ1cmcgIDxidXJnQGNzLndhc2hpbmd0
b24uZWR1PgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IG1vdmUgdW5jaGVja2VkIEluc3BlY3Rv
clZhbHVlcyBpbnRvIFByb3RvY29sIG5hbWVzcGFjZQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3NjM2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgSW4gZWZmb3J0cyB0byByZWR1Y2UgdXNlcyBvZiAicmF3
IiBpbnNwZWN0b3Igb2JqZWN0cyB0aHJvdWdob3V0IHRoZSBjb2RlYmFzZSwKKyAgICAgICAgdGhp
cyBwYXRjaCBtb3ZlcyBJbnNwZWN0b3JWYWx1ZXMgaW50byB0aGUgUHJvdG9jb2wgbmFtZXNwYWNl
LiBTdWJzZXF1ZW50IHdvcmsKKyAgICAgICAgd2lsbCBjb252ZXJ0IHVzZXMgb2YgdW5jaGVja2Vk
IG9iamVjdHMgdG8gUHJvdG9jb2w6OkRvbWFpbjo6T2JqZWN0IGluc3RhbmNlcywKKyAgICAgICAg
d2hvc2UgZmllbGRzIGFyZSBzaGFwZS1jaGVja2VkIHdoZW4gZ29pbmcgYWNyb3NzIHRoZSBjaGFu
bmVsIHRvIG9yIGZyb20gdGhlIGZyb250ZW5kPgorCisgICAgICAgIFJlbmFtaW5nczoKKworICAg
ICAgICBJbnNwZWN0b3J7T2JqZWN0LCBWYWx1ZSwgQXJyYXl9IC0+IFByb3RvY29sOjpVbmNoZWNr
ZWR7T2JqZWN0LCBWYWx1ZSwgQXJyYXl9CisgICAgICAgIEluc3BlY3RvckJhc2ljVmFsdWUgLT4g
UHJvdG9jb2w6OlByaW1pdGl2ZVZhbHVlCisgICAgICAgIEluc3BlY3RvclN0cmluZyAtPiBQcm90
b2NvbDo6U3RyaW5nVmFsdWUKKworICAgICAgICBUaGlzIHBhdGNoIGFsc28gcmVtb3ZlcyB0aGUg
dW5uZWNlc3NhcnkgaW5kaXJlY3Rpb24gZnJvbSBBcnJheUl0ZW1IZWxwZXIgYW5kCisgICAgICAg
IG1vdmVzIEluc3BlY3RvclZhbHVlIHN1YmNsYXNzZXMgKG5vdyBuYW1lZCBVbmNoZWNrZWRWYWx1
ZSkgdG8gSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4
dDoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHBy
b2o6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hw
cm9qLmZpbHRlcnM6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiBiaW5kaW5ncy9TY3JpcHRWYWx1ZS5jcHA6CisgICAgICAgIChE
ZXByZWNhdGVkOjpqc1RvVW5jaGVja2VkVmFsdWUpOgorICAgICAgICAoRGVwcmVjYXRlZDo6U2Ny
aXB0VmFsdWU6OnRvVW5jaGVja2VkVmFsdWUpOgorICAgICAgICAoRGVwcmVjYXRlZDo6anNUb0lu
c3BlY3RvclZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVl
Ojp0b0luc3BlY3RvclZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9TY3JpcHRW
YWx1ZS5oOgorICAgICAgICAqIGluc3BlY3Rvci9Db25zb2xlTWVzc2FnZS5jcHA6CisgICAgICAg
IChJbnNwZWN0b3I6OkNvbnNvbGVNZXNzYWdlOjphZGRUb0Zyb250ZW5kKToKKyAgICAgICAgKiBp
bnNwZWN0b3IvQ29udGVudFNlYXJjaFV0aWxpdGllcy5jcHA6CisgICAgICAgICogaW5zcGVjdG9y
L0luamVjdGVkU2NyaXB0LmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQ6
OmdldEZ1bmN0aW9uRGV0YWlscyk6CisgICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0
OjpnZXRQcm9wZXJ0aWVzKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQ6Omdl
dEludGVybmFsUHJvcGVydGllcyk6CisgICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0
Ojp3cmFwQ2FsbEZyYW1lcyk6CisgICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0Ojp3
cmFwT2JqZWN0KToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQ6OndyYXBUYWJs
ZSk6CisgICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0OjppbnNwZWN0T2JqZWN0KToK
KyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQ6OnJlbGVhc2VPYmplY3QpOgorICAg
ICAgICAqIGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdEJhc2UuY3BwOgorICAgICAgICAoSW5zcGVj
dG9yOjpJbmplY3RlZFNjcmlwdEJhc2U6Om1ha2VDYWxsKToKKyAgICAgICAgKEluc3BlY3Rvcjo6
SW5qZWN0ZWRTY3JpcHRCYXNlOjptYWtlRXZhbENhbGwpOgorICAgICAgICAqIGluc3BlY3Rvci9J
bmplY3RlZFNjcmlwdEJhc2UuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRN
YW5hZ2VyLmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjpp
bmplY3RlZFNjcmlwdEZvck9iamVjdElkKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXIuY3BwOgorICAgICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlOjpzZW5kSWZBY3RpdmUpOgorICAgICAgICAoSW5z
cGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gpOgorICAgICAgICAo
SW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6c2VuZFJlc3BvbnNlKToKKyAg
ICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnJlcG9ydFByb3Rv
Y29sRXJyb3IpOgorICAgICAgICAoSW5zcGVjdG9yOjpnZXRQcm9wZXJ0eVZhbHVlKToKKyAgICAg
ICAgKEluc3BlY3Rvcjo6QXNNZXRob2RCcmlkZ2VzOjphc0ludGVnZXIpOgorICAgICAgICAoSW5z
cGVjdG9yOjpBc01ldGhvZEJyaWRnZXM6OmFzRG91YmxlKToKKyAgICAgICAgKEluc3BlY3Rvcjo6
QXNNZXRob2RCcmlkZ2VzOjphc1N0cmluZyk6CisgICAgICAgIChJbnNwZWN0b3I6OkFzTWV0aG9k
QnJpZGdlczo6YXNCb29sZWFuKToKKyAgICAgICAgKEluc3BlY3Rvcjo6QXNNZXRob2RCcmlkZ2Vz
Ojphc09iamVjdCk6CisgICAgICAgIChJbnNwZWN0b3I6OkFzTWV0aG9kQnJpZGdlczo6YXNBcnJh
eSk6CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRJ
bnRlZ2VyKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6
OmdldERvdWJsZSk6CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyOjpnZXRTdHJpbmcpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcjo6Z2V0Qm9vbGVhbik6CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyOjpnZXRPYmplY3QpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcjo6Z2V0QXJyYXkpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlci5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JQcm90
b2NvbFR5cGVzLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yVmFsdWVzLmNwcC4KKyAgICAgICAgKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBy
b3RvY29sOjpVbmNoZWNrZWRWYWx1ZTo6YXNCb29sZWFuKToKKyAgICAgICAgKEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlByb3RvY29sOjpVbmNoZWNrZWRWYWx1ZTo6YXNEb3VibGUpOgorICAgICAgICAo
SW5zcGVjdG9yOjpQcm90b2NvbDo6UHJvdG9jb2w6OlVuY2hlY2tlZFZhbHVlOjphc0ludGVnZXIp
OgorICAgICAgICAoSW5zcGVjdG9yOjpQcm90b2NvbDo6UHJvdG9jb2w6OlVuY2hlY2tlZFZhbHVl
Ojphc1N0cmluZyk6CisgICAgICAgIChJbnNwZWN0b3I6OlByb3RvY29sOjpQcm90b2NvbDo6VW5j
aGVja2VkVmFsdWU6OmFzVmFsdWUpOgorICAgICAgICAoSW5zcGVjdG9yOjpQcm90b2NvbDo6UHJv
dG9jb2w6OlVuY2hlY2tlZFZhbHVlOjphc09iamVjdCk6CisgICAgICAgIChJbnNwZWN0b3I6OlBy
b3RvY29sOjpQcm90b2NvbDo6VW5jaGVja2VkVmFsdWU6OmFzQXJyYXkpOgorICAgICAgICAoSW5z
cGVjdG9yOjpQcm90b2NvbDo6UHJvdG9jb2w6OlVuY2hlY2tlZFZhbHVlOjpwYXJzZUpTT04pOgor
ICAgICAgICAoSW5zcGVjdG9yOjpQcm90b2NvbDo6UHJvdG9jb2w6OlVuY2hlY2tlZFZhbHVlOjp0
b0pTT05TdHJpbmcpOgorICAgICAgICAoSW5zcGVjdG9yOjpQcm90b2NvbDo6UHJvdG9jb2w6OlVu
Y2hlY2tlZFZhbHVlOjp3cml0ZUpTT04pOgorICAgICAgICAoSW5zcGVjdG9yOjpQcm90b2NvbDo6
UHJpbWl0aXZlVmFsdWU6OmFzQm9vbGVhbik6CisgICAgICAgIChJbnNwZWN0b3I6OlByb3RvY29s
OjpQcmltaXRpdmVWYWx1ZTo6YXNEb3VibGUpOgorICAgICAgICAoSW5zcGVjdG9yOjpQcm90b2Nv
bDo6UHJpbWl0aXZlVmFsdWU6OmFzSW50ZWdlcik6CisgICAgICAgIChJbnNwZWN0b3I6OlByb3Rv
Y29sOjpQcmltaXRpdmVWYWx1ZTo6d3JpdGVKU09OKToKKyAgICAgICAgKEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlN0cmluZ1ZhbHVlOjphc1N0cmluZyk6CisgICAgICAgIChJbnNwZWN0b3I6OlByb3Rv
Y29sOjpTdHJpbmdWYWx1ZTo6d3JpdGVKU09OKToKKyAgICAgICAgKEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlVuY2hlY2tlZE9iamVjdEJhc2U6On5VbmNoZWNrZWRPYmplY3RCYXNlKToKKyAgICAgICAg
KEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdEJhc2U6OmFzT2JqZWN0KToKKyAg
ICAgICAgKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdEJhc2U6Om9wZW5BY2Nl
c3NvcnMpOgorICAgICAgICAoSW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0QmFz
ZTo6Z2V0Qm9vbGVhbik6CisgICAgICAgIChJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRP
YmplY3RCYXNlOjpnZXRTdHJpbmcpOgorICAgICAgICAoSW5zcGVjdG9yOjpQcm90b2NvbDo6VW5j
aGVja2VkT2JqZWN0QmFzZTo6Z2V0T2JqZWN0KToKKyAgICAgICAgKEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlVuY2hlY2tlZE9iamVjdEJhc2U6OmdldEFycmF5KToKKyAgICAgICAgKEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdEJhc2U6OmdldCk6CisgICAgICAgIChJbnNwZWN0b3I6
OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3RCYXNlOjpyZW1vdmUpOgorICAgICAgICAoSW5zcGVj
dG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0QmFzZTo6d3JpdGVKU09OKToKKyAgICAgICAg
KEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdEJhc2U6OlVuY2hlY2tlZE9iamVj
dEJhc2UpOgorICAgICAgICAoSW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkQXJyYXlCYXNl
Ojp+VW5jaGVja2VkQXJyYXlCYXNlKToKKyAgICAgICAgKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVu
Y2hlY2tlZEFycmF5QmFzZTo6YXNBcnJheSk6CisgICAgICAgIChJbnNwZWN0b3I6OlByb3RvY29s
OjpVbmNoZWNrZWRBcnJheUJhc2U6OndyaXRlSlNPTik6CisgICAgICAgIChJbnNwZWN0b3I6OlBy
b3RvY29sOjpVbmNoZWNrZWRBcnJheUJhc2U6OlVuY2hlY2tlZEFycmF5QmFzZSk6CisgICAgICAg
IChJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRBcnJheUJhc2U6OmdldCk6CisgICAgICAg
IChJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q6OmNyZWF0ZSk6CisgICAgICAg
IChJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRBcnJheTo6Y3JlYXRlKToKKyAgICAgICAg
KEluc3BlY3Rvcjo6UHJvdG9jb2w6OlByb3RvY29sOjpVbmNoZWNrZWRWYWx1ZTo6bnVsbCk6Cisg
ICAgICAgIChJbnNwZWN0b3I6OlByb3RvY29sOjpQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKToKKyAg
ICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oOgorICAgICAgICAoSW5z
cGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0QmFzZTo6ZmluZCk6CisgICAgICAgIChJ
bnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3RCYXNlOjpzZXRCb29sZWFuKToKKyAg
ICAgICAgKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdEJhc2U6OnNldEludGVn
ZXIpOgorICAgICAgICAoSW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0QmFzZTo6
c2V0RG91YmxlKToKKyAgICAgICAgKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVj
dEJhc2U6OnNldFN0cmluZyk6CisgICAgICAgIChJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNr
ZWRPYmplY3RCYXNlOjpzZXRWYWx1ZSk6CisgICAgICAgIChJbnNwZWN0b3I6OlByb3RvY29sOjpV
bmNoZWNrZWRPYmplY3RCYXNlOjpzZXRPYmplY3QpOgorICAgICAgICAoSW5zcGVjdG9yOjpQcm90
b2NvbDo6VW5jaGVja2VkT2JqZWN0QmFzZTo6c2V0QXJyYXkpOgorICAgICAgICAoSW5zcGVjdG9y
OjpQcm90b2NvbDo6VW5jaGVja2VkQXJyYXlCYXNlOjpwdXNoQm9vbGVhbik6CisgICAgICAgIChJ
bnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRBcnJheUJhc2U6OnB1c2hJbnRlZ2VyKToKKyAg
ICAgICAgKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZEFycmF5QmFzZTo6cHVzaERvdWJs
ZSk6CisgICAgICAgIChJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRBcnJheUJhc2U6OnB1
c2hTdHJpbmcpOgorICAgICAgICAoSW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkQXJyYXlC
YXNlOjpwdXNoVmFsdWUpOgorICAgICAgICAoSW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2Vk
QXJyYXlCYXNlOjpwdXNoT2JqZWN0KToKKyAgICAgICAgKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVu
Y2hlY2tlZEFycmF5QmFzZTo6cHVzaEFycmF5KToKKyAgICAgICAgKEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkFycmF5PFN0cmluZz46OmFkZEl0ZW0pOgorICAgICAgICAoSW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXJyYXk8aW50Pjo6YWRkSXRlbSk6CisgICAgICAgIChJbnNwZWN0b3I6OlByb3RvY29sOjpB
cnJheTxkb3VibGU+OjphZGRJdGVtKToKKyAgICAgICAgKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFy
cmF5PGJvb2w+OjphZGRJdGVtKToKKyAgICAgICAgKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5
PFByb3RvY29sOjpVbmNoZWNrZWRWYWx1ZT46OmFkZEl0ZW0pOgorICAgICAgICAoSW5zcGVjdG9y
OjpQcm90b2NvbDo6QXJyYXk8UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD46OmFkZEl0ZW0pOgor
ICAgICAgICAoSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8UHJvdG9jb2w6OlVuY2hlY2tlZEFy
cmF5Pjo6YWRkSXRlbSk6CisgICAgICAgIChJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxUPjo6
YWRkSXRlbSk6CisgICAgICAgIChJbnNwZWN0b3I6OlByb3RvY29sOjpQcmltaXRpdmVCaW5kaW5n
VHJhaXRzOjphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZSk6CisgICAgICAgIChJbnNwZWN0b3I6
OlByb3RvY29sOjpCaW5kaW5nVHJhaXRzPEFycmF5PFQ+Pjo6cnVudGltZUNhc3QpOgorICAgICAg
ICAoSW5zcGVjdG9yOjpQcm90b2NvbDo6QmluZGluZ1RyYWl0czxBcnJheTxUPj46OmFzc2VydFZh
bHVlSGFzRXhwZWN0ZWRUeXBlKToKKyAgICAgICAgKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkJpbmRp
bmdUcmFpdHM8UHJvdG9jb2w6OlVuY2hlY2tlZFZhbHVlPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3Rl
ZFR5cGUpOgorICAgICAgICAoSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk6Om9wZW5BY2Nlc3Nv
cnMpOiBEZWxldGVkLgorICAgICAgICAoSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk6OmFkZEl0
ZW0pOiBEZWxldGVkLgorICAgICAgICAoSW5zcGVjdG9yOjpQcm90b2NvbDo6U3RydWN0SXRlbVRy
YWl0czo6cHVzaFJlZlB0cik6IERlbGV0ZWQuCisgICAgICAgIChJbnNwZWN0b3I6OlByb3RvY29s
OjpBcnJheUl0ZW1IZWxwZXI8U3RyaW5nPjo6VHJhaXRzOjpwdXNoUmF3KTogRGVsZXRlZC4KKyAg
ICAgICAgKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5SXRlbUhlbHBlcjxpbnQ+OjpUcmFpdHM6
OnB1c2hSYXcpOiBEZWxldGVkLgorICAgICAgICAoSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXlJ
dGVtSGVscGVyPGRvdWJsZT46OlRyYWl0czo6cHVzaFJhdyk6IERlbGV0ZWQuCisgICAgICAgIChJ
bnNwZWN0b3I6OlByb3RvY29sOjpBcnJheUl0ZW1IZWxwZXI8Ym9vbD46OlRyYWl0czo6cHVzaFJh
dyk6IERlbGV0ZWQuCisgICAgICAgIChJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheUl0ZW1IZWxw
ZXI8SW5zcGVjdG9yVmFsdWU+OjpUcmFpdHM6OnB1c2hSZWZQdHIpOiBEZWxldGVkLgorICAgICAg
ICAoSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXlJdGVtSGVscGVyPEluc3BlY3Rvck9iamVjdD46
OlRyYWl0czo6cHVzaFJlZlB0cik6IERlbGV0ZWQuCisgICAgICAgIChJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBcnJheUl0ZW1IZWxwZXI8SW5zcGVjdG9yQXJyYXk+OjpUcmFpdHM6OnB1c2hSZWZQdHIp
OiBEZWxldGVkLgorICAgICAgICAoSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXlJdGVtSGVscGVy
PFByb3RvY29sOjpBcnJheTxUPj46OlRyYWl0czo6cHVzaFJlZlB0cik6IERlbGV0ZWQuCisgICAg
ICAgIChJbnNwZWN0b3I6OlByb3RvY29sOjpCaW5kaW5nVHJhaXRzPFByb3RvY29sOjpBcnJheTxU
Pj46OnJ1bnRpbWVDYXN0KTogRGVsZXRlZC4KKyAgICAgICAgKEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6OkFycmF5PFQ+Pjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3Rl
ZFR5cGUpOiBEZWxldGVkLgorICAgICAgICAoSW5zcGVjdG9yOjpQcm90b2NvbDo6QmluZGluZ1Ry
YWl0czxJbnNwZWN0b3JWYWx1ZT46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg6IFJlbW92ZWQuCisgICAg
ICAgICogaW5zcGVjdG9yL1NjcmlwdENhbGxGcmFtZS5jcHA6CisgICAgICAgIChJbnNwZWN0b3I6
OlNjcmlwdENhbGxGcmFtZTo6YnVpbGRVbmNoZWNrZWRPYmplY3QpOgorICAgICAgICAoSW5zcGVj
dG9yOjpTY3JpcHRDYWxsRnJhbWU6OmJ1aWxkSW5zcGVjdG9yT2JqZWN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKiBpbnNwZWN0b3IvU2NyaXB0Q2FsbEZyYW1lLmg6CisgICAgICAgICogaW5zcGVjdG9y
L1NjcmlwdENhbGxTdGFjay5jcHA6CisgICAgICAgIChJbnNwZWN0b3I6OlNjcmlwdENhbGxTdGFj
azo6YnVpbGRVbmNoZWNrZWRBcnJheSk6CisgICAgICAgIChJbnNwZWN0b3I6OlNjcmlwdENhbGxT
dGFjazo6YnVpbGRJbnNwZWN0b3JBcnJheSk6IERlbGV0ZWQuCisgICAgICAgICogaW5zcGVjdG9y
L1NjcmlwdENhbGxTdGFjay5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9y
QWdlbnQuY3BwOgorICAgICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JBZ2VudDo6aW5zcGVjdCk6
CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBZ2VudC5oOgorICAgICAgICAq
IGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHA6CisgICAgICAgIChJ
bnNwZWN0b3I6OmJ1aWxkT2JqZWN0Rm9yQnJlYWtwb2ludENvb2tpZSk6CisgICAgICAgIChJbnNw
ZWN0b3I6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmJyZWFrcG9pbnRBY3Rpb25zRnJvbVByb3Rv
Y29sKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0QnJl
YWtwb2ludEJ5VXJsKToKKyAgICAgICAgKEluc3BlY3Rvcjo6cGFyc2VMb2NhdGlvbik6CisgICAg
ICAgIChJbnNwZWN0b3I6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9pbnQpOgor
ICAgICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpjb250aW51ZVRvTG9j
YXRpb24pOgorICAgICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzY2hl
ZHVsZVBhdXNlT25OZXh0U3RhdGVtZW50KToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9y
RGVidWdnZXJBZ2VudDo6c2NyaXB0RXhlY3V0aW9uQmxvY2tlZEJ5Q1NQKToKKyAgICAgICAgKElu
c3BlY3Rvcjo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkUGFyc2VTb3VyY2UpOgorICAgICAg
ICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpicmVha1Byb2dyYW0pOgorICAg
ICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oOgorICAgICAg
ICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVudGltZUFnZW50LmNwcDoKKyAgICAgICAg
KEluc3BlY3Rvcjo6SW5zcGVjdG9yUnVudGltZUFnZW50OjpjYWxsRnVuY3Rpb25Pbik6CisgICAg
ICAgIChJbnNwZWN0b3I6Okluc3BlY3RvclJ1bnRpbWVBZ2VudDo6Z2V0UnVudGltZVR5cGVzRm9y
VmFyaWFibGVzQXRPZmZzZXRzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rv
clJ1bnRpbWVBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2Vu
ZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weToKKyAgICAgICAgKEJhY2tlbmREaXNw
YXRjaGVySGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9kaXNwYXRjaGVyX2RlY2xhcmF0aW9uX2Zv
cl9jb21tYW5kKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRl
X2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weToKKyAgICAgICAgKEJhY2tlbmRE
aXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuZ2VuZXJhdGVfb3V0cHV0KToKKyAgICAg
ICAgKEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2Rp
c3BhdGNoZXJfaW1wbGVtZW50YXRpb25fZm9yX2NvbW1hbmQpOgorICAgICAgICAqIGluc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHk6
CisgICAgICAgIChGcm9udGVuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuZ2VuZXJhdGVfb3V0
cHV0KToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2Zyb250
ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHk6CisgICAgICAgIChGcm9udGVuZERpc3Bh
dGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfZGlzcGF0Y2hlcl9pbXBsZW1l
bnRhdGlvbl9mb3JfZXZlbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Z2VuZXJhdGVfcHJvdG9jb2xfdHlwZXNfaGVhZGVyLnB5OgorICAgICAgICAoX2dlbmVyYXRlX2Ns
YXNzX2Zvcl9vYmplY3RfZGVjbGFyYXRpb24pOgorICAgICAgICAoX2dlbmVyYXRlX3VuY2hlY2tl
ZF9zZXR0ZXJfZm9yX21lbWJlcik6CisgICAgICAgIChfZ2VuZXJhdGVfZm9yd2FyZF9kZWNsYXJh
dGlvbnNfZm9yX2JpbmRpbmdfdHJhaXRzKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9j
b2RlZ2VuL2dlbmVyYXRlX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5OgorICAgICAg
ICAoUHJvdG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9hc3NlcnRp
b25fZm9yX29iamVjdF9kZWNsYXJhdGlvbik6CisgICAgICAgIChQcm90b2NvbFR5cGVzSW1wbGVt
ZW50YXRpb25HZW5lcmF0b3IpOgorICAgICAgICAoUHJvdG9jb2xUeXBlc0ltcGxlbWVudGF0aW9u
R2VuZXJhdG9yLl9nZW5lcmF0ZV9hc3NlcnRpb25fZm9yX2VudW0pOgorICAgICAgICAqIGluc3Bl
Y3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yLnB5OgorICAgICAgICAoR2VuZXJhdG9yLnBy
b3RvY29sX3R5cGVfc3RyaW5nX2Zvcl90eXBlKToKKyAgICAgICAgKEdlbmVyYXRvci50eXBlX3N0
cmluZ19mb3JfdW5jaGVja2VkX2Zvcm1hbF9pbl9wYXJhbWV0ZXIpOgorICAgICAgICAoR2VuZXJh
dG9yLnR5cGVfc3RyaW5nX2Zvcl90eXBlX3dpdGhfbmFtZSk6CisgICAgICAgIChHZW5lcmF0b3Ip
OgorICAgICAgICAoR2VuZXJhdG9yLnR5cGVfc3RyaW5nX2Zvcl9zdGFja19pbl9wYXJhbWV0ZXIp
OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yX3RlbXBsYXRl
cy5weToKKyAgICAgICAgKHZvaWQpOgorICAgICAgICAoSW5zcGVjdG9yKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLWFz
eW5jLWF0dHJpYnV0ZS5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRl
cnMuanNvbi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uLXJlc3VsdDoKKyAgICAg
ICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9ldmVudHMtd2l0aC1vcHRpb25h
bC1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2V4cGVjdGVkL2dlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uLXJl
c3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zYW1lLXR5
cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNv
bi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlw
ZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24tcmVzdWx0OgorICAgICAg
ICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYXJy
YXktdHlwZS5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uLXJlc3VsdDoKKyAgICAgICAg
KiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLW9iamVj
dC10eXBlLmpzb24tcmVzdWx0OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4
cGVjdGVkL3R5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbi1yZXN1bHQ6CisgICAgICAg
ICogcmVwbGF5L0VuY29kZWRWYWx1ZS5jcHA6CisgICAgICAgIChKU0M6OkVuY29kZWRWYWx1ZTo6
YXNPYmplY3QpOgorICAgICAgICAoSlNDOjpFbmNvZGVkVmFsdWU6OmFzQXJyYXkpOgorICAgICAg
ICAoSlNDOjpTY2FsYXJFbmNvZGluZ1RyYWl0czxib29sPjo6ZW5jb2RlVmFsdWUpOgorICAgICAg
ICAoSlNDOjpTY2FsYXJFbmNvZGluZ1RyYWl0czxkb3VibGU+OjplbmNvZGVWYWx1ZSk6CisgICAg
ICAgIChKU0M6OlNjYWxhckVuY29kaW5nVHJhaXRzPGZsb2F0Pjo6ZW5jb2RlVmFsdWUpOgorICAg
ICAgICAoSlNDOjpTY2FsYXJFbmNvZGluZ1RyYWl0czxpbnQzMl90Pjo6ZW5jb2RlVmFsdWUpOgor
ICAgICAgICAoSlNDOjpTY2FsYXJFbmNvZGluZ1RyYWl0czxpbnQ2NF90Pjo6ZW5jb2RlVmFsdWUp
OgorICAgICAgICAoSlNDOjpTY2FsYXJFbmNvZGluZ1RyYWl0czx1aW50MzJfdD46OmVuY29kZVZh
bHVlKToKKyAgICAgICAgKEpTQzo6U2NhbGFyRW5jb2RpbmdUcmFpdHM8dWludDY0X3Q+OjplbmNv
ZGVWYWx1ZSk6CisgICAgICAgIChKU0M6OkVuY29kZWRWYWx1ZTo6Z2V0PEVuY29kZWRWYWx1ZT4p
OgorICAgICAgICAqIHJlcGxheS9FbmNvZGVkVmFsdWUuaDoKKyAgICAgICAgKiByZXBsYXkvc2Ny
aXB0cy9Db2RlR2VuZXJhdG9yUmVwbGF5SW5wdXRzLnB5OgorCiAyMDE0LTEwLTEwICBDb21taXQg
UXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCBy
b2xsaW5nIG91dCByMTc0NjA2LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
IGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDdlY2Q0Y2Y5Y2VkMWM1NTAxMjBmY2Qw
MGE2OTRhMWE2YTI4MzNmNzAuLjFkYThlZWU3ZDg1YjM5ZDgzMjEwNzNjODBhYTAzZGEzMjZlMDQ0
MDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxODQgQEAKKzIwMTQtMTAtMTEgIEJyaWFuIEouIEJ1
cmcgIDxidXJnQGNzLndhc2hpbmd0b24uZWR1PgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IG1v
dmUgdW5jaGVja2VkIEluc3BlY3RvclZhbHVlcyBpbnRvIFByb3RvY29sIG5hbWVzcGFjZQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3NjM2CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2hhbmdlIHVzZXMg
b2YgSW5zcGVjdG9yVmFsdWUgc3ViY2xhc3NlcyB0byBVbmNoZWNrZWRWYWx1ZSBzdWJjbGFzc2Vz
LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgbm8gYmVoYXZpb3IgY2hhbmdlZC4KKworICAgICAg
ICAqIEZvcndhcmRpbmdIZWFkZXJzL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBXZWJDb3JlLm9yZGVyOgorICAgICAgICAqIFdlYkNvcmUudmN4cHJvai9X
ZWJDb3JlLnZjeHByb2o6CisgICAgICAgICogV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJv
ai5maWx0ZXJzOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ29tbWFuZExpbmVBUElIb3N0Q3Vz
dG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTQ29tbWFuZExpbmVBUElIb3N0OjppbnNwZWN0
KToKKyAgICAgICAgKiBodG1sL3BhcnNlci9YU1NBdWRpdG9yRGVsZWdhdGUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6WFNTQXVkaXRvckRlbGVnYXRlOjpnZW5lcmF0ZVZpb2xhdGlvblJlcG9ydCk6
CisgICAgICAgICogaW5zcGVjdG9yL0NvbW1hbmRMaW5lQVBJSG9zdC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDb21tYW5kTGluZUFQSUhvc3Q6Omluc3BlY3RJbXBsKToKKyAgICAgICAgKiBpbnNw
ZWN0b3IvQ29tbWFuZExpbmVBUElIb3N0Lmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rv
ckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rv
ckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JD
U1NBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlUHNldWRvQ2xhc3NNYXNrKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpzZXRTdHlsZVRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OnNldFByb3BlcnR5VGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6dG9nZ2xlUHJvcGVydHkpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OnNldFJ1bGVTZWxlY3Rvcik6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6Zm9yY2VQc2V1ZG9TdGF0ZSk6CisgICAgICAg
ICogaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL0lu
c3BlY3RvckNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJv
bGxlcjo6YnVpbGRPYmplY3RGb3JIaWdobGlnaHRlZE5vZGUpOgorICAgICAgICAqIGluc3BlY3Rv
ci9JbnNwZWN0b3JDb250cm9sbGVyLmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRP
TUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlQ29sb3IpOgorICAgICAgICAoV2Vi
Q29yZTo6cGFyc2VDb25maWdDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZVF1YWQpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OnBlcmZvcm1TZWFyY2gpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OnNldFNlYXJjaGluZ0Zvck5vZGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdodENvbmZpZ0Zyb21V
bmNoZWNrZWRPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OnNl
dEluc3BlY3RNb2RlRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2Vu
dDo6aGlnaGxpZ2h0UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6
aGlnaGxpZ2h0UXVhZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6aW5u
ZXJIaWdobGlnaHRRdWFkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50Ojpo
aWdobGlnaHROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpoaWdo
bGlnaHRGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxp
Z2h0Q29uZmlnRnJvbUluc3BlY3Rvck9iamVjdCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3Bl
Y3RvckRPTUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRPTURlYnVnZ2Vy
QWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6
ZGlkSW52YWxpZGF0ZVN0eWxlQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01E
ZWJ1Z2dlckFnZW50Ojp3aWxsSW5zZXJ0RE9NTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JET01EZWJ1Z2dlckFnZW50Ojp3aWxsUmVtb3ZlRE9NTm9kZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50Ojp3aWxsTW9kaWZ5RE9NQXR0cik6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50OjpkZXNjcmlwdGlvbkZvckRP
TUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OnBh
dXNlT25OYXRpdmVFdmVudElmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRP
TURlYnVnZ2VyQWdlbnQ6OndpbGxTZW5kWE1MSHR0cFJlcXVlc3QpOgorICAgICAgICAqIGluc3Bl
Y3Rvci9JbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL0lu
c3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JE
T01TdG9yYWdlQWdlbnQ6OmdldERPTVN0b3JhZ2VJdGVtcyk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OnNldERPTVN0b3JhZ2VJdGVtKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6cmVtb3ZlRE9NU3RvcmFnZUl0ZW0pOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpmaW5kU3RvcmFnZUFy
ZWEpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuaDoKKyAg
ICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5jcHA6CisgICAgICAgICog
aW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL0luc3Bl
Y3RvckluZGV4ZWREQkFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckluZGV4
ZWREQkFnZW50OjpyZXF1ZXN0RGF0YSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvcklu
ZGV4ZWREQkFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRPYmplY3RGb3JQb2ludCk6CisgICAgICAgIChXZWJD
b3JlOjpidWlsZE9iamVjdEZvclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRBcnJheUZv
clF1YWQpOgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRPYmplY3RGb3JIaWdobGlnaHQpOgorICAg
ICAgICAoV2ViQ29yZTo6YnVpbGRPYmplY3RGb3JSZWdpb25IaWdobGlnaHQpOgorICAgICAgICAo
V2ViQ29yZTo6YnVpbGRPYmplY3RGb3JDU1NSZWdpb25zSGlnaGxpZ2h0KToKKyAgICAgICAgKFdl
YkNvcmU6OmJ1aWxkT2JqZWN0Rm9yU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpidWlsZE9iamVj
dEZvckNTU1JlZ2lvbkNvbnRlbnRDbGlwKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck92
ZXJsYXk6OmRyYXdQYWludFJlY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OmJ1aWxkT2JqZWN0Rm9y
UmVuZGVyZXJGcmFnbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRPYmplY3RGb3JTaGFw
ZU91dHNpZGUpOgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRPYmplY3RGb3JFbGVtZW50SW5mbyk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpidWlsZE9iamVjdEZvckhpZ2hs
aWdodGVkTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpkcmF3Tm9k
ZUhpZ2hsaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpyZXNldCk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpldmFsdWF0ZUluT3ZlcmxheSk6
CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuaDoKKyAgICAgICAgKiBpbnNw
ZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
clBhZ2VBZ2VudDo6YWRkU2NyaXB0VG9FdmFsdWF0ZU9uTG9hZCk6CisgICAgICAgICogaW5zcGVj
dG9yL0luc3BlY3RvclBhZ2VBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JS
ZXBsYXlBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpidWlsZFVuY2hlY2tlZE9iamVjdEZv
clBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmJ1aWxkVW5jaGVja2VkT2JqZWN0Rm9ySW5w
dXQpOgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRVbmNoZWNrZWRPYmplY3RGb3JTZXNzaW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OmJ1aWxkVW5jaGVja2VkT2JqZWN0Rm9yU2Vzc2lvblN0YXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OmJ1aWxkVW5jaGVja2VkT2JqZWN0Rm9yU2VnbWVudFN0YXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OlNlcmlhbGl6ZUlucHV0VG9KU09ORnVuY3Rvcjo6b3BlcmF0b3Io
KSk6CisgICAgICAgIChXZWJDb3JlOjpidWlsZFVuY2hlY2tlZE9iamVjdEZvclNlZ21lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnBsYXliYWNrUGF1c2VkKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclJlcGxheUFnZW50OjpwbGF5YmFja0hpdFBvc2l0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclJlcGxheUFnZW50OjpyZXBsYXlUb1Bv
c2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclJlcGxheUFnZW50OjpjdXJyZW50
UmVwbGF5U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVwbGF5QWdlbnQ6Omdl
dFNlc3Npb25EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclJlcGxheUFnZW50Ojpn
ZXRTZWdtZW50RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpidWlsZEluc3BlY3Rvck9iamVjdEZv
clBvc2l0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmJ1aWxkSW5zcGVjdG9yT2Jq
ZWN0Rm9ySW5wdXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRJbnNwZWN0b3JP
YmplY3RGb3JTZXNzaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmJ1aWxkSW5zcGVj
dG9yT2JqZWN0Rm9yU2Vzc2lvblN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmJ1
aWxkSW5zcGVjdG9yT2JqZWN0Rm9yU2VnbWVudFN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OmJ1aWxkSW5zcGVjdG9yT2JqZWN0Rm9yU2VnbWVudCk6IERlbGV0ZWQuCisgICAgICAg
ICogaW5zcGVjdG9yL0luc3BlY3RvclJlcGxheUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9y
L0luc3BlY3RvclJlc291cmNlQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRPYmpl
Y3RGb3JIZWFkZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OmJ1aWxkT2JqZWN0Rm9yUmVzb3VyY2VS
ZXNwb25zZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSZXNvdXJjZUFnZW50Ojp3aWxs
U2VuZFJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6
YnVpbGRJbml0aWF0b3JPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVzb3Vy
Y2VBZ2VudDo6c2V0RXh0cmFIVFRQSGVhZGVycyk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3Bl
Y3RvclJlc291cmNlQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVT
aGVldC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuaDoKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0lkOjpJbnNwZWN0b3JDU1NJZCk6CisgICAgICAg
ICogaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6ZGlkSW52YWxpZGF0ZUxheW91dCk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpkaWRTY2hlZHVsZVN0eWxlUmVjYWxj
dWxhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JUaW1lbGluZUFnZW50Ojp3aWxs
UmVjYWxjdWxhdGVTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JUaW1lbGluZUFn
ZW50Ojp3aWxsUGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yVGltZWxpbmVBZ2Vu
dDo6d2lsbFNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JUaW1lbGluZUFnZW50
OjphZGRSZWNvcmRUb1RpbWVsaW5lKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclRpbWVs
aW5lQWdlbnQ6OnNldEZyYW1lSWRlbnRpZmllcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JUaW1lbGluZUFnZW50OjphcHBlbmRSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yVGltZWxpbmVBZ2VudDo6c2VuZEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
clRpbWVsaW5lQWdlbnQ6OmNyZWF0ZVJlY29yZEVudHJ5KToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvclRpbWVsaW5lQWdlbnQ6OnB1c2hDdXJyZW50UmVjb3JkKToKKyAgICAgICAgKiBpbnNw
ZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yVGltZWxpbmVBZ2VudDo6VGltZWxpbmVSZWNvcmRFbnRyeTo6VGltZWxpbmVSZWNvcmRFbnRy
eSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvcldvcmtlckFnZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvcldvcmtlckFnZW50OjpzZW5kTWVzc2FnZVRvV29ya2VyKToK
KyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yV29ya2VyQWdlbnQuaDoKKyAgICAgICAgKiBp
bnNwZWN0b3IvVGltZWxpbmVSZWNvcmRGYWN0b3J5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRp
bWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlR2VuZXJpY1JlY29yZCk6CisgICAgICAgIChXZWJD
b3JlOjpUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZUJhY2tncm91bmRSZWNvcmQpOgorICAg
ICAgICAoV2ViQ29yZTo6VGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVHQ0V2ZW50RGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZUZ1bmN0aW9u
Q2FsbERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVh
dGVDb25zb2xlUHJvZmlsZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VGltZWxpbmVSZWNvcmRG
YWN0b3J5OjpjcmVhdGVQcm9iZVNhbXBsZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VGltZWxp
bmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVFdmVudERpc3BhdGNoRGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZUdlbmVyaWNUaW1lckRhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6VGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVUaW1lckluc3RhbGxE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlWEhS
UmVhZHlTdGF0ZUNoYW5nZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VGltZWxpbmVSZWNvcmRG
YWN0b3J5OjpjcmVhdGVYSFJMb2FkRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpUaW1lbGluZVJl
Y29yZEZhY3Rvcnk6OmNyZWF0ZUV2YWx1YXRlU2NyaXB0RGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZVRpbWVTdGFtcERhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6VGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVTY2hlZHVsZVJlc291cmNlUmVx
dWVzdERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVh
dGVSZXNvdXJjZVNlbmRSZXF1ZXN0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpUaW1lbGluZVJl
Y29yZEZhY3Rvcnk6OmNyZWF0ZVJlc291cmNlUmVjZWl2ZVJlc3BvbnNlRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZVJlc291cmNlRmluaXNoRGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZVJlY2Vp
dmVSZXNvdXJjZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VGltZWxpbmVSZWNvcmRGYWN0b3J5
OjpjcmVhdGVMYXlvdXREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbWVsaW5lUmVjb3JkRmFj
dG9yeTo6Y3JlYXRlRGVjb2RlSW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbWVsaW5l
UmVjb3JkRmFjdG9yeTo6Y3JlYXRlUmVzaXplSW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OlRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlTWFya0RhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6VGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVQYXJzZUhUTUxEYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OlRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlQW5pbWF0aW9uRnJhbWVEYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVF1YWQpOgorICAgICAgICAoV2ViQ29yZTo6VGlt
ZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVQYWludERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6
VGltZWxpbmVSZWNvcmRGYWN0b3J5OjphcHBlbmRMYXlvdXRSb290KToKKyAgICAgICAgKFdlYkNv
cmU6OmJ1aWxkVW5jaGVja2VkT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmJ1aWxkUHJvZmls
ZVVuY2hlY2tlZE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpUaW1lbGluZVJlY29yZEZhY3Rv
cnk6OmFwcGVuZFByb2ZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRJbnNwZWN0b3JPYmpl
Y3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRQcm9maWxlSW5zcGVjdG9yT2Jq
ZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvVGltZWxpbmVSZWNvcmRGYWN0b3J5
Lmg6CisgICAgICAgIChXZWJDb3JlOjpUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZVdlYlNv
Y2tldENyZWF0ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VGltZWxpbmVSZWNvcmRGYWN0b3J5
OjpjcmVhdGVHZW5lcmljV2ViU29ja2V0RGF0YSk6CisgICAgICAgICogcGFnZS9Db250ZW50U2Vj
dXJpdHlQb2xpY3kuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5
OjpyZXBvcnRWaW9sYXRpb24pOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6aW5zcGVjdG9ySGlnaGxpZ2h0T2JqZWN0KToKKwog
MjAxNC0xMC0xMSAgS3dhbmdIeXVrIEtpbSAgPGh5dWtpLmtpbUBzYW1zdW5nLmNvbT4KIAogICAg
ICAgICBbRUZMXSBFbmFibGUgV2ViUCBzdXBwb3J0LgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlz
dHMudHh0CmluZGV4IDhiYzU0ZDBkZDA5MGYyOWUyNzIwMDk0ZmVjZTE1NjQ0ODI5ODAwMWIuLmNk
YzlhYTNjOTkyODMzZjI5YTcxZWIzN2I4NmJlYWE5ZDZlMjc0MDMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ01ha2VMaXN0cy50eHQKQEAgLTI5Miw3ICsyOTIsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVf
U09VUkNFUwogICAgIGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdE1vZHVsZS5jcHAKICAgICBpbnNw
ZWN0b3IvSW5zcGVjdG9yQWdlbnRSZWdpc3RyeS5jcHAKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXIuY3BwCi0gICAgaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHAK
KyAgICBpbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5jcHAKICAgICBpbnNwZWN0b3Iv
SlNJbmplY3RlZFNjcmlwdEhvc3QuY3BwCiAgICAgaW5zcGVjdG9yL0pTSW5qZWN0ZWRTY3JpcHRI
b3N0UHJvdG90eXBlLmNwcAogICAgIGluc3BlY3Rvci9KU0dsb2JhbE9iamVjdENvbnNvbGVDbGll
bnQuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
dmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagppbmRleCBhOGNjNDUy
Y2I1ZDM1Y2Q0MDA3YjYyMjczM2ZhMjg5NWE3Njk4YjExLi40YjVhNmE0MGJjMGVhZmQ2MDk3ZDFj
MmUxNmYyMmRhNTdiOWY3YzVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHBy
b2oKQEAgLTU3Myw3ICs1NzMsNyBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caW5zcGVj
dG9yXEluamVjdGVkU2NyaXB0TW9kdWxlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXGluc3BlY3RvclxJbnNwZWN0b3JBZ2VudFJlZ2lzdHJ5LmNwcCIgLz4KICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAi
IC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcSW5zcGVjdG9yVmFsdWVz
LmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxJbnNwZWN0b3JQ
cm90b2NvbFR5cGVzLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGluc3BlY3Rv
clxKU0luamVjdGVkU2NyaXB0SG9zdC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxpbnNwZWN0b3JcSlNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5cGUuY3BwIiAvPgogICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXEpTSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAi
IC8+CkBAIC0xMjkxLDcgKzEyOTEsNiBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caW5z
cGVjdG9yXEluc3BlY3RvckVudmlyb25tZW50LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxpbnNwZWN0b3JcSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmgiIC8+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oIiAvPgot
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXEluc3BlY3RvclZhbHVlcy5oIiAv
PgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXEpTSW5qZWN0ZWRTY3JpcHRI
b3N0LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcSlNJbmplY3Rl
ZFNjcmlwdEhvc3RQcm90b3R5cGUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGlu
c3BlY3RvclxKU0phdmFTY3JpcHRDYWxsRnJhbWUuaCIgLz4KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHBy
b2ouZmlsdGVycyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9q
L0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycwppbmRleCAwNDljZTBhZmM0NGY1ZTkzZjFi
Y2Q5ZGIwN2UzYjliYTA1YjRjODhlLi4yMTQ4ZGFjNjA4YTgwYzI2ZmY2MGUzYmU0MTA5ZTIxMGI4
NDQyMDMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
dmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5m
aWx0ZXJzCkBAIC0zMzMsNyArMzMzLDcgQEAg77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGlu
Zz0idXRmLTgiPz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAiPgogICAgICAgPEZpbHRlcj5pbnNwZWN0b3I8L0ZpbHRl
cj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGluc3BlY3Rv
clxJbnNwZWN0b3JWYWx1ZXMuY3BwIj4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGluc3Bl
Y3RvclxJbnNwZWN0b3JQcm90b2NvbFR5cGVzLmNwcCI+CiAgICAgICA8RmlsdGVyPmluc3BlY3Rv
cjwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
aW5zcGVjdG9yXGFnZW50c1xJbnNwZWN0b3JBZ2VudC5jcHAiPgpAQCAtMjIzNyw5ICsyMjM3LDYg
QEAg77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxJbnNwZWN0b3JQcm90b2NvbFR5cGVzLmgiPgogICAg
ICAgPEZpbHRlcj5pbnNwZWN0b3I8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxJbnNwZWN0b3JWYWx1ZXMuaCI+Ci0gICAgICA8
RmlsdGVyPmluc3BlY3RvcjwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGFnZW50c1xJbnNwZWN0b3JBZ2VudC5oIj4KICAgICAg
IDxGaWx0ZXI+aW5zcGVjdG9yPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CkBAIC00MzUwLDQg
KzQzNDcsNCBAQCDvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgogICAg
ICAgPEZpbHRlcj5qaXQ8L0ZpbHRlcj4KICAgICA8L01BU00+CiAgIDwvSXRlbUdyb3VwPgotPC9Q
cm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKzwvUHJvamVjdD4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKaW5kZXggZDFjMDc3NzllOTEzN2QzOTRmMTYyZGY0NWUxYjI0NWVm
NWMzMzE1Ny4uMjRlZTMwZDM1YzQwNTczZTZlOTE4NzMwMzZmYTA0MTk4ODE1ZGZmOSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTExNjMsOCArMTE2Myw3IEBACiAJCUE1OTNDRjdD
MTg0MDM2MDMwMEJGQ0UyNyAvKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNTkzQ0Y3QTE4NDAzNjAz
MDBCRkNFMjcgLyogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuY3BwICovOyB9OwogCQlBNTkz
Q0Y3RDE4NDAzNjAzMDBCRkNFMjcgLyogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1OTNDRjdCMTg0MDM2
MDMwMEJGQ0UyNyAvKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE1OTNDRjdGMTg0MDM2MkMwMEJG
Q0UyNyAvKiBJbnNwZWN0b3JBZ2VudEJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE1OTNDRjdFMTg0MDM2MkMwMEJGQ0UyNyAvKiBJbnNwZWN0b3JB
Z2VudEJhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwotCQlBNTkzQ0Y4MjE4NDAzNzcxMDBCRkNFMjcgLyogSW5zcGVjdG9yVmFsdWVzLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1OTNDRjgwMTg0MDM3
NzEwMEJGQ0UyNyAvKiBJbnNwZWN0b3JWYWx1ZXMuY3BwICovOyB9OwotCQlBNTkzQ0Y4MzE4NDAz
NzcxMDBCRkNFMjcgLyogSW5zcGVjdG9yVmFsdWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNTkzQ0Y4MTE4NDAzNzcxMDBCRkNFMjcgLyogSW5zcGVj
dG9yVmFsdWVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJQTU5M0NGODIxODQwMzc3MTAwQkZDRTI3IC8qIEluc3BlY3RvclByb3RvY29sVHlwZXMu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTU5M0NG
ODAxODQwMzc3MTAwQkZDRTI3IC8qIEluc3BlY3RvclByb3RvY29sVHlwZXMuY3BwICovOyB9Owog
CQlBNTkzQ0Y4NjE4NDAzOENBMDBCRkNFMjcgLyogSW5zcGVjdG9yQWdlbnRSZWdpc3RyeS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNTkzQ0Y4NDE4
NDAzOENBMDBCRkNFMjcgLyogSW5zcGVjdG9yQWdlbnRSZWdpc3RyeS5jcHAgKi87IH07CiAJCUE1
OTNDRjg3MTg0MDM4Q0EwMEJGQ0UyNyAvKiBJbnNwZWN0b3JBZ2VudFJlZ2lzdHJ5LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNTkzQ0Y4NTE4NDAzOENB
MDBCRkNFMjcgLyogSW5zcGVjdG9yQWdlbnRSZWdpc3RyeS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE1OTQ1NThGMTgyNDVFRkQwMENDMzg0MyAv
KiBSZW1vdGVJbnNwZWN0b3JEZWJ1Z2dhYmxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1OTQ1NThFMTgyNDVFREUwMENDMzg0MyAvKiBSZW1vdGVJ
bnNwZWN0b3JEZWJ1Z2dhYmxlLmNwcCAqLzsgfTsKQEAgLTI4MzEsOCArMjgzMCw3IEBACiAJCUE1
OTNDRjdBMTg0MDM2MDMwMEJGQ0UyNyAvKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE1OTNDRjdCMTg0MDM2
MDMwMEJGQ0UyNyAvKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlBNTkzQ0Y3RTE4NDAzNjJDMDBCRkNFMjcgLyogSW5zcGVj
dG9yQWdlbnRCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3BlY3Rv
ckFnZW50QmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBNTkzQ0Y4MDE4NDAz
NzcxMDBCRkNFMjcgLyogSW5zcGVjdG9yVmFsdWVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEluc3BlY3RvclZhbHVlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUE1OTNDRjgxMTg0MDM3NzEwMEJGQ0UyNyAvKiBJbnNwZWN0b3JWYWx1ZXMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5zcGVjdG9yVmFsdWVzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE1OTNDRjgwMTg0MDM3NzEwMEJGQ0UyNyAvKiBJbnNw
ZWN0b3JQcm90b2NvbFR5cGVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEluc3BlY3RvclByb3RvY29sVHlwZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlBNTkzQ0Y4NDE4NDAzOENBMDBCRkNFMjcgLyogSW5zcGVjdG9yQWdlbnRSZWdpc3RyeS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnNwZWN0b3JBZ2VudFJl
Z2lzdHJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTU5M0NGODUxODQwMzhD
QTAwQkZDRTI3IC8qIEluc3BlY3RvckFnZW50UmVnaXN0cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSW5zcGVjdG9yQWdlbnRSZWdpc3RyeS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlBNTk0NTU4RTE4MjQ1RURFMDBDQzM4NDMgLyogUmVtb3RlSW5zcGVjdG9y
RGVidWdnYWJsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW1v
dGVJbnNwZWN0b3JEZWJ1Z2dhYmxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTUxNzIsOSArNTE3MCw4IEBACiAJCQkJQTU5M0NGN0IxODQwMzYwMzAwQkZDRTI3IC8qIEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyLmggKi8sCiAJCQkJQTVEMEExQkExODYyMzAxQjAwQzdCNDk2
IC8qIEluc3BlY3RvckVudmlyb25tZW50LmggKi8sCiAJCQkJQTU5NDU1OTQxODI0NzlFQjAwQ0Mz
ODQzIC8qIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oICovLAorCQkJCUE1OTNDRjgwMTg0MDM3
NzEwMEJGQ0UyNyAvKiBJbnNwZWN0b3JQcm90b2NvbFR5cGVzLmNwcCAqLywKIAkJCQlBNTVEOTNB
QjE4NTE0Rjc5MDA0MDBERUQgLyogSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oICovLAotCQkJCUE1
OTNDRjgwMTg0MDM3NzEwMEJGQ0UyNyAvKiBJbnNwZWN0b3JWYWx1ZXMuY3BwICovLAotCQkJCUE1
OTNDRjgxMTg0MDM3NzEwMEJGQ0UyNyAvKiBJbnNwZWN0b3JWYWx1ZXMuaCAqLywKIAkJCQlBNTAz
RkExMzE4OEUwRkFGMDAxMTBGMTQgLyogSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAgKi8sCiAJCQkJ
QTUwM0ZBMTQxODhFMEZBRjAwMTEwRjE0IC8qIEphdmFTY3JpcHRDYWxsRnJhbWUuaCAqLywKIAkJ
CQlBNUMzQTFBMzE4QzA0OTAyMDBDOTU5M0EgLyogSlNHbG9iYWxPYmplY3RDb25zb2xlQ2xpZW50
LmNwcCAqLywKQEAgLTU3MTYsNyArNTcxMyw2IEBACiAJCQkJQTUwRTRCNjIxODgwOURENTAwNjhB
NDZEIC8qIEluc3BlY3RvclJ1bnRpbWVBZ2VudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCRkRE
MDUxOTZDOTJCRjAwN0E1QkZBIC8qIERGR1BoYW50b21SZW1vdmFsUGhhc2UuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE1NUQ5M0FDMTg1MTRGNzkwMDQwMERFRCAvKiBJbnNwZWN0b3JQcm90b2NvbFR5
cGVzLmggaW4gSGVhZGVycyAqLywKLQkJCQlBNTkzQ0Y4MzE4NDAzNzcxMDBCRkNFMjcgLyogSW5z
cGVjdG9yVmFsdWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NjlBMDc5OTBFRDFEM0FFMDBGMUY2
ODEgLyogSW5zdHJ1Y3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QThBRjNCMTdBREI1RjMw
MDVBQjE3NCAvKiBJbnQxNkFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0E4QUYzQzE3QURC
NUYzMDA1QUIxNzQgLyogSW50MzJBcnJheS5oIGluIEhlYWRlcnMgKi8sCkBAIC02OTE5LDcgKzY5
MTUsNyBAQAogCQkJCUE1MzI0Mzg5MTg1NjgzMzUwMDJFRDY5MiAvKiBJbnNwZWN0b3JKU0Zyb250
ZW5kRGlzcGF0Y2hlcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUzMjQzOEIxODU2ODMzNTAw
MkVENjkyIC8qIEluc3BlY3RvckpTUHJvdG9jb2xUeXBlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBNTBFNEI2MTE4ODA5REQ1MDA2OEE0NkQgLyogSW5zcGVjdG9yUnVudGltZUFnZW50LmNwcCBp
biBTb3VyY2VzICovLAotCQkJCUE1OTNDRjgyMTg0MDM3NzEwMEJGQ0UyNyAvKiBJbnNwZWN0b3JW
YWx1ZXMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTU5M0NGODIxODQwMzc3MTAwQkZDRTI3IC8q
IEluc3BlY3RvclByb3RvY29sVHlwZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc4ODUzRjkx
Nzk3MjYyOTAwMTQ0MEU0IC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMTQ3RjM5Q0YxMDdFQzM3NjAwNDI3QTQ4IC8qIEludGVybmFsRnVuY3Rpb24uY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyOUQ3RDQwRUQyMTI4MjAwQjg5NjE5IC8qIEludGVycHJl
dGVyLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2JpbmRpbmdzL1NjcmlwdFZhbHVlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iaW5kaW5n
cy9TY3JpcHRWYWx1ZS5jcHAKaW5kZXggZDA0NmFiMmE1Y2IyYWMxOWY5ODU3NjMyNWY4OTEyYjQ5
MGQ0OGFhZi4uYjc5YmRlNDU0YThiOGFlZDZjMGFjNGY4ZTBlMDYxYjFjMThkMThkOSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL1NjcmlwdFZhbHVlLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvU2NyaXB0VmFsdWUuY3BwCkBAIC0zMSw3
ICszMSw3IEBACiAjaW5jbHVkZSAiU2NyaXB0VmFsdWUuaCIKIAogI2luY2x1ZGUgIkFQSUNhc3Qu
aCIKLSNpbmNsdWRlICJJbnNwZWN0b3JWYWx1ZXMuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JQcm90
b2NvbFR5cGVzLmgiCiAjaW5jbHVkZSAiSlNMb2NrLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlSW5s
aW5lcy5oIgogCkBAIC05OCw3ICs5OCw3IEBAIGJvb2wgU2NyaXB0VmFsdWU6OmlzRnVuY3Rpb24o
KSBjb25zdAogfQogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKLXN0YXRpYyBQYXNzUmVmUHRyPElu
c3BlY3RvclZhbHVlPiBqc1RvSW5zcGVjdG9yVmFsdWUoRXhlY1N0YXRlKiBzY3JpcHRTdGF0ZSwg
SlNWYWx1ZSB2YWx1ZSwgaW50IG1heERlcHRoKQorc3RhdGljIFBhc3NSZWZQdHI8UHJvdG9jb2w6
OlVuY2hlY2tlZFZhbHVlPiBqc1RvVW5jaGVja2VkVmFsdWUoRXhlY1N0YXRlKiBzY3JpcHRTdGF0
ZSwgSlNWYWx1ZSB2YWx1ZSwgaW50IG1heERlcHRoKQogewogICAgIGlmICghdmFsdWUpIHsKICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0xMTEsMzggKzExMSwzOCBAQCBzdGF0aWMg
UGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4ganNUb0luc3BlY3RvclZhbHVlKEV4ZWNTdGF0ZSog
c2NyaXB0U3RhdGUsIEpTVgogICAgIG1heERlcHRoLS07CiAKICAgICBpZiAodmFsdWUuaXNOdWxs
KCkgfHwgdmFsdWUuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgcmV0dXJuIEluc3BlY3RvclZhbHVl
OjpudWxsKCk7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6VW5jaGVja2VkVmFsdWU6Om51bGwo
KTsKICAgICBpZiAodmFsdWUuaXNCb29sZWFuKCkpCi0gICAgICAgIHJldHVybiBJbnNwZWN0b3JC
YXNpY1ZhbHVlOjpjcmVhdGUodmFsdWUuYXNCb29sZWFuKCkpOworICAgICAgICByZXR1cm4gUHJv
dG9jb2w6OlByaW1pdGl2ZVZhbHVlOjpjcmVhdGUodmFsdWUuYXNCb29sZWFuKCkpOwogICAgIGlm
ICh2YWx1ZS5pc051bWJlcigpICYmIHZhbHVlLmlzRG91YmxlKCkpCi0gICAgICAgIHJldHVybiBJ
bnNwZWN0b3JCYXNpY1ZhbHVlOjpjcmVhdGUodmFsdWUuYXNOdW1iZXIoKSk7CisgICAgICAgIHJl
dHVybiBQcm90b2NvbDo6UHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSh2YWx1ZS5hc051bWJlcigpKTsK
ICAgICBpZiAodmFsdWUuaXNOdW1iZXIoKSAmJiB2YWx1ZS5pc01hY2hpbmVJbnQoKSkKLSAgICAg
ICAgcmV0dXJuIEluc3BlY3RvckJhc2ljVmFsdWU6OmNyZWF0ZShzdGF0aWNfY2FzdDxpbnQ+KHZh
bHVlLmFzTWFjaGluZUludCgpKSk7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6UHJpbWl0aXZl
VmFsdWU6OmNyZWF0ZShzdGF0aWNfY2FzdDxpbnQ+KHZhbHVlLmFzTWFjaGluZUludCgpKSk7CiAg
ICAgaWYgKHZhbHVlLmlzU3RyaW5nKCkpCi0gICAgICAgIHJldHVybiBJbnNwZWN0b3JTdHJpbmc6
OmNyZWF0ZSh2YWx1ZS5nZXRTdHJpbmcoc2NyaXB0U3RhdGUpKTsKKyAgICAgICAgcmV0dXJuIFBy
b3RvY29sOjpTdHJpbmdWYWx1ZTo6Y3JlYXRlKHZhbHVlLmdldFN0cmluZyhzY3JpcHRTdGF0ZSkp
OwogCiAgICAgaWYgKHZhbHVlLmlzT2JqZWN0KCkpIHsKICAgICAgICAgaWYgKGlzSlNBcnJheSh2
YWx1ZSkpIHsKLSAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gaW5zcGVjdG9yQXJy
YXkgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgICAgICAgICBSZWZQdHI8UHJvdG9j
b2w6OlVuY2hlY2tlZEFycmF5PiBpbnNwZWN0b3JBcnJheSA9IFByb3RvY29sOjpVbmNoZWNrZWRB
cnJheTo6Y3JlYXRlKCk7CiAgICAgICAgICAgICBKU0FycmF5KiBhcnJheSA9IGFzQXJyYXkodmFs
dWUpOwogICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gYXJyYXktPmxlbmd0aCgpOwogICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAg
ICAgICAgICAgSlNWYWx1ZSBlbGVtZW50ID0gYXJyYXktPmdldEluZGV4KHNjcmlwdFN0YXRlLCBp
KTsKLSAgICAgICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGVsZW1lbnRWYWx1ZSA9
IGpzVG9JbnNwZWN0b3JWYWx1ZShzY3JpcHRTdGF0ZSwgZWxlbWVudCwgbWF4RGVwdGgpOworICAg
ICAgICAgICAgICAgIFJlZlB0cjxQcm90b2NvbDo6VW5jaGVja2VkVmFsdWU+IGVsZW1lbnRWYWx1
ZSA9IGpzVG9VbmNoZWNrZWRWYWx1ZShzY3JpcHRTdGF0ZSwgZWxlbWVudCwgbWF4RGVwdGgpOwog
ICAgICAgICAgICAgICAgIGlmICghZWxlbWVudFZhbHVlKQogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICAgICAgICAgICAgICBpbnNwZWN0b3JBcnJheS0+cHVzaFZhbHVl
KGVsZW1lbnRWYWx1ZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gaW5zcGVj
dG9yQXJyYXk7CiAgICAgICAgIH0KLSAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gaW5z
cGVjdG9yT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgUmVmUHRy
PFByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IGluc3BlY3Rvck9iamVjdCA9IFByb3RvY29sOjpV
bmNoZWNrZWRPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gdmFs
dWUuZ2V0T2JqZWN0KCk7CiAgICAgICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnR5TmFtZXMo
c2NyaXB0U3RhdGUpOwogICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldE93blByb3Bl
cnR5TmFtZXMob2JqZWN0LCBzY3JpcHRTdGF0ZSwgcHJvcGVydHlOYW1lcywgRXhjbHVkZURvbnRF
bnVtUHJvcGVydGllcyk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJvcGVydHlO
YW1lcy5zaXplKCk7IGkrKykgewogICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgbmFtZSA9
IHByb3BlcnR5TmFtZXNbaV07CiAgICAgICAgICAgICBKU1ZhbHVlIHByb3BlcnR5VmFsdWUgPSBv
YmplY3QtPmdldChzY3JpcHRTdGF0ZSwgbmFtZSk7Ci0gICAgICAgICAgICBSZWZQdHI8SW5zcGVj
dG9yVmFsdWU+IGluc3BlY3RvclZhbHVlID0ganNUb0luc3BlY3RvclZhbHVlKHNjcmlwdFN0YXRl
LCBwcm9wZXJ0eVZhbHVlLCBtYXhEZXB0aCk7CisgICAgICAgICAgICBSZWZQdHI8UHJvdG9jb2w6
OlVuY2hlY2tlZFZhbHVlPiBpbnNwZWN0b3JWYWx1ZSA9IGpzVG9VbmNoZWNrZWRWYWx1ZShzY3Jp
cHRTdGF0ZSwgcHJvcGVydHlWYWx1ZSwgbWF4RGVwdGgpOwogICAgICAgICAgICAgaWYgKCFpbnNw
ZWN0b3JWYWx1ZSkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgICAg
IGluc3BlY3Rvck9iamVjdC0+c2V0VmFsdWUobmFtZS5zdHJpbmcoKSwgaW5zcGVjdG9yVmFsdWUp
OwpAQCAtMTU0LDEwICsxNTQsMTAgQEAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+
IGpzVG9JbnNwZWN0b3JWYWx1ZShFeGVjU3RhdGUqIHNjcmlwdFN0YXRlLCBKU1YKICAgICByZXR1
cm4gbnVsbHB0cjsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gU2NyaXB0VmFsdWU6
OnRvSW5zcGVjdG9yVmFsdWUoRXhlY1N0YXRlKiBzY3JpcHRTdGF0ZSkgY29uc3QKK1Bhc3NSZWZQ
dHI8UHJvdG9jb2w6OlVuY2hlY2tlZFZhbHVlPiBTY3JpcHRWYWx1ZTo6dG9VbmNoZWNrZWRWYWx1
ZShFeGVjU3RhdGUqIHNjcmlwdFN0YXRlKSBjb25zdAogewogICAgIEpTTG9ja0hvbGRlciBob2xk
ZXIoc2NyaXB0U3RhdGUpOwotICAgIHJldHVybiBqc1RvSW5zcGVjdG9yVmFsdWUoc2NyaXB0U3Rh
dGUsIG1fdmFsdWUuZ2V0KCksIEluc3BlY3RvclZhbHVlOjptYXhEZXB0aCk7CisgICAgcmV0dXJu
IGpzVG9VbmNoZWNrZWRWYWx1ZShzY3JpcHRTdGF0ZSwgbV92YWx1ZS5nZXQoKSwgUHJvdG9jb2w6
OlVuY2hlY2tlZFZhbHVlOjptYXhEZXB0aCk7CiB9CiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RP
UikKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL1NjcmlwdFZh
bHVlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvU2NyaXB0VmFsdWUuaAppbmRl
eCBkNWZhZGU5MGIxNmUzNDdmZDgzMmI5Y2I5YjUyZDMwMGY1ZDljYTQwLi5kMTZmZGIzM2UzZTg3
YmU2YWI1MzA4NjI5ZTllNTUzYThjZTBlMTI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYmluZGluZ3MvU2NyaXB0VmFsdWUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YmluZGluZ3MvU2NyaXB0VmFsdWUuaApAQCAtNDAsNyArNDAsOSBAQAogI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKLWNsYXNzIEluc3BlY3Rv
clZhbHVlOworbmFtZXNwYWNlIFByb3RvY29sIHsKK2NsYXNzIFVuY2hlY2tlZFZhbHVlOworfQog
fQogCiBuYW1lc3BhY2UgRGVwcmVjYXRlZCB7CkBAIC02Niw3ICs2OCw3IEBAIHB1YmxpYzoKICAg
ICBib29sIG9wZXJhdG9yPT0oY29uc3QgU2NyaXB0VmFsdWUmIG90aGVyKSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlID09IG90aGVyLm1fdmFsdWU7IH0KIAogI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0g
ICAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiB0b0luc3BlY3RvclZhbHVl
KEpTQzo6RXhlY1N0YXRlKikgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpVbmNoZWNrZWRWYWx1ZT4gdG9VbmNoZWNrZWRWYWx1ZShKU0M6OkV4ZWNTdGF0ZSopIGNv
bnN0OwogI2VuZGlmCiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuY3BwCmluZGV4IGY3ZDFlNTU2Nzg1MzVhODkzYmNmZjM1
NTgxYjYxYWE4MjczNWI1YTIuLmM5MmFjMTQzNjQwMTNmYzFhZGFmNjkzZDEyOWE0OGI5ZDlmNWNj
YTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvQ29uc29sZU1l
c3NhZ2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvQ29uc29sZU1l
c3NhZ2UuY3BwCkBAIC0zNiw3ICszNiw3IEBACiAjaW5jbHVkZSAiSWRlbnRpZmllcnNGYWN0b3J5
LmgiCiAjaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHQuaCIKICNpbmNsdWRlICJJbmplY3RlZFNjcmlw
dE1hbmFnZXIuaCIKLSNpbmNsdWRlICJJbnNwZWN0b3JWYWx1ZXMuaCIKKyNpbmNsdWRlICJJbnNw
ZWN0b3JQcm90b2NvbFR5cGVzLmgiCiAjaW5jbHVkZSAiU2NyaXB0QXJndW1lbnRzLmgiCiAjaW5j
bHVkZSAiU2NyaXB0Q2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiU2NyaXB0Q2FsbFN0YWNrLmgiCkBA
IC0yMjQsNyArMjI0LDcgQEAgdm9pZCBDb25zb2xlTWVzc2FnZTo6YWRkVG9Gcm9udGVuZChJbnNw
ZWN0b3JDb25zb2xlRnJvbnRlbmREaXNwYXRjaGVyKiBjb25zb2xlRnIKICAgICB9CiAKICAgICBp
ZiAobV9jYWxsU3RhY2spCi0gICAgICAgIGpzb25PYmotPnNldFN0YWNrVHJhY2UobV9jYWxsU3Rh
Y2stPmJ1aWxkSW5zcGVjdG9yQXJyYXkoKSk7CisgICAgICAgIGpzb25PYmotPnNldFN0YWNrVHJh
Y2UobV9jYWxsU3RhY2stPmJ1aWxkVW5jaGVja2VkQXJyYXkoKSk7CiAKICAgICBjb25zb2xlRnJv
bnRlbmREaXNwYXRjaGVyLT5tZXNzYWdlQWRkZWQoanNvbk9iaik7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0NvbnRlbnRTZWFyY2hVdGlsaXRpZXMuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9Db250ZW50U2VhcmNoVXRpbGl0aWVz
LmNwcAppbmRleCBlZjU0ZjA2YzMxY2E2MDFhYjVjYzM0Y2Q2MTFkYmU2ODc5OTQzOTg4Li5mNjI3
MzMzYmUxYzQ1ZmRmNTM3MTFhNzY5MjI0ZTYxODY3MjNlOWRmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0NvbnRlbnRTZWFyY2hVdGlsaXRpZXMuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvQ29udGVudFNlYXJjaFV0aWxpdGllcy5j
cHAKQEAgLTMyLDcgKzMyLDcgQEAKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogCiAjaW5jbHVkZSAi
SW5zcGVjdG9ySlNQcm90b2NvbFR5cGVzLmgiCi0jaW5jbHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgi
CisjaW5jbHVkZSAiSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oIgogI2luY2x1ZGUgIlJlZ3VsYXJF
eHByZXNzaW9uLmgiCiAjaW5jbHVkZSAiWWFyci5oIgogI2luY2x1ZGUgPHd0Zi9CdW1wUG9pbnRl
ckFsbG9jYXRvci5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9JbmplY3RlZFNjcmlwdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0lu
amVjdGVkU2NyaXB0LmNwcAppbmRleCA2MWRkYzBjYjA1NDUyMGQ5YjJlNDZkYzc4YjU2YjE2NTk3
NGQxNzE4Li42YmRlNjcwNzFlNmUwOTUyOGM3MTcxNjlkNzI4MGIzODYyNmExMTFjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0LmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0LmNwcApA
QCAtMzQsNyArMzQsNyBAQAogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKIAotI2luY2x1ZGUgIklu
c3BlY3RvclZhbHVlcy5oIgorI2luY2x1ZGUgIkluc3BlY3RvclByb3RvY29sVHlwZXMuaCIKICNp
bmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiU2NyaXB0RnVuY3Rpb25DYWxsLmgiCiAj
aW5jbHVkZSAiU2NyaXB0T2JqZWN0LmgiCkBAIC05OCw5ICs5OCw5IEBAIHZvaWQgSW5qZWN0ZWRT
Y3JpcHQ6OmdldEZ1bmN0aW9uRGV0YWlscyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0
IFN0cmluZyYKICAgICBEZXByZWNhdGVkOjpTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24oaW5q
ZWN0ZWRTY3JpcHRPYmplY3QoKSwgQVNDSUlMaXRlcmFsKCJnZXRGdW5jdGlvbkRldGFpbHMiKSwg
aW5zcGVjdG9yRW52aXJvbm1lbnQoKS0+ZnVuY3Rpb25DYWxsSGFuZGxlcigpKTsKICAgICBmdW5j
dGlvbi5hcHBlbmRBcmd1bWVudChmdW5jdGlvbklkKTsKIAotICAgIFJlZlB0cjxJbnNwZWN0b3JW
YWx1ZT4gcmVzdWx0VmFsdWU7CisgICAgUmVmUHRyPFByb3RvY29sOjpVbmNoZWNrZWRWYWx1ZT4g
cmVzdWx0VmFsdWU7CiAgICAgbWFrZUNhbGwoZnVuY3Rpb24sICZyZXN1bHRWYWx1ZSk7Ci0gICAg
aWYgKCFyZXN1bHRWYWx1ZSB8fCByZXN1bHRWYWx1ZS0+dHlwZSgpICE9IEluc3BlY3RvclZhbHVl
OjpUeXBlOjpPYmplY3QpIHsKKyAgICBpZiAoIXJlc3VsdFZhbHVlIHx8IHJlc3VsdFZhbHVlLT50
eXBlKCkgIT0gUHJvdG9jb2w6OlVuY2hlY2tlZFZhbHVlOjpUeXBlOjpPYmplY3QpIHsKICAgICAg
ICAgaWYgKCFyZXN1bHRWYWx1ZS0+YXNTdHJpbmcoZXJyb3JTdHJpbmcpKQogICAgICAgICAgICAg
ZXJyb3JTdHJpbmcgPSBBU0NJSUxpdGVyYWwoIkludGVybmFsIGVycm9yIik7CiAgICAgICAgIHJl
dHVybjsKQEAgLTExNSw5ICsxMTUsOSBAQCB2b2lkIEluamVjdGVkU2NyaXB0OjpnZXRQcm9wZXJ0
aWVzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBvYmplYwogICAgIGZ1
bmN0aW9uLmFwcGVuZEFyZ3VtZW50KG9iamVjdElkKTsKICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1
bWVudChvd25Qcm9wZXJ0aWVzKTsKIAotICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gcmVzdWx0
OworICAgIFJlZlB0cjxQcm90b2NvbDo6VW5jaGVja2VkVmFsdWU+IHJlc3VsdDsKICAgICBtYWtl
Q2FsbChmdW5jdGlvbiwgJnJlc3VsdCk7Ci0gICAgaWYgKCFyZXN1bHQgfHwgcmVzdWx0LT50eXBl
KCkgIT0gSW5zcGVjdG9yVmFsdWU6OlR5cGU6OkFycmF5KSB7CisgICAgaWYgKCFyZXN1bHQgfHwg
cmVzdWx0LT50eXBlKCkgIT0gUHJvdG9jb2w6OlVuY2hlY2tlZFZhbHVlOjpUeXBlOjpBcnJheSkg
ewogICAgICAgICBlcnJvclN0cmluZyA9IEFTQ0lJTGl0ZXJhbCgiSW50ZXJuYWwgZXJyb3IiKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTEzMCw5ICsxMzAsOSBAQCB2b2lkIEluamVjdGVk
U2NyaXB0OjpnZXRJbnRlcm5hbFByb3BlcnRpZXMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBj
b25zdCBTdHJpbgogICAgIERlcHJlY2F0ZWQ6OlNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihp
bmplY3RlZFNjcmlwdE9iamVjdCgpLCBBU0NJSUxpdGVyYWwoImdldEludGVybmFsUHJvcGVydGll
cyIpLCBpbnNwZWN0b3JFbnZpcm9ubWVudCgpLT5mdW5jdGlvbkNhbGxIYW5kbGVyKCkpOwogICAg
IGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KG9iamVjdElkKTsKIAotICAgIFJlZlB0cjxJbnNwZWN0
b3JWYWx1ZT4gcmVzdWx0OworICAgIFJlZlB0cjxQcm90b2NvbDo6VW5jaGVja2VkVmFsdWU+IHJl
c3VsdDsKICAgICBtYWtlQ2FsbChmdW5jdGlvbiwgJnJlc3VsdCk7Ci0gICAgaWYgKCFyZXN1bHQg
fHwgcmVzdWx0LT50eXBlKCkgIT0gSW5zcGVjdG9yVmFsdWU6OlR5cGU6OkFycmF5KSB7CisgICAg
aWYgKCFyZXN1bHQgfHwgcmVzdWx0LT50eXBlKCkgIT0gUHJvdG9jb2w6OlVuY2hlY2tlZFZhbHVl
OjpUeXBlOjpBcnJheSkgewogICAgICAgICBlcnJvclN0cmluZyA9IEFTQ0lJTGl0ZXJhbCgiSW50
ZXJuYWwgZXJyb3IiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE1MSw4ICsxNTEsOCBA
QCBQYXNzUmVmUHRyPEFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpDYWxsRnJh
bWU+PiBJbmplY3RlZFNjcmlwdDo6d3JhcAogICAgIGJvb2wgaGFkRXhjZXB0aW9uID0gZmFsc2U7
CiAgICAgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUgY2FsbEZyYW1lc1ZhbHVlID0gY2FsbEZ1bmN0
aW9uV2l0aEV2YWxFbmFibGVkKGZ1bmN0aW9uLCBoYWRFeGNlcHRpb24pOwogICAgIEFTU0VSVCgh
aGFkRXhjZXB0aW9uKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHJlc3VsdCA9IGNhbGxG
cmFtZXNWYWx1ZS50b0luc3BlY3RvclZhbHVlKHNjcmlwdFN0YXRlKCkpOwotICAgIGlmIChyZXN1
bHQtPnR5cGUoKSA9PSBJbnNwZWN0b3JWYWx1ZTo6VHlwZTo6QXJyYXkpCisgICAgUmVmUHRyPFBy
b3RvY29sOjpVbmNoZWNrZWRWYWx1ZT4gcmVzdWx0ID0gY2FsbEZyYW1lc1ZhbHVlLnRvVW5jaGVj
a2VkVmFsdWUoc2NyaXB0U3RhdGUoKSk7CisgICAgaWYgKHJlc3VsdC0+dHlwZSgpID09IFByb3Rv
Y29sOjpVbmNoZWNrZWRWYWx1ZTo6VHlwZTo6QXJyYXkpCiAgICAgICAgIHJldHVybiBCaW5kaW5n
VHJhaXRzPEFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpDYWxsRnJhbWU+Pjo6
cnVudGltZUNhc3QocmVzdWx0KTsKIAogICAgIHJldHVybiBBcnJheTxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpEZWJ1Z2dlcjo6Q2FsbEZyYW1lPjo6Y3JlYXRlKCk7CkBAIC0xNzIsOCArMTcyLDggQEAg
UGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+IElu
amVjdGVkU2NyaXB0Ojp3cmFwT2JqZWMKICAgICBpZiAoaGFkRXhjZXB0aW9uKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKIAotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdE9iamVj
dDsKLSAgICBib29sIGNhc3RTdWNjZWVkZWQgPSByLnRvSW5zcGVjdG9yVmFsdWUoc2NyaXB0U3Rh
dGUoKSktPmFzT2JqZWN0KHJlc3VsdE9iamVjdCk7CisgICAgUmVmUHRyPFByb3RvY29sOjpVbmNo
ZWNrZWRPYmplY3Q+IHJlc3VsdE9iamVjdDsKKyAgICBib29sIGNhc3RTdWNjZWVkZWQgPSByLnRv
VW5jaGVja2VkVmFsdWUoc2NyaXB0U3RhdGUoKSktPmFzT2JqZWN0KHJlc3VsdE9iamVjdCk7CiAg
ICAgQVNTRVJUX1VOVVNFRChjYXN0U3VjY2VlZGVkLCBjYXN0U3VjY2VlZGVkKTsKIAogICAgIHJl
dHVybiBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9i
amVjdD46OnJ1bnRpbWVDYXN0KHJlc3VsdE9iamVjdCk7CkBAIC0xOTUsOCArMTk1LDggQEAgUGFz
c1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+IEluamVj
dGVkU2NyaXB0Ojp3cmFwVGFibGUKICAgICBpZiAoaGFkRXhjZXB0aW9uKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKIAotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdE9iamVjdDsK
LSAgICBib29sIGNhc3RTdWNjZWVkZWQgPSByLnRvSW5zcGVjdG9yVmFsdWUoc2NyaXB0U3RhdGUo
KSktPmFzT2JqZWN0KHJlc3VsdE9iamVjdCk7CisgICAgUmVmUHRyPFByb3RvY29sOjpVbmNoZWNr
ZWRPYmplY3Q+IHJlc3VsdE9iamVjdDsKKyAgICBib29sIGNhc3RTdWNjZWVkZWQgPSByLnRvVW5j
aGVja2VkVmFsdWUoc2NyaXB0U3RhdGUoKSktPmFzT2JqZWN0KHJlc3VsdE9iamVjdCk7CiAgICAg
QVNTRVJUX1VOVVNFRChjYXN0U3VjY2VlZGVkLCBjYXN0U3VjY2VlZGVkKTsKIAogICAgIHJldHVy
biBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVj
dD46OnJ1bnRpbWVDYXN0KHJlc3VsdE9iamVjdCk7CkBAIC0yMjAsNyArMjIwLDcgQEAgdm9pZCBJ
bmplY3RlZFNjcmlwdDo6aW5zcGVjdE9iamVjdChEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSB2YWx1
ZSkKICAgICBBU1NFUlQoIWhhc05vVmFsdWUoKSk7CiAgICAgRGVwcmVjYXRlZDo6U2NyaXB0RnVu
Y3Rpb25DYWxsIGZ1bmN0aW9uKGluamVjdGVkU2NyaXB0T2JqZWN0KCksIEFTQ0lJTGl0ZXJhbCgi
aW5zcGVjdE9iamVjdCIpLCBpbnNwZWN0b3JFbnZpcm9ubWVudCgpLT5mdW5jdGlvbkNhbGxIYW5k
bGVyKCkpOwogICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KHZhbHVlKTsKLSAgICBSZWZQdHI8
SW5zcGVjdG9yVmFsdWU+IHJlc3VsdDsKKyAgICBSZWZQdHI8UHJvdG9jb2w6OlVuY2hlY2tlZFZh
bHVlPiByZXN1bHQ7CiAgICAgbWFrZUNhbGwoZnVuY3Rpb24sICZyZXN1bHQpOwogfQogCkBAIC0y
MjgsNyArMjI4LDcgQEAgdm9pZCBJbmplY3RlZFNjcmlwdDo6cmVsZWFzZU9iamVjdChjb25zdCBT
dHJpbmcmIG9iamVjdElkKQogewogICAgIERlcHJlY2F0ZWQ6OlNjcmlwdEZ1bmN0aW9uQ2FsbCBm
dW5jdGlvbihpbmplY3RlZFNjcmlwdE9iamVjdCgpLCBBU0NJSUxpdGVyYWwoInJlbGVhc2VPYmpl
Y3QiKSwgaW5zcGVjdG9yRW52aXJvbm1lbnQoKS0+ZnVuY3Rpb25DYWxsSGFuZGxlcigpKTsKICAg
ICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChvYmplY3RJZCk7Ci0gICAgUmVmUHRyPEluc3BlY3Rv
clZhbHVlPiByZXN1bHQ7CisgICAgUmVmUHRyPFByb3RvY29sOjpVbmNoZWNrZWRWYWx1ZT4gcmVz
dWx0OwogICAgIG1ha2VDYWxsKGZ1bmN0aW9uLCAmcmVzdWx0KTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEJhc2UuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEJhc2UuY3BwCmlu
ZGV4IGRkMTI5OGNiNWY0ZDZjOTdlMTYxZTg4YTJiYzEzMTY3YmIyNzk5YzQuLjFiZDkyOGQyMWQz
ZjI3MWQ2NGIzNmU1MmNhNWMzYTYwMWQ2NTdlMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRCYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0QmFzZS5jcHAKQEAgLTM1LDcgKzM1
LDcgQEAKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogCiAjaW5jbHVkZSAiRGVidWdnZXJFdmFsRW5h
Ymxlci5oIgotI2luY2x1ZGUgIkluc3BlY3RvclZhbHVlcy5oIgorI2luY2x1ZGUgIkluc3BlY3Rv
clByb3RvY29sVHlwZXMuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNH
bG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJTY3JpcHRGdW5jdGlvbkNhbGwuaCIKQEAgLTk1LDEw
ICs5NSwxMCBAQCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSBJbmplY3RlZFNjcmlwdEJhc2U6OmNh
bGxGdW5jdGlvbldpdGhFdmFsRW5hYmxlZChEZXByZWNhdAogICAgIHJldHVybiByZXN1bHRWYWx1
ZTsKIH0KIAotdm9pZCBJbmplY3RlZFNjcmlwdEJhc2U6Om1ha2VDYWxsKERlcHJlY2F0ZWQ6OlNj
cmlwdEZ1bmN0aW9uQ2FsbCYgZnVuY3Rpb24sIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHJlc3Vs
dCkKK3ZvaWQgSW5qZWN0ZWRTY3JpcHRCYXNlOjptYWtlQ2FsbChEZXByZWNhdGVkOjpTY3JpcHRG
dW5jdGlvbkNhbGwmIGZ1bmN0aW9uLCBSZWZQdHI8UHJvdG9jb2w6OlVuY2hlY2tlZFZhbHVlPiog
cmVzdWx0KQogewogICAgIGlmIChoYXNOb1ZhbHVlKCkgfHwgIWhhc0FjY2Vzc1RvSW5zcGVjdGVk
U2NyaXB0U3RhdGUoKSkgewotICAgICAgICAqcmVzdWx0ID0gSW5zcGVjdG9yVmFsdWU6Om51bGwo
KTsKKyAgICAgICAgKnJlc3VsdCA9IFByb3RvY29sOjpVbmNoZWNrZWRWYWx1ZTo6bnVsbCgpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xMDcsMzUgKzEwNywzNSBAQCB2b2lkIEluamVj
dGVkU2NyaXB0QmFzZTo6bWFrZUNhbGwoRGVwcmVjYXRlZDo6U2NyaXB0RnVuY3Rpb25DYWxsJiBm
dW5jdGlvbiwgUmVmUAogCiAgICAgQVNTRVJUKCFoYWRFeGNlcHRpb24pOwogICAgIGlmICghaGFk
RXhjZXB0aW9uKSB7Ci0gICAgICAgICpyZXN1bHQgPSByZXN1bHRWYWx1ZS50b0luc3BlY3RvclZh
bHVlKG1faW5qZWN0ZWRTY3JpcHRPYmplY3Quc2NyaXB0U3RhdGUoKSk7CisgICAgICAgICpyZXN1
bHQgPSByZXN1bHRWYWx1ZS50b1VuY2hlY2tlZFZhbHVlKG1faW5qZWN0ZWRTY3JpcHRPYmplY3Qu
c2NyaXB0U3RhdGUoKSk7CiAgICAgICAgIGlmICghKnJlc3VsdCkKLSAgICAgICAgICAgICpyZXN1
bHQgPSBJbnNwZWN0b3JTdHJpbmc6OmNyZWF0ZShTdHJpbmc6OmZvcm1hdCgiT2JqZWN0IGhhcyB0
b28gbG9uZyByZWZlcmVuY2UgY2hhaW4gKG11c3Qgbm90IGJlIGxvbmdlciB0aGFuICVkKSIsIElu
c3BlY3RvclZhbHVlOjptYXhEZXB0aCkpOworICAgICAgICAgICAgKnJlc3VsdCA9IFByb3RvY29s
OjpTdHJpbmdWYWx1ZTo6Y3JlYXRlKFN0cmluZzo6Zm9ybWF0KCJPYmplY3QgaGFzIHRvbyBsb25n
IHJlZmVyZW5jZSBjaGFpbiAobXVzdCBub3QgYmUgbG9uZ2VyIHRoYW4gJWQpIiwgUHJvdG9jb2w6
OlVuY2hlY2tlZFZhbHVlOjptYXhEZXB0aCkpOwogICAgIH0gZWxzZQotICAgICAgICAqcmVzdWx0
ID0gSW5zcGVjdG9yU3RyaW5nOjpjcmVhdGUoIkV4Y2VwdGlvbiB3aGlsZSBtYWtpbmcgYSBjYWxs
LiIpOworICAgICAgICAqcmVzdWx0ID0gUHJvdG9jb2w6OlByaW1pdGl2ZVZhbHVlOjpjcmVhdGUo
IkV4Y2VwdGlvbiB3aGlsZSBtYWtpbmcgYSBjYWxsLiIpOwogfQogCiB2b2lkIEluamVjdGVkU2Ny
aXB0QmFzZTo6bWFrZUV2YWxDYWxsKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgRGVwcmVjYXRl
ZDo6U2NyaXB0RnVuY3Rpb25DYWxsJiBmdW5jdGlvbiwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1l
OjpSZW1vdGVPYmplY3Q+KiBvYmplY3RSZXN1bHQsIFByb3RvY29sOjpPcHRPdXRwdXQ8Ym9vbD4q
IHdhc1Rocm93bikKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHJlc3VsdDsKKyAgICBS
ZWZQdHI8UHJvdG9jb2w6OlVuY2hlY2tlZFZhbHVlPiByZXN1bHQ7CiAgICAgbWFrZUNhbGwoZnVu
Y3Rpb24sICZyZXN1bHQpOwogICAgIGlmICghcmVzdWx0KSB7CiAgICAgICAgIGVycm9yU3RyaW5n
ID0gQVNDSUlMaXRlcmFsKCJJbnRlcm5hbCBlcnJvcjogcmVzdWx0IHZhbHVlIGlzIGVtcHR5Iik7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAocmVzdWx0LT50eXBlKCkgPT0gSW5z
cGVjdG9yVmFsdWU6OlR5cGU6OlN0cmluZykgeworICAgIGlmIChyZXN1bHQtPnR5cGUoKSA9PSBQ
cm90b2NvbDo6VW5jaGVja2VkVmFsdWU6OlR5cGU6OlN0cmluZykgewogICAgICAgICByZXN1bHQt
PmFzU3RyaW5nKGVycm9yU3RyaW5nKTsKICAgICAgICAgQVNTRVJUKGVycm9yU3RyaW5nLmxlbmd0
aCgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHJlc3VsdFBhaXI7CisgICAgUmVmUHRyPFByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IHJl
c3VsdFBhaXI7CiAgICAgaWYgKCFyZXN1bHQtPmFzT2JqZWN0KHJlc3VsdFBhaXIpKSB7CiAgICAg
ICAgIGVycm9yU3RyaW5nID0gQVNDSUlMaXRlcmFsKCJJbnRlcm5hbCBlcnJvcjogcmVzdWx0IGlz
IG5vdCBhbiBPYmplY3QiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHJlc3VsdE9iamVjdCA9IHJlc3VsdFBhaXItPmdldE9iamVjdChBU0NJ
SUxpdGVyYWwoInJlc3VsdCIpKTsKKyAgICBSZWZQdHI8UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVj
dD4gcmVzdWx0T2JqZWN0ID0gcmVzdWx0UGFpci0+Z2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicmVz
dWx0IikpOwogICAgIGJvb2wgd2FzVGhyb3duVmFsID0gZmFsc2U7CiAgICAgaWYgKCFyZXN1bHRP
YmplY3QgfHwgIXJlc3VsdFBhaXItPmdldEJvb2xlYW4oQVNDSUlMaXRlcmFsKCJ3YXNUaHJvd24i
KSwgd2FzVGhyb3duVmFsKSkgewogICAgICAgICBlcnJvclN0cmluZyA9IEFTQ0lJTGl0ZXJhbCgi
SW50ZXJuYWwgZXJyb3I6IHJlc3VsdCBpcyBub3QgYSBwYWlyIG9mIHZhbHVlIGFuZCB3YXNUaHJv
d24gZmxhZyIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9J
bmplY3RlZFNjcmlwdEJhc2UuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5q
ZWN0ZWRTY3JpcHRCYXNlLmgKaW5kZXggMTk0Zjc0NDdkYTBiNDc5ZTViMGVmOTk5OTlhYWIwODM1
YjhkOWRhMi4uNTIwY2IwNDkyODYzNWZjNzI4MWNmMjg4YTVlNjVlZmRkYzk3OTcxMSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEJhc2Uu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0QmFz
ZS5oCkBAIC02Nyw3ICs2Nyw3IEBAIHByb3RlY3RlZDoKIAogICAgIGNvbnN0IERlcHJlY2F0ZWQ6
OlNjcmlwdE9iamVjdCYgaW5qZWN0ZWRTY3JpcHRPYmplY3QoKSBjb25zdDsKICAgICBEZXByZWNh
dGVkOjpTY3JpcHRWYWx1ZSBjYWxsRnVuY3Rpb25XaXRoRXZhbEVuYWJsZWQoRGVwcmVjYXRlZDo6
U2NyaXB0RnVuY3Rpb25DYWxsJiwgYm9vbCYgaGFkRXhjZXB0aW9uKSBjb25zdDsKLSAgICB2b2lk
IG1ha2VDYWxsKERlcHJlY2F0ZWQ6OlNjcmlwdEZ1bmN0aW9uQ2FsbCYsIFJlZlB0cjxJbnNwZWN0
b3JWYWx1ZT4qIHJlc3VsdCk7CisgICAgdm9pZCBtYWtlQ2FsbChEZXByZWNhdGVkOjpTY3JpcHRG
dW5jdGlvbkNhbGwmLCBSZWZQdHI8UHJvdG9jb2w6OlVuY2hlY2tlZFZhbHVlPiogcmVzdWx0KTsK
ICAgICB2b2lkIG1ha2VFdmFsQ2FsbChFcnJvclN0cmluZyYsIERlcHJlY2F0ZWQ6OlNjcmlwdEZ1
bmN0aW9uQ2FsbCYsIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiogcmVz
dWx0LCBQcm90b2NvbDo6T3B0T3V0cHV0PGJvb2w+KiB3YXNUaHJvd24pOwogCiBwcml2YXRlOgpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlw
dE1hbmFnZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNj
cmlwdE1hbmFnZXIuY3BwCmluZGV4IDlhOTAxOGJkZDgyOTE3YTM5YjMwOTUzZjBmODc0MTgzMmYz
MTkwZmUuLjFhOTE4Yjc1NzRkYjAwNjlmNjUwMGI0ODJhMjg4MDgzYTc0MmZkYzAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRNYW5hZ2Vy
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0
TWFuYWdlci5jcHAKQEAgLTM2LDcgKzM2LDcgQEAKICNpbmNsdWRlICJDb21wbGV0aW9uLmgiCiAj
aW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHRIb3N0LmgiCiAjaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHRT
b3VyY2UuaCIKLSNpbmNsdWRlICJJbnNwZWN0b3JWYWx1ZXMuaCIKKyNpbmNsdWRlICJJbnNwZWN0
b3JQcm90b2NvbFR5cGVzLmgiCiAjaW5jbHVkZSAiSlNJbmplY3RlZFNjcmlwdEhvc3QuaCIKICNp
bmNsdWRlICJKU0xvY2suaCIKICNpbmNsdWRlICJTY3JpcHRPYmplY3QuaCIKQEAgLTk0LDExICs5
NCwxMSBAQCBpbnQgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjppbmplY3RlZFNjcmlwdElkRm9yKEV4
ZWNTdGF0ZSogc2NyaXB0U3RhdGUpCiAKIEluamVjdGVkU2NyaXB0IEluamVjdGVkU2NyaXB0TWFu
YWdlcjo6aW5qZWN0ZWRTY3JpcHRGb3JPYmplY3RJZChjb25zdCBTdHJpbmcmIG9iamVjdElkKQog
ewotICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gcGFyc2VkT2JqZWN0SWQ7Ci0gICAgaWYgKCFJ
bnNwZWN0b3JWYWx1ZTo6cGFyc2VKU09OKG9iamVjdElkLCBwYXJzZWRPYmplY3RJZCkpCisgICAg
UmVmUHRyPFByb3RvY29sOjpVbmNoZWNrZWRWYWx1ZT4gcGFyc2VkT2JqZWN0SWQ7CisgICAgaWYg
KCFQcm90b2NvbDo6VW5jaGVja2VkVmFsdWU6OnBhcnNlSlNPTihvYmplY3RJZCwgcGFyc2VkT2Jq
ZWN0SWQpKQogICAgICAgICByZXR1cm4gSW5qZWN0ZWRTY3JpcHQoKTsKIAotICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHJlc3VsdE9iamVjdDsKKyAgICBSZWZQdHI8UHJvdG9jb2w6OlVuY2hl
Y2tlZE9iamVjdD4gcmVzdWx0T2JqZWN0OwogICAgIGlmICghcGFyc2VkT2JqZWN0SWQtPmFzT2Jq
ZWN0KHJlc3VsdE9iamVjdCkpCiAgICAgICAgIHJldHVybiBJbmplY3RlZFNjcmlwdCgpOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXIuY3BwCmluZGV4IDlhYjI0OTE0OWZiYTNhMmEwOTI0NzYyZjQ5
NDJiNjExZmQxZDA5ODQuLjUzNjVmOTI3ODU1ZmU1YmEwZWE3ZjNlMTMyZWRiYmUxMmQ4Njg1NGIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuY3BwCkBAIC0zMCw3ICszMCw3IEBACiAjaWYgRU5B
QkxFKElOU1BFQ1RPUikKIAogI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oIgot
I2luY2x1ZGUgIkluc3BlY3RvclZhbHVlcy5oIgorI2luY2x1ZGUgIkluc3BlY3RvclByb3RvY29s
VHlwZXMuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CiAKQEAgLTU0LDcgKzU0LDcgQEAgdm9pZCBJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlOjpzZW5kRmFpbHVyZShjb25zdCBFcnJvclN0cmluZyYg
ZXIKICAgICBzZW5kSWZBY3RpdmUobnVsbHB0ciwgZXJyb3IpOwogfQogCi12b2lkIEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2U6OnNlbmRJZkFjdGl2ZShQYXNzUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcGFydGlhbE1lc3NhZ2UsIGNvbnN0IEVycm9yU3RyaW5nJiBpbnZv
Y2F0aW9uRXJyb3IpCit2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jh
c2U6OnNlbmRJZkFjdGl2ZShQYXNzUmVmUHRyPFByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IHBh
cnRpYWxNZXNzYWdlLCBjb25zdCBFcnJvclN0cmluZyYgaW52b2NhdGlvbkVycm9yKQogewogICAg
IGlmIChtX2FscmVhZHlTZW50KQogICAgICAgICByZXR1cm47CkBAIC03OCwxOSArNzgsMTkgQEAg
dm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2goY29uc3QgU3RyaW5nJiBt
ZXNzYWdlKQogewogICAgIFJlZjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgq
dGhpcyk7CiAKLSAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHBhcnNlZE1lc3NhZ2U7Ci0gICAg
aWYgKCFJbnNwZWN0b3JWYWx1ZTo6cGFyc2VKU09OKG1lc3NhZ2UsIHBhcnNlZE1lc3NhZ2UpKSB7
CisgICAgUmVmUHRyPFByb3RvY29sOjpVbmNoZWNrZWRWYWx1ZT4gcGFyc2VkTWVzc2FnZTsKKyAg
ICBpZiAoIVByb3RvY29sOjpVbmNoZWNrZWRWYWx1ZTo6cGFyc2VKU09OKG1lc3NhZ2UsIHBhcnNl
ZE1lc3NhZ2UpKSB7CiAgICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IobnVsbHB0ciwgUGFyc2VF
cnJvciwgQVNDSUlMaXRlcmFsKCJNZXNzYWdlIG11c3QgYmUgaW4gSlNPTiBmb3JtYXQiKSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNz
YWdlT2JqZWN0OworICAgIFJlZlB0cjxQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBtZXNzYWdl
T2JqZWN0OwogICAgIGlmICghcGFyc2VkTWVzc2FnZS0+YXNPYmplY3QobWVzc2FnZU9iamVjdCkp
IHsKICAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihudWxscHRyLCBJbnZhbGlkUmVxdWVzdCwg
QVNDSUlMaXRlcmFsKCJNZXNzYWdlIG11c3QgYmUgYSBKU09OaWZpZWQgb2JqZWN0IikpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiBjYWxsSWRW
YWx1ZSA9IG1lc3NhZ2VPYmplY3QtPmdldChBU0NJSUxpdGVyYWwoImlkIikpOworICAgIFJlZlB0
cjxQcm90b2NvbDo6VW5jaGVja2VkVmFsdWU+IGNhbGxJZFZhbHVlID0gbWVzc2FnZU9iamVjdC0+
Z2V0KEFTQ0lJTGl0ZXJhbCgiaWQiKSk7CiAgICAgaWYgKCFjYWxsSWRWYWx1ZSkgewogICAgICAg
ICByZXBvcnRQcm90b2NvbEVycm9yKG51bGxwdHIsIEludmFsaWRSZXF1ZXN0LCBBU0NJSUxpdGVy
YWwoIidpZCcgcHJvcGVydHkgd2FzIG5vdCBmb3VuZCIpKTsKICAgICAgICAgcmV0dXJuOwpAQCAt
MTAyLDcgKzEwMiw3IEBAIHZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNo
KGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFJl
ZlB0cjxJbnNwZWN0b3JWYWx1ZT4gbWV0aG9kVmFsdWUgPSBtZXNzYWdlT2JqZWN0LT5nZXQoQVND
SUlMaXRlcmFsKCJtZXRob2QiKSk7CisgICAgUmVmUHRyPFByb3RvY29sOjpVbmNoZWNrZWRWYWx1
ZT4gbWV0aG9kVmFsdWUgPSBtZXNzYWdlT2JqZWN0LT5nZXQoQVNDSUlMaXRlcmFsKCJtZXRob2Qi
KSk7CiAgICAgaWYgKCFtZXRob2RWYWx1ZSkgewogICAgICAgICByZXBvcnRQcm90b2NvbEVycm9y
KCZjYWxsSWQsIEludmFsaWRSZXF1ZXN0LCBBU0NJSUxpdGVyYWwoIidtZXRob2QnIHByb3BlcnR5
IHdhc24ndCBmb3VuZCIpKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMTMxLDcgKzEzMSw3IEBAIHZv
aWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGNvbnN0IFN0cmluZyYgbWVz
c2FnZSkKICAgICBkb21haW5EaXNwYXRjaGVyLT5kaXNwYXRjaChjYWxsSWQsIGRvbWFpbk1ldGhv
ZCwgbWVzc2FnZU9iamVjdC5yZWxlYXNlKCkpOwogfQogCi12b2lkIEluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyOjpzZW5kUmVzcG9uc2UobG9uZyBjYWxsSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiByZXN1bHQsIGNvbnN0IEVycm9yU3RyaW5nJiBpbnZvY2F0aW9uRXJyb3IpCit2b2lk
IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpzZW5kUmVzcG9uc2UobG9uZyBjYWxsSWQsIFBh
c3NSZWZQdHI8UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gcmVzdWx0LCBjb25zdCBFcnJvclN0
cmluZyYgaW52b2NhdGlvbkVycm9yKQogewogICAgIGlmICghbV9pbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwpCiAgICAgICAgIHJldHVybjsKQEAgLTE0MSw3ICsxNDEsNyBAQCB2b2lkIEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyOjpzZW5kUmVzcG9uc2UobG9uZyBjYWxsSWQsIFBhc3NSZWZQdHI8
SW5zcGVjdG9yTwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gcmVzcG9uc2VNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAg
ICBSZWZQdHI8UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gcmVzcG9uc2VNZXNzYWdlID0gUHJv
dG9jb2w6OlVuY2hlY2tlZE9iamVjdDo6Y3JlYXRlKCk7CiAgICAgcmVzcG9uc2VNZXNzYWdlLT5z
ZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJyZXN1bHQiKSwgcmVzdWx0KTsKICAgICByZXNwb25zZU1l
c3NhZ2UtPnNldEludGVnZXIoQVNDSUlMaXRlcmFsKCJpZCIpLCBjYWxsSWQpOwogICAgIG1faW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQocmVzcG9uc2VNZXNz
YWdlLT50b0pTT05TdHJpbmcoKSk7CkBAIC0xNTIsNyArMTUyLDcgQEAgdm9pZCBJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcjo6cmVwb3J0UHJvdG9jb2xFcnJvcihjb25zdCBsb25nKiBjb25zdCBj
YWxsSWQsIEMKICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgZXJyb3JDb2RlLCBlcnJv
ck1lc3NhZ2UsIG51bGxwdHIpOwogfQogCi12b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
OjpyZXBvcnRQcm90b2NvbEVycm9yKGNvbnN0IGxvbmcqIGNvbnN0IGNhbGxJZCwgQ29tbW9uRXJy
b3JDb2RlIGVycm9yQ29kZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIFBhc3NSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+IGRhdGEpIGNvbnN0Cit2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyOjpyZXBvcnRQcm90b2NvbEVycm9yKGNvbnN0IGxvbmcqIGNvbnN0IGNhbGxJZCwgQ29tbW9u
RXJyb3JDb2RlIGVycm9yQ29kZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIFBhc3NSZWZQ
dHI8UHJvdG9jb2w6OlVuY2hlY2tlZEFycmF5PiBkYXRhKSBjb25zdAogewogICAgIHN0YXRpYyBj
b25zdCBpbnQgZXJyb3JDb2Rlc1tdID0gewogICAgICAgICAtMzI3MDAsIC8vIFBhcnNlRXJyb3IK
QEAgLTE3MCwyNCArMTcwLDI0IEBAIHZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnJl
cG9ydFByb3RvY29sRXJyb3IoY29uc3QgbG9uZyogY29uc3QgY2FsbElkLCBDCiAgICAgaWYgKCFt
X2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gZXJyb3IgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAg
IFJlZlB0cjxQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBlcnJvciA9IFByb3RvY29sOjpVbmNo
ZWNrZWRPYmplY3Q6OmNyZWF0ZSgpOwogICAgIGVycm9yLT5zZXRJbnRlZ2VyKEFTQ0lJTGl0ZXJh
bCgiY29kZSIpLCBlcnJvckNvZGVzW2Vycm9yQ29kZV0pOwogICAgIGVycm9yLT5zZXRTdHJpbmco
QVNDSUlMaXRlcmFsKCJtZXNzYWdlIiksIGVycm9yTWVzc2FnZSk7CiAgICAgaWYgKGRhdGEpCiAg
ICAgICAgIGVycm9yLT5zZXRBcnJheShBU0NJSUxpdGVyYWwoImRhdGEiKSwgZGF0YSk7CiAKLSAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKKyAgICBSZWZQdHI8UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gbWVzc2FnZSA9IFBy
b3RvY29sOjpVbmNoZWNrZWRPYmplY3Q6OmNyZWF0ZSgpOwogICAgIG1lc3NhZ2UtPnNldE9iamVj
dChBU0NJSUxpdGVyYWwoImVycm9yIiksIGVycm9yLnJlbGVhc2UoKSk7CiAgICAgaWYgKGNhbGxJ
ZCkKICAgICAgICAgbWVzc2FnZS0+c2V0SW50ZWdlcihBU0NJSUxpdGVyYWwoImlkIiksICpjYWxs
SWQpOwogICAgIGVsc2UKLSAgICAgICAgbWVzc2FnZS0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJp
ZCIpLCBJbnNwZWN0b3JWYWx1ZTo6bnVsbCgpKTsKKyAgICAgICAgbWVzc2FnZS0+c2V0VmFsdWUo
QVNDSUlMaXRlcmFsKCJpZCIpLCBQcm90b2NvbDo6VW5jaGVja2VkVmFsdWU6Om51bGwoKSk7CiAK
ICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKG1l
c3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgUmV0dXJuVmFs
dWVUeXBlLCB0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIERlZmF1bHRWYWx1ZVR5cGU+Ci1z
dGF0aWMgUmV0dXJuVmFsdWVUeXBlIGdldFByb3BlcnR5VmFsdWUoSW5zcGVjdG9yT2JqZWN0KiBv
YmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9yQXJy
YXkqIHByb3RvY29sRXJyb3JzLCBEZWZhdWx0VmFsdWVUeXBlIGRlZmF1bHRWYWx1ZSwgYm9vbCAo
KmFzTWV0aG9kKShJbnNwZWN0b3JWYWx1ZSYsIFZhbHVlVHlwZSYpLCBjb25zdCBjaGFyKiB0eXBl
TmFtZSkKK3N0YXRpYyBSZXR1cm5WYWx1ZVR5cGUgZ2V0UHJvcGVydHlWYWx1ZShQcm90b2NvbDo6
VW5jaGVja2VkT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVG
b3VuZCwgUHJvdG9jb2w6OlVuY2hlY2tlZEFycmF5KiBwcm90b2NvbEVycm9ycywgRGVmYXVsdFZh
bHVlVHlwZSBkZWZhdWx0VmFsdWUsIGJvb2wgKCphc01ldGhvZCkoUHJvdG9jb2w6OlVuY2hlY2tl
ZFZhbHVlJiwgVmFsdWVUeXBlJiksIGNvbnN0IGNoYXIqIHR5cGVOYW1lKQogewogICAgIEFTU0VS
VChwcm90b2NvbEVycm9ycyk7CiAKQEAgLTIwMSw4ICsyMDEsOCBAQCBzdGF0aWMgUmV0dXJuVmFs
dWVUeXBlIGdldFByb3BlcnR5VmFsdWUoSW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0
cmluZyYgbgogICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgfQogCi0gICAgSW5zcGVjdG9yT2Jq
ZWN0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBvYmplY3QtPmVuZCgpOwotICAgIEluc3BlY3Rvck9i
amVjdDo6Y29uc3RfaXRlcmF0b3IgdmFsdWVJdGVyYXRvciA9IG9iamVjdC0+ZmluZChuYW1lKTsK
KyAgICBQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBvYmpl
Y3QtPmVuZCgpOworICAgIFByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q6OmNvbnN0X2l0ZXJhdG9y
IHZhbHVlSXRlcmF0b3IgPSBvYmplY3QtPmZpbmQobmFtZSk7CiAgICAgaWYgKHZhbHVlSXRlcmF0
b3IgPT0gZW5kKSB7CiAgICAgICAgIGlmICghdmFsdWVGb3VuZCkKICAgICAgICAgICAgIHByb3Rv
Y29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJQYXJhbWV0ZXIgJyVzJyB3aXRo
IHR5cGUgJyVzJyB3YXMgbm90IGZvdW5kLiIsIG5hbWUudXRmOCgpLmRhdGEoKSwgdHlwZU5hbWUp
KTsKQEAgLTIyMSw0MiArMjIxLDQyIEBAIHN0YXRpYyBSZXR1cm5WYWx1ZVR5cGUgZ2V0UHJvcGVy
dHlWYWx1ZShJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuCiB9CiAKIHN0
cnVjdCBBc01ldGhvZEJyaWRnZXMgewotICAgIHN0YXRpYyBib29sIGFzSW50ZWdlcihJbnNwZWN0
b3JWYWx1ZSYgdmFsdWUsIGludCYgb3V0cHV0KSB7IHJldHVybiB2YWx1ZS5hc0ludGVnZXIob3V0
cHV0KTsgfQotICAgIHN0YXRpYyBib29sIGFzRG91YmxlKEluc3BlY3RvclZhbHVlJiB2YWx1ZSwg
ZG91YmxlJiBvdXRwdXQpIHsgcmV0dXJuIHZhbHVlLmFzRG91YmxlKG91dHB1dCk7IH0KLSAgICBz
dGF0aWMgYm9vbCBhc1N0cmluZyhJbnNwZWN0b3JWYWx1ZSYgdmFsdWUsIFN0cmluZyYgb3V0cHV0
KSB7IHJldHVybiB2YWx1ZS5hc1N0cmluZyhvdXRwdXQpOyB9Ci0gICAgc3RhdGljIGJvb2wgYXNC
b29sZWFuKEluc3BlY3RvclZhbHVlJiB2YWx1ZSwgYm9vbCYgb3V0cHV0KSB7IHJldHVybiB2YWx1
ZS5hc0Jvb2xlYW4ob3V0cHV0KTsgfQotICAgIHN0YXRpYyBib29sIGFzT2JqZWN0KEluc3BlY3Rv
clZhbHVlJiB2YWx1ZSwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIG91dHB1dCkgeyByZXR1cm4g
dmFsdWUuYXNPYmplY3Qob3V0cHV0KTsgfQotICAgIHN0YXRpYyBib29sIGFzQXJyYXkoSW5zcGVj
dG9yVmFsdWUmIHZhbHVlLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+JiBvdXRwdXQpIHsgcmV0dXJu
IHZhbHVlLmFzQXJyYXkob3V0cHV0KTsgfQorICAgIHN0YXRpYyBib29sIGFzSW50ZWdlcihQcm90
b2NvbDo6VW5jaGVja2VkVmFsdWUmIHZhbHVlLCBpbnQmIG91dHB1dCkgeyByZXR1cm4gdmFsdWUu
YXNJbnRlZ2VyKG91dHB1dCk7IH0KKyAgICBzdGF0aWMgYm9vbCBhc0RvdWJsZShQcm90b2NvbDo6
VW5jaGVja2VkVmFsdWUmIHZhbHVlLCBkb3VibGUmIG91dHB1dCkgeyByZXR1cm4gdmFsdWUuYXNE
b3VibGUob3V0cHV0KTsgfQorICAgIHN0YXRpYyBib29sIGFzU3RyaW5nKFByb3RvY29sOjpVbmNo
ZWNrZWRWYWx1ZSYgdmFsdWUsIFN0cmluZyYgb3V0cHV0KSB7IHJldHVybiB2YWx1ZS5hc1N0cmlu
ZyhvdXRwdXQpOyB9CisgICAgc3RhdGljIGJvb2wgYXNCb29sZWFuKFByb3RvY29sOjpVbmNoZWNr
ZWRWYWx1ZSYgdmFsdWUsIGJvb2wmIG91dHB1dCkgeyByZXR1cm4gdmFsdWUuYXNCb29sZWFuKG91
dHB1dCk7IH0KKyAgICBzdGF0aWMgYm9vbCBhc09iamVjdChQcm90b2NvbDo6VW5jaGVja2VkVmFs
dWUmIHZhbHVlLCBSZWZQdHI8UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4mIG91dHB1dCkgeyBy
ZXR1cm4gdmFsdWUuYXNPYmplY3Qob3V0cHV0KTsgfQorICAgIHN0YXRpYyBib29sIGFzQXJyYXko
UHJvdG9jb2w6OlVuY2hlY2tlZFZhbHVlJiB2YWx1ZSwgUmVmUHRyPFByb3RvY29sOjpVbmNoZWNr
ZWRBcnJheT4mIG91dHB1dCkgeyByZXR1cm4gdmFsdWUuYXNBcnJheShvdXRwdXQpOyB9CiB9Owog
Ci1pbnQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldEludGVnZXIoSW5zcGVjdG9yT2Jq
ZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVj
dG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKQoraW50IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
OjpnZXRJbnRlZ2VyKFByb3RvY29sOjpVbmNoZWNrZWRPYmplY3QqIG9iamVjdCwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBQcm90b2NvbDo6VW5jaGVja2VkQXJyYXkqIHBy
b3RvY29sRXJyb3JzKQogewogICAgIHJldHVybiBnZXRQcm9wZXJ0eVZhbHVlPGludCwgaW50LCBp
bnQ+KG9iamVjdCwgbmFtZSwgdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnMsIDAsIEFzTWV0aG9k
QnJpZGdlczo6YXNJbnRlZ2VyLCAiSW50ZWdlciIpOwogfQogCi1kb3VibGUgSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI6OmdldERvdWJsZShJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3Qg
U3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xF
cnJvcnMpCitkb3VibGUgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldERvdWJsZShQcm90
b2NvbDo6VW5jaGVja2VkT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCog
dmFsdWVGb3VuZCwgUHJvdG9jb2w6OlVuY2hlY2tlZEFycmF5KiBwcm90b2NvbEVycm9ycykKIHsK
ICAgICByZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZTxkb3VibGUsIGRvdWJsZSwgZG91YmxlPihvYmpl
Y3QsIG5hbWUsIHZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzLCAwLCBBc01ldGhvZEJyaWRnZXM6
OmFzRG91YmxlLCAiTnVtYmVyIik7CiB9CiAKLVN0cmluZyBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcjo6Z2V0U3RyaW5nKEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5h
bWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9ycykKK1N0
cmluZyBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKFByb3RvY29sOjpVbmNo
ZWNrZWRPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5k
LCBQcm90b2NvbDo6VW5jaGVja2VkQXJyYXkqIHByb3RvY29sRXJyb3JzKQogewogICAgIHJldHVy
biBnZXRQcm9wZXJ0eVZhbHVlPFN0cmluZywgU3RyaW5nLCBTdHJpbmc+KG9iamVjdCwgbmFtZSwg
dmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnMsICIiLCBBc01ldGhvZEJyaWRnZXM6OmFzU3RyaW5n
LCAiU3RyaW5nIik7CiB9CiAKLWJvb2wgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldEJv
b2xlYW4oSW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCog
dmFsdWVGb3VuZCwgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKQorYm9vbCBJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0Qm9vbGVhbihQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0
KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgUHJvdG9jb2w6
OlVuY2hlY2tlZEFycmF5KiBwcm90b2NvbEVycm9ycykKIHsKICAgICByZXR1cm4gZ2V0UHJvcGVy
dHlWYWx1ZTxib29sLCBib29sLCBib29sPihvYmplY3QsIG5hbWUsIHZhbHVlRm91bmQsIHByb3Rv
Y29sRXJyb3JzLCBmYWxzZSwgQXNNZXRob2RCcmlkZ2VzOjphc0Jvb2xlYW4sICJCb29sZWFuIik7
CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcjo6Z2V0T2JqZWN0KEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5h
bWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9ycykKK1Bh
c3NSZWZQdHI8UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXI6OmdldE9iamVjdChQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0KiBvYmplY3QsIGNvbnN0
IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgUHJvdG9jb2w6OlVuY2hlY2tlZEFycmF5
KiBwcm90b2NvbEVycm9ycykKIHsKLSAgICByZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZTxQYXNzUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4sIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+LCBJbnNwZWN0b3JP
YmplY3QqPihvYmplY3QsIG5hbWUsIHZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzLCBudWxscHRy
LCBBc01ldGhvZEJyaWRnZXM6OmFzT2JqZWN0LCAiT2JqZWN0Iik7CisgICAgcmV0dXJuIGdldFBy
b3BlcnR5VmFsdWU8UGFzc1JlZlB0cjxQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiwgUmVmUHRy
PFByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+LCBQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0Kj4o
b2JqZWN0LCBuYW1lLCB2YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9ycywgbnVsbHB0ciwgQXNNZXRo
b2RCcmlkZ2VzOjphc09iamVjdCwgIk9iamVjdCIpOwogfQogCi1QYXNzUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0QXJyYXkoSW5zcGVjdG9yT2Jq
ZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVj
dG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKQorUGFzc1JlZlB0cjxQcm90b2NvbDo6VW5jaGVja2Vk
QXJyYXk+IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRBcnJheShQcm90b2NvbDo6VW5j
aGVja2VkT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3Vu
ZCwgUHJvdG9jb2w6OlVuY2hlY2tlZEFycmF5KiBwcm90b2NvbEVycm9ycykKIHsKLSAgICByZXR1
cm4gZ2V0UHJvcGVydHlWYWx1ZTxQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiwgUmVmUHRyPElu
c3BlY3RvckFycmF5PiwgSW5zcGVjdG9yQXJyYXkqPihvYmplY3QsIG5hbWUsIHZhbHVlRm91bmQs
IHByb3RvY29sRXJyb3JzLCBudWxscHRyLCBBc01ldGhvZEJyaWRnZXM6OmFzQXJyYXksICJBcnJh
eSIpOworICAgIHJldHVybiBnZXRQcm9wZXJ0eVZhbHVlPFBhc3NSZWZQdHI8UHJvdG9jb2w6OlVu
Y2hlY2tlZEFycmF5PiwgUmVmUHRyPFByb3RvY29sOjpVbmNoZWNrZWRBcnJheT4sIFByb3RvY29s
OjpVbmNoZWNrZWRBcnJheSo+KG9iamVjdCwgbmFtZSwgdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJv
cnMsIG51bGxwdHIsIEFzTWV0aG9kQnJpZGdlczo6YXNBcnJheSwgIkFycmF5Iik7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oCmluZGV4IDI5NThh
NGRjYmE2YzhmNmE1YTgzZmQzNjg3MzQ5Y2ViYThjMmFkMGQuLjdjZmZlZDI0YTZlM2U1YzUwN2U3
OTA0NGQyYmQ1MWJkYmEzOWY3ODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmgKQEAgLTI3LDcg
KzI3LDcgQEAKICNpZm5kZWYgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJfaAogI2RlZmluZSBJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcl9oCiAKLSNpbmNsdWRlICJJbnNwZWN0b3JWYWx1ZXMu
aCIKKyNpbmNsdWRlICJJbnNwZWN0b3JQcm90b2NvbFR5cGVzLmgiCiAjaW5jbHVkZSA8d3RmL1Bh
c3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgpAQCAtNDIsNyArNDIsNyBAQCBjbGFzcyBJbnNwZWN0b3JTdXBwbGVt
ZW50YWxCYWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBSZWZDb3VudGVkPEluc3BlY3RvclN1cHBs
ZQogcHVibGljOgogICAgIEluc3BlY3RvclN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcikgOiBtX2JhY2tlbmRE
aXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKSB7IH0KICAgICB2aXJ0dWFsIH5JbnNwZWN0b3JT
dXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBkaXNw
YXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFBhc3NSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBtZXNzYWdlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoKGxvbmcg
Y2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUGFzc1JlZlB0cjxQcm90b2NvbDo6VW5jaGVj
a2VkT2JqZWN0PiBtZXNzYWdlKSA9IDA7CiBwcm90ZWN0ZWQ6CiAgICAgUmVmUHRyPEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwogfTsKQEAgLTYwLDcgKzYw
LDcgQEAgcHVibGljOgogICAgICAgICB2b2lkIGRpc2FibGUoKSB7IG1fYWxyZWFkeVNlbnQgPSB0
cnVlOyB9CiAKICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIHZvaWQgc2VuZElmQWN0aXZlKFBhc3NS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJ0aWFsTWVzc2FnZSwgY29uc3QgRXJyb3JTdHJpbmcm
IGludm9jYXRpb25FcnJvcik7CisgICAgICAgIHZvaWQgc2VuZElmQWN0aXZlKFBhc3NSZWZQdHI8
UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gcGFydGlhbE1lc3NhZ2UsIGNvbnN0IEVycm9yU3Ry
aW5nJiBpbnZvY2F0aW9uRXJyb3IpOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgUmVmUHRyPElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwpAQCAtODIsMTYg
KzgyLDE2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgcmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWlu
KGNvbnN0IFN0cmluZyYgZG9tYWluLCBJbnNwZWN0b3JTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0
Y2hlciopOwogICAgIHZvaWQgZGlzcGF0Y2goY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKLSAgICB2
b2lkIHNlbmRSZXNwb25zZShsb25nIGNhbGxJZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHJlc3VsdCwgY29uc3QgRXJyb3JTdHJpbmcmIGludm9jYXRpb25FcnJvcik7CisgICAgdm9pZCBz
ZW5kUmVzcG9uc2UobG9uZyBjYWxsSWQsIFBhc3NSZWZQdHI8UHJvdG9jb2w6OlVuY2hlY2tlZE9i
amVjdD4gcmVzdWx0LCBjb25zdCBFcnJvclN0cmluZyYgaW52b2NhdGlvbkVycm9yKTsKICAgICB2
b2lkIHJlcG9ydFByb3RvY29sRXJyb3IoY29uc3QgbG9uZyogY29uc3QgY2FsbElkLCBDb21tb25F
cnJvckNvZGUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKSBjb25zdDsKLSAgICB2b2lkIHJl
cG9ydFByb3RvY29sRXJyb3IoY29uc3QgbG9uZyogY29uc3QgY2FsbElkLCBDb21tb25FcnJvckNv
ZGUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5
PiBkYXRhKSBjb25zdDsKLQotICAgIHN0YXRpYyBpbnQgZ2V0SW50ZWdlcihJbnNwZWN0b3JPYmpl
Y3QqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3RvckFycmF5
KiBwcm90b2NvbEVycm9ycyk7Ci0gICAgc3RhdGljIGRvdWJsZSBnZXREb3VibGUoSW5zcGVjdG9y
T2JqZWN0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JB
cnJheSogcHJvdG9jb2xFcnJvcnMpOwotICAgIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKEluc3Bl
Y3Rvck9iamVjdCosIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVj
dG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKTsKLSAgICBzdGF0aWMgYm9vbCBnZXRCb29sZWFuKElu
c3BlY3Rvck9iamVjdCosIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5z
cGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKTsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IGdldE9iamVjdChJbnNwZWN0b3JPYmplY3QqLCBjb25zdCBTdHJpbmcmIG5h
bWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9ycyk7Ci0g
ICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGdldEFycmF5KEluc3BlY3Rvck9i
amVjdCosIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9yQXJy
YXkqIHByb3RvY29sRXJyb3JzKTsKKyAgICB2b2lkIHJlcG9ydFByb3RvY29sRXJyb3IoY29uc3Qg
bG9uZyogY29uc3QgY2FsbElkLCBDb21tb25FcnJvckNvZGUsIGNvbnN0IFN0cmluZyYgZXJyb3JN
ZXNzYWdlLCBQYXNzUmVmUHRyPFByb3RvY29sOjpVbmNoZWNrZWRBcnJheT4gZGF0YSkgY29uc3Q7
CisKKyAgICBzdGF0aWMgaW50IGdldEludGVnZXIoUHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdCos
IGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgUHJvdG9jb2w6OlVuY2hlY2tl
ZEFycmF5KiBwcm90b2NvbEVycm9ycyk7CisgICAgc3RhdGljIGRvdWJsZSBnZXREb3VibGUoUHJv
dG9jb2w6OlVuY2hlY2tlZE9iamVjdCosIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVG
b3VuZCwgUHJvdG9jb2w6OlVuY2hlY2tlZEFycmF5KiBwcm90b2NvbEVycm9ycyk7CisgICAgc3Rh
dGljIFN0cmluZyBnZXRTdHJpbmcoUHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdCosIGNvbnN0IFN0
cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgUHJvdG9jb2w6OlVuY2hlY2tlZEFycmF5KiBw
cm90b2NvbEVycm9ycyk7CisgICAgc3RhdGljIGJvb2wgZ2V0Qm9vbGVhbihQcm90b2NvbDo6VW5j
aGVja2VkT2JqZWN0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBQcm90
b2NvbDo6VW5jaGVja2VkQXJyYXkqIHByb3RvY29sRXJyb3JzKTsKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBnZXRPYmplY3QoUHJvdG9jb2w6OlVuY2hl
Y2tlZE9iamVjdCosIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgUHJvdG9j
b2w6OlVuY2hlY2tlZEFycmF5KiBwcm90b2NvbEVycm9ycyk7CisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8UHJvdG9jb2w6OlVuY2hlY2tlZEFycmF5PiBnZXRBcnJheShQcm90b2NvbDo6VW5jaGVja2Vk
T2JqZWN0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBQcm90b2NvbDo6
VW5jaGVja2VkQXJyYXkqIHByb3RvY29sRXJyb3JzKTsKIAogcHJpdmF0ZToKICAgICBJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCkgOiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwpIHsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmI2ZjZkOWU1
NWZmZjJjMzk5ZTA5YTkyNGJmNjZiMzRhYWI4NmY1ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5jcHAKQEAg
LTAsMCArMSw5MDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
Ikluc3BlY3RvclByb3RvY29sVHlwZXMuaCIKKworI2luY2x1ZGUgPHd0Zi9EZWNpbWFsTnVtYmVy
Lmg+CisjaW5jbHVkZSA8d3RmL2R0b2EuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWls
ZGVyLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCituYW1lc3BhY2UgeworCit1c2luZyBu
YW1lc3BhY2UgUHJvdG9jb2w7CisKK3N0YXRpYyBjb25zdCBpbnQgc3RhY2tMaW1pdCA9IDEwMDA7
CisKK2VudW0gVG9rZW4geworICAgIE9CSkVDVF9CRUdJTiwKKyAgICBPQkpFQ1RfRU5ELAorICAg
IEFSUkFZX0JFR0lOLAorICAgIEFSUkFZX0VORCwKKyAgICBTVFJJTkcsCisgICAgTlVNQkVSLAor
ICAgIEJPT0xfVFJVRSwKKyAgICBCT09MX0ZBTFNFLAorICAgIE5VTExfVE9LRU4sCisgICAgTElT
VF9TRVBBUkFUT1IsCisgICAgT0JKRUNUX1BBSVJfU0VQQVJBVE9SLAorICAgIElOVkFMSURfVE9L
RU4sCit9OworCitjb25zdCBjaGFyKiBjb25zdCBudWxsU3RyaW5nID0gIm51bGwiOworY29uc3Qg
Y2hhciogY29uc3QgdHJ1ZVN0cmluZyA9ICJ0cnVlIjsKK2NvbnN0IGNoYXIqIGNvbnN0IGZhbHNl
U3RyaW5nID0gImZhbHNlIjsKKworYm9vbCBwYXJzZUNvbnN0VG9rZW4oY29uc3QgVUNoYXIqIHN0
YXJ0LCBjb25zdCBVQ2hhciogZW5kLCBjb25zdCBVQ2hhcioqIHRva2VuRW5kLCBjb25zdCBjaGFy
KiB0b2tlbikKK3sKKyAgICB3aGlsZSAoc3RhcnQgPCBlbmQgJiYgKnRva2VuICE9ICdcMCcgJiYg
KnN0YXJ0KysgPT0gKnRva2VuKyspIHsgfQorCisgICAgaWYgKCp0b2tlbiAhPSAnXDAnKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAqdG9rZW5FbmQgPSBzdGFydDsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworYm9vbCByZWFkSW50KGNvbnN0IFVDaGFyKiBzdGFydCwgY29uc3QgVUNoYXIq
IGVuZCwgY29uc3QgVUNoYXIqKiB0b2tlbkVuZCwgYm9vbCBjYW5IYXZlTGVhZGluZ1plcm9zKQor
eworICAgIGlmIChzdGFydCA9PSBlbmQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGJv
b2wgaGF2ZUxlYWRpbmdaZXJvID0gJzAnID09ICpzdGFydDsKKyAgICBpbnQgbGVuZ3RoID0gMDsK
KyAgICB3aGlsZSAoc3RhcnQgPCBlbmQgJiYgJzAnIDw9ICpzdGFydCAmJiAqc3RhcnQgPD0gJzkn
KSB7CisgICAgICAgICsrc3RhcnQ7CisgICAgICAgICsrbGVuZ3RoOworICAgIH0KKworICAgIGlm
ICghbGVuZ3RoKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWNhbkhhdmVMZWFk
aW5nWmVyb3MgJiYgbGVuZ3RoID4gMSAmJiBoYXZlTGVhZGluZ1plcm8pCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgICp0b2tlbkVuZCA9IHN0YXJ0OworICAgIHJldHVybiB0cnVlOworfQor
Citib29sIHBhcnNlTnVtYmVyVG9rZW4oY29uc3QgVUNoYXIqIHN0YXJ0LCBjb25zdCBVQ2hhciog
ZW5kLCBjb25zdCBVQ2hhcioqIHRva2VuRW5kKQoreworICAgIC8vIFdlIGp1c3QgZ3JhYiB0aGUg
bnVtYmVyIGhlcmUuIFdlIHZhbGlkYXRlIHRoZSBzaXplIGluIERlY29kZU51bWJlci4KKyAgICAv
LyBBY2NvcmRpbmcgdG8gUkZDNDYyNywgYSB2YWxpZCBudW1iZXIgaXM6IFttaW51c10gaW50IFtm
cmFjXSBbZXhwXQorICAgIGlmIChzdGFydCA9PSBlbmQpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIFVDaGFyIGMgPSAqc3RhcnQ7CisgICAgaWYgKCctJyA9PSBjKQorICAgICAgICArK3N0
YXJ0OworCisgICAgaWYgKCFyZWFkSW50KHN0YXJ0LCBlbmQsICZzdGFydCwgZmFsc2UpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoc3RhcnQgPT0gZW5kKSB7CisgICAgICAgICp0
b2tlbkVuZCA9IHN0YXJ0OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAvLyBP
cHRpb25hbCBmcmFjdGlvbiBwYXJ0CisgICAgYyA9ICpzdGFydDsKKyAgICBpZiAoJy4nID09IGMp
IHsKKyAgICAgICAgKytzdGFydDsKKyAgICAgICAgaWYgKCFyZWFkSW50KHN0YXJ0LCBlbmQsICZz
dGFydCwgdHJ1ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChzdGFy
dCA9PSBlbmQpIHsKKyAgICAgICAgICAgICp0b2tlbkVuZCA9IHN0YXJ0OworICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgYyA9ICpzdGFydDsKKyAgICB9CisKKyAg
ICAvLyBPcHRpb25hbCBleHBvbmVudCBwYXJ0CisgICAgaWYgKCdlJyA9PSBjIHx8ICdFJyA9PSBj
KSB7CisgICAgICAgICsrc3RhcnQ7CisgICAgICAgIGlmIChzdGFydCA9PSBlbmQpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGMgPSAqc3RhcnQ7CisgICAgICAgIGlmICgnLScg
PT0gYyB8fCAnKycgPT0gYykgeworICAgICAgICAgICAgKytzdGFydDsKKyAgICAgICAgICAgIGlm
IChzdGFydCA9PSBlbmQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgICAgIGlmICghcmVhZEludChzdGFydCwgZW5kLCAmc3RhcnQsIHRydWUpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgICp0b2tlbkVuZCA9IHN0YXJ0OworICAg
IHJldHVybiB0cnVlOworfQorCitib29sIHJlYWRIZXhEaWdpdHMoY29uc3QgVUNoYXIqIHN0YXJ0
LCBjb25zdCBVQ2hhciogZW5kLCBjb25zdCBVQ2hhcioqIHRva2VuRW5kLCBpbnQgZGlnaXRzKQor
eworICAgIGlmIChlbmQgLSBzdGFydCA8IGRpZ2l0cykKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkaWdpdHM7ICsraSkgeworICAgICAgICBVQ2hhciBj
ID0gKnN0YXJ0Kys7CisgICAgICAgIGlmICghKCgnMCcgPD0gYyAmJiBjIDw9ICc5JykgfHwgKCdh
JyA8PSBjICYmIGMgPD0gJ2YnKSB8fCAoJ0EnIDw9IGMgJiYgYyA8PSAnRicpKSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAqdG9rZW5FbmQgPSBzdGFydDsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBwYXJzZVN0cmluZ1Rva2VuKGNvbnN0IFVDaGFyKiBzdGFy
dCwgY29uc3QgVUNoYXIqIGVuZCwgY29uc3QgVUNoYXIqKiB0b2tlbkVuZCkKK3sKKyAgICB3aGls
ZSAoc3RhcnQgPCBlbmQpIHsKKyAgICAgICAgVUNoYXIgYyA9ICpzdGFydCsrOworICAgICAgICBp
ZiAoJ1xcJyA9PSBjKSB7CisgICAgICAgICAgICBjID0gKnN0YXJ0Kys7CisgICAgICAgICAgICAv
LyBNYWtlIHN1cmUgdGhlIGVzY2FwZWQgY2hhciBpcyB2YWxpZC4KKyAgICAgICAgICAgIHN3aXRj
aCAoYykgeworICAgICAgICAgICAgY2FzZSAneCc6CisgICAgICAgICAgICAgICAgaWYgKCFyZWFk
SGV4RGlnaXRzKHN0YXJ0LCBlbmQsICZzdGFydCwgMikpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ3Un
OgorICAgICAgICAgICAgICAgIGlmICghcmVhZEhleERpZ2l0cyhzdGFydCwgZW5kLCAmc3RhcnQs
IDQpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlICdcXCc6CisgICAgICAgICAgICBjYXNlICcvJzoKKyAg
ICAgICAgICAgIGNhc2UgJ2InOgorICAgICAgICAgICAgY2FzZSAnZic6CisgICAgICAgICAgICBj
YXNlICduJzoKKyAgICAgICAgICAgIGNhc2UgJ3InOgorICAgICAgICAgICAgY2FzZSAndCc6Cisg
ICAgICAgICAgICBjYXNlICd2JzoKKyAgICAgICAgICAgIGNhc2UgJyInOgorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoJyInID09IGMpIHsKKyAg
ICAgICAgICAgICp0b2tlbkVuZCA9IHN0YXJ0OworICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1Rva2VuIHBhcnNlVG9r
ZW4oY29uc3QgVUNoYXIqIHN0YXJ0LCBjb25zdCBVQ2hhciogZW5kLCBjb25zdCBVQ2hhcioqIHRv
a2VuU3RhcnQsIGNvbnN0IFVDaGFyKiogdG9rZW5FbmQpCit7CisgICAgd2hpbGUgKHN0YXJ0IDwg
ZW5kICYmIGlzU3BhY2VPck5ld2xpbmUoKnN0YXJ0KSkKKyAgICAgICAgKytzdGFydDsKKworICAg
IGlmIChzdGFydCA9PSBlbmQpCisgICAgICAgIHJldHVybiBJTlZBTElEX1RPS0VOOworCisgICAg
KnRva2VuU3RhcnQgPSBzdGFydDsKKworICAgIHN3aXRjaCAoKnN0YXJ0KSB7CisgICAgY2FzZSAn
bic6CisgICAgICAgIGlmIChwYXJzZUNvbnN0VG9rZW4oc3RhcnQsIGVuZCwgdG9rZW5FbmQsIG51
bGxTdHJpbmcpKQorICAgICAgICAgICAgcmV0dXJuIE5VTExfVE9LRU47CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgJ3QnOgorICAgICAgICBpZiAocGFyc2VDb25zdFRva2VuKHN0YXJ0LCBlbmQs
IHRva2VuRW5kLCB0cnVlU3RyaW5nKSkKKyAgICAgICAgICAgIHJldHVybiBCT09MX1RSVUU7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgJ2YnOgorICAgICAgICBpZiAocGFyc2VDb25zdFRva2Vu
KHN0YXJ0LCBlbmQsIHRva2VuRW5kLCBmYWxzZVN0cmluZykpCisgICAgICAgICAgICByZXR1cm4g
Qk9PTF9GQUxTRTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAnWyc6CisgICAgICAgICp0b2tl
bkVuZCA9IHN0YXJ0ICsgMTsKKyAgICAgICAgcmV0dXJuIEFSUkFZX0JFR0lOOworICAgIGNhc2Ug
J10nOgorICAgICAgICAqdG9rZW5FbmQgPSBzdGFydCArIDE7CisgICAgICAgIHJldHVybiBBUlJB
WV9FTkQ7CisgICAgY2FzZSAnLCc6CisgICAgICAgICp0b2tlbkVuZCA9IHN0YXJ0ICsgMTsKKyAg
ICAgICAgcmV0dXJuIExJU1RfU0VQQVJBVE9SOworICAgIGNhc2UgJ3snOgorICAgICAgICAqdG9r
ZW5FbmQgPSBzdGFydCArIDE7CisgICAgICAgIHJldHVybiBPQkpFQ1RfQkVHSU47CisgICAgY2Fz
ZSAnfSc6CisgICAgICAgICp0b2tlbkVuZCA9IHN0YXJ0ICsgMTsKKyAgICAgICAgcmV0dXJuIE9C
SkVDVF9FTkQ7CisgICAgY2FzZSAnOic6CisgICAgICAgICp0b2tlbkVuZCA9IHN0YXJ0ICsgMTsK
KyAgICAgICAgcmV0dXJuIE9CSkVDVF9QQUlSX1NFUEFSQVRPUjsKKyAgICBjYXNlICcwJzoKKyAg
ICBjYXNlICcxJzoKKyAgICBjYXNlICcyJzoKKyAgICBjYXNlICczJzoKKyAgICBjYXNlICc0JzoK
KyAgICBjYXNlICc1JzoKKyAgICBjYXNlICc2JzoKKyAgICBjYXNlICc3JzoKKyAgICBjYXNlICc4
JzoKKyAgICBjYXNlICc5JzoKKyAgICBjYXNlICctJzoKKyAgICAgICAgaWYgKHBhcnNlTnVtYmVy
VG9rZW4oc3RhcnQsIGVuZCwgdG9rZW5FbmQpKQorICAgICAgICAgICAgcmV0dXJuIE5VTUJFUjsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAnIic6CisgICAgICAgIGlmIChwYXJzZVN0cmluZ1Rv
a2VuKHN0YXJ0ICsgMSwgZW5kLCB0b2tlbkVuZCkpCisgICAgICAgICAgICByZXR1cm4gU1RSSU5H
OworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gSU5WQUxJRF9UT0tFTjsKK30K
KworaW5saW5lIGludCBoZXhUb0ludChVQ2hhciBjKQoreworICAgIGlmICgnMCcgPD0gYyAmJiBj
IDw9ICc5JykKKyAgICAgICAgcmV0dXJuIGMgLSAnMCc7CisgICAgaWYgKCdBJyA8PSBjICYmIGMg
PD0gJ0YnKQorICAgICAgICByZXR1cm4gYyAtICdBJyArIDEwOworICAgIGlmICgnYScgPD0gYyAm
JiBjIDw9ICdmJykKKyAgICAgICAgcmV0dXJuIGMgLSAnYScgKyAxMDsKKworICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorCitib29sIGRlY29kZVN0cmluZyhjb25z
dCBVQ2hhciogc3RhcnQsIGNvbnN0IFVDaGFyKiBlbmQsIFN0cmluZ0J1aWxkZXImIG91dHB1dCkK
K3sKKyAgICB3aGlsZSAoc3RhcnQgPCBlbmQpIHsKKyAgICAgICAgVUNoYXIgYyA9ICpzdGFydCsr
OworICAgICAgICBpZiAoJ1xcJyAhPSBjKSB7CisgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKGMp
OworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgYyA9ICpzdGFydCsr
OworICAgICAgICBzd2l0Y2ggKGMpIHsKKyAgICAgICAgY2FzZSAnIic6CisgICAgICAgIGNhc2Ug
Jy8nOgorICAgICAgICBjYXNlICdcXCc6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSAnYic6CisgICAgICAgICAgICBjID0gJ1xiJzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlICdmJzoKKyAgICAgICAgICAgIGMgPSAnXGYnOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgJ24nOgorICAgICAgICAgICAgYyA9ICdcbic7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSAncic6CisgICAgICAgICAgICBjID0gJ1xyJzsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlICd0JzoKKyAgICAgICAgICAgIGMgPSAnXHQnOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ3YnOgorICAgICAgICAgICAgYyA9ICdcdic7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAneCc6CisgICAgICAgICAgICBjID0gKGhl
eFRvSW50KCpzdGFydCkgPDwgNCkgKworICAgICAgICAgICAgICAgIGhleFRvSW50KCooc3RhcnQg
KyAxKSk7CisgICAgICAgICAgICBzdGFydCArPSAyOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgJ3UnOgorICAgICAgICAgICAgYyA9IChoZXhUb0ludCgqc3RhcnQpIDw8IDEyKSAr
CisgICAgICAgICAgICAgICAgKGhleFRvSW50KCooc3RhcnQgKyAxKSkgPDwgOCkgKworICAgICAg
ICAgICAgICAgIChoZXhUb0ludCgqKHN0YXJ0ICsgMikpIDw8IDQpICsKKyAgICAgICAgICAgICAg
ICBoZXhUb0ludCgqKHN0YXJ0ICsgMykpOworICAgICAgICAgICAgc3RhcnQgKz0gNDsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgICAgIG91dHB1dC5hcHBlbmQoYyk7CisgICAgfQorCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2Jvb2wgZGVjb2RlU3RyaW5nKGNvbnN0IFVDaGFyKiBzdGFydCwgY29u
c3QgVUNoYXIqIGVuZCwgU3RyaW5nJiBvdXRwdXQpCit7CisgICAgaWYgKHN0YXJ0ID09IGVuZCkg
eworICAgICAgICBvdXRwdXQgPSBlbXB0eVN0cmluZygpOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisKKyAgICBpZiAoc3RhcnQgPiBlbmQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIFN0cmluZ0J1aWxkZXIgYnVmZmVyOworICAgIGJ1ZmZlci5yZXNlcnZlQ2FwYWNpdHkoZW5k
IC0gc3RhcnQpOworICAgIGlmICghZGVjb2RlU3RyaW5nKHN0YXJ0LCBlbmQsIGJ1ZmZlcikpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG91dHB1dCA9IGJ1ZmZlci50b1N0cmluZygpOwor
ICAgIHJldHVybiB0cnVlOworfQorCitQYXNzUmVmUHRyPFByb3RvY29sOjpVbmNoZWNrZWRWYWx1
ZT4gYnVpbGRWYWx1ZShjb25zdCBVQ2hhciogc3RhcnQsIGNvbnN0IFVDaGFyKiBlbmQsIGNvbnN0
IFVDaGFyKiogdmFsdWVUb2tlbkVuZCwgaW50IGRlcHRoKQoreworICAgIGlmIChkZXB0aCA+IHN0
YWNrTGltaXQpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgUmVmUHRyPFByb3RvY29s
OjpVbmNoZWNrZWRWYWx1ZT4gcmVzdWx0OworICAgIGNvbnN0IFVDaGFyKiB0b2tlblN0YXJ0Owor
ICAgIGNvbnN0IFVDaGFyKiB0b2tlbkVuZDsKKyAgICBUb2tlbiB0b2tlbiA9IHBhcnNlVG9rZW4o
c3RhcnQsIGVuZCwgJnRva2VuU3RhcnQsICZ0b2tlbkVuZCk7CisgICAgc3dpdGNoICh0b2tlbikg
eworICAgIGNhc2UgSU5WQUxJRF9UT0tFTjoKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
Y2FzZSBOVUxMX1RPS0VOOgorICAgICAgICByZXN1bHQgPSBQcm90b2NvbDo6VW5jaGVja2VkVmFs
dWU6Om51bGwoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBCT09MX1RSVUU6CisgICAgICAg
IHJlc3VsdCA9IFByaW1pdGl2ZVZhbHVlOjpjcmVhdGUodHJ1ZSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgQk9PTF9GQUxTRToKKyAgICAgICAgcmVzdWx0ID0gUHJpbWl0aXZlVmFsdWU6OmNy
ZWF0ZShmYWxzZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTlVNQkVSOiB7CisgICAgICAg
IGJvb2wgb2s7CisgICAgICAgIGRvdWJsZSB2YWx1ZSA9IGNoYXJhY3RlcnNUb0RvdWJsZSh0b2tl
blN0YXJ0LCB0b2tlbkVuZCAtIHRva2VuU3RhcnQsICZvayk7CisgICAgICAgIGlmICghb2spCisg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmVzdWx0ID0gUHJpbWl0aXZlVmFs
dWU6OmNyZWF0ZSh2YWx1ZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFNUUklO
RzogeworICAgICAgICBTdHJpbmcgdmFsdWU7CisgICAgICAgIGJvb2wgb2sgPSBkZWNvZGVTdHJp
bmcodG9rZW5TdGFydCArIDEsIHRva2VuRW5kIC0gMSwgdmFsdWUpOworICAgICAgICBpZiAoIW9r
KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJlc3VsdCA9IFN0cmluZ1Zh
bHVlOjpjcmVhdGUodmFsdWUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBBUlJB
WV9CRUdJTjogeworICAgICAgICBSZWZQdHI8UHJvdG9jb2w6OlVuY2hlY2tlZEFycmF5PiBhcnJh
eSA9IFVuY2hlY2tlZEFycmF5OjpjcmVhdGUoKTsKKyAgICAgICAgc3RhcnQgPSB0b2tlbkVuZDsK
KyAgICAgICAgdG9rZW4gPSBwYXJzZVRva2VuKHN0YXJ0LCBlbmQsICZ0b2tlblN0YXJ0LCAmdG9r
ZW5FbmQpOworICAgICAgICB3aGlsZSAodG9rZW4gIT0gQVJSQVlfRU5EKSB7CisgICAgICAgICAg
ICBSZWZQdHI8UHJvdG9jb2w6OlVuY2hlY2tlZFZhbHVlPiBhcnJheU5vZGUgPSBidWlsZFZhbHVl
KHN0YXJ0LCBlbmQsICZ0b2tlbkVuZCwgZGVwdGggKyAxKTsKKyAgICAgICAgICAgIGlmICghYXJy
YXlOb2RlKQorICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgYXJy
YXktPnB1c2hWYWx1ZShhcnJheU5vZGUpOworCisgICAgICAgICAgICAvLyBBZnRlciBhIGxpc3Qg
dmFsdWUsIHdlIGV4cGVjdCBhIGNvbW1hIG9yIHRoZSBlbmQgb2YgdGhlIGxpc3QuCisgICAgICAg
ICAgICBzdGFydCA9IHRva2VuRW5kOworICAgICAgICAgICAgdG9rZW4gPSBwYXJzZVRva2VuKHN0
YXJ0LCBlbmQsICZ0b2tlblN0YXJ0LCAmdG9rZW5FbmQpOworICAgICAgICAgICAgaWYgKHRva2Vu
ID09IExJU1RfU0VQQVJBVE9SKSB7CisgICAgICAgICAgICAgICAgc3RhcnQgPSB0b2tlbkVuZDsK
KyAgICAgICAgICAgICAgICB0b2tlbiA9IHBhcnNlVG9rZW4oc3RhcnQsIGVuZCwgJnRva2VuU3Rh
cnQsICZ0b2tlbkVuZCk7CisgICAgICAgICAgICAgICAgaWYgKHRva2VuID09IEFSUkFZX0VORCkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICB9IGVsc2Ug
aWYgKHRva2VuICE9IEFSUkFZX0VORCkgeworICAgICAgICAgICAgICAgIC8vIFVuZXhwZWN0ZWQg
dmFsdWUgYWZ0ZXIgbGlzdCB2YWx1ZS4gQmFpbCBvdXQuCisgICAgICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRva2VuICE9
IEFSUkFZX0VORCkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXN1bHQg
PSBhcnJheS5yZWxlYXNlKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIE9CSkVD
VF9CRUdJTjogeworICAgICAgICBSZWZQdHI8UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gb2Jq
ZWN0ID0gVW5jaGVja2VkT2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgc3RhcnQgPSB0b2tlbkVu
ZDsKKyAgICAgICAgdG9rZW4gPSBwYXJzZVRva2VuKHN0YXJ0LCBlbmQsICZ0b2tlblN0YXJ0LCAm
dG9rZW5FbmQpOworICAgICAgICB3aGlsZSAodG9rZW4gIT0gT0JKRUNUX0VORCkgeworICAgICAg
ICAgICAgaWYgKHRva2VuICE9IFNUUklORykKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICAgICAgICAgIFN0cmluZyBrZXk7CisgICAgICAgICAgICBpZiAoIWRlY29kZVN0cmlu
Zyh0b2tlblN0YXJ0ICsgMSwgdG9rZW5FbmQgLSAxLCBrZXkpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgICAgICAgICAgc3RhcnQgPSB0b2tlbkVuZDsKKworICAgICAgICAg
ICAgdG9rZW4gPSBwYXJzZVRva2VuKHN0YXJ0LCBlbmQsICZ0b2tlblN0YXJ0LCAmdG9rZW5FbmQp
OworICAgICAgICAgICAgaWYgKHRva2VuICE9IE9CSkVDVF9QQUlSX1NFUEFSQVRPUikKKyAgICAg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIHN0YXJ0ID0gdG9rZW5FbmQ7
CisKKyAgICAgICAgICAgIFJlZlB0cjxQcm90b2NvbDo6VW5jaGVja2VkVmFsdWU+IHZhbHVlID0g
YnVpbGRWYWx1ZShzdGFydCwgZW5kLCAmdG9rZW5FbmQsIGRlcHRoICsgMSk7CisgICAgICAgICAg
ICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAg
ICAgb2JqZWN0LT5zZXRWYWx1ZShrZXksIHZhbHVlKTsKKyAgICAgICAgICAgIHN0YXJ0ID0gdG9r
ZW5FbmQ7CisKKyAgICAgICAgICAgIC8vIEFmdGVyIGEga2V5L3ZhbHVlIHBhaXIsIHdlIGV4cGVj
dCBhIGNvbW1hIG9yIHRoZSBlbmQgb2YgdGhlCisgICAgICAgICAgICAvLyBvYmplY3QuCisgICAg
ICAgICAgICB0b2tlbiA9IHBhcnNlVG9rZW4oc3RhcnQsIGVuZCwgJnRva2VuU3RhcnQsICZ0b2tl
bkVuZCk7CisgICAgICAgICAgICBpZiAodG9rZW4gPT0gTElTVF9TRVBBUkFUT1IpIHsKKyAgICAg
ICAgICAgICAgICBzdGFydCA9IHRva2VuRW5kOworICAgICAgICAgICAgICAgIHRva2VuID0gcGFy
c2VUb2tlbihzdGFydCwgZW5kLCAmdG9rZW5TdGFydCwgJnRva2VuRW5kKTsKKyAgICAgICAgICAg
ICAgICBpZiAodG9rZW4gPT0gT0JKRUNUX0VORCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHRva2VuICE9IE9CSkVDVF9FTkQpIHsK
KyAgICAgICAgICAgICAgICAvLyBVbmV4cGVjdGVkIHZhbHVlIGFmdGVyIGxhc3Qgb2JqZWN0IHZh
bHVlLiBCYWlsIG91dC4KKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAodG9rZW4gIT0gT0JKRUNUX0VORCkKKyAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXN1bHQgPSBvYmplY3QucmVsZWFzZSgp
OworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBkZWZhdWx0OgorICAgICAgICAvLyBXZSBn
b3QgYSB0b2tlbiB0aGF0J3Mgbm90IGEgdmFsdWUuCisgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIH0KKyAgICAqdmFsdWVUb2tlbkVuZCA9IHRva2VuRW5kOworICAgIHJldHVybiByZXN1bHQu
cmVsZWFzZSgpOworfQorCitpbmxpbmUgYm9vbCBlc2NhcGVDaGFyKFVDaGFyIGMsIFN0cmluZ0J1
aWxkZXImIGRzdCkKK3sKKyAgICBzd2l0Y2ggKGMpIHsKKyAgICBjYXNlICdcYic6IGRzdC5hcHBl
bmRMaXRlcmFsKCJcXGIiKTsgYnJlYWs7CisgICAgY2FzZSAnXGYnOiBkc3QuYXBwZW5kTGl0ZXJh
bCgiXFxmIik7IGJyZWFrOworICAgIGNhc2UgJ1xuJzogZHN0LmFwcGVuZExpdGVyYWwoIlxcbiIp
OyBicmVhazsKKyAgICBjYXNlICdccic6IGRzdC5hcHBlbmRMaXRlcmFsKCJcXHIiKTsgYnJlYWs7
CisgICAgY2FzZSAnXHQnOiBkc3QuYXBwZW5kTGl0ZXJhbCgiXFx0Iik7IGJyZWFrOworICAgIGNh
c2UgJ1xcJzogZHN0LmFwcGVuZExpdGVyYWwoIlxcXFwiKTsgYnJlYWs7CisgICAgY2FzZSAnIic6
IGRzdC5hcHBlbmRMaXRlcmFsKCJcXFwiIik7IGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2lubGluZSB2b2lk
IGRvdWJsZVF1b3RlU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyLCBTdHJpbmdCdWlsZGVyJiBkc3Qp
Cit7CisgICAgZHN0LmFwcGVuZCgnIicpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBz
dHIubGVuZ3RoKCk7ICsraSkgeworICAgICAgICBVQ2hhciBjID0gc3RyW2ldOworICAgICAgICBp
ZiAoIWVzY2FwZUNoYXIoYywgZHN0KSkgeworICAgICAgICAgICAgaWYgKGMgPCAzMiB8fCBjID4g
MTI2IHx8IGMgPT0gJzwnIHx8IGMgPT0gJz4nKSB7CisgICAgICAgICAgICAgICAgLy8gMS4gRXNj
YXBpbmcgPCwgPiB0byBwcmV2ZW50IHNjcmlwdCBleGVjdXRpb24uCisgICAgICAgICAgICAgICAg
Ly8gMi4gVGVjaG5pY2FsbHksIHdlIGNvdWxkIGFsc28gcGFzcyB0aHJvdWdoIGMgPiAxMjYgYXMg
VVRGOCwgYnV0IHRoaXMKKyAgICAgICAgICAgICAgICAvLyAgICBpcyBhbHNvIG9wdGlvbmFsLiBJ
dCB3b3VsZCBhbHNvIGJlIGEgcGFpbiB0byBpbXBsZW1lbnQgaGVyZS4KKyAgICAgICAgICAgICAg
ICBkc3QuYXBwZW5kKFN0cmluZzo6Zm9ybWF0KCJcXHUlMDRYIiwgYykpOworICAgICAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICAgICAgZHN0LmFwcGVuZChjKTsKKyAgICAgICAgfQorICAgIH0K
KyAgICBkc3QuYXBwZW5kKCciJyk7Cit9CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCitu
YW1lc3BhY2UgUHJvdG9jb2wgeworCitib29sIFByb3RvY29sOjpVbmNoZWNrZWRWYWx1ZTo6YXNC
b29sZWFuKGJvb2wmKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBQcm90
b2NvbDo6VW5jaGVja2VkVmFsdWU6OmFzRG91YmxlKGRvdWJsZSYpIGNvbnN0Cit7CisgICAgcmV0
dXJuIGZhbHNlOworfQorCitib29sIFByb3RvY29sOjpVbmNoZWNrZWRWYWx1ZTo6YXNEb3VibGUo
ZmxvYXQmKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBQcm90b2NvbDo6
VW5jaGVja2VkVmFsdWU6OmFzSW50ZWdlcihpbnQmKSBjb25zdAoreworICAgIHJldHVybiBmYWxz
ZTsKK30KKworYm9vbCBQcm90b2NvbDo6VW5jaGVja2VkVmFsdWU6OmFzSW50ZWdlcih1bnNpZ25l
ZCYpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFByb3RvY29sOjpVbmNo
ZWNrZWRWYWx1ZTo6YXNJbnRlZ2VyKGxvbmcmKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsK
K30KKworYm9vbCBQcm90b2NvbDo6VW5jaGVja2VkVmFsdWU6OmFzSW50ZWdlcihsb25nIGxvbmcm
KSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBQcm90b2NvbDo6VW5jaGVj
a2VkVmFsdWU6OmFzSW50ZWdlcih1bnNpZ25lZCBsb25nJikgY29uc3QKK3sKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK2Jvb2wgUHJvdG9jb2w6OlVuY2hlY2tlZFZhbHVlOjphc0ludGVnZXIodW5z
aWduZWQgbG9uZyBsb25nJikgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wg
UHJvdG9jb2w6OlVuY2hlY2tlZFZhbHVlOjphc1N0cmluZyhTdHJpbmcmKSBjb25zdAoreworICAg
IHJldHVybiBmYWxzZTsKK30KKworYm9vbCBQcm90b2NvbDo6VW5jaGVja2VkVmFsdWU6OmFzVmFs
dWUoUmVmUHRyPFByb3RvY29sOjpVbmNoZWNrZWRWYWx1ZT4mIG91dHB1dCkKK3sKKyAgICBvdXRw
dXQgPSB0aGlzOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb3RvY29sOjpVbmNoZWNr
ZWRWYWx1ZTo6YXNPYmplY3QoUmVmUHRyPFByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+JikKK3sK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUHJvdG9jb2w6OlVuY2hlY2tlZFZhbHVlOjph
c0FycmF5KFJlZlB0cjxQcm90b2NvbDo6VW5jaGVja2VkQXJyYXk+JikKK3sKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK2Jvb2wgUHJvdG9jb2w6OlVuY2hlY2tlZFZhbHVlOjpwYXJzZUpTT04oY29u
c3QgU3RyaW5nJiBqc29uSW5wdXQsIFJlZlB0cjxQcm90b2NvbDo6VW5jaGVja2VkVmFsdWU+JiBv
dXRwdXQpCit7CisgICAgLy8gRklYTUU6IFRoaXMgd2hvbGUgZmlsZSBzaG91bGQganVzdCB1c2Ug
U3RyaW5nVmlldyBpbnN0ZWFkIG9mIFVDaGFyL2xlbmd0aCBhbmQgYXZvaWQgdXBjb252ZXJ0aW5n
LgorICAgIGF1dG8gY2hhcmFjdGVycyA9IFN0cmluZ1ZpZXcoanNvbklucHV0KS51cGNvbnZlcnRl
ZENoYXJhY3RlcnMoKTsKKyAgICBjb25zdCBVQ2hhciogc3RhcnQgPSBjaGFyYWN0ZXJzOworICAg
IGNvbnN0IFVDaGFyKiBlbmQgPSBzdGFydCArIGpzb25JbnB1dC5sZW5ndGgoKTsKKyAgICBjb25z
dCBVQ2hhciogdG9rZW5FbmQ7CisgICAgUmVmUHRyPFByb3RvY29sOjpVbmNoZWNrZWRWYWx1ZT4g
cmVzdWx0ID0gYnVpbGRWYWx1ZShzdGFydCwgZW5kLCAmdG9rZW5FbmQsIDApOworICAgIGlmICgh
cmVzdWx0IHx8IHRva2VuRW5kICE9IGVuZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
b3V0cHV0ID0gcmVzdWx0LnJlbGVhc2UoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworU3RyaW5n
IFByb3RvY29sOjpVbmNoZWNrZWRWYWx1ZTo6dG9KU09OU3RyaW5nKCkgY29uc3QKK3sKKyAgICBT
dHJpbmdCdWlsZGVyIHJlc3VsdDsKKyAgICByZXN1bHQucmVzZXJ2ZUNhcGFjaXR5KDUxMik7Cisg
ICAgd3JpdGVKU09OKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworfQor
Cit2b2lkIFByb3RvY29sOjpVbmNoZWNrZWRWYWx1ZTo6d3JpdGVKU09OKFN0cmluZ0J1aWxkZXIm
IG91dHB1dCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV90eXBlID09IFR5cGU6Ok51bGwpOworCisg
ICAgb3V0cHV0LmFwcGVuZExpdGVyYWwoIm51bGwiKTsKK30KKworYm9vbCBQcmltaXRpdmVWYWx1
ZTo6YXNCb29sZWFuKGJvb2wmIG91dHB1dCkgY29uc3QKK3sKKyAgICBpZiAodHlwZSgpICE9IFR5
cGU6OkJvb2xlYW4pCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG91dHB1dCA9IG1fYm9v
bGVhblZhbHVlOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByaW1pdGl2ZVZhbHVlOjph
c0RvdWJsZShkb3VibGUmIG91dHB1dCkgY29uc3QKK3sKKyAgICBpZiAodHlwZSgpICE9IFR5cGU6
OkRvdWJsZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgb3V0cHV0ID0gbV9kb3VibGVW
YWx1ZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcmltaXRpdmVWYWx1ZTo6YXNEb3Vi
bGUoZmxvYXQmIG91dHB1dCkgY29uc3QKK3sKKyAgICBpZiAodHlwZSgpICE9IFR5cGU6OkRvdWJs
ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgb3V0cHV0ID0gc3RhdGljX2Nhc3Q8Zmxv
YXQ+KG1fZG91YmxlVmFsdWUpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByaW1pdGl2
ZVZhbHVlOjphc0ludGVnZXIoaW50JiBvdXRwdXQpIGNvbnN0Cit7CisgICAgaWYgKHR5cGUoKSAh
PSBUeXBlOjpJbnRlZ2VyICYmIHR5cGUoKSAhPSBUeXBlOjpEb3VibGUpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIG91dHB1dCA9IHN0YXRpY19jYXN0PGludD4obV9kb3VibGVWYWx1ZSk7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJpbWl0aXZlVmFsdWU6OmFzSW50ZWdlcih1
bnNpZ25lZCYgb3V0cHV0KSBjb25zdAoreworICAgIGlmICh0eXBlKCkgIT0gVHlwZTo6SW50ZWdl
ciAmJiB0eXBlKCkgIT0gVHlwZTo6RG91YmxlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBvdXRwdXQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9kb3VibGVWYWx1ZSk7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJpbWl0aXZlVmFsdWU6OmFzSW50ZWdlcihsb25nJiBvdXRw
dXQpIGNvbnN0Cit7CisgICAgaWYgKHR5cGUoKSAhPSBUeXBlOjpJbnRlZ2VyICYmIHR5cGUoKSAh
PSBUeXBlOjpEb3VibGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG91dHB1dCA9IHN0
YXRpY19jYXN0PGxvbmc+KG1fZG91YmxlVmFsdWUpOworICAgIHJldHVybiB0cnVlOworfQorCiti
b29sIFByaW1pdGl2ZVZhbHVlOjphc0ludGVnZXIobG9uZyBsb25nJiBvdXRwdXQpIGNvbnN0Cit7
CisgICAgaWYgKHR5cGUoKSAhPSBUeXBlOjpJbnRlZ2VyICYmIHR5cGUoKSAhPSBUeXBlOjpEb3Vi
bGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG91dHB1dCA9IHN0YXRpY19jYXN0PGxv
bmcgbG9uZz4obV9kb3VibGVWYWx1ZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJp
bWl0aXZlVmFsdWU6OmFzSW50ZWdlcih1bnNpZ25lZCBsb25nJiBvdXRwdXQpIGNvbnN0Cit7Cisg
ICAgaWYgKHR5cGUoKSAhPSBUeXBlOjpJbnRlZ2VyICYmIHR5cGUoKSAhPSBUeXBlOjpEb3VibGUp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG91dHB1dCA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkIGxvbmc+KG1fZG91YmxlVmFsdWUpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFBy
aW1pdGl2ZVZhbHVlOjphc0ludGVnZXIodW5zaWduZWQgbG9uZyBsb25nJiBvdXRwdXQpIGNvbnN0
Cit7CisgICAgaWYgKHR5cGUoKSAhPSBUeXBlOjpJbnRlZ2VyICYmIHR5cGUoKSAhPSBUeXBlOjpE
b3VibGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG91dHB1dCA9IHN0YXRpY19jYXN0
PHVuc2lnbmVkIGxvbmcgbG9uZz4obV9kb3VibGVWYWx1ZSk7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK3ZvaWQgUHJpbWl0aXZlVmFsdWU6OndyaXRlSlNPTihTdHJpbmdCdWlsZGVyJiBvdXRwdXQp
IGNvbnN0Cit7CisgICAgQVNTRVJUKHR5cGUoKSA9PSBUeXBlOjpCb29sZWFuIHx8IHR5cGUoKSA9
PSBUeXBlOjpEb3VibGUgfHwgdHlwZSgpID09IFR5cGU6OkludGVnZXIpOworCisgICAgaWYgKHR5
cGUoKSA9PSBUeXBlOjpCb29sZWFuKSB7CisgICAgICAgIGlmIChtX2Jvb2xlYW5WYWx1ZSkKKyAg
ICAgICAgICAgIG91dHB1dC5hcHBlbmRMaXRlcmFsKCJ0cnVlIik7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIG91dHB1dC5hcHBlbmRMaXRlcmFsKCJmYWxzZSIpOworICAgIH0gZWxzZSBpZiAo
dHlwZSgpID09IFR5cGU6OkRvdWJsZSB8fCB0eXBlKCkgPT0gVHlwZTo6SW50ZWdlcikgeworICAg
ICAgICBOdW1iZXJUb0xTdHJpbmdCdWZmZXIgYnVmZmVyOworICAgICAgICBpZiAoIXN0ZDo6aXNm
aW5pdGUobV9kb3VibGVWYWx1ZSkpIHsKKyAgICAgICAgICAgIG91dHB1dC5hcHBlbmRMaXRlcmFs
KCJudWxsIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgRGVjaW1h
bE51bWJlciBkZWNpbWFsID0gbV9kb3VibGVWYWx1ZTsKKyAgICAgICAgdW5zaWduZWQgbGVuZ3Ro
ID0gMDsKKyAgICAgICAgaWYgKGRlY2ltYWwuYnVmZmVyTGVuZ3RoRm9yU3RyaW5nRGVjaW1hbCgp
ID4gV1RGOjpOdW1iZXJUb1N0cmluZ0J1ZmZlckxlbmd0aCkgeworICAgICAgICAgICAgLy8gTm90
IGVub3VnaCByb29tIGZvciBkZWNpbWFsLiBVc2UgZXhwb25lbnRpYWwgZm9ybWF0LgorICAgICAg
ICAgICAgaWYgKGRlY2ltYWwuYnVmZmVyTGVuZ3RoRm9yU3RyaW5nRXhwb25lbnRpYWwoKSA+IFdU
Rjo6TnVtYmVyVG9TdHJpbmdCdWZmZXJMZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAvLyBGYWxs
YmFjayBmb3IgYW4gYWJub3JtYWwgY2FzZSBpZiBpdCdzIHRvbyBsaXR0bGUgZXZlbiBmb3IgZXhw
b25lbnRpYWwuCisgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZExpdGVyYWwoIk5hTiIpOwor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxlbmd0
aCA9IGRlY2ltYWwudG9TdHJpbmdFeHBvbmVudGlhbChidWZmZXIsIFdURjo6TnVtYmVyVG9TdHJp
bmdCdWZmZXJMZW5ndGgpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGxlbmd0aCA9IGRl
Y2ltYWwudG9TdHJpbmdEZWNpbWFsKGJ1ZmZlciwgV1RGOjpOdW1iZXJUb1N0cmluZ0J1ZmZlckxl
bmd0aCk7CisgICAgICAgIG91dHB1dC5hcHBlbmQoYnVmZmVyLCBsZW5ndGgpOworICAgIH0KK30K
KworYm9vbCBTdHJpbmdWYWx1ZTo6YXNTdHJpbmcoU3RyaW5nJiBvdXRwdXQpIGNvbnN0Cit7Cisg
ICAgaWYgKHR5cGUoKSAhPSBUeXBlOjpTdHJpbmcpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIG91dHB1dCA9IG1fc3RyaW5nVmFsdWU7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQg
U3RyaW5nVmFsdWU6OndyaXRlSlNPTihTdHJpbmdCdWlsZGVyJiBvdXRwdXQpIGNvbnN0Cit7Cisg
ICAgQVNTRVJUKHR5cGUoKSA9PSBUeXBlOjpTdHJpbmcpOworCisgICAgZG91YmxlUXVvdGVTdHJp
bmcobV9zdHJpbmdWYWx1ZSwgb3V0cHV0KTsKK30KKworVW5jaGVja2VkT2JqZWN0QmFzZTo6flVu
Y2hlY2tlZE9iamVjdEJhc2UoKQoreworfQorCitib29sIFVuY2hlY2tlZE9iamVjdEJhc2U6OmFz
T2JqZWN0KFJlZlB0cjxQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiYgb3V0cHV0KQoreworICAg
IENPTVBJTEVfQVNTRVJUKHNpemVvZihVbmNoZWNrZWRPYmplY3QpID09IHNpemVvZihVbmNoZWNr
ZWRPYmplY3RCYXNlKSwgY2Fubm90X2Nhc3QpOworCisgICAgb3V0cHV0ID0gc3RhdGljX2Nhc3Q8
VW5jaGVja2VkT2JqZWN0Kj4odGhpcyk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK1VuY2hlY2tl
ZE9iamVjdCogVW5jaGVja2VkT2JqZWN0QmFzZTo6b3BlbkFjY2Vzc29ycygpCit7CisgICAgQ09N
UElMRV9BU1NFUlQoc2l6ZW9mKFVuY2hlY2tlZE9iamVjdCkgPT0gc2l6ZW9mKFVuY2hlY2tlZE9i
amVjdEJhc2UpLCBjYW5ub3RfY2FzdCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFVuY2hlY2tl
ZE9iamVjdCo+KHRoaXMpOworfQorCitib29sIFVuY2hlY2tlZE9iamVjdEJhc2U6OmdldEJvb2xl
YW4oY29uc3QgU3RyaW5nJiBuYW1lLCBib29sJiBvdXRwdXQpIGNvbnN0Cit7CisgICAgUmVmUHRy
PFByb3RvY29sOjpVbmNoZWNrZWRWYWx1ZT4gdmFsdWUgPSBnZXQobmFtZSk7CisgICAgaWYgKCF2
YWx1ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHZhbHVlLT5hc0Jvb2xl
YW4ob3V0cHV0KTsKK30KKworYm9vbCBVbmNoZWNrZWRPYmplY3RCYXNlOjpnZXRTdHJpbmcoY29u
c3QgU3RyaW5nJiBuYW1lLCBTdHJpbmcmIG91dHB1dCkgY29uc3QKK3sKKyAgICBSZWZQdHI8UHJv
dG9jb2w6OlVuY2hlY2tlZFZhbHVlPiB2YWx1ZSA9IGdldChuYW1lKTsKKyAgICBpZiAoIXZhbHVl
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHZhbHVlLT5hc1N0cmluZyhvdXRw
dXQpOworfQorCitQYXNzUmVmUHRyPFByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IFVuY2hlY2tl
ZE9iamVjdEJhc2U6OmdldE9iamVjdChjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0Cit7CisgICAg
UmVmUHRyPFByb3RvY29sOjpVbmNoZWNrZWRWYWx1ZT4gdmFsdWUgPSBnZXQobmFtZSk7CisgICAg
aWYgKCF2YWx1ZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBSZWZQdHI8UHJvdG9j
b2w6OlVuY2hlY2tlZE9iamVjdD4gcmVzdWx0OworICAgIHZhbHVlLT5hc09iamVjdChyZXN1bHQp
OworICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOworfQorCitQYXNzUmVmUHRyPFByb3RvY29s
OjpVbmNoZWNrZWRBcnJheT4gVW5jaGVja2VkT2JqZWN0QmFzZTo6Z2V0QXJyYXkoY29uc3QgU3Ry
aW5nJiBuYW1lKSBjb25zdAoreworICAgIFJlZlB0cjxQcm90b2NvbDo6VW5jaGVja2VkVmFsdWU+
IHZhbHVlID0gZ2V0KG5hbWUpOworICAgIGlmICghdmFsdWUpCisgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgUmVmUHRyPFByb3RvY29sOjpVbmNoZWNrZWRBcnJheT4gcmVzdWx0OworICAg
IHZhbHVlLT5hc0FycmF5KHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7Cit9
CisKK1Bhc3NSZWZQdHI8UHJvdG9jb2w6OlVuY2hlY2tlZFZhbHVlPiBVbmNoZWNrZWRPYmplY3RC
YXNlOjpnZXQoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdAoreworICAgIERpY3Rpb25hcnk6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbV9kYXRhLmZpbmQobmFtZSk7CisgICAgaWYgKGl0ID09IG1fZGF0
YS5lbmQoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIGl0LT52YWx1ZTsK
K30KKwordm9pZCBVbmNoZWNrZWRPYmplY3RCYXNlOjpyZW1vdmUoY29uc3QgU3RyaW5nJiBuYW1l
KQoreworICAgIG1fZGF0YS5yZW1vdmUobmFtZSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBtX29yZGVyLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChtX29yZGVyW2ldID09IG5hbWUp
IHsKKyAgICAgICAgICAgIG1fb3JkZXIucmVtb3ZlKGkpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgVW5jaGVja2VkT2JqZWN0QmFzZTo6d3JpdGVKU09O
KFN0cmluZ0J1aWxkZXImIG91dHB1dCkgY29uc3QKK3sKKyAgICBvdXRwdXQuYXBwZW5kKCd7Jyk7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX29yZGVyLnNpemUoKTsgKytpKSB7CisgICAg
ICAgIERpY3Rpb25hcnk6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9kYXRhLmZpbmQobV9vcmRlcltp
XSk7CisgICAgICAgIEFTU0VSVChpdCAhPSBtX2RhdGEuZW5kKCkpOworICAgICAgICBpZiAoaSkK
KyAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoJywnKTsKKyAgICAgICAgZG91YmxlUXVvdGVTdHJp
bmcoaXQtPmtleSwgb3V0cHV0KTsKKyAgICAgICAgb3V0cHV0LmFwcGVuZCgnOicpOworICAgICAg
ICBpdC0+dmFsdWUtPndyaXRlSlNPTihvdXRwdXQpOworICAgIH0KKyAgICBvdXRwdXQuYXBwZW5k
KCd9Jyk7Cit9CisKK1VuY2hlY2tlZE9iamVjdEJhc2U6OlVuY2hlY2tlZE9iamVjdEJhc2UoKQor
ICAgIDogUHJvdG9jb2w6OlVuY2hlY2tlZFZhbHVlKFR5cGU6Ok9iamVjdCkKKyAgICAsIG1fZGF0
YSgpCisgICAgLCBtX29yZGVyKCkKK3sKK30KKworVW5jaGVja2VkQXJyYXlCYXNlOjp+VW5jaGVj
a2VkQXJyYXlCYXNlKCkKK3sKK30KKworYm9vbCBVbmNoZWNrZWRBcnJheUJhc2U6OmFzQXJyYXko
UmVmUHRyPFByb3RvY29sOjpVbmNoZWNrZWRBcnJheT4mIG91dHB1dCkKK3sKKyAgICBDT01QSUxF
X0FTU0VSVChzaXplb2YoVW5jaGVja2VkQXJyYXlCYXNlKSA9PSBzaXplb2YoVW5jaGVja2VkQXJy
YXkpLCBjYW5ub3RfY2FzdCk7CisgICAgb3V0cHV0ID0gc3RhdGljX2Nhc3Q8VW5jaGVja2VkQXJy
YXkqPih0aGlzKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBVbmNoZWNrZWRBcnJheUJh
c2U6OndyaXRlSlNPTihTdHJpbmdCdWlsZGVyJiBvdXRwdXQpIGNvbnN0Cit7CisgICAgb3V0cHV0
LmFwcGVuZCgnWycpOworICAgIGZvciAoVmVjdG9yPFJlZlB0cjxQcm90b2NvbDo6VW5jaGVja2Vk
VmFsdWU+Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2RhdGEuYmVnaW4oKTsgaXQgIT0gbV9kYXRh
LmVuZCgpOyArK2l0KSB7CisgICAgICAgIGlmIChpdCAhPSBtX2RhdGEuYmVnaW4oKSkKKyAgICAg
ICAgICAgIG91dHB1dC5hcHBlbmQoJywnKTsKKyAgICAgICAgKCppdCktPndyaXRlSlNPTihvdXRw
dXQpOworICAgIH0KKyAgICBvdXRwdXQuYXBwZW5kKCddJyk7Cit9CisKK1VuY2hlY2tlZEFycmF5
QmFzZTo6VW5jaGVja2VkQXJyYXlCYXNlKCkKKyAgICA6IFByb3RvY29sOjpVbmNoZWNrZWRWYWx1
ZShUeXBlOjpBcnJheSkKKyAgICAsIG1fZGF0YSgpCit7Cit9CisKK1Bhc3NSZWZQdHI8UHJvdG9j
b2w6OlVuY2hlY2tlZFZhbHVlPiBVbmNoZWNrZWRBcnJheUJhc2U6OmdldChzaXplX3QgaW5kZXgp
Cit7CisgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaW5kZXggPCBtX2RhdGEu
c2l6ZSgpKTsKKyAgICByZXR1cm4gbV9kYXRhW2luZGV4XTsKK30KKworUGFzc1JlZlB0cjxQcm90
b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBVbmNoZWNrZWRPYmplY3Q6OmNyZWF0ZSgpCit7CisgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBVbmNoZWNrZWRPYmplY3QpOworfQorCitQYXNzUmVmUHRyPFBy
b3RvY29sOjpVbmNoZWNrZWRBcnJheT4gVW5jaGVja2VkQXJyYXk6OmNyZWF0ZSgpCit7CisgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBVbmNoZWNrZWRBcnJheSk7Cit9CisKK1Bhc3NSZWZQdHI8UHJv
dG9jb2w6OlVuY2hlY2tlZFZhbHVlPiBQcm90b2NvbDo6VW5jaGVja2VkVmFsdWU6Om51bGwoKQor
eworICAgIHJldHVybiBhZG9wdFJlZihuZXcgUHJvdG9jb2w6OlVuY2hlY2tlZFZhbHVlKTsKK30K
KworUGFzc1JlZlB0cjxQcmltaXRpdmVWYWx1ZT4gUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShib29s
IHZhbHVlKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgUHJpbWl0aXZlVmFsdWUodmFsdWUp
KTsKK30KKworUGFzc1JlZlB0cjxQcmltaXRpdmVWYWx1ZT4gUHJpbWl0aXZlVmFsdWU6OmNyZWF0
ZShpbnQgdmFsdWUpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQcmltaXRpdmVWYWx1ZSh2
YWx1ZSkpOworfQorCitQYXNzUmVmUHRyPFByaW1pdGl2ZVZhbHVlPiBQcmltaXRpdmVWYWx1ZTo6
Y3JlYXRlKGRvdWJsZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFByaW1pdGl2
ZVZhbHVlKHZhbHVlKSk7Cit9CisKK1Bhc3NSZWZQdHI8U3RyaW5nVmFsdWU+IFN0cmluZ1ZhbHVl
OjpjcmVhdGUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3
IFN0cmluZ1ZhbHVlKHZhbHVlKSk7Cit9CisKK1Bhc3NSZWZQdHI8U3RyaW5nVmFsdWU+IFN0cmlu
Z1ZhbHVlOjpjcmVhdGUoY29uc3QgY2hhciogdmFsdWUpCit7CisgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBTdHJpbmdWYWx1ZSh2YWx1ZSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAor
Cit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmgKaW5kZXggMTQzZGVmODU3
OWFjNDYwNjVlOTVmZDliMTI4NzE1MzNhYjA5YjM0MS4uOWMyMThmMDJjNGZmZTRiOTIyN2M4MDIx
ZTUyMGJjZmY0MzcxN2ExNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmgKQEAgLTEsNiArMSw4IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICog
Q29weXJpZ2h0IChDKSAyMDExIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDE0
ICszMSwzODYgQEAKIAogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAKLSNpbmNsdWRlICJJbnNwZWN0
b3JWYWx1ZXMuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JQcm90b2NvbFR5cGVzLmgiCiAjaW5jbHVk
ZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUg
PHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3
dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdIYXNoLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5h
bWVzcGFjZSBJbnNwZWN0b3IgewogCiBuYW1lc3BhY2UgUHJvdG9jb2wgewogCitjbGFzcyBVbmNo
ZWNrZWRBcnJheTsKK2NsYXNzIFVuY2hlY2tlZEFycmF5QmFzZTsKK2NsYXNzIFVuY2hlY2tlZE9i
amVjdDsKK2NsYXNzIFVuY2hlY2tlZE9iamVjdEJhc2U7CisKK2NsYXNzIEpTX0VYUE9SVF9QUklW
QVRFIFVuY2hlY2tlZFZhbHVlIDogcHVibGljIFJlZkNvdW50ZWQ8VW5jaGVja2VkVmFsdWU+IHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3QgaW50IG1heERlcHRoID0gMTAwMDsKKworICAgIFVu
Y2hlY2tlZFZhbHVlKCkKKyAgICAgICAgOiBtX3R5cGUoVHlwZTo6TnVsbCkgeyB9CisgICAgdmly
dHVhbCB+VW5jaGVja2VkVmFsdWUoKSB7IH0KKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFByb3Rv
Y29sOjpVbmNoZWNrZWRWYWx1ZT4gbnVsbCgpOworCisgICAgZW51bSBjbGFzcyBUeXBlIHsKKyAg
ICAgICAgTnVsbCA9IDAsCisgICAgICAgIEJvb2xlYW4sCisgICAgICAgIERvdWJsZSwKKyAgICAg
ICAgSW50ZWdlciwKKyAgICAgICAgU3RyaW5nLAorICAgICAgICBPYmplY3QsCisgICAgICAgIEFy
cmF5CisgICAgfTsKKworICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQor
CisgICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgPT0gVHlwZTo6TnVsbDsg
fQorCisgICAgdmlydHVhbCBib29sIGFzQm9vbGVhbihib29sJikgY29uc3Q7CisgICAgdmlydHVh
bCBib29sIGFzSW50ZWdlcihpbnQmKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgYXNJbnRlZ2Vy
KHVuc2lnbmVkJikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGFzSW50ZWdlcihsb25nJikgY29u
c3Q7CisgICAgdmlydHVhbCBib29sIGFzSW50ZWdlcihsb25nIGxvbmcmKSBjb25zdDsKKyAgICB2
aXJ0dWFsIGJvb2wgYXNJbnRlZ2VyKHVuc2lnbmVkIGxvbmcmKSBjb25zdDsKKyAgICB2aXJ0dWFs
IGJvb2wgYXNJbnRlZ2VyKHVuc2lnbmVkIGxvbmcgbG9uZyYpIGNvbnN0OworICAgIHZpcnR1YWwg
Ym9vbCBhc0RvdWJsZShkb3VibGUmKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgYXNEb3VibGUo
ZmxvYXQmKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgYXNTdHJpbmcoU3RyaW5nJikgY29uc3Q7
CisgICAgdmlydHVhbCBib29sIGFzVmFsdWUoUmVmUHRyPFByb3RvY29sOjpVbmNoZWNrZWRWYWx1
ZT4mKTsKKyAgICB2aXJ0dWFsIGJvb2wgYXNPYmplY3QoUmVmUHRyPFByb3RvY29sOjpVbmNoZWNr
ZWRPYmplY3Q+Jik7CisgICAgdmlydHVhbCBib29sIGFzQXJyYXkoUmVmUHRyPFByb3RvY29sOjpV
bmNoZWNrZWRBcnJheT4mKTsKKworICAgIHN0YXRpYyBib29sIHBhcnNlSlNPTihjb25zdCBTdHJp
bmcmIGpzb25JbnB1dCwgUmVmUHRyPFByb3RvY29sOjpVbmNoZWNrZWRWYWx1ZT4mIG91dHB1dCk7
CisKKyAgICBTdHJpbmcgdG9KU09OU3RyaW5nKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHdy
aXRlSlNPTihTdHJpbmdCdWlsZGVyJiBvdXRwdXQpIGNvbnN0OworCitwcm90ZWN0ZWQ6CisgICAg
ZXhwbGljaXQgVW5jaGVja2VkVmFsdWUoVHlwZSB0eXBlKQorICAgICAgICA6IG1fdHlwZSh0eXBl
KQorICAgIHsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgVHlwZSBtX3R5cGU7Cit9OworCitjbGFz
cyBKU19FWFBPUlRfUFJJVkFURSBQcmltaXRpdmVWYWx1ZSA6IHB1YmxpYyBQcm90b2NvbDo6VW5j
aGVja2VkVmFsdWUgeworcHVibGljOgorICAgIH5QcmltaXRpdmVWYWx1ZSgpIHsgfQorCisgICAg
c3RhdGljIFBhc3NSZWZQdHI8UHJpbWl0aXZlVmFsdWU+IGNyZWF0ZShib29sKTsKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxQcmltaXRpdmVWYWx1ZT4gY3JlYXRlKGludCk7CisgICAgc3RhdGljIFBh
c3NSZWZQdHI8UHJpbWl0aXZlVmFsdWU+IGNyZWF0ZShkb3VibGUpOworCisgICAgdmlydHVhbCBi
b29sIGFzQm9vbGVhbihib29sJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgLy8gTnVtYmVycyBmcm9t
IHRoZSBmcm9udGVuZCBhcmUgYWx3YXlzIHBhcnNlZCBhcyBkb3VibGVzLCBzbyB3ZSBhbGxvdwor
ICAgIC8vIGNsaWVudHMgdG8gY29udmVydCB0byBpbnRlZ3JhbCB2YWx1ZXMgd2l0aCB0aGlzIGZ1
bmN0aW9uLgorICAgIHZpcnR1YWwgYm9vbCBhc0ludGVnZXIoaW50JikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgdmlydHVhbCBib29sIGFzSW50ZWdlcih1bnNpZ25lZCYpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIHZpcnR1YWwgYm9vbCBhc0ludGVnZXIobG9uZyYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZp
cnR1YWwgYm9vbCBhc0ludGVnZXIobG9uZyBsb25nJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmly
dHVhbCBib29sIGFzSW50ZWdlcih1bnNpZ25lZCBsb25nJikgY29uc3Qgb3ZlcnJpZGU7CisgICAg
dmlydHVhbCBib29sIGFzSW50ZWdlcih1bnNpZ25lZCBsb25nIGxvbmcmKSBjb25zdCBvdmVycmlk
ZTsKKyAgICB2aXJ0dWFsIGJvb2wgYXNEb3VibGUoZG91YmxlJikgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgdmlydHVhbCBib29sIGFzRG91YmxlKGZsb2F0JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2
aXJ0dWFsIHZvaWQgd3JpdGVKU09OKFN0cmluZ0J1aWxkZXImIG91dHB1dCkgY29uc3Qgb3ZlcnJp
ZGU7CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgUHJpbWl0aXZlVmFsdWUoYm9vbCB2YWx1ZSkK
KyAgICAgICAgOiBQcm90b2NvbDo6VW5jaGVja2VkVmFsdWUoVHlwZTo6Qm9vbGVhbikKKyAgICAg
ICAgLCBtX2Jvb2xlYW5WYWx1ZSh2YWx1ZSkgeyB9CisKKyAgICBleHBsaWNpdCBQcmltaXRpdmVW
YWx1ZShpbnQgdmFsdWUpCisgICAgICAgIDogUHJvdG9jb2w6OlVuY2hlY2tlZFZhbHVlKFR5cGU6
OkludGVnZXIpCisgICAgICAgICwgbV9kb3VibGVWYWx1ZShzdGF0aWNfY2FzdDxkb3VibGU+KHZh
bHVlKSkgeyB9CisKKyAgICBleHBsaWNpdCBQcmltaXRpdmVWYWx1ZShkb3VibGUgdmFsdWUpCisg
ICAgICAgIDogUHJvdG9jb2w6OlVuY2hlY2tlZFZhbHVlKFR5cGU6OkRvdWJsZSkKKyAgICAgICAg
LCBtX2RvdWJsZVZhbHVlKHZhbHVlKSB7IH0KKworICAgIHVuaW9uIHsKKyAgICAgICAgYm9vbCBt
X2Jvb2xlYW5WYWx1ZTsKKyAgICAgICAgZG91YmxlIG1fZG91YmxlVmFsdWU7CisgICAgfTsKK307
CisKK2NsYXNzIEpTX0VYUE9SVF9QUklWQVRFIFN0cmluZ1ZhbHVlIDogcHVibGljIFByb3RvY29s
OjpVbmNoZWNrZWRWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RyaW5n
VmFsdWU+IGNyZWF0ZShjb25zdCBTdHJpbmcmKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJp
bmdWYWx1ZT4gY3JlYXRlKGNvbnN0IGNoYXIqKTsKKworICAgIHZpcnR1YWwgYm9vbCBhc1N0cmlu
ZyhTdHJpbmcmKSBjb25zdCBvdmVycmlkZTsKKworICAgIHZpcnR1YWwgdm9pZCB3cml0ZUpTT04o
U3RyaW5nQnVpbGRlciYgb3V0cHV0KSBjb25zdCBvdmVycmlkZTsKK3ByaXZhdGU6CisgICAgZXhw
bGljaXQgU3RyaW5nVmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgOiBVbmNoZWNr
ZWRWYWx1ZShUeXBlOjpTdHJpbmcpCisgICAgICAgICwgbV9zdHJpbmdWYWx1ZSh2YWx1ZSkgeyB9
CisKKyAgICBleHBsaWNpdCBTdHJpbmdWYWx1ZShjb25zdCBjaGFyKiB2YWx1ZSkKKyAgICAgICAg
OiBVbmNoZWNrZWRWYWx1ZShUeXBlOjpTdHJpbmcpCisgICAgICAgICwgbV9zdHJpbmdWYWx1ZSh2
YWx1ZSkgeyB9CisKKyAgICBTdHJpbmcgbV9zdHJpbmdWYWx1ZTsKK307CisKK2NsYXNzIEpTX0VY
UE9SVF9QUklWQVRFIFVuY2hlY2tlZE9iamVjdEJhc2UgOiBwdWJsaWMgUHJvdG9jb2w6OlVuY2hl
Y2tlZFZhbHVlIHsKK3ByaXZhdGU6CisgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgUmVmUHRy
PFByb3RvY29sOjpVbmNoZWNrZWRWYWx1ZT4+IERpY3Rpb25hcnk7CisKK3B1YmxpYzoKKyAgICB0
eXBlZGVmIERpY3Rpb25hcnk6Oml0ZXJhdG9yIGl0ZXJhdG9yOworICAgIHR5cGVkZWYgRGljdGlv
bmFyeTo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CisKKyAgICAvLyBGSVhNRTogcmVt
b3ZlIHRoaXMgb25jZSBicmVha3BvaW50IGF1eGlsbGlhcnkgZGF0YSBpcyBzZW50IHVzaW5nIGEg
Y2hlY2tlZCBwcm90b2NvbCB0eXBlLgorICAgIFVuY2hlY2tlZE9iamVjdCogb3BlbkFjY2Vzc29y
cygpOworCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+VW5jaGVja2VkT2JqZWN0QmFzZSgpOwor
CisgICAgdmlydHVhbCBib29sIGFzT2JqZWN0KFJlZlB0cjxQcm90b2NvbDo6VW5jaGVja2VkT2Jq
ZWN0PiYgb3V0cHV0KSBvdmVycmlkZTsKKworICAgIC8vIEZJWE1FOiB1c2UgdGVtcGxhdGVzIHRv
IHJlZHVjZSB0aGUgYW1vdW50IG9mIGR1cGxpY2F0ZWQgc2V0KigpIG1ldGhvZHMuCisgICAgdm9p
ZCBzZXRCb29sZWFuKGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCk7CisgICAgdm9pZCBzZXRJbnRl
Z2VyKGNvbnN0IFN0cmluZyYgbmFtZSwgaW50KTsKKyAgICB2b2lkIHNldERvdWJsZShjb25zdCBT
dHJpbmcmIG5hbWUsIGRvdWJsZSk7CisgICAgdm9pZCBzZXRTdHJpbmcoY29uc3QgU3RyaW5nJiBu
YW1lLCBjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIHNldFZhbHVlKGNvbnN0IFN0cmluZyYgbmFt
ZSwgUGFzc1JlZlB0cjxQcm90b2NvbDo6VW5jaGVja2VkVmFsdWU+KTsKKyAgICB2b2lkIHNldE9i
amVjdChjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8VW5jaGVja2VkT2JqZWN0QmFzZT4p
OworICAgIHZvaWQgc2V0QXJyYXkoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPFVuY2hl
Y2tlZEFycmF5QmFzZT4pOworCisgICAgaXRlcmF0b3IgZmluZChjb25zdCBTdHJpbmcmIG5hbWUp
OworICAgIGNvbnN0X2l0ZXJhdG9yIGZpbmQoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdDsKKwor
ICAgIC8vIEZJWE1FOiB1c2UgdGVtcGxhdGVzIHRvIHJlZHVjZSB0aGUgYW1vdW50IG9mIGR1cGxp
Y2F0ZWQgZ2V0KigpIG1ldGhvZHMuCisgICAgYm9vbCBnZXRCb29sZWFuKGNvbnN0IFN0cmluZyYg
bmFtZSwgYm9vbCYgb3V0cHV0KSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBUPiBib29sIGdl
dERvdWJsZShjb25zdCBTdHJpbmcmIG5hbWUsIFQmIG91dHB1dCkgY29uc3QKKyAgICB7CisgICAg
ICAgIFJlZlB0cjxQcm90b2NvbDo6VW5jaGVja2VkVmFsdWU+IHZhbHVlID0gZ2V0KG5hbWUpOwor
ICAgICAgICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBy
ZXR1cm4gdmFsdWUtPmFzRG91YmxlKG91dHB1dCk7CisgICAgfQorICAgIHRlbXBsYXRlPGNsYXNz
IFQ+IGJvb2wgZ2V0SW50ZWdlcihjb25zdCBTdHJpbmcmIG5hbWUsIFQmIG91dHB1dCkgY29uc3QK
KyAgICB7CisgICAgICAgIFJlZlB0cjxQcm90b2NvbDo6VW5jaGVja2VkVmFsdWU+IHZhbHVlID0g
Z2V0KG5hbWUpOworICAgICAgICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICByZXR1cm4gdmFsdWUtPmFzSW50ZWdlcihvdXRwdXQpOworICAgIH0KKworICAg
IGJvb2wgZ2V0U3RyaW5nKGNvbnN0IFN0cmluZyYgbmFtZSwgU3RyaW5nJiBvdXRwdXQpIGNvbnN0
OworICAgIFBhc3NSZWZQdHI8UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gZ2V0T2JqZWN0KGNv
bnN0IFN0cmluZyYgbmFtZSkgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxQcm90b2NvbDo6VW5jaGVj
a2VkQXJyYXk+IGdldEFycmF5KGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3Q7CisgICAgUGFzc1Jl
ZlB0cjxQcm90b2NvbDo6VW5jaGVja2VkVmFsdWU+IGdldChjb25zdCBTdHJpbmcmIG5hbWUpIGNv
bnN0OworCisgICAgdm9pZCByZW1vdmUoY29uc3QgU3RyaW5nJiBuYW1lKTsKKworICAgIHZpcnR1
YWwgdm9pZCB3cml0ZUpTT04oU3RyaW5nQnVpbGRlciYgb3V0cHV0KSBjb25zdCBvdmVycmlkZTsK
KworICAgIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gbV9kYXRhLmJlZ2luKCk7IH0KKyAgICBp
dGVyYXRvciBlbmQoKSB7IHJldHVybiBtX2RhdGEuZW5kKCk7IH0KKyAgICBjb25zdF9pdGVyYXRv
ciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5iZWdpbigpOyB9CisgICAgY29uc3RfaXRl
cmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmVuZCgpOyB9CisKKyAgICBpbnQgc2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5zaXplKCk7IH0KKworcHJvdGVjdGVkOgorICAgIFVu
Y2hlY2tlZE9iamVjdEJhc2UoKTsKKworcHJpdmF0ZToKKyAgICBEaWN0aW9uYXJ5IG1fZGF0YTsK
KyAgICBWZWN0b3I8U3RyaW5nPiBtX29yZGVyOworfTsKKworY2xhc3MgVW5jaGVja2VkT2JqZWN0
IDogcHVibGljIFVuY2hlY2tlZE9iamVjdEJhc2UgeworcHVibGljOgorICAgIHN0YXRpYyBKU19F
WFBPUlRfUFJJVkFURSBQYXNzUmVmUHRyPFByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IGNyZWF0
ZSgpOworCisgICAgdXNpbmcgVW5jaGVja2VkT2JqZWN0QmFzZTo6YXNPYmplY3Q7CisKKyAgICB1
c2luZyBVbmNoZWNrZWRPYmplY3RCYXNlOjpzZXRCb29sZWFuOworICAgIHVzaW5nIFVuY2hlY2tl
ZE9iamVjdEJhc2U6OnNldEludGVnZXI7CisgICAgdXNpbmcgVW5jaGVja2VkT2JqZWN0QmFzZTo6
c2V0RG91YmxlOworICAgIHVzaW5nIFVuY2hlY2tlZE9iamVjdEJhc2U6OnNldFN0cmluZzsKKyAg
ICB1c2luZyBVbmNoZWNrZWRPYmplY3RCYXNlOjpzZXRWYWx1ZTsKKyAgICB1c2luZyBVbmNoZWNr
ZWRPYmplY3RCYXNlOjpzZXRPYmplY3Q7CisgICAgdXNpbmcgVW5jaGVja2VkT2JqZWN0QmFzZTo6
c2V0QXJyYXk7CisKKyAgICB1c2luZyBVbmNoZWNrZWRPYmplY3RCYXNlOjpmaW5kOworICAgIHVz
aW5nIFVuY2hlY2tlZE9iamVjdEJhc2U6OmdldEJvb2xlYW47CisgICAgdXNpbmcgVW5jaGVja2Vk
T2JqZWN0QmFzZTo6Z2V0SW50ZWdlcjsKKyAgICB1c2luZyBVbmNoZWNrZWRPYmplY3RCYXNlOjpn
ZXREb3VibGU7CisgICAgdXNpbmcgVW5jaGVja2VkT2JqZWN0QmFzZTo6Z2V0U3RyaW5nOworICAg
IHVzaW5nIFVuY2hlY2tlZE9iamVjdEJhc2U6OmdldE9iamVjdDsKKyAgICB1c2luZyBVbmNoZWNr
ZWRPYmplY3RCYXNlOjpnZXRBcnJheTsKKyAgICB1c2luZyBVbmNoZWNrZWRPYmplY3RCYXNlOjpn
ZXQ7CisKKyAgICB1c2luZyBVbmNoZWNrZWRPYmplY3RCYXNlOjpyZW1vdmU7CisKKyAgICB1c2lu
ZyBVbmNoZWNrZWRPYmplY3RCYXNlOjpiZWdpbjsKKyAgICB1c2luZyBVbmNoZWNrZWRPYmplY3RC
YXNlOjplbmQ7CisKKyAgICB1c2luZyBVbmNoZWNrZWRPYmplY3RCYXNlOjpzaXplOworfTsKKwor
CitjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBVbmNoZWNrZWRBcnJheUJhc2UgOiBwdWJsaWMgUHJv
dG9jb2w6OlVuY2hlY2tlZFZhbHVlIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIFZlY3RvcjxSZWZQ
dHI8UHJvdG9jb2w6OlVuY2hlY2tlZFZhbHVlPj46Oml0ZXJhdG9yIGl0ZXJhdG9yOworICAgIHR5
cGVkZWYgVmVjdG9yPFJlZlB0cjxQcm90b2NvbDo6VW5jaGVja2VkVmFsdWU+Pjo6Y29uc3RfaXRl
cmF0b3IgY29uc3RfaXRlcmF0b3I7CisKKyAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJl
dHVybiBtX2RhdGEuc2l6ZSgpOyB9CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIH5VbmNoZWNr
ZWRBcnJheUJhc2UoKTsKKworICAgIHZpcnR1YWwgYm9vbCBhc0FycmF5KFJlZlB0cjxQcm90b2Nv
bDo6VW5jaGVja2VkQXJyYXk+Jikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHB1c2hCb29sZWFuKGJv
b2wpOworICAgIHZvaWQgcHVzaEludGVnZXIoaW50KTsKKyAgICB2b2lkIHB1c2hEb3VibGUoZG91
YmxlKTsKKyAgICB2b2lkIHB1c2hTdHJpbmcoY29uc3QgU3RyaW5nJik7CisgICAgdm9pZCBwdXNo
VmFsdWUoUGFzc1JlZlB0cjxQcm90b2NvbDo6VW5jaGVja2VkVmFsdWU+KTsKKyAgICB2b2lkIHB1
c2hPYmplY3QoUGFzc1JlZlB0cjxQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0Pik7CisgICAgdm9p
ZCBwdXNoQXJyYXkoUGFzc1JlZlB0cjxQcm90b2NvbDo6VW5jaGVja2VkQXJyYXk+KTsKKworICAg
IFBhc3NSZWZQdHI8UHJvdG9jb2w6OlVuY2hlY2tlZFZhbHVlPiBnZXQoc2l6ZV90IGluZGV4KTsK
KworICAgIHZpcnR1YWwgdm9pZCB3cml0ZUpTT04oU3RyaW5nQnVpbGRlciYgb3V0cHV0KSBjb25z
dCBvdmVycmlkZTsKKworICAgIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gbV9kYXRhLmJlZ2lu
KCk7IH0KKyAgICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBtX2RhdGEuZW5kKCk7IH0KKyAgICBj
b25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5iZWdpbigpOyB9Cisg
ICAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmVuZCgpOyB9CisK
K3Byb3RlY3RlZDoKKyAgICBVbmNoZWNrZWRBcnJheUJhc2UoKTsKKworcHJpdmF0ZToKKyAgICBW
ZWN0b3I8UmVmUHRyPFByb3RvY29sOjpVbmNoZWNrZWRWYWx1ZT4+IG1fZGF0YTsKK307CisKK2Ns
YXNzIFVuY2hlY2tlZEFycmF5IDogcHVibGljIFVuY2hlY2tlZEFycmF5QmFzZSB7CitwdWJsaWM6
CisgICAgc3RhdGljIEpTX0VYUE9SVF9QUklWQVRFIFBhc3NSZWZQdHI8UHJvdG9jb2w6OlVuY2hl
Y2tlZEFycmF5PiBjcmVhdGUoKTsKKworICAgIHVzaW5nIFVuY2hlY2tlZEFycmF5QmFzZTo6YXNB
cnJheTsKKworICAgIHVzaW5nIFVuY2hlY2tlZEFycmF5QmFzZTo6cHVzaEJvb2xlYW47CisgICAg
dXNpbmcgVW5jaGVja2VkQXJyYXlCYXNlOjpwdXNoSW50ZWdlcjsKKyAgICB1c2luZyBVbmNoZWNr
ZWRBcnJheUJhc2U6OnB1c2hEb3VibGU7CisgICAgdXNpbmcgVW5jaGVja2VkQXJyYXlCYXNlOjpw
dXNoU3RyaW5nOworICAgIHVzaW5nIFVuY2hlY2tlZEFycmF5QmFzZTo6cHVzaFZhbHVlOworICAg
IHVzaW5nIFVuY2hlY2tlZEFycmF5QmFzZTo6cHVzaE9iamVjdDsKKyAgICB1c2luZyBVbmNoZWNr
ZWRBcnJheUJhc2U6OnB1c2hBcnJheTsKKworICAgIHVzaW5nIFVuY2hlY2tlZEFycmF5QmFzZTo6
Z2V0OworCisgICAgdXNpbmcgVW5jaGVja2VkQXJyYXlCYXNlOjpiZWdpbjsKKyAgICB1c2luZyBV
bmNoZWNrZWRBcnJheUJhc2U6OmVuZDsKK307CisKKworaW5saW5lIFVuY2hlY2tlZE9iamVjdEJh
c2U6Oml0ZXJhdG9yIFVuY2hlY2tlZE9iamVjdEJhc2U6OmZpbmQoY29uc3QgU3RyaW5nJiBuYW1l
KQoreworICAgIHJldHVybiBtX2RhdGEuZmluZChuYW1lKTsKK30KKworaW5saW5lIFVuY2hlY2tl
ZE9iamVjdEJhc2U6OmNvbnN0X2l0ZXJhdG9yIFVuY2hlY2tlZE9iamVjdEJhc2U6OmZpbmQoY29u
c3QgU3RyaW5nJiBuYW1lKSBjb25zdAoreworICAgIHJldHVybiBtX2RhdGEuZmluZChuYW1lKTsK
K30KKworaW5saW5lIHZvaWQgVW5jaGVja2VkT2JqZWN0QmFzZTo6c2V0Qm9vbGVhbihjb25zdCBT
dHJpbmcmIG5hbWUsIGJvb2wgdmFsdWUpCit7CisgICAgc2V0VmFsdWUobmFtZSwgUHJpbWl0aXZl
VmFsdWU6OmNyZWF0ZSh2YWx1ZSkpOworfQorCitpbmxpbmUgdm9pZCBVbmNoZWNrZWRPYmplY3RC
YXNlOjpzZXRJbnRlZ2VyKGNvbnN0IFN0cmluZyYgbmFtZSwgaW50IHZhbHVlKQoreworICAgIHNl
dFZhbHVlKG5hbWUsIFByaW1pdGl2ZVZhbHVlOjpjcmVhdGUodmFsdWUpKTsKK30KKworaW5saW5l
IHZvaWQgVW5jaGVja2VkT2JqZWN0QmFzZTo6c2V0RG91YmxlKGNvbnN0IFN0cmluZyYgbmFtZSwg
ZG91YmxlIHZhbHVlKQoreworICAgIHNldFZhbHVlKG5hbWUsIFByaW1pdGl2ZVZhbHVlOjpjcmVh
dGUodmFsdWUpKTsKK30KKworaW5saW5lIHZvaWQgVW5jaGVja2VkT2JqZWN0QmFzZTo6c2V0U3Ry
aW5nKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBzZXRW
YWx1ZShuYW1lLCBTdHJpbmdWYWx1ZTo6Y3JlYXRlKHZhbHVlKSk7Cit9CisKK2lubGluZSB2b2lk
IFVuY2hlY2tlZE9iamVjdEJhc2U6OnNldFZhbHVlKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1Jl
ZlB0cjxQcm90b2NvbDo6VW5jaGVja2VkVmFsdWU+IHZhbHVlKQoreworICAgIEFTU0VSVCh2YWx1
ZSk7CisgICAgaWYgKG1fZGF0YS5zZXQobmFtZSwgdmFsdWUpLmlzTmV3RW50cnkpCisgICAgICAg
IG1fb3JkZXIuYXBwZW5kKG5hbWUpOworfQorCitpbmxpbmUgdm9pZCBVbmNoZWNrZWRPYmplY3RC
YXNlOjpzZXRPYmplY3QoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPFVuY2hlY2tlZE9i
amVjdEJhc2U+IHZhbHVlKQoreworICAgIEFTU0VSVCh2YWx1ZSk7CisgICAgaWYgKG1fZGF0YS5z
ZXQobmFtZSwgdmFsdWUpLmlzTmV3RW50cnkpCisgICAgICAgIG1fb3JkZXIuYXBwZW5kKG5hbWUp
OworfQorCitpbmxpbmUgdm9pZCBVbmNoZWNrZWRPYmplY3RCYXNlOjpzZXRBcnJheShjb25zdCBT
dHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8VW5jaGVja2VkQXJyYXlCYXNlPiB2YWx1ZSkKK3sKKyAg
ICBBU1NFUlQodmFsdWUpOworICAgIGlmIChtX2RhdGEuc2V0KG5hbWUsIHZhbHVlKS5pc05ld0Vu
dHJ5KQorICAgICAgICBtX29yZGVyLmFwcGVuZChuYW1lKTsKK30KKworaW5saW5lIHZvaWQgVW5j
aGVja2VkQXJyYXlCYXNlOjpwdXNoQm9vbGVhbihib29sIHZhbHVlKQoreworICAgIG1fZGF0YS5h
cHBlbmQoUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSh2YWx1ZSkpOworfQorCitpbmxpbmUgdm9pZCBV
bmNoZWNrZWRBcnJheUJhc2U6OnB1c2hJbnRlZ2VyKGludCB2YWx1ZSkKK3sKKyAgICBtX2RhdGEu
YXBwZW5kKFByaW1pdGl2ZVZhbHVlOjpjcmVhdGUodmFsdWUpKTsKK30KKworaW5saW5lIHZvaWQg
VW5jaGVja2VkQXJyYXlCYXNlOjpwdXNoRG91YmxlKGRvdWJsZSB2YWx1ZSkKK3sKKyAgICBtX2Rh
dGEuYXBwZW5kKFByaW1pdGl2ZVZhbHVlOjpjcmVhdGUodmFsdWUpKTsKK30KKworaW5saW5lIHZv
aWQgVW5jaGVja2VkQXJyYXlCYXNlOjpwdXNoU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCit7
CisgICAgbV9kYXRhLmFwcGVuZChTdHJpbmdWYWx1ZTo6Y3JlYXRlKHZhbHVlKSk7Cit9CisKK2lu
bGluZSB2b2lkIFVuY2hlY2tlZEFycmF5QmFzZTo6cHVzaFZhbHVlKFBhc3NSZWZQdHI8UHJvdG9j
b2w6OlVuY2hlY2tlZFZhbHVlPiB2YWx1ZSkKK3sKKyAgICBBU1NFUlQodmFsdWUpOworICAgIG1f
ZGF0YS5hcHBlbmQodmFsdWUpOworfQorCitpbmxpbmUgdm9pZCBVbmNoZWNrZWRBcnJheUJhc2U6
OnB1c2hPYmplY3QoUGFzc1JlZlB0cjxQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiB2YWx1ZSkK
K3sKKyAgICBBU1NFUlQodmFsdWUpOworICAgIG1fZGF0YS5hcHBlbmQodmFsdWUpOworfQorCitp
bmxpbmUgdm9pZCBVbmNoZWNrZWRBcnJheUJhc2U6OnB1c2hBcnJheShQYXNzUmVmUHRyPFByb3Rv
Y29sOjpVbmNoZWNrZWRBcnJheT4gdmFsdWUpCit7CisgICAgQVNTRVJUKHZhbHVlKTsKKyAgICBt
X2RhdGEuYXBwZW5kKHZhbHVlKTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgVD4KIGNsYXNzIE9w
dE91dHB1dCB7CiBwdWJsaWM6CkBAIC02MywzNCArNDM3LDE0IEBAIHByaXZhdGU6CiAgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoT3B0T3V0cHV0KTsKIH07CiAKLS8vIFRoaXMgY2xhc3MgcHJvdmlk
ZXMgIlRyYWl0cyIgdHlwZSBmb3IgdGhlIGlucHV0IHR5cGUgVC4gSXQgaXMgcHJvZ3JhbW1lZCB1
c2luZyBDKysgdGVtcGxhdGUgc3BlY2lhbGl6YXRpb24KLS8vIHRlY2huaXF1ZS4gQnkgZGVmYXVs
dCBpdCBzaW1wbHkgdGFrZXMgIkl0ZW1UcmFpdHMiIHR5cGUgZnJvbSBULCBidXQgaXQgZG9lc24n
dCB3b3JrIHdpdGggdGhlIGJhc2UgdHlwZXMuCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotc3RydWN0
IEFycmF5SXRlbUhlbHBlciB7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBUOjpJdGVtVHJhaXRzIFRy
YWl0czsKLX07Ci0KIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1jbGFzcyBBcnJheSA6IHB1YmxpYyBJ
bnNwZWN0b3JBcnJheUJhc2UgeworY2xhc3MgQXJyYXkgOiBwdWJsaWMgVW5jaGVja2VkQXJyYXlC
YXNlIHsKIHByaXZhdGU6CiAgICAgQXJyYXkoKSB7IH0KIAotICAgIEluc3BlY3RvckFycmF5KiBv
cGVuQWNjZXNzb3JzKCkKLSAgICB7Ci0gICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihJbnNw
ZWN0b3JBcnJheSkgPT0gc2l6ZW9mKEFycmF5PFQ+KSwgY2Fubm90X2Nhc3QpOwotICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8SW5zcGVjdG9yQXJyYXkqPihzdGF0aWNfY2FzdDxJbnNwZWN0b3JB
cnJheUJhc2UqPih0aGlzKSk7Ci0gICAgfQotCiBwdWJsaWM6Ci0gICAgdm9pZCBhZGRJdGVtKFBh
c3NSZWZQdHI8VD4gdmFsdWUpCi0gICAgewotICAgICAgICBBcnJheUl0ZW1IZWxwZXI8VD46OlRy
YWl0czo6cHVzaFJlZlB0cih0aGlzLT5vcGVuQWNjZXNzb3JzKCksIHZhbHVlKTsKLSAgICB9Ci0K
LSAgICB2b2lkIGFkZEl0ZW0oVCB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEFycmF5SXRlbUhlbHBl
cjxUPjo6VHJhaXRzOjpwdXNoUmF3KHRoaXMtPm9wZW5BY2Nlc3NvcnMoKSwgdmFsdWUpOwotICAg
IH0KKyAgICB2b2lkIGFkZEl0ZW0oUGFzc1JlZlB0cjxUPiB2YWx1ZSk7CisgICAgdm9pZCBhZGRJ
dGVtKFQgdmFsdWUpOwogCiAgICAgc3RhdGljIFBhc3NSZWZQdHI8QXJyYXk8VD4+IGNyZWF0ZSgp
CiAgICAgewpAQCAtOTgsOTIgKzQ1Miw1OSBAQCBwdWJsaWM6CiAgICAgfQogfTsKIAotc3RydWN0
IFN0cnVjdEl0ZW1UcmFpdHMgewotICAgIHN0YXRpYyB2b2lkIHB1c2hSZWZQdHIoSW5zcGVjdG9y
QXJyYXkqIGFycmF5LCBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1ZSkKLSAgICB7Ci0g
ICAgICAgIGFycmF5LT5wdXNoVmFsdWUodmFsdWUpOwotICAgIH0KLX07Ci0KIHRlbXBsYXRlPD4K
LXN0cnVjdCBBcnJheUl0ZW1IZWxwZXI8U3RyaW5nPiB7Ci0gICAgc3RydWN0IFRyYWl0cyB7Ci0g
ICAgICAgIHN0YXRpYyB2b2lkIHB1c2hSYXcoSW5zcGVjdG9yQXJyYXkqIGFycmF5LCBjb25zdCBT
dHJpbmcmIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBhcnJheS0+cHVzaFN0cmluZyh2
YWx1ZSk7Ci0gICAgICAgIH0KLSAgICB9OwotfTsKK2lubGluZSB2b2lkIEFycmF5PFN0cmluZz46
OmFkZEl0ZW0oU3RyaW5nIHZhbHVlKQoreworICAgIHB1c2hTdHJpbmcodmFsdWUpOworfQogCiB0
ZW1wbGF0ZTw+Ci1zdHJ1Y3QgQXJyYXlJdGVtSGVscGVyPGludD4gewotICAgIHN0cnVjdCBUcmFp
dHMgewotICAgICAgICBzdGF0aWMgdm9pZCBwdXNoUmF3KEluc3BlY3RvckFycmF5KiBhcnJheSwg
aW50IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBhcnJheS0+cHVzaEludGVnZXIodmFs
dWUpOwotICAgICAgICB9Ci0gICAgfTsKLX07CitpbmxpbmUgdm9pZCBBcnJheTxpbnQ+OjphZGRJ
dGVtKGludCB2YWx1ZSkKK3sKKyAgICBwdXNoSW50ZWdlcih2YWx1ZSk7Cit9CiAKIHRlbXBsYXRl
PD4KLXN0cnVjdCBBcnJheUl0ZW1IZWxwZXI8ZG91YmxlPiB7Ci0gICAgc3RydWN0IFRyYWl0cyB7
Ci0gICAgICAgIHN0YXRpYyB2b2lkIHB1c2hSYXcoSW5zcGVjdG9yQXJyYXkqIGFycmF5LCBkb3Vi
bGUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGFycmF5LT5wdXNoRG91YmxlKHZhbHVl
KTsKLSAgICAgICAgfQotICAgIH07Ci19OworaW5saW5lIHZvaWQgQXJyYXk8ZG91YmxlPjo6YWRk
SXRlbShkb3VibGUgdmFsdWUpCit7CisgICAgcHVzaERvdWJsZSh2YWx1ZSk7Cit9CiAKIHRlbXBs
YXRlPD4KLXN0cnVjdCBBcnJheUl0ZW1IZWxwZXI8Ym9vbD4gewotICAgIHN0cnVjdCBUcmFpdHMg
ewotICAgICAgICBzdGF0aWMgdm9pZCBwdXNoUmF3KEluc3BlY3RvckFycmF5KiBhcnJheSwgYm9v
bCB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgYXJyYXktPnB1c2hCb29sZWFuKHZhbHVl
KTsKLSAgICAgICAgfQotICAgIH07Ci19OworaW5saW5lIHZvaWQgQXJyYXk8Ym9vbD46OmFkZEl0
ZW0oYm9vbCB2YWx1ZSkKK3sKKyAgICBwdXNoQm9vbGVhbih2YWx1ZSk7Cit9CiAKIHRlbXBsYXRl
PD4KLXN0cnVjdCBBcnJheUl0ZW1IZWxwZXI8SW5zcGVjdG9yVmFsdWU+IHsKLSAgICBzdHJ1Y3Qg
VHJhaXRzIHsKLSAgICAgICAgc3RhdGljIHZvaWQgcHVzaFJlZlB0cihJbnNwZWN0b3JBcnJheSog
YXJyYXksIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBhcnJheS0+cHVzaFZhbHVlKHZhbHVlKTsKLSAgICAgICAgfQotICAgIH07Ci19Owor
aW5saW5lIHZvaWQgQXJyYXk8UHJvdG9jb2w6OlVuY2hlY2tlZFZhbHVlPjo6YWRkSXRlbShQYXNz
UmVmUHRyPFByb3RvY29sOjpVbmNoZWNrZWRWYWx1ZT4gdmFsdWUpCit7CisgICAgcHVzaFZhbHVl
KHZhbHVlKTsKK30KIAogdGVtcGxhdGU8Pgotc3RydWN0IEFycmF5SXRlbUhlbHBlcjxJbnNwZWN0
b3JPYmplY3Q+IHsKLSAgICBzdHJ1Y3QgVHJhaXRzIHsKLSAgICAgICAgc3RhdGljIHZvaWQgcHVz
aFJlZlB0cihJbnNwZWN0b3JBcnJheSogYXJyYXksIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+
IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBhcnJheS0+cHVzaFZhbHVlKHZhbHVlKTsK
LSAgICAgICAgfQotICAgIH07Ci19OworaW5saW5lIHZvaWQgQXJyYXk8UHJvdG9jb2w6OlVuY2hl
Y2tlZE9iamVjdD46OmFkZEl0ZW0oUGFzc1JlZlB0cjxQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0
PiB2YWx1ZSkKK3sKKyAgICBwdXNoT2JqZWN0KHZhbHVlKTsKK30KIAogdGVtcGxhdGU8Pgotc3Ry
dWN0IEFycmF5SXRlbUhlbHBlcjxJbnNwZWN0b3JBcnJheT4gewotICAgIHN0cnVjdCBUcmFpdHMg
ewotICAgICAgICBzdGF0aWMgdm9pZCBwdXNoUmVmUHRyKEluc3BlY3RvckFycmF5KiBhcnJheSwg
UGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGFycmF5LT5wdXNoQXJyYXkodmFsdWUpOwotICAgICAgICB9Ci0gICAgfTsKLX07CitpbmxpbmUg
dm9pZCBBcnJheTxQcm90b2NvbDo6VW5jaGVja2VkQXJyYXk+OjphZGRJdGVtKFBhc3NSZWZQdHI8
UHJvdG9jb2w6OlVuY2hlY2tlZEFycmF5PiB2YWx1ZSkKK3sKKyAgICBwdXNoQXJyYXkodmFsdWUp
OworfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotc3RydWN0IEFycmF5SXRlbUhlbHBlcjxQcm90
b2NvbDo6QXJyYXk8VD4+IHsKLSAgICBzdHJ1Y3QgVHJhaXRzIHsKLSAgICAgICAgc3RhdGljIHZv
aWQgcHVzaFJlZlB0cihJbnNwZWN0b3JBcnJheSogYXJyYXksIFBhc3NSZWZQdHI8UHJvdG9jb2w6
OkFycmF5PFQ+PiB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgYXJyYXktPnB1c2hWYWx1
ZSh2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICB9OwotfTsKK2lubGluZSB2b2lkIEFycmF5PFQ+Ojph
ZGRJdGVtKFBhc3NSZWZQdHI8VD4gdmFsdWUpCit7CisgICAgcHVzaFZhbHVlKHZhbHVlKTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2lubGluZSB2b2lkIEFycmF5PFQ+OjphZGRJdGVtKFQg
dmFsdWUpCit7CisgICAgcHVzaFZhbHVlKHZhbHVlKTsKK30KIAogLy8gSGVscGVyIG1ldGhvZHMg
Zm9yIFByb3RvY29sIGFuZCBvdGhlciBJbnNwZWN0b3IgdHlwZXMgYXJlIHByb3ZpZGVkIGJ5CiAv
LyBzcGVjaWFsaXphdGlvbnMgb2YgQmluZGluZ1RyYWl0czxUPi4gU29tZSBhcmUgZ2VuZXJhdGVk
IGZvciBwcm90b2NvbCB0eXBlcy4KQEAgLTE5MiwxNyArNTEzLDE3IEBAIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+CiBzdHJ1Y3QgQmluZGluZ1RyYWl0cyB7CiAgICAgdHlwZWRlZiBUIEJpbmRpbmdUeXBl
OwogCi0gICAgc3RhdGljIEluc3BlY3RvclZhbHVlOjpUeXBlIHR5cGVUYWcoKTsKLSAgICBzdGF0
aWMgUGFzc1JlZlB0cjxUPiBydW50aW1lQ2FzdChQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4p
OworICAgIHN0YXRpYyBQcm90b2NvbDo6VW5jaGVja2VkVmFsdWU6OlR5cGUgdHlwZVRhZygpOwor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFQ+IHJ1bnRpbWVDYXN0KFBhc3NSZWZQdHI8UHJvdG9jb2w6
OlVuY2hlY2tlZE9iamVjdD4pOwogI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICBzdGF0aWMgdm9p
ZCBhc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShJbnNwZWN0b3JWYWx1ZSopOworICAgIHN0YXRp
YyB2b2lkIGFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKFVuY2hlY2tlZFZhbHVlKik7CiAjZW5k
aWYgLy8gIUFTU0VSVF9ESVNBQkxFRAogfTsKIAotdGVtcGxhdGU8SW5zcGVjdG9yVmFsdWU6OlR5
cGUgVFlQRT4KK3RlbXBsYXRlPFVuY2hlY2tlZFZhbHVlOjpUeXBlIFRZUEU+CiBzdHJ1Y3QgUHJp
bWl0aXZlQmluZGluZ1RyYWl0cyB7CiAjaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgIHN0YXRpYyB2
b2lkIGFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEluc3BlY3RvclZhbHVlKiB2YWx1ZSkKKyAg
ICBzdGF0aWMgdm9pZCBhc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShVbmNoZWNrZWRWYWx1ZSog
dmFsdWUpCiAgICAgewogICAgICAgICBBU1NFUlQodmFsdWUtPnR5cGUoKSA9PSBUWVBFKTsKICAg
ICB9CkBAIC0yMTAsMjMgKzUzMSwyMyBAQCBzdHJ1Y3QgUHJpbWl0aXZlQmluZGluZ1RyYWl0cyB7
CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotc3RydWN0IEJpbmRpbmdUcmFpdHM8UHJvdG9j
b2w6OkFycmF5PFQ+PiB7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8QXJyYXk8VD4+IHJ1bnRpbWVD
YXN0KFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlKQorc3RydWN0IEJpbmRpbmdUcmFp
dHM8QXJyYXk8VD4+IHsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxBcnJheTxUPj4gcnVudGltZUNh
c3QoUGFzc1JlZlB0cjxQcm90b2NvbDo6VW5jaGVja2VkVmFsdWU+IHZhbHVlKQogICAgIHsKLSAg
ICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcnJheTsKKyAgICAgICAgUmVmUHRyPFByb3Rv
Y29sOjpVbmNoZWNrZWRBcnJheT4gYXJyYXk7CiAgICAgICAgIGJvb2wgY2FzdFN1Y2NlZWRlZCA9
IHZhbHVlLT5hc0FycmF5KGFycmF5KTsKICAgICAgICAgQVNTRVJUX1VOVVNFRChjYXN0U3VjY2Vl
ZGVkLCBjYXN0U3VjY2VlZGVkKTsKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgICAgIGFzc2Vy
dFZhbHVlSGFzRXhwZWN0ZWRUeXBlKGFycmF5LmdldCgpKTsKICNlbmRpZiAvLyAhQVNTRVJUX0RJ
U0FCTEVECi0gICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihBcnJheTxUPikgPT0gc2l6ZW9m
KEluc3BlY3RvckFycmF5KSwgdHlwZV9jYXN0X3Byb2JsZW0pOwotICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8QXJyYXk8VD4qPihzdGF0aWNfY2FzdDxJbnNwZWN0b3JBcnJheUJhc2UqPihhcnJh
eS5nZXQoKSkpOworICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoQXJyYXk8VD4pID09IHNp
emVvZihVbmNoZWNrZWRBcnJheSksIHR5cGVfY2FzdF9wcm9ibGVtKTsKKyAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PEFycmF5PFQ+Kj4oc3RhdGljX2Nhc3Q8VW5jaGVja2VkQXJyYXlCYXNlKj4o
YXJyYXkuZ2V0KCkpKTsKICAgICB9CiAKICNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgc3RhdGlj
IHZvaWQgYXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSW5zcGVjdG9yVmFsdWUqIHZhbHVlKQor
ICAgIHN0YXRpYyB2b2lkIGFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKFVuY2hlY2tlZFZhbHVl
KiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJyYXk7Cisg
ICAgICAgIFJlZlB0cjxQcm90b2NvbDo6VW5jaGVja2VkQXJyYXk+IGFycmF5OwogICAgICAgICBi
b29sIGNhc3RTdWNjZWVkZWQgPSB2YWx1ZS0+YXNBcnJheShhcnJheSk7CiAgICAgICAgIEFTU0VS
VF9VTlVTRUQoY2FzdFN1Y2NlZWRlZCwgY2FzdFN1Y2NlZWRlZCk7CiAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBhcnJheS0+bGVuZ3RoKCk7IGkrKykKQEAgLTIzNiwyMCArNTU3LDIw
IEBAIHN0cnVjdCBCaW5kaW5nVHJhaXRzPFByb3RvY29sOjpBcnJheTxUPj4gewogfTsKIAogdGVt
cGxhdGU8Pgotc3RydWN0IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yVmFsdWU+IHsKK3N0cnVjdCBC
aW5kaW5nVHJhaXRzPFByb3RvY29sOjpVbmNoZWNrZWRWYWx1ZT4gewogI2lmICFBU1NFUlRfRElT
QUJMRUQKLSAgICBzdGF0aWMgdm9pZCBhc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShJbnNwZWN0
b3JWYWx1ZSopCisgICAgc3RhdGljIHZvaWQgYXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoVW5j
aGVja2VkVmFsdWUqKQogICAgIHsKICAgICB9CiAjZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRAog
fTsKIAotdGVtcGxhdGU8PiBzdHJ1Y3QgQmluZGluZ1RyYWl0czxJbnNwZWN0b3JBcnJheT4gOiBw
dWJsaWMgUHJpbWl0aXZlQmluZGluZ1RyYWl0czxJbnNwZWN0b3JWYWx1ZTo6VHlwZTo6QXJyYXk+
IHsgfTsKLXRlbXBsYXRlPD4gc3RydWN0IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yT2JqZWN0PiA6
IHB1YmxpYyBQcmltaXRpdmVCaW5kaW5nVHJhaXRzPEluc3BlY3RvclZhbHVlOjpUeXBlOjpPYmpl
Y3Q+IHsgfTsKLXRlbXBsYXRlPD4gc3RydWN0IEJpbmRpbmdUcmFpdHM8U3RyaW5nPiA6IHB1Ymxp
YyBQcmltaXRpdmVCaW5kaW5nVHJhaXRzPEluc3BlY3RvclZhbHVlOjpUeXBlOjpTdHJpbmc+IHsg
fTsKLXRlbXBsYXRlPD4gc3RydWN0IEJpbmRpbmdUcmFpdHM8Ym9vbD4gOiBwdWJsaWMgUHJpbWl0
aXZlQmluZGluZ1RyYWl0czxJbnNwZWN0b3JWYWx1ZTo6VHlwZTo6Qm9vbGVhbj4geyB9OwotdGVt
cGxhdGU8PiBzdHJ1Y3QgQmluZGluZ1RyYWl0czxkb3VibGU+IDogcHVibGljIFByaW1pdGl2ZUJp
bmRpbmdUcmFpdHM8SW5zcGVjdG9yVmFsdWU6OlR5cGU6OkRvdWJsZT4geyB9OwotdGVtcGxhdGU8
PiBzdHJ1Y3QgQmluZGluZ1RyYWl0czxpbnQ+IDogcHVibGljIFByaW1pdGl2ZUJpbmRpbmdUcmFp
dHM8SW5zcGVjdG9yVmFsdWU6OlR5cGU6OkludGVnZXI+IHsgfTsKK3RlbXBsYXRlPD4gc3RydWN0
IEJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6OlVuY2hlY2tlZEFycmF5PiA6IHB1YmxpYyBQcmltaXRp
dmVCaW5kaW5nVHJhaXRzPFVuY2hlY2tlZFZhbHVlOjpUeXBlOjpBcnJheT4geyB9OwordGVtcGxh
dGU8PiBzdHJ1Y3QgQmluZGluZ1RyYWl0czxQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiA6IHB1
YmxpYyBQcmltaXRpdmVCaW5kaW5nVHJhaXRzPFVuY2hlY2tlZFZhbHVlOjpUeXBlOjpPYmplY3Q+
IHsgfTsKK3RlbXBsYXRlPD4gc3RydWN0IEJpbmRpbmdUcmFpdHM8U3RyaW5nPiA6IHB1YmxpYyBQ
cmltaXRpdmVCaW5kaW5nVHJhaXRzPFVuY2hlY2tlZFZhbHVlOjpUeXBlOjpTdHJpbmc+IHsgfTsK
K3RlbXBsYXRlPD4gc3RydWN0IEJpbmRpbmdUcmFpdHM8Ym9vbD4gOiBwdWJsaWMgUHJpbWl0aXZl
QmluZGluZ1RyYWl0czxVbmNoZWNrZWRWYWx1ZTo6VHlwZTo6Qm9vbGVhbj4geyB9OwordGVtcGxh
dGU8PiBzdHJ1Y3QgQmluZGluZ1RyYWl0czxkb3VibGU+IDogcHVibGljIFByaW1pdGl2ZUJpbmRp
bmdUcmFpdHM8VW5jaGVja2VkVmFsdWU6OlR5cGU6OkRvdWJsZT4geyB9OwordGVtcGxhdGU8PiBz
dHJ1Y3QgQmluZGluZ1RyYWl0czxpbnQ+IDogcHVibGljIFByaW1pdGl2ZUJpbmRpbmdUcmFpdHM8
VW5jaGVja2VkVmFsdWU6OlR5cGU6OkludGVnZXI+IHsgfTsKIAogfSAvLyBuYW1lc3BhY2UgUHJv
dG9jb2wKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JWYWx1ZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JWYWx1ZXMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYTJhMGJjODUwYTFl
ZGNmN2FiMzBhYTM2Y2RjODRlODMyN2MxYWUzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yVmFsdWVzLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDg5NCArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
Ci0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJbnNwZWN0b3JWYWx1ZXMuaCIKLQotI2lu
Y2x1ZGUgPHd0Zi9EZWNpbWFsTnVtYmVyLmg+Ci0jaW5jbHVkZSA8d3RmL2R0b2EuaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Igewot
Ci1uYW1lc3BhY2UgewotCi1zdGF0aWMgY29uc3QgaW50IHN0YWNrTGltaXQgPSAxMDAwOwotCi1l
bnVtIFRva2VuIHsKLSAgICBPQkpFQ1RfQkVHSU4sCi0gICAgT0JKRUNUX0VORCwKLSAgICBBUlJB
WV9CRUdJTiwKLSAgICBBUlJBWV9FTkQsCi0gICAgU1RSSU5HLAotICAgIE5VTUJFUiwKLSAgICBC
T09MX1RSVUUsCi0gICAgQk9PTF9GQUxTRSwKLSAgICBOVUxMX1RPS0VOLAotICAgIExJU1RfU0VQ
QVJBVE9SLAotICAgIE9CSkVDVF9QQUlSX1NFUEFSQVRPUiwKLSAgICBJTlZBTElEX1RPS0VOLAot
fTsKLQotY29uc3QgY2hhciogY29uc3QgbnVsbFN0cmluZyA9ICJudWxsIjsKLWNvbnN0IGNoYXIq
IGNvbnN0IHRydWVTdHJpbmcgPSAidHJ1ZSI7Ci1jb25zdCBjaGFyKiBjb25zdCBmYWxzZVN0cmlu
ZyA9ICJmYWxzZSI7Ci0KLWJvb2wgcGFyc2VDb25zdFRva2VuKGNvbnN0IFVDaGFyKiBzdGFydCwg
Y29uc3QgVUNoYXIqIGVuZCwgY29uc3QgVUNoYXIqKiB0b2tlbkVuZCwgY29uc3QgY2hhciogdG9r
ZW4pCi17Ci0gICAgd2hpbGUgKHN0YXJ0IDwgZW5kICYmICp0b2tlbiAhPSAnXDAnICYmICpzdGFy
dCsrID09ICp0b2tlbisrKSB7IH0KLQotICAgIGlmICgqdG9rZW4gIT0gJ1wwJykKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgKnRva2VuRW5kID0gc3RhcnQ7Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLWJvb2wgcmVhZEludChjb25zdCBVQ2hhciogc3RhcnQsIGNvbnN0IFVDaGFyKiBlbmQs
IGNvbnN0IFVDaGFyKiogdG9rZW5FbmQsIGJvb2wgY2FuSGF2ZUxlYWRpbmdaZXJvcykKLXsKLSAg
ICBpZiAoc3RhcnQgPT0gZW5kKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBib29sIGhh
dmVMZWFkaW5nWmVybyA9ICcwJyA9PSAqc3RhcnQ7Ci0gICAgaW50IGxlbmd0aCA9IDA7Ci0gICAg
d2hpbGUgKHN0YXJ0IDwgZW5kICYmICcwJyA8PSAqc3RhcnQgJiYgKnN0YXJ0IDw9ICc5Jykgewot
ICAgICAgICArK3N0YXJ0OwotICAgICAgICArK2xlbmd0aDsKLSAgICB9Ci0KLSAgICBpZiAoIWxl
bmd0aCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFjYW5IYXZlTGVhZGluZ1pl
cm9zICYmIGxlbmd0aCA+IDEgJiYgaGF2ZUxlYWRpbmdaZXJvKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICAqdG9rZW5FbmQgPSBzdGFydDsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9v
bCBwYXJzZU51bWJlclRva2VuKGNvbnN0IFVDaGFyKiBzdGFydCwgY29uc3QgVUNoYXIqIGVuZCwg
Y29uc3QgVUNoYXIqKiB0b2tlbkVuZCkKLXsKLSAgICAvLyBXZSBqdXN0IGdyYWIgdGhlIG51bWJl
ciBoZXJlLiAgV2UgdmFsaWRhdGUgdGhlIHNpemUgaW4gRGVjb2RlTnVtYmVyLgotICAgIC8vIEFj
Y29yZGluZyAgIHRvIFJGQzQ2MjcsIGEgdmFsaWQgbnVtYmVyIGlzOiBbbWludXNdIGludCBbZnJh
Y10gW2V4cF0KLSAgICBpZiAoc3RhcnQgPT0gZW5kKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBVQ2hhciBjID0gKnN0YXJ0OwotICAgIGlmICgnLScgPT0gYykKLSAgICAgICAgKytzdGFy
dDsKLQotICAgIGlmICghcmVhZEludChzdGFydCwgZW5kLCAmc3RhcnQsIGZhbHNlKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKHN0YXJ0ID09IGVuZCkgewotICAgICAgICAqdG9r
ZW5FbmQgPSBzdGFydDsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgLy8gT3B0
aW9uYWwgZnJhY3Rpb24gcGFydAotICAgIGMgPSAqc3RhcnQ7Ci0gICAgaWYgKCcuJyA9PSBjKSB7
Ci0gICAgICAgICsrc3RhcnQ7Ci0gICAgICAgIGlmICghcmVhZEludChzdGFydCwgZW5kLCAmc3Rh
cnQsIHRydWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoc3RhcnQg
PT0gZW5kKSB7Ci0gICAgICAgICAgICAqdG9rZW5FbmQgPSBzdGFydDsKLSAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGMgPSAqc3RhcnQ7Ci0gICAgfQotCi0gICAg
Ly8gT3B0aW9uYWwgZXhwb25lbnQgcGFydAotICAgIGlmICgnZScgPT0gYyB8fCAnRScgPT0gYykg
ewotICAgICAgICArK3N0YXJ0OwotICAgICAgICBpZiAoc3RhcnQgPT0gZW5kKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBjID0gKnN0YXJ0OwotICAgICAgICBpZiAoJy0nID09
IGMgfHwgJysnID09IGMpIHsKLSAgICAgICAgICAgICsrc3RhcnQ7Ci0gICAgICAgICAgICBpZiAo
c3RhcnQgPT0gZW5kKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQot
ICAgICAgICBpZiAoIXJlYWRJbnQoc3RhcnQsIGVuZCwgJnN0YXJ0LCB0cnVlKSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAqdG9rZW5FbmQgPSBzdGFydDsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCByZWFkSGV4RGlnaXRzKGNvbnN0IFVDaGFyKiBzdGFydCwg
Y29uc3QgVUNoYXIqIGVuZCwgY29uc3QgVUNoYXIqKiB0b2tlbkVuZCwgaW50IGRpZ2l0cykKLXsK
LSAgICBpZiAoZW5kIC0gc3RhcnQgPCBkaWdpdHMpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGlnaXRzOyArK2kpIHsKLSAgICAgICAgVUNoYXIgYyA9
ICpzdGFydCsrOwotICAgICAgICBpZiAoISgoJzAnIDw9IGMgJiYgYyA8PSAnOScpIHx8ICgnYScg
PD0gYyAmJiBjIDw9ICdmJykgfHwgKCdBJyA8PSBjICYmIGMgPD0gJ0YnKSkpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgKnRva2VuRW5kID0gc3RhcnQ7Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLWJvb2wgcGFyc2VTdHJpbmdUb2tlbihjb25zdCBVQ2hhciogc3RhcnQs
IGNvbnN0IFVDaGFyKiBlbmQsIGNvbnN0IFVDaGFyKiogdG9rZW5FbmQpCi17Ci0gICAgd2hpbGUg
KHN0YXJ0IDwgZW5kKSB7Ci0gICAgICAgIFVDaGFyIGMgPSAqc3RhcnQrKzsKLSAgICAgICAgaWYg
KCdcXCcgPT0gYykgewotICAgICAgICAgICAgYyA9ICpzdGFydCsrOwotICAgICAgICAgICAgLy8g
TWFrZSBzdXJlIHRoZSBlc2NhcGVkIGNoYXIgaXMgdmFsaWQuCi0gICAgICAgICAgICBzd2l0Y2gg
KGMpIHsKLSAgICAgICAgICAgIGNhc2UgJ3gnOgotICAgICAgICAgICAgICAgIGlmICghcmVhZEhl
eERpZ2l0cyhzdGFydCwgZW5kLCAmc3RhcnQsIDIpKQotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlICd1JzoK
LSAgICAgICAgICAgICAgICBpZiAoIXJlYWRIZXhEaWdpdHMoc3RhcnQsIGVuZCwgJnN0YXJ0LCA0
KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgY2FzZSAnXFwnOgotICAgICAgICAgICAgY2FzZSAnLyc6Ci0gICAg
ICAgICAgICBjYXNlICdiJzoKLSAgICAgICAgICAgIGNhc2UgJ2YnOgotICAgICAgICAgICAgY2Fz
ZSAnbic6Ci0gICAgICAgICAgICBjYXNlICdyJzoKLSAgICAgICAgICAgIGNhc2UgJ3QnOgotICAg
ICAgICAgICAgY2FzZSAndic6Ci0gICAgICAgICAgICBjYXNlICciJzoKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKCciJyA9PSBjKSB7Ci0gICAg
ICAgICAgICAqdG9rZW5FbmQgPSBzdGFydDsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1Ub2tlbiBwYXJzZVRva2Vu
KGNvbnN0IFVDaGFyKiBzdGFydCwgY29uc3QgVUNoYXIqIGVuZCwgY29uc3QgVUNoYXIqKiB0b2tl
blN0YXJ0LCBjb25zdCBVQ2hhcioqIHRva2VuRW5kKQotewotICAgIHdoaWxlIChzdGFydCA8IGVu
ZCAmJiBpc1NwYWNlT3JOZXdsaW5lKCpzdGFydCkpCi0gICAgICAgICsrc3RhcnQ7Ci0KLSAgICBp
ZiAoc3RhcnQgPT0gZW5kKQotICAgICAgICByZXR1cm4gSU5WQUxJRF9UT0tFTjsKLQotICAgICp0
b2tlblN0YXJ0ID0gc3RhcnQ7Ci0KLSAgICBzd2l0Y2ggKCpzdGFydCkgewotICAgIGNhc2UgJ24n
OgotICAgICAgICBpZiAocGFyc2VDb25zdFRva2VuKHN0YXJ0LCBlbmQsIHRva2VuRW5kLCBudWxs
U3RyaW5nKSkKLSAgICAgICAgICAgIHJldHVybiBOVUxMX1RPS0VOOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlICd0JzoKLSAgICAgICAgaWYgKHBhcnNlQ29uc3RUb2tlbihzdGFydCwgZW5kLCB0
b2tlbkVuZCwgdHJ1ZVN0cmluZykpCi0gICAgICAgICAgICByZXR1cm4gQk9PTF9UUlVFOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlICdmJzoKLSAgICAgICAgaWYgKHBhcnNlQ29uc3RUb2tlbihz
dGFydCwgZW5kLCB0b2tlbkVuZCwgZmFsc2VTdHJpbmcpKQotICAgICAgICAgICAgcmV0dXJuIEJP
T0xfRkFMU0U7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgJ1snOgotICAgICAgICAqdG9rZW5F
bmQgPSBzdGFydCArIDE7Ci0gICAgICAgIHJldHVybiBBUlJBWV9CRUdJTjsKLSAgICBjYXNlICdd
JzoKLSAgICAgICAgKnRva2VuRW5kID0gc3RhcnQgKyAxOwotICAgICAgICByZXR1cm4gQVJSQVlf
RU5EOwotICAgIGNhc2UgJywnOgotICAgICAgICAqdG9rZW5FbmQgPSBzdGFydCArIDE7Ci0gICAg
ICAgIHJldHVybiBMSVNUX1NFUEFSQVRPUjsKLSAgICBjYXNlICd7JzoKLSAgICAgICAgKnRva2Vu
RW5kID0gc3RhcnQgKyAxOwotICAgICAgICByZXR1cm4gT0JKRUNUX0JFR0lOOwotICAgIGNhc2Ug
J30nOgotICAgICAgICAqdG9rZW5FbmQgPSBzdGFydCArIDE7Ci0gICAgICAgIHJldHVybiBPQkpF
Q1RfRU5EOwotICAgIGNhc2UgJzonOgotICAgICAgICAqdG9rZW5FbmQgPSBzdGFydCArIDE7Ci0g
ICAgICAgIHJldHVybiBPQkpFQ1RfUEFJUl9TRVBBUkFUT1I7Ci0gICAgY2FzZSAnMCc6Ci0gICAg
Y2FzZSAnMSc6Ci0gICAgY2FzZSAnMic6Ci0gICAgY2FzZSAnMyc6Ci0gICAgY2FzZSAnNCc6Ci0g
ICAgY2FzZSAnNSc6Ci0gICAgY2FzZSAnNic6Ci0gICAgY2FzZSAnNyc6Ci0gICAgY2FzZSAnOCc6
Ci0gICAgY2FzZSAnOSc6Ci0gICAgY2FzZSAnLSc6Ci0gICAgICAgIGlmIChwYXJzZU51bWJlclRv
a2VuKHN0YXJ0LCBlbmQsIHRva2VuRW5kKSkKLSAgICAgICAgICAgIHJldHVybiBOVU1CRVI7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgJyInOgotICAgICAgICBpZiAocGFyc2VTdHJpbmdUb2tl
bihzdGFydCArIDEsIGVuZCwgdG9rZW5FbmQpKQotICAgICAgICAgICAgcmV0dXJuIFNUUklORzsK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIElOVkFMSURfVE9LRU47Ci19Ci0K
LWlubGluZSBpbnQgaGV4VG9JbnQoVUNoYXIgYykKLXsKLSAgICBpZiAoJzAnIDw9IGMgJiYgYyA8
PSAnOScpCi0gICAgICAgIHJldHVybiBjIC0gJzAnOwotICAgIGlmICgnQScgPD0gYyAmJiBjIDw9
ICdGJykKLSAgICAgICAgcmV0dXJuIGMgLSAnQScgKyAxMDsKLSAgICBpZiAoJ2EnIDw9IGMgJiYg
YyA8PSAnZicpCi0gICAgICAgIHJldHVybiBjIC0gJ2EnICsgMTA7Ci0KLSAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotYm9vbCBkZWNvZGVTdHJpbmcoY29uc3Qg
VUNoYXIqIHN0YXJ0LCBjb25zdCBVQ2hhciogZW5kLCBTdHJpbmdCdWlsZGVyJiBvdXRwdXQpCi17
Ci0gICAgd2hpbGUgKHN0YXJ0IDwgZW5kKSB7Ci0gICAgICAgIFVDaGFyIGMgPSAqc3RhcnQrKzsK
LSAgICAgICAgaWYgKCdcXCcgIT0gYykgewotICAgICAgICAgICAgb3V0cHV0LmFwcGVuZChjKTsK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIGMgPSAqc3RhcnQrKzsK
LSAgICAgICAgc3dpdGNoIChjKSB7Ci0gICAgICAgIGNhc2UgJyInOgotICAgICAgICBjYXNlICcv
JzoKLSAgICAgICAgY2FzZSAnXFwnOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
J2InOgotICAgICAgICAgICAgYyA9ICdcYic7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSAnZic6Ci0gICAgICAgICAgICBjID0gJ1xmJzsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlICduJzoKLSAgICAgICAgICAgIGMgPSAnXG4nOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgJ3InOgotICAgICAgICAgICAgYyA9ICdccic7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSAndCc6Ci0gICAgICAgICAgICBjID0gJ1x0JzsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlICd2JzoKLSAgICAgICAgICAgIGMgPSAnXHYnOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgJ3gnOgotICAgICAgICAgICAgYyA9IChoZXhU
b0ludCgqc3RhcnQpIDw8IDQpICsKLSAgICAgICAgICAgICAgICBoZXhUb0ludCgqKHN0YXJ0ICsg
MSkpOwotICAgICAgICAgICAgc3RhcnQgKz0gMjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlICd1JzoKLSAgICAgICAgICAgIGMgPSAoaGV4VG9JbnQoKnN0YXJ0KSA8PCAxMikgKwot
ICAgICAgICAgICAgICAgIChoZXhUb0ludCgqKHN0YXJ0ICsgMSkpIDw8IDgpICsKLSAgICAgICAg
ICAgICAgICAoaGV4VG9JbnQoKihzdGFydCArIDIpKSA8PCA0KSArCi0gICAgICAgICAgICAgICAg
aGV4VG9JbnQoKihzdGFydCArIDMpKTsKLSAgICAgICAgICAgIHN0YXJ0ICs9IDQ7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgfQotICAgICAgICBvdXRwdXQuYXBwZW5kKGMpOwotICAgIH0KLQotICAgIHJldHVy
biB0cnVlOwotfQotCi1ib29sIGRlY29kZVN0cmluZyhjb25zdCBVQ2hhciogc3RhcnQsIGNvbnN0
IFVDaGFyKiBlbmQsIFN0cmluZyYgb3V0cHV0KQotewotICAgIGlmIChzdGFydCA9PSBlbmQpIHsK
LSAgICAgICAgb3V0cHV0ID0gZW1wdHlTdHJpbmcoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgfQotCi0gICAgaWYgKHN0YXJ0ID4gZW5kKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBTdHJpbmdCdWlsZGVyIGJ1ZmZlcjsKLSAgICBidWZmZXIucmVzZXJ2ZUNhcGFjaXR5KGVuZCAt
IHN0YXJ0KTsKLSAgICBpZiAoIWRlY29kZVN0cmluZyhzdGFydCwgZW5kLCBidWZmZXIpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBvdXRwdXQgPSBidWZmZXIudG9TdHJpbmcoKTsKLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gYnVpbGRWYWx1
ZShjb25zdCBVQ2hhciogc3RhcnQsIGNvbnN0IFVDaGFyKiBlbmQsIGNvbnN0IFVDaGFyKiogdmFs
dWVUb2tlbkVuZCwgaW50IGRlcHRoKQotewotICAgIGlmIChkZXB0aCA+IHN0YWNrTGltaXQpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiByZXN1
bHQ7Ci0gICAgY29uc3QgVUNoYXIqIHRva2VuU3RhcnQ7Ci0gICAgY29uc3QgVUNoYXIqIHRva2Vu
RW5kOwotICAgIFRva2VuIHRva2VuID0gcGFyc2VUb2tlbihzdGFydCwgZW5kLCAmdG9rZW5TdGFy
dCwgJnRva2VuRW5kKTsKLSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBJTlZBTElEX1RP
S0VOOgotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBjYXNlIE5VTExfVE9LRU46Ci0gICAg
ICAgIHJlc3VsdCA9IEluc3BlY3RvclZhbHVlOjpudWxsKCk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgQk9PTF9UUlVFOgotICAgICAgICByZXN1bHQgPSBJbnNwZWN0b3JCYXNpY1ZhbHVlOjpj
cmVhdGUodHJ1ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQk9PTF9GQUxTRToKLSAgICAg
ICAgcmVzdWx0ID0gSW5zcGVjdG9yQmFzaWNWYWx1ZTo6Y3JlYXRlKGZhbHNlKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBOVU1CRVI6IHsKLSAgICAgICAgYm9vbCBvazsKLSAgICAgICAgZG91
YmxlIHZhbHVlID0gY2hhcmFjdGVyc1RvRG91YmxlKHRva2VuU3RhcnQsIHRva2VuRW5kIC0gdG9r
ZW5TdGFydCwgJm9rKTsKLSAgICAgICAgaWYgKCFvaykKLSAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgICAgICByZXN1bHQgPSBJbnNwZWN0b3JCYXNpY1ZhbHVlOjpjcmVhdGUodmFsdWUp
OwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBTVFJJTkc6IHsKLSAgICAgICAgU3Ry
aW5nIHZhbHVlOwotICAgICAgICBib29sIG9rID0gZGVjb2RlU3RyaW5nKHRva2VuU3RhcnQgKyAx
LCB0b2tlbkVuZCAtIDEsIHZhbHVlKTsKLSAgICAgICAgaWYgKCFvaykKLSAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgICAgICByZXN1bHQgPSBJbnNwZWN0b3JTdHJpbmc6OmNyZWF0ZSh2
YWx1ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEFSUkFZX0JFR0lOOiB7Ci0g
ICAgICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJyYXkgPSBJbnNwZWN0b3JBcnJheTo6Y3Jl
YXRlKCk7Ci0gICAgICAgIHN0YXJ0ID0gdG9rZW5FbmQ7Ci0gICAgICAgIHRva2VuID0gcGFyc2VU
b2tlbihzdGFydCwgZW5kLCAmdG9rZW5TdGFydCwgJnRva2VuRW5kKTsKLSAgICAgICAgd2hpbGUg
KHRva2VuICE9IEFSUkFZX0VORCkgewotICAgICAgICAgICAgUmVmUHRyPEluc3BlY3RvclZhbHVl
PiBhcnJheU5vZGUgPSBidWlsZFZhbHVlKHN0YXJ0LCBlbmQsICZ0b2tlbkVuZCwgZGVwdGggKyAx
KTsKLSAgICAgICAgICAgIGlmICghYXJyYXlOb2RlKQotICAgICAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgICAgICAgICAgYXJyYXktPnB1c2hWYWx1ZShhcnJheU5vZGUpOwotCi0gICAg
ICAgICAgICAvLyBBZnRlciBhIGxpc3QgdmFsdWUsIHdlIGV4cGVjdCBhIGNvbW1hIG9yIHRoZSBl
bmQgb2YgdGhlIGxpc3QuCi0gICAgICAgICAgICBzdGFydCA9IHRva2VuRW5kOwotICAgICAgICAg
ICAgdG9rZW4gPSBwYXJzZVRva2VuKHN0YXJ0LCBlbmQsICZ0b2tlblN0YXJ0LCAmdG9rZW5FbmQp
OwotICAgICAgICAgICAgaWYgKHRva2VuID09IExJU1RfU0VQQVJBVE9SKSB7Ci0gICAgICAgICAg
ICAgICAgc3RhcnQgPSB0b2tlbkVuZDsKLSAgICAgICAgICAgICAgICB0b2tlbiA9IHBhcnNlVG9r
ZW4oc3RhcnQsIGVuZCwgJnRva2VuU3RhcnQsICZ0b2tlbkVuZCk7Ci0gICAgICAgICAgICAgICAg
aWYgKHRva2VuID09IEFSUkFZX0VORCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHRva2VuICE9IEFSUkFZX0VORCkgewotICAgICAg
ICAgICAgICAgIC8vIFVuZXhwZWN0ZWQgdmFsdWUgYWZ0ZXIgbGlzdCB2YWx1ZS4gIEJhaWwgb3V0
LgotICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgICAgIGlmICh0b2tlbiAhPSBBUlJBWV9FTkQpCi0gICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICAgICAgcmVzdWx0ID0gYXJyYXkucmVsZWFzZSgpOwotICAgICAgICBicmVh
azsKLSAgICB9Ci0gICAgY2FzZSBPQkpFQ1RfQkVHSU46IHsKLSAgICAgICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gb2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICAgICAg
c3RhcnQgPSB0b2tlbkVuZDsKLSAgICAgICAgdG9rZW4gPSBwYXJzZVRva2VuKHN0YXJ0LCBlbmQs
ICZ0b2tlblN0YXJ0LCAmdG9rZW5FbmQpOwotICAgICAgICB3aGlsZSAodG9rZW4gIT0gT0JKRUNU
X0VORCkgewotICAgICAgICAgICAgaWYgKHRva2VuICE9IFNUUklORykKLSAgICAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAgIFN0cmluZyBrZXk7Ci0gICAgICAgICAgICBp
ZiAoIWRlY29kZVN0cmluZyh0b2tlblN0YXJ0ICsgMSwgdG9rZW5FbmQgLSAxLCBrZXkpKQotICAg
ICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICAgICAgc3RhcnQgPSB0b2tlbkVu
ZDsKLQotICAgICAgICAgICAgdG9rZW4gPSBwYXJzZVRva2VuKHN0YXJ0LCBlbmQsICZ0b2tlblN0
YXJ0LCAmdG9rZW5FbmQpOwotICAgICAgICAgICAgaWYgKHRva2VuICE9IE9CSkVDVF9QQUlSX1NF
UEFSQVRPUikKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAgIHN0
YXJ0ID0gdG9rZW5FbmQ7Ci0KLSAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFs
dWUgPSBidWlsZFZhbHVlKHN0YXJ0LCBlbmQsICZ0b2tlbkVuZCwgZGVwdGggKyAxKTsKLSAgICAg
ICAgICAgIGlmICghdmFsdWUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
ICAgICAgICBvYmplY3QtPnNldFZhbHVlKGtleSwgdmFsdWUpOwotICAgICAgICAgICAgc3RhcnQg
PSB0b2tlbkVuZDsKLQotICAgICAgICAgICAgLy8gQWZ0ZXIgYSBrZXkvdmFsdWUgcGFpciwgd2Ug
ZXhwZWN0IGEgY29tbWEgb3IgdGhlIGVuZCBvZiB0aGUKLSAgICAgICAgICAgIC8vIG9iamVjdC4K
LSAgICAgICAgICAgIHRva2VuID0gcGFyc2VUb2tlbihzdGFydCwgZW5kLCAmdG9rZW5TdGFydCwg
JnRva2VuRW5kKTsKLSAgICAgICAgICAgIGlmICh0b2tlbiA9PSBMSVNUX1NFUEFSQVRPUikgewot
ICAgICAgICAgICAgICAgIHN0YXJ0ID0gdG9rZW5FbmQ7Ci0gICAgICAgICAgICAgICAgdG9rZW4g
PSBwYXJzZVRva2VuKHN0YXJ0LCBlbmQsICZ0b2tlblN0YXJ0LCAmdG9rZW5FbmQpOwotICAgICAg
ICAgICAgICAgICBpZiAodG9rZW4gPT0gT0JKRUNUX0VORCkKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHRva2VuICE9IE9CSkVDVF9F
TkQpIHsKLSAgICAgICAgICAgICAgICAvLyBVbmV4cGVjdGVkIHZhbHVlIGFmdGVyIGxhc3Qgb2Jq
ZWN0IHZhbHVlLiAgQmFpbCBvdXQuCi0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHRva2VuICE9IE9CSkVDVF9FTkQp
Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgcmVzdWx0ID0gb2JqZWN0LnJl
bGVhc2UoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgZGVmYXVsdDoKLSAgICAgICAg
Ly8gV2UgZ290IGEgdG9rZW4gdGhhdCdzIG5vdCBhIHZhbHVlLgotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICB9Ci0gICAgKnZhbHVlVG9rZW5FbmQgPSB0b2tlbkVuZDsKLSAgICByZXR1cm4g
cmVzdWx0LnJlbGVhc2UoKTsKLX0KLQotaW5saW5lIGJvb2wgZXNjYXBlQ2hhcihVQ2hhciBjLCBT
dHJpbmdCdWlsZGVyJiBkc3QpCi17Ci0gICAgc3dpdGNoIChjKSB7Ci0gICAgY2FzZSAnXGInOiBk
c3QuYXBwZW5kTGl0ZXJhbCgiXFxiIik7IGJyZWFrOwotICAgIGNhc2UgJ1xmJzogZHN0LmFwcGVu
ZExpdGVyYWwoIlxcZiIpOyBicmVhazsKLSAgICBjYXNlICdcbic6IGRzdC5hcHBlbmRMaXRlcmFs
KCJcXG4iKTsgYnJlYWs7Ci0gICAgY2FzZSAnXHInOiBkc3QuYXBwZW5kTGl0ZXJhbCgiXFxyIik7
IGJyZWFrOwotICAgIGNhc2UgJ1x0JzogZHN0LmFwcGVuZExpdGVyYWwoIlxcdCIpOyBicmVhazsK
LSAgICBjYXNlICdcXCc6IGRzdC5hcHBlbmRMaXRlcmFsKCJcXFxcIik7IGJyZWFrOwotICAgIGNh
c2UgJyInOiBkc3QuYXBwZW5kTGl0ZXJhbCgiXFxcIiIpOyBicmVhazsKLSAgICBkZWZhdWx0Ogot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi1pbmxp
bmUgdm9pZCBkb3VibGVRdW90ZVN0cmluZyhjb25zdCBTdHJpbmcmIHN0ciwgU3RyaW5nQnVpbGRl
ciYgZHN0KQotewotICAgIGRzdC5hcHBlbmQoJyInKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgc3RyLmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgVUNoYXIgYyA9IHN0cltpXTsKLSAg
ICAgICAgaWYgKCFlc2NhcGVDaGFyKGMsIGRzdCkpIHsKLSAgICAgICAgICAgIGlmIChjIDwgMzIg
fHwgYyA+IDEyNiB8fCBjID09ICc8JyB8fCBjID09ICc+JykgewotICAgICAgICAgICAgICAgIC8v
IDEuIEVzY2FwaW5nIDwsID4gdG8gcHJldmVudCBzY3JpcHQgZXhlY3V0aW9uLgotICAgICAgICAg
ICAgICAgIC8vIDIuIFRlY2huaWNhbGx5LCB3ZSBjb3VsZCBhbHNvIHBhc3MgdGhyb3VnaCBjID4g
MTI2IGFzIFVURjgsIGJ1dCB0aGlzCi0gICAgICAgICAgICAgICAgLy8gICAgaXMgYWxzbyBvcHRp
b25hbC4gIEl0IHdvdWxkIGFsc28gYmUgYSBwYWluIHRvIGltcGxlbWVudCBoZXJlLgotICAgICAg
ICAgICAgICAgIGRzdC5hcHBlbmQoU3RyaW5nOjpmb3JtYXQoIlxcdSUwNFgiLCBjKSk7Ci0gICAg
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBkc3QuYXBwZW5kKGMpOwotICAgICAgICB9
Ci0gICAgfQotICAgIGRzdC5hcHBlbmQoJyInKTsKLX0KLQotfSAvLyBhbm9ueW1vdXMgbmFtZXNw
YWNlCi0KLWJvb2wgSW5zcGVjdG9yVmFsdWU6OmFzQm9vbGVhbihib29sJikgY29uc3QKLXsKLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgSW5zcGVjdG9yVmFsdWU6OmFzRG91YmxlKGRvdWJs
ZSYpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEluc3BlY3RvclZhbHVl
Ojphc0RvdWJsZShmbG9hdCYpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29s
IEluc3BlY3RvclZhbHVlOjphc0ludGVnZXIoaW50JikgY29uc3QKLXsKLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLWJvb2wgSW5zcGVjdG9yVmFsdWU6OmFzSW50ZWdlcih1bnNpZ25lZCYpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEluc3BlY3RvclZhbHVlOjphc0ludGVn
ZXIobG9uZyYpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEluc3BlY3Rv
clZhbHVlOjphc0ludGVnZXIobG9uZyBsb25nJikgY29uc3QKLXsKLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KLWJvb2wgSW5zcGVjdG9yVmFsdWU6OmFzSW50ZWdlcih1bnNpZ25lZCBsb25nJikgY29u
c3QKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgSW5zcGVjdG9yVmFsdWU6OmFzSW50
ZWdlcih1bnNpZ25lZCBsb25nIGxvbmcmKSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotYm9vbCBJbnNwZWN0b3JWYWx1ZTo6YXNTdHJpbmcoU3RyaW5nJikgY29uc3QKLXsKLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgSW5zcGVjdG9yVmFsdWU6OmFzVmFsdWUoUmVmUHRyPElu
c3BlY3RvclZhbHVlPiYgb3V0cHV0KQotewotICAgIG91dHB1dCA9IHRoaXM7Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLWJvb2wgSW5zcGVjdG9yVmFsdWU6OmFzT2JqZWN0KFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+JikKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgSW5zcGVjdG9yVmFs
dWU6OmFzQXJyYXkoUmVmUHRyPEluc3BlY3RvckFycmF5PiYpCi17Ci0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi1ib29sIEluc3BlY3RvclZhbHVlOjpwYXJzZUpTT04oY29uc3QgU3RyaW5nJiBqc29u
SW5wdXQsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4mIG91dHB1dCkKLXsKLSAgICAvLyBGSVhNRTog
VGhpcyB3aG9sZSBmaWxlIHNob3VsZCBqdXN0IHVzZSBTdHJpbmdWaWV3IGluc3RlYWQgb2YgVUNo
YXIvbGVuZ3RoIGFuZCBhdm9pZCB1cGNvbnZlcnRpbmcuCi0gICAgYXV0byBjaGFyYWN0ZXJzID0g
U3RyaW5nVmlldyhqc29uSW5wdXQpLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwotICAgIGNvbnN0
IFVDaGFyKiBzdGFydCA9IGNoYXJhY3RlcnM7Ci0gICAgY29uc3QgVUNoYXIqIGVuZCA9IHN0YXJ0
ICsganNvbklucHV0Lmxlbmd0aCgpOwotICAgIGNvbnN0IFVDaGFyKiB0b2tlbkVuZDsKLSAgICBS
ZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHJlc3VsdCA9IGJ1aWxkVmFsdWUoc3RhcnQsIGVuZCwgJnRv
a2VuRW5kLCAwKTsKLSAgICBpZiAoIXJlc3VsdCB8fCB0b2tlbkVuZCAhPSBlbmQpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIG91dHB1dCA9IHJlc3VsdC5yZWxlYXNlKCk7Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLVN0cmluZyBJbnNwZWN0b3JWYWx1ZTo6dG9KU09OU3RyaW5nKCkgY29u
c3QKLXsKLSAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKLSAgICByZXN1bHQucmVzZXJ2ZUNhcGFj
aXR5KDUxMik7Ci0gICAgd3JpdGVKU09OKHJlc3VsdCk7Ci0gICAgcmV0dXJuIHJlc3VsdC50b1N0
cmluZygpOwotfQotCi12b2lkIEluc3BlY3RvclZhbHVlOjp3cml0ZUpTT04oU3RyaW5nQnVpbGRl
ciYgb3V0cHV0KSBjb25zdAotewotICAgIEFTU0VSVChtX3R5cGUgPT0gVHlwZTo6TnVsbCk7Ci0K
LSAgICBvdXRwdXQuYXBwZW5kTGl0ZXJhbCgibnVsbCIpOwotfQotCi1ib29sIEluc3BlY3RvckJh
c2ljVmFsdWU6OmFzQm9vbGVhbihib29sJiBvdXRwdXQpIGNvbnN0Ci17Ci0gICAgaWYgKHR5cGUo
KSAhPSBUeXBlOjpCb29sZWFuKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBvdXRwdXQg
PSBtX2Jvb2xlYW5WYWx1ZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBJbnNwZWN0b3JC
YXNpY1ZhbHVlOjphc0RvdWJsZShkb3VibGUmIG91dHB1dCkgY29uc3QKLXsKLSAgICBpZiAodHlw
ZSgpICE9IFR5cGU6OkRvdWJsZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgb3V0cHV0
ID0gbV9kb3VibGVWYWx1ZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBJbnNwZWN0b3JC
YXNpY1ZhbHVlOjphc0RvdWJsZShmbG9hdCYgb3V0cHV0KSBjb25zdAotewotICAgIGlmICh0eXBl
KCkgIT0gVHlwZTo6RG91YmxlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBvdXRwdXQg
PSBzdGF0aWNfY2FzdDxmbG9hdD4obV9kb3VibGVWYWx1ZSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLWJvb2wgSW5zcGVjdG9yQmFzaWNWYWx1ZTo6YXNJbnRlZ2VyKGludCYgb3V0cHV0KSBjb25z
dAotewotICAgIGlmICh0eXBlKCkgIT0gVHlwZTo6SW50ZWdlciAmJiB0eXBlKCkgIT0gVHlwZTo6
RG91YmxlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBvdXRwdXQgPSBzdGF0aWNfY2Fz
dDxpbnQ+KG1fZG91YmxlVmFsdWUpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEluc3Bl
Y3RvckJhc2ljVmFsdWU6OmFzSW50ZWdlcih1bnNpZ25lZCYgb3V0cHV0KSBjb25zdAotewotICAg
IGlmICh0eXBlKCkgIT0gVHlwZTo6SW50ZWdlciAmJiB0eXBlKCkgIT0gVHlwZTo6RG91YmxlKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBvdXRwdXQgPSBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4obV9kb3VibGVWYWx1ZSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgSW5zcGVjdG9y
QmFzaWNWYWx1ZTo6YXNJbnRlZ2VyKGxvbmcmIG91dHB1dCkgY29uc3QKLXsKLSAgICBpZiAodHlw
ZSgpICE9IFR5cGU6OkludGVnZXIgJiYgdHlwZSgpICE9IFR5cGU6OkRvdWJsZSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgb3V0cHV0ID0gc3RhdGljX2Nhc3Q8bG9uZz4obV9kb3VibGVW
YWx1ZSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgSW5zcGVjdG9yQmFzaWNWYWx1ZTo6
YXNJbnRlZ2VyKGxvbmcgbG9uZyYgb3V0cHV0KSBjb25zdAotewotICAgIGlmICh0eXBlKCkgIT0g
VHlwZTo6SW50ZWdlciAmJiB0eXBlKCkgIT0gVHlwZTo6RG91YmxlKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBvdXRwdXQgPSBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KG1fZG91YmxlVmFs
dWUpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEluc3BlY3RvckJhc2ljVmFsdWU6OmFz
SW50ZWdlcih1bnNpZ25lZCBsb25nJiBvdXRwdXQpIGNvbnN0Ci17Ci0gICAgaWYgKHR5cGUoKSAh
PSBUeXBlOjpJbnRlZ2VyICYmIHR5cGUoKSAhPSBUeXBlOjpEb3VibGUpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIG91dHB1dCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KG1fZG91
YmxlVmFsdWUpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEluc3BlY3RvckJhc2ljVmFs
dWU6OmFzSW50ZWdlcih1bnNpZ25lZCBsb25nIGxvbmcmIG91dHB1dCkgY29uc3QKLXsKLSAgICBp
ZiAodHlwZSgpICE9IFR5cGU6OkludGVnZXIgJiYgdHlwZSgpICE9IFR5cGU6OkRvdWJsZSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgb3V0cHV0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQg
bG9uZyBsb25nPihtX2RvdWJsZVZhbHVlKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBJ
bnNwZWN0b3JCYXNpY1ZhbHVlOjp3cml0ZUpTT04oU3RyaW5nQnVpbGRlciYgb3V0cHV0KSBjb25z
dAotewotICAgIEFTU0VSVCh0eXBlKCkgPT0gVHlwZTo6Qm9vbGVhbiB8fCB0eXBlKCkgPT0gVHlw
ZTo6RG91YmxlIHx8IHR5cGUoKSA9PSBUeXBlOjpJbnRlZ2VyKTsKLQotICAgIGlmICh0eXBlKCkg
PT0gVHlwZTo6Qm9vbGVhbikgewotICAgICAgICBpZiAobV9ib29sZWFuVmFsdWUpCi0gICAgICAg
ICAgICBvdXRwdXQuYXBwZW5kTGl0ZXJhbCgidHJ1ZSIpOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBvdXRwdXQuYXBwZW5kTGl0ZXJhbCgiZmFsc2UiKTsKLSAgICB9IGVsc2UgaWYgKHR5cGUo
KSA9PSBUeXBlOjpEb3VibGUgfHwgdHlwZSgpID09IFR5cGU6OkludGVnZXIpIHsKLSAgICAgICAg
TnVtYmVyVG9MU3RyaW5nQnVmZmVyIGJ1ZmZlcjsKLSAgICAgICAgaWYgKCFzdGQ6OmlzZmluaXRl
KG1fZG91YmxlVmFsdWUpKSB7Ci0gICAgICAgICAgICBvdXRwdXQuYXBwZW5kTGl0ZXJhbCgibnVs
bCIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIERlY2ltYWxOdW1i
ZXIgZGVjaW1hbCA9IG1fZG91YmxlVmFsdWU7Ci0gICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IDA7
Ci0gICAgICAgIGlmIChkZWNpbWFsLmJ1ZmZlckxlbmd0aEZvclN0cmluZ0RlY2ltYWwoKSA+IFdU
Rjo6TnVtYmVyVG9TdHJpbmdCdWZmZXJMZW5ndGgpIHsKLSAgICAgICAgICAgIC8vIE5vdCBlbm91
Z2ggcm9vbSBmb3IgZGVjaW1hbC4gVXNlIGV4cG9uZW50aWFsIGZvcm1hdC4KLSAgICAgICAgICAg
IGlmIChkZWNpbWFsLmJ1ZmZlckxlbmd0aEZvclN0cmluZ0V4cG9uZW50aWFsKCkgPiBXVEY6Ok51
bWJlclRvU3RyaW5nQnVmZmVyTGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgLy8gRmFsbGJhY2sg
Zm9yIGFuIGFibm9ybWFsIGNhc2UgaWYgaXQncyB0b28gbGl0dGxlIGV2ZW4gZm9yIGV4cG9uZW50
aWFsLgotICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmRMaXRlcmFsKCJOYU4iKTsKLSAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBsZW5ndGggPSBk
ZWNpbWFsLnRvU3RyaW5nRXhwb25lbnRpYWwoYnVmZmVyLCBXVEY6Ok51bWJlclRvU3RyaW5nQnVm
ZmVyTGVuZ3RoKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBsZW5ndGggPSBkZWNpbWFs
LnRvU3RyaW5nRGVjaW1hbChidWZmZXIsIFdURjo6TnVtYmVyVG9TdHJpbmdCdWZmZXJMZW5ndGgp
OwotICAgICAgICBvdXRwdXQuYXBwZW5kKGJ1ZmZlciwgbGVuZ3RoKTsKLSAgICB9Ci19Ci0KLWJv
b2wgSW5zcGVjdG9yU3RyaW5nOjphc1N0cmluZyhTdHJpbmcmIG91dHB1dCkgY29uc3QKLXsKLSAg
ICBvdXRwdXQgPSBtX3N0cmluZ1ZhbHVlOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIElu
c3BlY3RvclN0cmluZzo6d3JpdGVKU09OKFN0cmluZ0J1aWxkZXImIG91dHB1dCkgY29uc3QKLXsK
LSAgICBBU1NFUlQodHlwZSgpID09IFR5cGU6OlN0cmluZyk7Ci0gICAgZG91YmxlUXVvdGVTdHJp
bmcobV9zdHJpbmdWYWx1ZSwgb3V0cHV0KTsKLX0KLQotSW5zcGVjdG9yT2JqZWN0QmFzZTo6fklu
c3BlY3Rvck9iamVjdEJhc2UoKQotewotfQotCi1ib29sIEluc3BlY3Rvck9iamVjdEJhc2U6OmFz
T2JqZWN0KFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBvdXRwdXQpCi17Ci0gICAgQ09NUElMRV9B
U1NFUlQoc2l6ZW9mKEluc3BlY3Rvck9iamVjdCkgPT0gc2l6ZW9mKEluc3BlY3Rvck9iamVjdEJh
c2UpLCBjYW5ub3RfY2FzdCk7Ci0KLSAgICBvdXRwdXQgPSBzdGF0aWNfY2FzdDxJbnNwZWN0b3JP
YmplY3QqPih0aGlzKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotSW5zcGVjdG9yT2JqZWN0KiBJ
bnNwZWN0b3JPYmplY3RCYXNlOjpvcGVuQWNjZXNzb3JzKCkKLXsKLSAgICBDT01QSUxFX0FTU0VS
VChzaXplb2YoSW5zcGVjdG9yT2JqZWN0KSA9PSBzaXplb2YoSW5zcGVjdG9yT2JqZWN0QmFzZSks
IGNhbm5vdF9jYXN0KTsKLQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxJbnNwZWN0b3JPYmplY3Qq
Pih0aGlzKTsKLX0KLQotYm9vbCBJbnNwZWN0b3JPYmplY3RCYXNlOjpnZXRCb29sZWFuKGNvbnN0
IFN0cmluZyYgbmFtZSwgYm9vbCYgb3V0cHV0KSBjb25zdAotewotICAgIFJlZlB0cjxJbnNwZWN0
b3JWYWx1ZT4gdmFsdWUgPSBnZXQobmFtZSk7Ci0gICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHZhbHVlLT5hc0Jvb2xlYW4ob3V0cHV0KTsKLX0KLQot
Ym9vbCBJbnNwZWN0b3JPYmplY3RCYXNlOjpnZXRTdHJpbmcoY29uc3QgU3RyaW5nJiBuYW1lLCBT
dHJpbmcmIG91dHB1dCkgY29uc3QKLXsKLSAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVl
ID0gZ2V0KG5hbWUpOwotICAgIGlmICghdmFsdWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICByZXR1cm4gdmFsdWUtPmFzU3RyaW5nKG91dHB1dCk7Ci19Ci0KLVBhc3NSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBJbnNwZWN0b3JPYmplY3RCYXNlOjpnZXRPYmplY3QoY29uc3QgU3RyaW5nJiBu
YW1lKSBjb25zdAotewotICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlID0gZ2V0
KG5hbWUpOwotICAgIGlmICghdmFsdWUpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0OwotICAgIHZhbHVlLT5hc09iamVjdChyZXN1
bHQpOwotICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwotfQotCi1QYXNzUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiBJbnNwZWN0b3JPYmplY3RCYXNlOjpnZXRBcnJheShjb25zdCBTdHJpbmcmIG5h
bWUpIGNvbnN0Ci17Ci0gICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUgPSBnZXQo
bmFtZSk7Ci0gICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBS
ZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHJlc3VsdDsKLSAgICB2YWx1ZS0+YXNBcnJheShyZXN1bHQp
OwotICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwotfQotCi1QYXNzUmVmUHRyPEluc3BlY3Rv
clZhbHVlPiBJbnNwZWN0b3JPYmplY3RCYXNlOjpnZXQoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25z
dAotewotICAgIERpY3Rpb25hcnk6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9kYXRhLmZpbmQobmFt
ZSk7Ci0gICAgaWYgKGl0ID09IG1fZGF0YS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgcmV0dXJuIGl0LT52YWx1ZTsKLX0KLQotdm9pZCBJbnNwZWN0b3JPYmplY3RCYXNlOjpy
ZW1vdmUoY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIG1fZGF0YS5yZW1vdmUobmFtZSk7Ci0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX29yZGVyLnNpemUoKTsgKytpKSB7Ci0gICAgICAg
IGlmIChtX29yZGVyW2ldID09IG5hbWUpIHsKLSAgICAgICAgICAgIG1fb3JkZXIucmVtb3ZlKGkp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW5zcGVj
dG9yT2JqZWN0QmFzZTo6d3JpdGVKU09OKFN0cmluZ0J1aWxkZXImIG91dHB1dCkgY29uc3QKLXsK
LSAgICBvdXRwdXQuYXBwZW5kKCd7Jyk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX29y
ZGVyLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIERpY3Rpb25hcnk6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbV9kYXRhLmZpbmQobV9vcmRlcltpXSk7Ci0gICAgICAgIEFTU0VSVChpdCAhPSBtX2RhdGEu
ZW5kKCkpOwotICAgICAgICBpZiAoaSkKLSAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoJywnKTsK
LSAgICAgICAgZG91YmxlUXVvdGVTdHJpbmcoaXQtPmtleSwgb3V0cHV0KTsKLSAgICAgICAgb3V0
cHV0LmFwcGVuZCgnOicpOwotICAgICAgICBpdC0+dmFsdWUtPndyaXRlSlNPTihvdXRwdXQpOwot
ICAgIH0KLSAgICBvdXRwdXQuYXBwZW5kKCd9Jyk7Ci19Ci0KLUluc3BlY3Rvck9iamVjdEJhc2U6
Okluc3BlY3Rvck9iamVjdEJhc2UoKQotICAgIDogSW5zcGVjdG9yVmFsdWUoVHlwZTo6T2JqZWN0
KQotICAgICwgbV9kYXRhKCkKLSAgICAsIG1fb3JkZXIoKQotewotfQotCi1JbnNwZWN0b3JBcnJh
eUJhc2U6On5JbnNwZWN0b3JBcnJheUJhc2UoKQotewotfQotCi1ib29sIEluc3BlY3RvckFycmF5
QmFzZTo6YXNBcnJheShSZWZQdHI8SW5zcGVjdG9yQXJyYXk+JiBvdXRwdXQpCi17Ci0gICAgQ09N
UElMRV9BU1NFUlQoc2l6ZW9mKEluc3BlY3RvckFycmF5QmFzZSkgPT0gc2l6ZW9mKEluc3BlY3Rv
ckFycmF5KSwgY2Fubm90X2Nhc3QpOwotICAgIG91dHB1dCA9IHN0YXRpY19jYXN0PEluc3BlY3Rv
ckFycmF5Kj4odGhpcyk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQXJy
YXlCYXNlOjp3cml0ZUpTT04oU3RyaW5nQnVpbGRlciYgb3V0cHV0KSBjb25zdAotewotICAgIG91
dHB1dC5hcHBlbmQoJ1snKTsKLSAgICBmb3IgKFZlY3RvcjxSZWZQdHI8SW5zcGVjdG9yVmFsdWU+
Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2RhdGEuYmVnaW4oKTsgaXQgIT0gbV9kYXRhLmVuZCgp
OyArK2l0KSB7Ci0gICAgICAgIGlmIChpdCAhPSBtX2RhdGEuYmVnaW4oKSkKLSAgICAgICAgICAg
IG91dHB1dC5hcHBlbmQoJywnKTsKLSAgICAgICAgKCppdCktPndyaXRlSlNPTihvdXRwdXQpOwot
ICAgIH0KLSAgICBvdXRwdXQuYXBwZW5kKCddJyk7Ci19Ci0KLUluc3BlY3RvckFycmF5QmFzZTo6
SW5zcGVjdG9yQXJyYXlCYXNlKCkKLSAgICA6IEluc3BlY3RvclZhbHVlKFR5cGU6OkFycmF5KQot
ICAgICwgbV9kYXRhKCkKLXsKLX0KLQotUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gSW5zcGVj
dG9yQXJyYXlCYXNlOjpnZXQoc2l6ZV90IGluZGV4KQotewotICAgIEFTU0VSVF9XSVRIX1NFQ1VS
SVRZX0lNUExJQ0FUSU9OKGluZGV4IDwgbV9kYXRhLnNpemUoKSk7Ci0gICAgcmV0dXJuIG1fZGF0
YVtpbmRleF07Ci19Ci0KLVBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JPYmplY3Qp
OwotfQotCi1QYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBJbnNwZWN0b3JBcnJheTo6Y3JlYXRl
KCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluc3BlY3RvckFycmF5KTsKLX0KLQotUGFz
c1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gSW5zcGVjdG9yVmFsdWU6Om51bGwoKQotewotICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgSW5zcGVjdG9yVmFsdWUpOwotfQotCi1QYXNzUmVmUHRyPEluc3Bl
Y3RvclN0cmluZz4gSW5zcGVjdG9yU3RyaW5nOjpjcmVhdGUoY29uc3QgU3RyaW5nJiB2YWx1ZSkK
LXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluc3BlY3RvclN0cmluZyh2YWx1ZSkpOwotfQot
Ci1QYXNzUmVmUHRyPEluc3BlY3RvclN0cmluZz4gSW5zcGVjdG9yU3RyaW5nOjpjcmVhdGUoY29u
c3QgY2hhciogdmFsdWUpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JTdHJp
bmcodmFsdWUpKTsKLX0KLQotUGFzc1JlZlB0cjxJbnNwZWN0b3JCYXNpY1ZhbHVlPiBJbnNwZWN0
b3JCYXNpY1ZhbHVlOjpjcmVhdGUoYm9vbCB2YWx1ZSkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IEluc3BlY3RvckJhc2ljVmFsdWUodmFsdWUpKTsKLX0KLQotUGFzc1JlZlB0cjxJbnNwZWN0
b3JCYXNpY1ZhbHVlPiBJbnNwZWN0b3JCYXNpY1ZhbHVlOjpjcmVhdGUoaW50IHZhbHVlKQotewot
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5zcGVjdG9yQmFzaWNWYWx1ZSh2YWx1ZSkpOwotfQot
Ci1QYXNzUmVmUHRyPEluc3BlY3RvckJhc2ljVmFsdWU+IEluc3BlY3RvckJhc2ljVmFsdWU6OmNy
ZWF0ZShkb3VibGUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JC
YXNpY1ZhbHVlKHZhbHVlKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0MzVmYTUyOGI4NDI0ZmQwZDIwMjM5OGFiODllMWNk
ZWJlMmI5NjIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaAorKysgL2Rl
di9udWxsCkBAIC0xLDQwOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0g
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAot
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgSW5zcGVjdG9yVmFs
dWVzX2gKLSNkZWZpbmUgSW5zcGVjdG9yVmFsdWVzX2gKLQotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJk
Lmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5o
PgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNo
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0
b3IgewotCi1jbGFzcyBJbnNwZWN0b3JBcnJheTsKLWNsYXNzIEluc3BlY3RvckFycmF5QmFzZTsK
LWNsYXNzIEluc3BlY3Rvck9iamVjdDsKLWNsYXNzIEluc3BlY3Rvck9iamVjdEJhc2U7Ci0KLWNs
YXNzIEpTX0VYUE9SVF9QUklWQVRFIEluc3BlY3RvclZhbHVlIDogcHVibGljIFJlZkNvdW50ZWQ8
SW5zcGVjdG9yVmFsdWU+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3QgaW50IG1heERlcHRo
ID0gMTAwMDsKLQotICAgIEluc3BlY3RvclZhbHVlKCkKLSAgICAgICAgOiBtX3R5cGUoVHlwZTo6
TnVsbCkgeyB9Ci0gICAgdmlydHVhbCB+SW5zcGVjdG9yVmFsdWUoKSB7IH0KLQotICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBudWxsKCk7Ci0KLSAgICBlbnVtIGNsYXNzIFR5
cGUgewotICAgICAgICBOdWxsID0gMCwKLSAgICAgICAgQm9vbGVhbiwKLSAgICAgICAgRG91Ymxl
LAotICAgICAgICBJbnRlZ2VyLAotICAgICAgICBTdHJpbmcsCi0gICAgICAgIE9iamVjdCwKLSAg
ICAgICAgQXJyYXkKLSAgICB9OwotCi0gICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90
eXBlOyB9Ci0KLSAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA9PSBUeXBl
OjpOdWxsOyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgYXNCb29sZWFuKGJvb2wmKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIGJvb2wgYXNJbnRlZ2VyKGludCYpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBh
c0ludGVnZXIodW5zaWduZWQmKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgYXNJbnRlZ2VyKGxv
bmcmKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgYXNJbnRlZ2VyKGxvbmcgbG9uZyYpIGNvbnN0
OwotICAgIHZpcnR1YWwgYm9vbCBhc0ludGVnZXIodW5zaWduZWQgbG9uZyYpIGNvbnN0OwotICAg
IHZpcnR1YWwgYm9vbCBhc0ludGVnZXIodW5zaWduZWQgbG9uZyBsb25nJikgY29uc3Q7Ci0gICAg
dmlydHVhbCBib29sIGFzRG91YmxlKGRvdWJsZSYpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBh
c0RvdWJsZShmbG9hdCYpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBhc1N0cmluZyhTdHJpbmcm
KSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgYXNWYWx1ZShSZWZQdHI8SW5zcGVjdG9yVmFsdWU+
Jik7Ci0gICAgdmlydHVhbCBib29sIGFzT2JqZWN0KFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+Jik7
Ci0gICAgdmlydHVhbCBib29sIGFzQXJyYXkoUmVmUHRyPEluc3BlY3RvckFycmF5PiYpOwotCi0g
ICAgc3RhdGljIGJvb2wgcGFyc2VKU09OKGNvbnN0IFN0cmluZyYganNvbklucHV0LCBSZWZQdHI8
SW5zcGVjdG9yVmFsdWU+JiBvdXRwdXQpOwotCi0gICAgU3RyaW5nIHRvSlNPTlN0cmluZygpIGNv
bnN0OwotICAgIHZpcnR1YWwgdm9pZCB3cml0ZUpTT04oU3RyaW5nQnVpbGRlciYgb3V0cHV0KSBj
b25zdDsKLQotcHJvdGVjdGVkOgotICAgIGV4cGxpY2l0IEluc3BlY3RvclZhbHVlKFR5cGUgdHlw
ZSkgOiBtX3R5cGUodHlwZSkgeyB9Ci0KLXByaXZhdGU6Ci0gICAgVHlwZSBtX3R5cGU7Ci19Owot
Ci1jbGFzcyBKU19FWFBPUlRfUFJJVkFURSBJbnNwZWN0b3JCYXNpY1ZhbHVlIDogcHVibGljIElu
c3BlY3RvclZhbHVlIHsKLXB1YmxpYzoKLQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rv
ckJhc2ljVmFsdWU+IGNyZWF0ZShib29sKTsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0
b3JCYXNpY1ZhbHVlPiBjcmVhdGUoaW50KTsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0
b3JCYXNpY1ZhbHVlPiBjcmVhdGUoZG91YmxlKTsKLQotICAgIHZpcnR1YWwgYm9vbCBhc0Jvb2xl
YW4oYm9vbCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIC8vIE51bWJlcnMgZnJvbSB0aGUgZnJvbnRl
bmQgYXJlIGFsd2F5cyBwYXJzZWQgYXMgZG91Ymxlcywgc28gd2UgYWxsb3cKLSAgICAvLyBjbGll
bnRzIHRvIGNvbnZlcnQgdG8gaW50ZWdyYWwgdmFsdWVzIHdpdGggdGhpcyBmdW5jdGlvbi4KLSAg
ICB2aXJ0dWFsIGJvb2wgYXNJbnRlZ2VyKGludCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1
YWwgYm9vbCBhc0ludGVnZXIodW5zaWduZWQmKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFs
IGJvb2wgYXNJbnRlZ2VyKGxvbmcmKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wg
YXNJbnRlZ2VyKGxvbmcgbG9uZyYpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBh
c0ludGVnZXIodW5zaWduZWQgbG9uZyYpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9v
bCBhc0ludGVnZXIodW5zaWduZWQgbG9uZyBsb25nJikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmly
dHVhbCBib29sIGFzRG91YmxlKGRvdWJsZSYpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwg
Ym9vbCBhc0RvdWJsZShmbG9hdCYpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCB2b2lk
IHdyaXRlSlNPTihTdHJpbmdCdWlsZGVyJiBvdXRwdXQpIGNvbnN0IG92ZXJyaWRlOwotCi1wcml2
YXRlOgotICAgIGV4cGxpY2l0IEluc3BlY3RvckJhc2ljVmFsdWUoYm9vbCB2YWx1ZSkKLSAgICAg
ICAgOiBJbnNwZWN0b3JWYWx1ZShUeXBlOjpCb29sZWFuKQotICAgICAgICAsIG1fYm9vbGVhblZh
bHVlKHZhbHVlKSB7IH0KLQotICAgIGV4cGxpY2l0IEluc3BlY3RvckJhc2ljVmFsdWUoaW50IHZh
bHVlKQotICAgICAgICA6IEluc3BlY3RvclZhbHVlKFR5cGU6OkludGVnZXIpCi0gICAgICAgICwg
bV9kb3VibGVWYWx1ZShzdGF0aWNfY2FzdDxkb3VibGU+KHZhbHVlKSkgeyB9Ci0KLSAgICBleHBs
aWNpdCBJbnNwZWN0b3JCYXNpY1ZhbHVlKGRvdWJsZSB2YWx1ZSkKLSAgICAgICAgOiBJbnNwZWN0
b3JWYWx1ZShUeXBlOjpEb3VibGUpCi0gICAgICAgICwgbV9kb3VibGVWYWx1ZSh2YWx1ZSkgeyB9
Ci0KLSAgICB1bmlvbiB7Ci0gICAgICAgIGJvb2wgbV9ib29sZWFuVmFsdWU7Ci0gICAgICAgIGRv
dWJsZSBtX2RvdWJsZVZhbHVlOwotICAgIH07Ci19OwotCi1jbGFzcyBKU19FWFBPUlRfUFJJVkFU
RSBJbnNwZWN0b3JTdHJpbmcgOiBwdWJsaWMgSW5zcGVjdG9yVmFsdWUgewotcHVibGljOgotICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvclN0cmluZz4gY3JlYXRlKGNvbnN0IFN0cmluZyYp
OwotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvclN0cmluZz4gY3JlYXRlKGNvbnN0IGNo
YXIqKTsKLQotICAgIHZpcnR1YWwgYm9vbCBhc1N0cmluZyhTdHJpbmcmIG91dHB1dCkgY29uc3Qg
b3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgd3JpdGVKU09OKFN0cmluZ0J1aWxkZXImIG91
dHB1dCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgSW5zcGVjdG9y
U3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgICAgIDogSW5zcGVjdG9yVmFsdWUoVHlw
ZTo6U3RyaW5nKQotICAgICAgICAsIG1fc3RyaW5nVmFsdWUodmFsdWUpIHsgfQotCi0gICAgZXhw
bGljaXQgSW5zcGVjdG9yU3RyaW5nKGNvbnN0IGNoYXIqIHZhbHVlKQotICAgICAgICA6IEluc3Bl
Y3RvclZhbHVlKFR5cGU6OlN0cmluZykKLSAgICAgICAgLCBtX3N0cmluZ1ZhbHVlKHZhbHVlKSB7
IH0KLQotICAgIFN0cmluZyBtX3N0cmluZ1ZhbHVlOwotfTsKLQotY2xhc3MgSlNfRVhQT1JUX1BS
SVZBVEUgSW5zcGVjdG9yT2JqZWN0QmFzZSA6IHB1YmxpYyBJbnNwZWN0b3JWYWx1ZSB7Ci1wcml2
YXRlOgotICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4+
IERpY3Rpb25hcnk7Ci0KLXB1YmxpYzoKLSAgICB0eXBlZGVmIERpY3Rpb25hcnk6Oml0ZXJhdG9y
IGl0ZXJhdG9yOwotICAgIHR5cGVkZWYgRGljdGlvbmFyeTo6Y29uc3RfaXRlcmF0b3IgY29uc3Rf
aXRlcmF0b3I7Ci0KLSAgICBJbnNwZWN0b3JPYmplY3QqIG9wZW5BY2Nlc3NvcnMoKTsKLQotcHJv
dGVjdGVkOgotICAgIHZpcnR1YWwgfkluc3BlY3Rvck9iamVjdEJhc2UoKTsKLQotICAgIHZpcnR1
YWwgYm9vbCBhc09iamVjdChSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgb3V0cHV0KSBvdmVycmlk
ZTsKLQotICAgIC8vIEZJWE1FOiB1c2UgdGVtcGxhdGVzIHRvIHJlZHVjZSB0aGUgYW1vdW50IG9m
IGR1cGxpY2F0ZWQgc2V0KigpIG1ldGhvZHMuCi0gICAgdm9pZCBzZXRCb29sZWFuKGNvbnN0IFN0
cmluZyYgbmFtZSwgYm9vbCk7Ci0gICAgdm9pZCBzZXRJbnRlZ2VyKGNvbnN0IFN0cmluZyYgbmFt
ZSwgaW50KTsKLSAgICB2b2lkIHNldERvdWJsZShjb25zdCBTdHJpbmcmIG5hbWUsIGRvdWJsZSk7
Ci0gICAgdm9pZCBzZXRTdHJpbmcoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmKTsK
LSAgICB2b2lkIHNldFZhbHVlKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJbnNwZWN0
b3JWYWx1ZT4pOwotICAgIHZvaWQgc2V0T2JqZWN0KGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JPYmplY3RCYXNlPik7Ci0gICAgdm9pZCBzZXRBcnJheShjb25zdCBTdHJp
bmcmIG5hbWUsIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXlCYXNlPik7Ci0KLSAgICBpdGVyYXRv
ciBmaW5kKGNvbnN0IFN0cmluZyYgbmFtZSk7Ci0gICAgY29uc3RfaXRlcmF0b3IgZmluZChjb25z
dCBTdHJpbmcmIG5hbWUpIGNvbnN0OwotCi0gICAgLy8gRklYTUU6IHVzZSB0ZW1wbGF0ZXMgdG8g
cmVkdWNlIHRoZSBhbW91bnQgb2YgZHVwbGljYXRlZCBnZXQqKCkgbWV0aG9kcy4KLSAgICBib29s
IGdldEJvb2xlYW4oY29uc3QgU3RyaW5nJiBuYW1lLCBib29sJiBvdXRwdXQpIGNvbnN0OwotICAg
IHRlbXBsYXRlPGNsYXNzIFQ+IGJvb2wgZ2V0RG91YmxlKGNvbnN0IFN0cmluZyYgbmFtZSwgVCYg
b3V0cHV0KSBjb25zdAotICAgIHsKLSAgICAgICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1
ZSA9IGdldChuYW1lKTsKLSAgICAgICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgcmV0dXJuIHZhbHVlLT5hc0RvdWJsZShvdXRwdXQpOwotICAgIH0KLSAg
ICB0ZW1wbGF0ZTxjbGFzcyBUPiBib29sIGdldEludGVnZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBU
JiBvdXRwdXQpIGNvbnN0Ci0gICAgewotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZh
bHVlID0gZ2V0KG5hbWUpOwotICAgICAgICBpZiAoIXZhbHVlKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICByZXR1cm4gdmFsdWUtPmFzSW50ZWdlcihvdXRwdXQpOwotICAgIH0K
LQotICAgIGJvb2wgZ2V0U3RyaW5nKGNvbnN0IFN0cmluZyYgbmFtZSwgU3RyaW5nJiBvdXRwdXQp
IGNvbnN0OwotICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBnZXRPYmplY3QoY29uc3Qg
U3RyaW5nJiBuYW1lKSBjb25zdDsKLSAgICBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBnZXRB
cnJheShjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0OwotICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9y
VmFsdWU+IGdldChjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0OwotCi0gICAgdm9pZCByZW1vdmUo
Y29uc3QgU3RyaW5nJiBuYW1lKTsKLQotICAgIHZpcnR1YWwgdm9pZCB3cml0ZUpTT04oU3RyaW5n
QnVpbGRlciYgb3V0cHV0KSBjb25zdCBvdmVycmlkZTsKLQotICAgIGl0ZXJhdG9yIGJlZ2luKCkg
eyByZXR1cm4gbV9kYXRhLmJlZ2luKCk7IH0KLSAgICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBt
X2RhdGEuZW5kKCk7IH0KLSAgICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJu
IG1fZGF0YS5iZWdpbigpOyB9Ci0gICAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1
cm4gbV9kYXRhLmVuZCgpOyB9Ci0KLSAgICBpbnQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0
YS5zaXplKCk7IH0KLQotcHJvdGVjdGVkOgotICAgIEluc3BlY3Rvck9iamVjdEJhc2UoKTsKLQot
cHJpdmF0ZToKLSAgICBEaWN0aW9uYXJ5IG1fZGF0YTsKLSAgICBWZWN0b3I8U3RyaW5nPiBtX29y
ZGVyOwotfTsKLQotY2xhc3MgSW5zcGVjdG9yT2JqZWN0IDogcHVibGljIEluc3BlY3Rvck9iamVj
dEJhc2UgewotcHVibGljOgotICAgIHN0YXRpYyBKU19FWFBPUlRfUFJJVkFURSBQYXNzUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gY3JlYXRlKCk7Ci0KLSAgICB1c2luZyBJbnNwZWN0b3JPYmplY3RC
YXNlOjphc09iamVjdDsKLQotICAgIHVzaW5nIEluc3BlY3Rvck9iamVjdEJhc2U6OnNldEJvb2xl
YW47Ci0gICAgdXNpbmcgSW5zcGVjdG9yT2JqZWN0QmFzZTo6c2V0SW50ZWdlcjsKLSAgICB1c2lu
ZyBJbnNwZWN0b3JPYmplY3RCYXNlOjpzZXREb3VibGU7Ci0gICAgdXNpbmcgSW5zcGVjdG9yT2Jq
ZWN0QmFzZTo6c2V0U3RyaW5nOwotICAgIHVzaW5nIEluc3BlY3Rvck9iamVjdEJhc2U6OnNldFZh
bHVlOwotICAgIHVzaW5nIEluc3BlY3Rvck9iamVjdEJhc2U6OnNldE9iamVjdDsKLSAgICB1c2lu
ZyBJbnNwZWN0b3JPYmplY3RCYXNlOjpzZXRBcnJheTsKLQotICAgIHVzaW5nIEluc3BlY3Rvck9i
amVjdEJhc2U6OmZpbmQ7Ci0gICAgdXNpbmcgSW5zcGVjdG9yT2JqZWN0QmFzZTo6Z2V0Qm9vbGVh
bjsKLSAgICB1c2luZyBJbnNwZWN0b3JPYmplY3RCYXNlOjpnZXRJbnRlZ2VyOwotICAgIHVzaW5n
IEluc3BlY3Rvck9iamVjdEJhc2U6OmdldERvdWJsZTsKLSAgICB1c2luZyBJbnNwZWN0b3JPYmpl
Y3RCYXNlOjpnZXRTdHJpbmc7Ci0gICAgdXNpbmcgSW5zcGVjdG9yT2JqZWN0QmFzZTo6Z2V0T2Jq
ZWN0OwotICAgIHVzaW5nIEluc3BlY3Rvck9iamVjdEJhc2U6OmdldEFycmF5OwotICAgIHVzaW5n
IEluc3BlY3Rvck9iamVjdEJhc2U6OmdldDsKLQotICAgIHVzaW5nIEluc3BlY3Rvck9iamVjdEJh
c2U6OnJlbW92ZTsKLQotICAgIHVzaW5nIEluc3BlY3Rvck9iamVjdEJhc2U6OmJlZ2luOwotICAg
IHVzaW5nIEluc3BlY3Rvck9iamVjdEJhc2U6OmVuZDsKLQotICAgIHVzaW5nIEluc3BlY3Rvck9i
amVjdEJhc2U6OnNpemU7Ci19OwotCi0KLWNsYXNzIEpTX0VYUE9SVF9QUklWQVRFIEluc3BlY3Rv
ckFycmF5QmFzZSA6IHB1YmxpYyBJbnNwZWN0b3JWYWx1ZSB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRl
ZiBWZWN0b3I8UmVmUHRyPEluc3BlY3RvclZhbHVlPj46Oml0ZXJhdG9yIGl0ZXJhdG9yOwotICAg
IHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4+Ojpjb25zdF9pdGVyYXRvciBj
b25zdF9pdGVyYXRvcjsKLQotICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1f
ZGF0YS5zaXplKCk7IH0KLQotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgfkluc3BlY3RvckFycmF5
QmFzZSgpOwotCi0gICAgdmlydHVhbCBib29sIGFzQXJyYXkoUmVmUHRyPEluc3BlY3RvckFycmF5
PiYpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBwdXNoQm9vbGVhbihib29sKTsKLSAgICB2b2lkIHB1
c2hJbnRlZ2VyKGludCk7Ci0gICAgdm9pZCBwdXNoRG91YmxlKGRvdWJsZSk7Ci0gICAgdm9pZCBw
dXNoU3RyaW5nKGNvbnN0IFN0cmluZyYpOwotICAgIHZvaWQgcHVzaFZhbHVlKFBhc3NSZWZQdHI8
SW5zcGVjdG9yVmFsdWU+KTsKLSAgICB2b2lkIHB1c2hPYmplY3QoUGFzc1JlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+KTsKLSAgICB2b2lkIHB1c2hBcnJheShQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5
Pik7Ci0KLSAgICBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBnZXQoc2l6ZV90IGluZGV4KTsK
LQotICAgIHZpcnR1YWwgdm9pZCB3cml0ZUpTT04oU3RyaW5nQnVpbGRlciYgb3V0cHV0KSBjb25z
dCBvdmVycmlkZTsKLQotICAgIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gbV9kYXRhLmJlZ2lu
KCk7IH0KLSAgICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBtX2RhdGEuZW5kKCk7IH0KLSAgICBj
b25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5iZWdpbigpOyB9Ci0g
ICAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmVuZCgpOyB9Ci0K
LXByb3RlY3RlZDoKLSAgICBJbnNwZWN0b3JBcnJheUJhc2UoKTsKLQotcHJpdmF0ZToKLSAgICBW
ZWN0b3I8UmVmUHRyPEluc3BlY3RvclZhbHVlPj4gbV9kYXRhOwotfTsKLQotY2xhc3MgSW5zcGVj
dG9yQXJyYXkgOiBwdWJsaWMgSW5zcGVjdG9yQXJyYXlCYXNlIHsKLXB1YmxpYzoKLSAgICBzdGF0
aWMgSlNfRVhQT1JUX1BSSVZBVEUgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gY3JlYXRlKCk7
Ci0KLSAgICB1c2luZyBJbnNwZWN0b3JBcnJheUJhc2U6OmFzQXJyYXk7Ci0KLSAgICB1c2luZyBJ
bnNwZWN0b3JBcnJheUJhc2U6OnB1c2hCb29sZWFuOwotICAgIHVzaW5nIEluc3BlY3RvckFycmF5
QmFzZTo6cHVzaEludGVnZXI7Ci0gICAgdXNpbmcgSW5zcGVjdG9yQXJyYXlCYXNlOjpwdXNoRG91
YmxlOwotICAgIHVzaW5nIEluc3BlY3RvckFycmF5QmFzZTo6cHVzaFN0cmluZzsKLSAgICB1c2lu
ZyBJbnNwZWN0b3JBcnJheUJhc2U6OnB1c2hWYWx1ZTsKLSAgICB1c2luZyBJbnNwZWN0b3JBcnJh
eUJhc2U6OnB1c2hPYmplY3Q7Ci0gICAgdXNpbmcgSW5zcGVjdG9yQXJyYXlCYXNlOjpwdXNoQXJy
YXk7Ci0KLSAgICB1c2luZyBJbnNwZWN0b3JBcnJheUJhc2U6OmdldDsKLQotICAgIHVzaW5nIElu
c3BlY3RvckFycmF5QmFzZTo6YmVnaW47Ci0gICAgdXNpbmcgSW5zcGVjdG9yQXJyYXlCYXNlOjpl
bmQ7Ci19OwotCi0KLWlubGluZSBJbnNwZWN0b3JPYmplY3RCYXNlOjppdGVyYXRvciBJbnNwZWN0
b3JPYmplY3RCYXNlOjpmaW5kKGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICByZXR1cm4gbV9k
YXRhLmZpbmQobmFtZSk7Ci19Ci0KLWlubGluZSBJbnNwZWN0b3JPYmplY3RCYXNlOjpjb25zdF9p
dGVyYXRvciBJbnNwZWN0b3JPYmplY3RCYXNlOjpmaW5kKGNvbnN0IFN0cmluZyYgbmFtZSkgY29u
c3QKLXsKLSAgICByZXR1cm4gbV9kYXRhLmZpbmQobmFtZSk7Ci19Ci0KLWlubGluZSB2b2lkIElu
c3BlY3Rvck9iamVjdEJhc2U6OnNldEJvb2xlYW4oY29uc3QgU3RyaW5nJiBuYW1lLCBib29sIHZh
bHVlKQotewotICAgIHNldFZhbHVlKG5hbWUsIEluc3BlY3RvckJhc2ljVmFsdWU6OmNyZWF0ZSh2
YWx1ZSkpOwotfQotCi1pbmxpbmUgdm9pZCBJbnNwZWN0b3JPYmplY3RCYXNlOjpzZXRJbnRlZ2Vy
KGNvbnN0IFN0cmluZyYgbmFtZSwgaW50IHZhbHVlKQotewotICAgIHNldFZhbHVlKG5hbWUsIElu
c3BlY3RvckJhc2ljVmFsdWU6OmNyZWF0ZSh2YWx1ZSkpOwotfQotCi1pbmxpbmUgdm9pZCBJbnNw
ZWN0b3JPYmplY3RCYXNlOjpzZXREb3VibGUoY29uc3QgU3RyaW5nJiBuYW1lLCBkb3VibGUgdmFs
dWUpCi17Ci0gICAgc2V0VmFsdWUobmFtZSwgSW5zcGVjdG9yQmFzaWNWYWx1ZTo6Y3JlYXRlKHZh
bHVlKSk7Ci19Ci0KLWlubGluZSB2b2lkIEluc3BlY3Rvck9iamVjdEJhc2U6OnNldFN0cmluZyhj
b25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgc2V0VmFsdWUo
bmFtZSwgSW5zcGVjdG9yU3RyaW5nOjpjcmVhdGUodmFsdWUpKTsKLX0KLQotaW5saW5lIHZvaWQg
SW5zcGVjdG9yT2JqZWN0QmFzZTo6c2V0VmFsdWUoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVm
UHRyPEluc3BlY3RvclZhbHVlPiB2YWx1ZSkKLXsKLSAgICBBU1NFUlQodmFsdWUpOwotICAgIGlm
IChtX2RhdGEuc2V0KG5hbWUsIHZhbHVlKS5pc05ld0VudHJ5KQotICAgICAgICBtX29yZGVyLmFw
cGVuZChuYW1lKTsKLX0KLQotaW5saW5lIHZvaWQgSW5zcGVjdG9yT2JqZWN0QmFzZTo6c2V0T2Jq
ZWN0KGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3RCYXNlPiB2
YWx1ZSkKLXsKLSAgICBBU1NFUlQodmFsdWUpOwotICAgIGlmIChtX2RhdGEuc2V0KG5hbWUsIHZh
bHVlKS5pc05ld0VudHJ5KQotICAgICAgICBtX29yZGVyLmFwcGVuZChuYW1lKTsKLX0KLQotaW5s
aW5lIHZvaWQgSW5zcGVjdG9yT2JqZWN0QmFzZTo6c2V0QXJyYXkoY29uc3QgU3RyaW5nJiBuYW1l
LCBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5QmFzZT4gdmFsdWUpCi17Ci0gICAgQVNTRVJUKHZh
bHVlKTsKLSAgICBpZiAobV9kYXRhLnNldChuYW1lLCB2YWx1ZSkuaXNOZXdFbnRyeSkKLSAgICAg
ICAgbV9vcmRlci5hcHBlbmQobmFtZSk7Ci19Ci0KLWlubGluZSB2b2lkIEluc3BlY3RvckFycmF5
QmFzZTo6cHVzaEJvb2xlYW4oYm9vbCB2YWx1ZSkKLXsKLSAgICBtX2RhdGEuYXBwZW5kKEluc3Bl
Y3RvckJhc2ljVmFsdWU6OmNyZWF0ZSh2YWx1ZSkpOwotfQotCi1pbmxpbmUgdm9pZCBJbnNwZWN0
b3JBcnJheUJhc2U6OnB1c2hJbnRlZ2VyKGludCB2YWx1ZSkKLXsKLSAgICBtX2RhdGEuYXBwZW5k
KEluc3BlY3RvckJhc2ljVmFsdWU6OmNyZWF0ZSh2YWx1ZSkpOwotfQotCi1pbmxpbmUgdm9pZCBJ
bnNwZWN0b3JBcnJheUJhc2U6OnB1c2hEb3VibGUoZG91YmxlIHZhbHVlKQotewotICAgIG1fZGF0
YS5hcHBlbmQoSW5zcGVjdG9yQmFzaWNWYWx1ZTo6Y3JlYXRlKHZhbHVlKSk7Ci19Ci0KLWlubGlu
ZSB2b2lkIEluc3BlY3RvckFycmF5QmFzZTo6cHVzaFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVl
KQotewotICAgIG1fZGF0YS5hcHBlbmQoSW5zcGVjdG9yU3RyaW5nOjpjcmVhdGUodmFsdWUpKTsK
LX0KLQotaW5saW5lIHZvaWQgSW5zcGVjdG9yQXJyYXlCYXNlOjpwdXNoVmFsdWUoUGFzc1JlZlB0
cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUpCi17Ci0gICAgQVNTRVJUKHZhbHVlKTsKLSAgICBtX2Rh
dGEuYXBwZW5kKHZhbHVlKTsKLX0KLQotaW5saW5lIHZvaWQgSW5zcGVjdG9yQXJyYXlCYXNlOjpw
dXNoT2JqZWN0KFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKLXsKLSAgICBBU1NF
UlQodmFsdWUpOwotICAgIG1fZGF0YS5hcHBlbmQodmFsdWUpOwotfQotCi1pbmxpbmUgdm9pZCBJ
bnNwZWN0b3JBcnJheUJhc2U6OnB1c2hBcnJheShQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiB2
YWx1ZSkKLXsKLSAgICBBU1NFUlQodmFsdWUpOwotICAgIG1fZGF0YS5hcHBlbmQodmFsdWUpOwot
fQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotI2VuZGlmIC8vICFkZWZpbmVkKEluc3Bl
Y3RvclZhbHVlc19oKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9TY3JpcHRDYWxsRnJhbWUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9T
Y3JpcHRDYWxsRnJhbWUuY3BwCmluZGV4IDdjOTUwZThiOTA3YWIzMWFmM2ZiZjY0MWRmODQwZTU4
ZjFmYmU2NmYuLmE3MTAyNjY2YWY0NGQwNDZmNjBiODBkMmQzNmNkOTFjNDViNzZlYzcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvU2NyaXB0Q2FsbEZyYW1lLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL1NjcmlwdENhbGxGcmFtZS5j
cHAKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTY3Jp
cHRDYWxsRnJhbWUuaCIKIAotI2luY2x1ZGUgIkluc3BlY3RvclZhbHVlcy5oIgorI2luY2x1ZGUg
Ikluc3BlY3RvclByb3RvY29sVHlwZXMuaCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgog
CiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTU4LDcgKzU4LDcgQEAgYm9vbCBTY3JpcHRDYWxs
RnJhbWU6OmlzRXF1YWwoY29uc3QgU2NyaXB0Q2FsbEZyYW1lJiBvKSBjb25zdAogfQogCiAjaWYg
RU5BQkxFKElOU1BFQ1RPUikKLVBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q29uc29s
ZTo6Q2FsbEZyYW1lPiBTY3JpcHRDYWxsRnJhbWU6OmJ1aWxkSW5zcGVjdG9yT2JqZWN0KCkgY29u
c3QKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q29uc29sZTo6Q2FsbEZyYW1lPiBT
Y3JpcHRDYWxsRnJhbWU6OmJ1aWxkVW5jaGVja2VkT2JqZWN0KCkgY29uc3QKIHsKICAgICByZXR1
cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q29uc29sZTo6Q2FsbEZyYW1lOjpjcmVhdGUoKQogICAg
ICAgICAuc2V0RnVuY3Rpb25OYW1lKG1fZnVuY3Rpb25OYW1lKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9TY3JpcHRDYWxsRnJhbWUuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3IvU2NyaXB0Q2FsbEZyYW1lLmgKaW5kZXggZTljMTBmZjllM2Ji
NmE3ZTg5NjI3ZWM5M2ZlY2VlYjA2ZGRlYWJkMi4uYWUxMTEwMjQ1ZDgxYjM3OGI4ODYxNzFjNDU3
ZmNkM2Y3ZGJhNDIxNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9TY3JpcHRDYWxsRnJhbWUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L1NjcmlwdENhbGxGcmFtZS5oCkBAIC01NCw3ICs1NCw3IEBAIHB1YmxpYzoKICAgICBib29sIGlz
RXF1YWwoY29uc3QgU2NyaXB0Q2FsbEZyYW1lJikgY29uc3Q7CiAKICNpZiBFTkFCTEUoSU5TUEVD
VE9SKQotICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q29uc29sZTo6Q2FsbEZy
YW1lPiBidWlsZEluc3BlY3Rvck9iamVjdCgpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6Q29uc29sZTo6Q2FsbEZyYW1lPiBidWlsZFVuY2hlY2tlZE9iamVjdCgp
IGNvbnN0OwogI2VuZGlmCiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL1NjcmlwdENhbGxTdGFjay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL1NjcmlwdENhbGxTdGFjay5jcHAKaW5kZXggNmY4MWE1OGVkZmNjYjNhNTVi
YWFlYzQzYTIzNTc4MjlhZWQ1N2RhMS4uZTYzOTBhODVkOTdkY2E0YTU1NDE5NGE0MjM0MTNjNzIx
OGI0ODVjYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9TY3Jp
cHRDYWxsU3RhY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvU2Ny
aXB0Q2FsbFN0YWNrLmNwcApAQCAtMzIsNyArMzIsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIlNjcmlwdENhbGxTdGFjay5oIgogCi0jaW5jbHVkZSAiSW5zcGVjdG9yVmFsdWVz
LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oIgogCiBuYW1lc3BhY2UgSW5z
cGVjdG9yIHsKIApAQCAtMTA3LDExICsxMDcsMTEgQEAgYm9vbCBTY3JpcHRDYWxsU3RhY2s6Omlz
RXF1YWwoU2NyaXB0Q2FsbFN0YWNrKiBvKSBjb25zdAogfQogCiAjaWYgRU5BQkxFKElOU1BFQ1RP
UikKLVBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90
b2NvbDo6Q29uc29sZTo6Q2FsbEZyYW1lPj4gU2NyaXB0Q2FsbFN0YWNrOjpidWlsZEluc3BlY3Rv
ckFycmF5KCkgY29uc3QKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5z
cGVjdG9yOjpQcm90b2NvbDo6Q29uc29sZTo6Q2FsbEZyYW1lPj4gU2NyaXB0Q2FsbFN0YWNrOjpi
dWlsZFVuY2hlY2tlZEFycmF5KCkgY29uc3QKIHsKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q29uc29sZTo6Q2FsbEZyYW1lPj4gZnJh
bWVzID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q29u
c29sZTo6Q2FsbEZyYW1lPjo6Y3JlYXRlKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X2ZyYW1lcy5zaXplKCk7IGkrKykKLSAgICAgICAgZnJhbWVzLT5hZGRJdGVtKG1fZnJhbWVzLmF0
KGkpLmJ1aWxkSW5zcGVjdG9yT2JqZWN0KCkpOworICAgICAgICBmcmFtZXMtPmFkZEl0ZW0obV9m
cmFtZXMuYXQoaSkuYnVpbGRVbmNoZWNrZWRPYmplY3QoKSk7CiAgICAgcmV0dXJuIGZyYW1lczsK
IH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9T
Y3JpcHRDYWxsU3RhY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvU2NyaXB0
Q2FsbFN0YWNrLmgKaW5kZXggNjFkYTllNDg5OTkzYTgzY2UxMTI0M2FjN2VmMjJiMGI2MjQ0NWFm
Zi4uNDY0YzM0NDQwN2U3YmI0MDliYmFhMWI1NTUyYzY4NjNjNjVkZDA0MSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9TY3JpcHRDYWxsU3RhY2suaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL1NjcmlwdENhbGxTdGFjay5oCkBAIC02Miw3
ICs2Miw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzRXF1YWwoU2NyaXB0Q2FsbFN0YWNrKikgY29u
c3Q7CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q29uc29sZTo6Q2FsbEZyYW1lPj4g
YnVpbGRJbnNwZWN0b3JBcnJheSgpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q29uc29sZTo6Q2FsbEZyYW1lPj4g
YnVpbGRVbmNoZWNrZWRBcnJheSgpIGNvbnN0OwogI2VuZGlmCiAKIHByaXZhdGU6CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBZ2Vu
dC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JB
Z2VudC5jcHAKaW5kZXggOWY0NmY1ODhmZDhmZjk0NWIzNzJhY2I5ZDZiY2EzZDU0YTBkNTQ3Yi4u
OTEwYzk1NmEwNDM3YjYzMDE4MmU3Yzc1OGZlOTYwZGVkYzRlYzc4ZCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQWdlbnQuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckFnZW50
LmNwcApAQCAtMzQsNyArMzQsNyBAQAogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAKICNpbmNsdWRl
ICJJbnNwZWN0b3JFbnZpcm9ubWVudC5oIgotI2luY2x1ZGUgIkluc3BlY3RvclZhbHVlcy5oIgor
I2luY2x1ZGUgIkluc3BlY3RvclByb3RvY29sVHlwZXMuaCIKICNpbmNsdWRlICJTY3JpcHRWYWx1
ZS5oIgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTk0LDcgKzk0LDcgQEAgdm9pZCBJbnNw
ZWN0b3JBZ2VudDo6aW5pdGlhbGl6ZWQoRXJyb3JTdHJpbmcmKQogICAgIG1fZW52aXJvbm1lbnQu
ZnJvbnRlbmRJbml0aWFsaXplZCgpOwogfQogCi12b2lkIEluc3BlY3RvckFnZW50OjppbnNwZWN0
KFBhc3NSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gb2JqZWN0VG9JbnNw
ZWN0LCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gaGludHMpCit2b2lkIEluc3BlY3RvckFn
ZW50OjppbnNwZWN0KFBhc3NSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4g
b2JqZWN0VG9JbnNwZWN0LCBQYXNzUmVmUHRyPFByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IGhp
bnRzKQogewogICAgIGlmIChtX2VuYWJsZWQgJiYgbV9mcm9udGVuZERpc3BhdGNoZXIpIHsKICAg
ICAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmluc3BlY3Qob2JqZWN0VG9JbnNwZWN0LCBoaW50
cyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JBZ2VudC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yQWdlbnQuaAppbmRleCAyZmI4ZjI1MWU3YjJmMDcxYWMyZDM0M2UxNGVjYmQ1NWE5
MWUxMzI5Li42YzdmNTVhNDg4NDYzMDMyOWNiM2E4NmZhMDkxYzJhNTE1Y2NjOTJkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBZ2Vu
dC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rv
ckFnZW50LmgKQEAgLTQzLDcgKzQzLDEwIEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogY2xhc3Mg
SW5zcGVjdG9yRW52aXJvbm1lbnQ7CiBjbGFzcyBJbnNwZWN0b3JJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcjsKIGNsYXNzIEluc3BlY3Rvckluc3BlY3RvckZyb250ZW5kRGlzcGF0Y2hlcnM7Ci1j
bGFzcyBJbnNwZWN0b3JPYmplY3Q7CisKK25hbWVzcGFjZSBQcm90b2NvbCB7CitjbGFzcyBVbmNo
ZWNrZWRPYmplY3Q7Cit9CiAKIHR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwogCkBAIC02MSw3
ICs2NCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlzYWJsZShFcnJvclN0cmluZyYp
IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBpbml0aWFsaXplZChFcnJvclN0cmluZyYpIG92
ZXJyaWRlOwogCi0gICAgdm9pZCBpbnNwZWN0KFBhc3NSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6
OlJlbW90ZU9iamVjdD4gb2JqZWN0VG9JbnNwZWN0LCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gaGludHMpOworICAgIHZvaWQgaW5zcGVjdChQYXNzUmVmUHRyPFByb3RvY29sOjpSdW50aW1l
OjpSZW1vdGVPYmplY3Q+IG9iamVjdFRvSW5zcGVjdCwgUGFzc1JlZlB0cjxQcm90b2NvbDo6VW5j
aGVja2VkT2JqZWN0PiBoaW50cyk7CiAgICAgdm9pZCBldmFsdWF0ZUZvclRlc3RJbkZyb250ZW5k
KGNvbnN0IFN0cmluZyYgc2NyaXB0KTsKIAogcHJpdmF0ZToKQEAgLTY5LDcgKzcyLDcgQEAgcHJp
dmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9ySW5zcGVjdG9yRnJvbnRlbmREaXNw
YXRjaGVyPiBtX2Zyb250ZW5kRGlzcGF0Y2hlcjsKICAgICBSZWZQdHI8SW5zcGVjdG9ySW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7CiAgICAgVmVjdG9yPFN0
cmluZz4gbV9wZW5kaW5nRXZhbHVhdGVUZXN0Q29tbWFuZHM7Ci0gICAgc3RkOjpwYWlyPFJlZlB0
cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiwgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4+IG1fcGVuZGluZ0luc3BlY3REYXRhOworICAgIHN0ZDo6cGFpcjxSZWZQdHI8UHJvdG9jb2w6
OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4sIFJlZlB0cjxQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0
Pj4gbV9wZW5kaW5nSW5zcGVjdERhdGE7CiAgICAgYm9vbCBtX2VuYWJsZWQ7CiB9OwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JE
ZWJ1Z2dlckFnZW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRz
L0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwCmluZGV4IDE2OTBhMzczOTNlNzZkMGYxN2U2ZjBm
YjRmNDA4MGU2NGZhMWVkOWEuLjczNDZjNzE5OTQ1MGIzZWQ2MTc5ZGE4YjRiZGJjN2NhYTdjMjQ5
OTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0lu
c3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvYWdlbnRzL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwCkBAIC0zNSw3ICszNSw3IEBA
CiAjaW5jbHVkZSAiQ29udGVudFNlYXJjaFV0aWxpdGllcy5oIgogI2luY2x1ZGUgIkluamVjdGVk
U2NyaXB0LmgiCiAjaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmgiCi0jaW5jbHVkZSAi
SW5zcGVjdG9yVmFsdWVzLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oIgog
I2luY2x1ZGUgIlJlZ3VsYXJFeHByZXNzaW9uLmgiCiAjaW5jbHVkZSAiU2NyaXB0RGVidWdTZXJ2
ZXIuaCIKICNpbmNsdWRlICJTY3JpcHRPYmplY3QuaCIKQEAgLTE0OCw5ICsxNDgsOSBAQCB2b2lk
IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmhhbmRsZUNvbnNvbGVBc3NlcnQoKQogICAgICAgICBi
cmVha1Byb2dyYW0oSW5zcGVjdG9yRGVidWdnZXJGcm9udGVuZERpc3BhdGNoZXI6OlJlYXNvbjo6
QXNzZXJ0LCBudWxscHRyKTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBidWlsZE9iamVjdEZvckJyZWFrcG9pbnRDb29raWUoY29uc3QgU3RyaW5nJiB1cmwsIGludCBs
aW5lTnVtYmVyLCBpbnQgY29sdW1uTnVtYmVyLCBjb25zdCBTdHJpbmcmIGNvbmRpdGlvbiwgUmVm
UHRyPEluc3BlY3RvckFycmF5PiYgYWN0aW9ucywgYm9vbCBpc1JlZ2V4LCBib29sIGF1dG9Db250
aW51ZSkKK3N0YXRpYyBQYXNzUmVmUHRyPFByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IGJ1aWxk
T2JqZWN0Rm9yQnJlYWtwb2ludENvb2tpZShjb25zdCBTdHJpbmcmIHVybCwgaW50IGxpbmVOdW1i
ZXIsIGludCBjb2x1bW5OdW1iZXIsIGNvbnN0IFN0cmluZyYgY29uZGl0aW9uLCBSZWZQdHI8UHJv
dG9jb2w6OlVuY2hlY2tlZEFycmF5PiYgYWN0aW9ucywgYm9vbCBpc1JlZ2V4LCBib29sIGF1dG9D
b250aW51ZSkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBicmVha3BvaW50T2JqZWN0
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8UHJvdG9jb2w6OlVuY2hl
Y2tlZE9iamVjdD4gYnJlYWtwb2ludE9iamVjdCA9IFByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q6
OmNyZWF0ZSgpOwogICAgIGJyZWFrcG9pbnRPYmplY3QtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwo
InVybCIpLCB1cmwpOwogICAgIGJyZWFrcG9pbnRPYmplY3QtPnNldEludGVnZXIoQVNDSUlMaXRl
cmFsKCJsaW5lTnVtYmVyIiksIGxpbmVOdW1iZXIpOwogICAgIGJyZWFrcG9pbnRPYmplY3QtPnNl
dEludGVnZXIoQVNDSUlMaXRlcmFsKCJjb2x1bW5OdW1iZXIiKSwgY29sdW1uTnVtYmVyKTsKQEAg
LTE5NSw3ICsxOTUsNyBAQCBzdGF0aWMgYm9vbCBicmVha3BvaW50QWN0aW9uVHlwZUZvclN0cmlu
Zyhjb25zdCBTdHJpbmcmIHR5cGVTdHJpbmcsIFNjcmlwdEJyZWFrcAogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotYm9vbCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpicmVha3BvaW50QWN0aW9uc0Zy
b21Qcm90b2NvbChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFJlZlB0cjxJbnNwZWN0b3JBcnJh
eT4mIGFjdGlvbnMsIEJyZWFrcG9pbnRBY3Rpb25zKiByZXN1bHQpCitib29sIEluc3BlY3RvckRl
YnVnZ2VyQWdlbnQ6OmJyZWFrcG9pbnRBY3Rpb25zRnJvbVByb3RvY29sKEVycm9yU3RyaW5nJiBl
cnJvclN0cmluZywgUmVmUHRyPFByb3RvY29sOjpVbmNoZWNrZWRBcnJheT4mIGFjdGlvbnMsIEJy
ZWFrcG9pbnRBY3Rpb25zKiByZXN1bHQpCiB7CiAgICAgaWYgKCFhY3Rpb25zKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKQEAgLTIwNiw4ICsyMDYsOCBAQCBib29sIEluc3BlY3RvckRlYnVnZ2VyQWdl
bnQ6OmJyZWFrcG9pbnRBY3Rpb25zRnJvbVByb3RvY29sKEVycm9yU3RyaW5nJiBlcnJvclN0cgog
CiAgICAgcmVzdWx0LT5yZXNlcnZlQ2FwYWNpdHkoYWN0aW9uc0xlbmd0aCk7CiAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGFjdGlvbnNMZW5ndGg7ICsraSkgewotICAgICAgICBSZWZQdHI8
SW5zcGVjdG9yVmFsdWU+IHZhbHVlID0gYWN0aW9ucy0+Z2V0KGkpOwotICAgICAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBvYmplY3Q7CisgICAgICAgIFJlZlB0cjxQcm90b2NvbDo6VW5jaGVj
a2VkVmFsdWU+IHZhbHVlID0gYWN0aW9ucy0+Z2V0KGkpOworICAgICAgICBSZWZQdHI8UHJvdG9j
b2w6OlVuY2hlY2tlZE9iamVjdD4gb2JqZWN0OwogICAgICAgICBpZiAoIXZhbHVlLT5hc09iamVj
dChvYmplY3QpKSB7CiAgICAgICAgICAgICBlcnJvclN0cmluZyA9IEFTQ0lJTGl0ZXJhbCgiQnJl
YWtwb2ludEFjdGlvbiBvZiBpbmNvcnJlY3QgdHlwZSwgZXhwZWN0ZWQgb2JqZWN0Iik7CiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yMzksNyArMjM5LDcgQEAgYm9vbCBJbnNwZWN0b3JE
ZWJ1Z2dlckFnZW50OjpicmVha3BvaW50QWN0aW9uc0Zyb21Qcm90b2NvbChFcnJvclN0cmluZyYg
ZXJyb3JTdHIKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50OjpzZXRCcmVha3BvaW50QnlVcmwoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbGlu
ZU51bWJlciwgY29uc3QgU3RyaW5nKiBjb25zdCBvcHRpb25hbFVSTCwgY29uc3QgU3RyaW5nKiBj
b25zdCBvcHRpb25hbFVSTFJlZ2V4LCBjb25zdCBpbnQqIGNvbnN0IG9wdGlvbmFsQ29sdW1uTnVt
YmVyLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0Piogb3B0aW9ucywgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRJZCogb3V0QnJlYWtwb2ludElkZW50aWZpZXIs
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpE
ZWJ1Z2dlcjo6TG9jYXRpb24+PiYgbG9jYXRpb25zKQordm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50OjpzZXRCcmVha3BvaW50QnlVcmwoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbGlu
ZU51bWJlciwgY29uc3QgU3RyaW5nKiBjb25zdCBvcHRpb25hbFVSTCwgY29uc3QgU3RyaW5nKiBj
b25zdCBvcHRpb25hbFVSTFJlZ2V4LCBjb25zdCBpbnQqIGNvbnN0IG9wdGlvbmFsQ29sdW1uTnVt
YmVyLCBjb25zdCBSZWZQdHI8UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4qIG9wdGlvbnMsIElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50SWQqIG91dEJyZWFrcG9pbnRJ
ZGVudGlmaWVyLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGVidWdnZXI6OkxvY2F0aW9uPj4mIGxvY2F0aW9ucykKIHsKICAgICBsb2NhdGlv
bnMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1
Z2dlcjo6TG9jYXRpb24+OjpjcmVhdGUoKTsKICAgICBpZiAoIW9wdGlvbmFsVVJMID09ICFvcHRp
b25hbFVSTFJlZ2V4KSB7CkBAIC0yNTksNyArMjU5LDcgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50OjpzZXRCcmVha3BvaW50QnlVcmwoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQg
bGkKIAogICAgIFN0cmluZyBjb25kaXRpb24gPSBlbXB0eVN0cmluZygpOwogICAgIGJvb2wgYXV0
b0NvbnRpbnVlID0gZmFsc2U7Ci0gICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBhY3Rpb25zOwor
ICAgIFJlZlB0cjxQcm90b2NvbDo6VW5jaGVja2VkQXJyYXk+IGFjdGlvbnM7CiAgICAgaWYgKG9w
dGlvbnMpIHsKICAgICAgICAgKCpvcHRpb25zKS0+Z2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgiY29u
ZGl0aW9uIiksIGNvbmRpdGlvbik7CiAgICAgICAgICgqb3B0aW9ucyktPmdldEJvb2xlYW4oQVND
SUlMaXRlcmFsKCJhdXRvQ29udGludWUiKSwgYXV0b0NvbnRpbnVlKTsKQEAgLTI4NSw3ICsyODUs
NyBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9pbnRCeVVybChFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBsaQogICAgICpvdXRCcmVha3BvaW50SWRlbnRpZmll
ciA9IGJyZWFrcG9pbnRJZGVudGlmaWVyOwogfQogCi1zdGF0aWMgYm9vbCBwYXJzZUxvY2F0aW9u
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgSW5zcGVjdG9yT2JqZWN0JiBsb2NhdGlvbiwgSlND
OjpTb3VyY2VJRCYgc291cmNlSUQsIHVuc2lnbmVkJiBsaW5lTnVtYmVyLCB1bnNpZ25lZCYgY29s
dW1uTnVtYmVyKQorc3RhdGljIGJvb2wgcGFyc2VMb2NhdGlvbihFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIFByb3RvY29sOjpVbmNoZWNrZWRPYmplY3QmIGxvY2F0aW9uLCBKU0M6OlNvdXJjZUlE
JiBzb3VyY2VJRCwgdW5zaWduZWQmIGxpbmVOdW1iZXIsIHVuc2lnbmVkJiBjb2x1bW5OdW1iZXIp
CiB7CiAgICAgU3RyaW5nIHNjcmlwdElEU3RyOwogICAgIGlmICghbG9jYXRpb24uZ2V0U3RyaW5n
KEFTQ0lJTGl0ZXJhbCgic2NyaXB0SWQiKSwgc2NyaXB0SURTdHIpIHx8ICFsb2NhdGlvbi5nZXRJ
bnRlZ2VyKEFTQ0lJTGl0ZXJhbCgibGluZU51bWJlciIpLCBsaW5lTnVtYmVyKSkgewpAQCAtMzAw
LDcgKzMwMCw3IEBAIHN0YXRpYyBib29sIHBhcnNlTG9jYXRpb24oRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBJbnNwZWN0b3JPYmplY3QmIGxvY2F0aW9uLCBKCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0QnJlYWtwb2ludChFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBsb2NhdGlvbiwg
Y29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIG9wdGlvbnMsIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50SWQqIG91dEJyZWFrcG9pbnRJZGVudGlmaWVyLCBSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkxvY2F0aW9uPiYgYWN0dWFsTG9jYXRp
b24pCit2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9pbnQoRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4m
IGxvY2F0aW9uLCBjb25zdCBSZWZQdHI8UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4qIG9wdGlv
bnMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50SWQqIG91dEJyZWFr
cG9pbnRJZGVudGlmaWVyLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6Okxv
Y2F0aW9uPiYgYWN0dWFsTG9jYXRpb24pCiB7CiAgICAgSlNDOjpTb3VyY2VJRCBzb3VyY2VJRDsK
ICAgICB1bnNpZ25lZCBsaW5lTnVtYmVyOwpAQCAtMzEwLDcgKzMxMCw3IEBAIHZvaWQgSW5zcGVj
dG9yRGVidWdnZXJBZ2VudDo6c2V0QnJlYWtwb2ludChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IGNvbnN0IFJlZlB0CiAKICAgICBTdHJpbmcgY29uZGl0aW9uID0gZW1wdHlTdHJpbmcoKTsKICAg
ICBib29sIGF1dG9Db250aW51ZSA9IGZhbHNlOwotICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4g
YWN0aW9uczsKKyAgICBSZWZQdHI8UHJvdG9jb2w6OlVuY2hlY2tlZEFycmF5PiBhY3Rpb25zOwog
ICAgIGlmIChvcHRpb25zKSB7CiAgICAgICAgICgqb3B0aW9ucyktPmdldFN0cmluZyhBU0NJSUxp
dGVyYWwoImNvbmRpdGlvbiIpLCBjb25kaXRpb24pOwogICAgICAgICAoKm9wdGlvbnMpLT5nZXRC
b29sZWFuKEFTQ0lJTGl0ZXJhbCgiYXV0b0NvbnRpbnVlIiksIGF1dG9Db250aW51ZSk7CkBAIC0z
NTAsNyArMzUwLDcgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpyZW1vdmVCcmVha3Bv
aW50KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBicmVha3AKICAgICB9CiB9CiAKLXZvaWQg
SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Y29udGludWVUb0xvY2F0aW9uKEVycm9yU3RyaW5nJiBl
cnJvclN0cmluZywgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIGxvY2F0aW9uKQordm9p
ZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpjb250aW51ZVRvTG9jYXRpb24oRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4mIGxv
Y2F0aW9uKQogewogICAgIGlmIChtX2NvbnRpbnVlVG9Mb2NhdGlvbkJyZWFrcG9pbnRJRCAhPSBK
U0M6Om5vQnJlYWtwb2ludElEKSB7CiAgICAgICAgIHNjcmlwdERlYnVnU2VydmVyKCkucmVtb3Zl
QnJlYWtwb2ludChtX2NvbnRpbnVlVG9Mb2NhdGlvbkJyZWFrcG9pbnRJRCk7CkBAIC00MjksNyAr
NDI5LDcgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpnZXRGdW5jdGlvbkRldGFpbHMo
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdAogICAgIGluamVjdGVkU2NyaXB0LmdldEZ1
bmN0aW9uRGV0YWlscyhlcnJvclN0cmluZywgZnVuY3Rpb25JZCwgJmRldGFpbHMpOwogfQogCi12
b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNjaGVkdWxlUGF1c2VPbk5leHRTdGF0ZW1lbnQo
SW5zcGVjdG9yRGVidWdnZXJGcm9udGVuZERpc3BhdGNoZXI6OlJlYXNvbiBicmVha1JlYXNvbiwg
UGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEpCit2b2lkIEluc3BlY3RvckRlYnVnZ2Vy
QWdlbnQ6OnNjaGVkdWxlUGF1c2VPbk5leHRTdGF0ZW1lbnQoSW5zcGVjdG9yRGVidWdnZXJGcm9u
dGVuZERpc3BhdGNoZXI6OlJlYXNvbiBicmVha1JlYXNvbiwgUGFzc1JlZlB0cjxQcm90b2NvbDo6
VW5jaGVja2VkT2JqZWN0PiBkYXRhKQogewogICAgIGlmIChtX2phdmFTY3JpcHRQYXVzZVNjaGVk
dWxlZCkKICAgICAgICAgcmV0dXJuOwpAQCAtNTQ3LDcgKzU0Nyw3IEBAIHZvaWQgSW5zcGVjdG9y
RGVidWdnZXJBZ2VudDo6c2V0T3ZlcmxheU1lc3NhZ2UoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJp
bmcqKQogdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzY3JpcHRFeGVjdXRpb25CbG9ja2Vk
QnlDU1AoY29uc3QgU3RyaW5nJiBkaXJlY3RpdmVUZXh0KQogewogICAgIGlmIChzY3JpcHREZWJ1
Z1NlcnZlcigpLnBhdXNlT25FeGNlcHRpb25zU3RhdGUoKSAhPSBKU0M6OkRlYnVnZ2VyOjpEb250
UGF1c2VPbkV4Y2VwdGlvbnMpIHsKLSAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGly
ZWN0aXZlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgUmVmUHRyPFByb3Rv
Y29sOjpVbmNoZWNrZWRPYmplY3Q+IGRpcmVjdGl2ZSA9IFByb3RvY29sOjpVbmNoZWNrZWRPYmpl
Y3Q6OmNyZWF0ZSgpOwogICAgICAgICBkaXJlY3RpdmUtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwo
ImRpcmVjdGl2ZVRleHQiKSwgZGlyZWN0aXZlVGV4dCk7CiAgICAgICAgIGJyZWFrUHJvZ3JhbShJ
bnNwZWN0b3JEZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVhc29uOjpDU1BWaW9sYXRpb24s
IGRpcmVjdGl2ZS5yZWxlYXNlKCkpOwogICAgIH0KQEAgLTU5Myw3ICs1OTMsNyBAQCB2b2lkIElu
c3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZFBhcnNlU291cmNlKEpTQzo6U291cmNlSUQgc291cmNl
SUQsIGNvbnN0IFNjcmlwdAogICAgICAgICByZXR1cm47CiAKICAgICBmb3IgKGF1dG8gaXQgPSBt
X2phdmFTY3JpcHRCcmVha3BvaW50cy5iZWdpbigpLCBlbmQgPSBtX2phdmFTY3JpcHRCcmVha3Bv
aW50cy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IGJyZWFrcG9pbnRPYmplY3Q7CisgICAgICAgIFJlZlB0cjxQcm90b2NvbDo6VW5jaGVj
a2VkT2JqZWN0PiBicmVha3BvaW50T2JqZWN0OwogICAgICAgICBpZiAoIWl0LT52YWx1ZS0+YXNP
YmplY3QoYnJlYWtwb2ludE9iamVjdCkpCiAgICAgICAgICAgICByZXR1cm47CiAKQEAgLTYxMCw3
ICs2MTAsNyBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZFBhcnNlU291cmNlKEpT
Qzo6U291cmNlSUQgc291cmNlSUQsIGNvbnN0IFNjcmlwdAogICAgICAgICBicmVha3BvaW50T2Jq
ZWN0LT5nZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJjb25kaXRpb24iKSwgYnJlYWtwb2ludC5jb25k
aXRpb24pOwogICAgICAgICBicmVha3BvaW50T2JqZWN0LT5nZXRCb29sZWFuKEFTQ0lJTGl0ZXJh
bCgiYXV0b0NvbnRpbnVlIiksIGJyZWFrcG9pbnQuYXV0b0NvbnRpbnVlKTsKICAgICAgICAgRXJy
b3JTdHJpbmcgZXJyb3JTdHJpbmc7Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gYWN0
aW9ucyA9IGJyZWFrcG9pbnRPYmplY3QtPmdldEFycmF5KEFTQ0lJTGl0ZXJhbCgiYWN0aW9ucyIp
KTsKKyAgICAgICAgUmVmUHRyPFByb3RvY29sOjpVbmNoZWNrZWRBcnJheT4gYWN0aW9ucyA9IGJy
ZWFrcG9pbnRPYmplY3QtPmdldEFycmF5KEFTQ0lJTGl0ZXJhbCgiYWN0aW9ucyIpKTsKICAgICAg
ICAgaWYgKCFicmVha3BvaW50QWN0aW9uc0Zyb21Qcm90b2NvbChlcnJvclN0cmluZywgYWN0aW9u
cywgJmJyZWFrcG9pbnQuYWN0aW9ucykpIHsKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgICAgICAgICAgY29udGludWU7CkBAIC02ODQsNyArNjg0LDcgQEAgdm9pZCBJbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50OjpkaWRDb250aW51ZSgpCiAgICAgbV9mcm9udGVuZERpc3BhdGNo
ZXItPnJlc3VtZWQoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpicmVha1By
b2dyYW0oSW5zcGVjdG9yRGVidWdnZXJGcm9udGVuZERpc3BhdGNoZXI6OlJlYXNvbiBicmVha1Jl
YXNvbiwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEpCit2b2lkIEluc3BlY3RvckRl
YnVnZ2VyQWdlbnQ6OmJyZWFrUHJvZ3JhbShJbnNwZWN0b3JEZWJ1Z2dlckZyb250ZW5kRGlzcGF0
Y2hlcjo6UmVhc29uIGJyZWFrUmVhc29uLCBQYXNzUmVmUHRyPFByb3RvY29sOjpVbmNoZWNrZWRP
YmplY3Q+IGRhdGEpCiB7CiAgICAgbV9icmVha1JlYXNvbiA9IGJyZWFrUmVhc29uOwogICAgIG1f
YnJlYWtBdXhEYXRhID0gZGF0YTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaAppbmRleCA4
YjNmYjY2NDFkMjMyNzM3YWVjZmU2OGYxZjgwN2MxZWE5MzYyMmRiLi5jM2IzODI3ZGY4YzViYjhl
Njc2MTJjMGU0YWVjN2E3N2UxMThkOTMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5o
CkBAIC00OSwxMSArNDksMTQgQEAKIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKK25hbWVzcGFj
ZSBQcm90b2NvbCB7CitjbGFzcyBVbmNoZWNrZWRBcnJheTsKK2NsYXNzIFVuY2hlY2tlZE9iamVj
dDsKK2NsYXNzIFVuY2hlY2tlZFZhbHVlOworfQorCiBjbGFzcyBJbmplY3RlZFNjcmlwdDsKIGNs
YXNzIEluamVjdGVkU2NyaXB0TWFuYWdlcjsKLWNsYXNzIEluc3BlY3RvckFycmF5OwotY2xhc3Mg
SW5zcGVjdG9yT2JqZWN0OwotY2xhc3MgSW5zcGVjdG9yVmFsdWU7CiBjbGFzcyBTY3JpcHREZWJ1
Z1NlcnZlcjsKIHR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwogCkBAIC03MSwxMCArNzQsMTAg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBlbmFibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlk
ZTsKICAgICB2aXJ0dWFsIHZvaWQgZGlzYWJsZShFcnJvclN0cmluZyYpIG92ZXJyaWRlOwogICAg
IHZpcnR1YWwgdm9pZCBzZXRCcmVha3BvaW50c0FjdGl2ZShFcnJvclN0cmluZyYsIGJvb2wgYWN0
aXZlKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0QnJlYWtwb2ludEJ5VXJsKEVycm9y
U3RyaW5nJiwgaW50IGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxVUkwsIGNvbnN0
IFN0cmluZyogb3B0aW9uYWxVUkxSZWdleCwgY29uc3QgaW50KiBvcHRpb25hbENvbHVtbk51bWJl
ciwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0Piogb3B0aW9ucywgSW5z
cGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRJZCosIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6TG9jYXRp
b24+PiYgbG9jYXRpb25zKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0QnJlYWtwb2lu
dChFcnJvclN0cmluZyYsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4m
IGxvY2F0aW9uLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+KiBvcHRp
b25zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludElkKiwgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpMb2NhdGlvbj4mIGFjdHVhbExvY2F0aW9u
KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QnJlYWtwb2ludEJ5VXJsKEVycm9yU3Ry
aW5nJiwgaW50IGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxVUkwsIGNvbnN0IFN0
cmluZyogb3B0aW9uYWxVUkxSZWdleCwgY29uc3QgaW50KiBvcHRpb25hbENvbHVtbk51bWJlciwg
Y29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4qIG9wdGlv
bnMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50SWQqLCBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6
OkxvY2F0aW9uPj4mIGxvY2F0aW9ucykgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHNldEJy
ZWFrcG9pbnQoRXJyb3JTdHJpbmcmLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
VW5jaGVja2VkT2JqZWN0PiYgbG9jYXRpb24sIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpVbmNoZWNrZWRPYmplY3Q+KiBvcHRpb25zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1
Z2dlcjo6QnJlYWtwb2ludElkKiwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2Vy
OjpMb2NhdGlvbj4mIGFjdHVhbExvY2F0aW9uKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQg
cmVtb3ZlQnJlYWtwb2ludChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgYnJlYWtwb2ludElk
ZW50aWZpZXIpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBjb250aW51ZVRvTG9jYXRpb24o
RXJyb3JTdHJpbmcmLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgbG9jYXRpb24pIG92
ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBjb250aW51ZVRvTG9jYXRpb24oRXJyb3JTdHJpbmcm
LCBjb25zdCBSZWZQdHI8UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4mIGxvY2F0aW9uKSBvdmVy
cmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgc2VhcmNoSW5Db250ZW50KEVycm9yU3RyaW5nJiwgY29u
c3QgU3RyaW5nJiBzY3JpcHRJRCwgY29uc3QgU3RyaW5nJiBxdWVyeSwgY29uc3QgYm9vbCogb3B0
aW9uYWxDYXNlU2Vuc2l0aXZlLCBjb25zdCBib29sKiBvcHRpb25hbElzUmVnZXgsIFJlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpHZW5lcmljVHlw
ZXM6OlNlYXJjaE1hdGNoPj4mKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgZ2V0U2NyaXB0
U291cmNlKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBzY3JpcHRJRCwgU3RyaW5nKiBzY3Jp
cHRTb3VyY2UpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBnZXRGdW5jdGlvbkRldGFpbHMo
RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGZ1bmN0aW9uSWQsIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpEZWJ1Z2dlcjo6RnVuY3Rpb25EZXRhaWxzPiYpIG92ZXJyaWRlOwpAQCAtOTEs
OSArOTQsOSBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBoYW5kbGVDb25zb2xlQXNzZXJ0KCk7
CiAKLSAgICB2b2lkIHNjaGVkdWxlUGF1c2VPbk5leHRTdGF0ZW1lbnQoSW5zcGVjdG9yRGVidWdn
ZXJGcm9udGVuZERpc3BhdGNoZXI6OlJlYXNvbiBicmVha1JlYXNvbiwgUGFzc1JlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IGRhdGEpOworICAgIHZvaWQgc2NoZWR1bGVQYXVzZU9uTmV4dFN0YXRlbWVu
dChJbnNwZWN0b3JEZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVhc29uIGJyZWFrUmVhc29u
LCBQYXNzUmVmUHRyPFByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IGRhdGEpOwogICAgIHZvaWQg
Y2FuY2VsUGF1c2VPbk5leHRTdGF0ZW1lbnQoKTsKLSAgICB2b2lkIGJyZWFrUHJvZ3JhbShJbnNw
ZWN0b3JEZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVhc29uIGJyZWFrUmVhc29uLCBQYXNz
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGF0YSk7CisgICAgdm9pZCBicmVha1Byb2dyYW0oSW5z
cGVjdG9yRGVidWdnZXJGcm9udGVuZERpc3BhdGNoZXI6OlJlYXNvbiBicmVha1JlYXNvbiwgUGFz
c1JlZlB0cjxQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBkYXRhKTsKICAgICB2b2lkIHNjcmlw
dEV4ZWN1dGlvbkJsb2NrZWRCeUNTUChjb25zdCBTdHJpbmcmIGRpcmVjdGl2ZVRleHQpOwogCiAg
ICAgY2xhc3MgTGlzdGVuZXIgewpAQCAtMTQzLDExICsxNDYsMTEgQEAgcHJpdmF0ZToKICAgICB2
b2lkIGNsZWFySW5zcGVjdG9yQnJlYWtwb2ludFN0YXRlKCk7CiAgICAgdm9pZCBjbGVhckJyZWFr
RGV0YWlscygpOwogCi0gICAgYm9vbCBicmVha3BvaW50QWN0aW9uc0Zyb21Qcm90b2NvbChFcnJv
clN0cmluZyYsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4mIGFjdGlvbnMsIEJyZWFrcG9pbnRBY3Rp
b25zKiByZXN1bHQpOworICAgIGJvb2wgYnJlYWtwb2ludEFjdGlvbnNGcm9tUHJvdG9jb2woRXJy
b3JTdHJpbmcmLCBSZWZQdHI8UHJvdG9jb2w6OlVuY2hlY2tlZEFycmF5PiYgYWN0aW9ucywgQnJl
YWtwb2ludEFjdGlvbnMqIHJlc3VsdCk7CiAKICAgICB0eXBlZGVmIEhhc2hNYXA8SlNDOjpTb3Vy
Y2VJRCwgU2NyaXB0PiBTY3JpcHRzTWFwOwogICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFZl
Y3RvcjxKU0M6OkJyZWFrcG9pbnRJRD4+IEJyZWFrcG9pbnRJZGVudGlmaWVyVG9EZWJ1Z1NlcnZl
ckJyZWFrcG9pbnRJRHNNYXA7Ci0gICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4+IEJyZWFrcG9pbnRJZGVudGlmaWVyVG9CcmVha3BvaW50TWFwOworICAg
IHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0
Pj4gQnJlYWtwb2ludElkZW50aWZpZXJUb0JyZWFrcG9pbnRNYXA7CiAKICAgICBJbmplY3RlZFNj
cmlwdE1hbmFnZXIqIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOwogICAgIHN0ZDo6dW5pcXVlX3B0
cjxJbnNwZWN0b3JEZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hlcj4gbV9mcm9udGVuZERpc3BhdGNo
ZXI7CkBAIC0xNjAsNyArMTYzLDcgQEAgcHJpdmF0ZToKICAgICBCcmVha3BvaW50SWRlbnRpZmll
clRvQnJlYWtwb2ludE1hcCBtX2phdmFTY3JpcHRCcmVha3BvaW50czsKICAgICBKU0M6OkJyZWFr
cG9pbnRJRCBtX2NvbnRpbnVlVG9Mb2NhdGlvbkJyZWFrcG9pbnRJRDsKICAgICBJbnNwZWN0b3JE
ZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVhc29uIG1fYnJlYWtSZWFzb247Ci0gICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gbV9icmVha0F1eERhdGE7CisgICAgUmVmUHRyPFByb3RvY29s
OjpVbmNoZWNrZWRPYmplY3Q+IG1fYnJlYWtBdXhEYXRhOwogICAgIGJvb2wgbV9lbmFibGVkOwog
ICAgIGJvb2wgbV9qYXZhU2NyaXB0UGF1c2VTY2hlZHVsZWQ7CiAgICAgaW50IG1fbmV4dFByb2Jl
U2FtcGxlSWQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JSdW50aW1lQWdlbnQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVudGltZUFnZW50LmNwcAppbmRleCBjMDBmM2ZlNTJk
MzExZTZlNGUwYmY3NzkzNDdmOTg0ZGJiMGE3OTJlLi42MDYwN2JjMGNmZTAyNmJkYWEyZDFmYzlh
NDg3YWIyYWQyNzdiYjNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JSdW50aW1lQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5jcHAKQEAgLTM4
LDcgKzM4LDcgQEAKICNpbmNsdWRlICJIZWFwSXRlcmF0aW9uU2NvcGUuaCIKICNpbmNsdWRlICJJ
bmplY3RlZFNjcmlwdC5oIgogI2luY2x1ZGUgIkluamVjdGVkU2NyaXB0TWFuYWdlci5oIgotI2lu
Y2x1ZGUgIkluc3BlY3RvclZhbHVlcy5oIgorI2luY2x1ZGUgIkluc3BlY3RvclByb3RvY29sVHlw
ZXMuaCIKICNpbmNsdWRlICJKU0xvY2suaCIKICNpbmNsdWRlICJQYXJzZXJFcnJvci5oIgogI2lu
Y2x1ZGUgIlNjcmlwdERlYnVnU2VydmVyLmgiCkBAIC0xMzcsNyArMTM3LDcgQEAgdm9pZCBJbnNw
ZWN0b3JSdW50aW1lQWdlbnQ6OmV2YWx1YXRlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29u
c3QgU3RyaW5nJiBleHAKICAgICB9CiB9CiAKLXZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50Ojpj
YWxsRnVuY3Rpb25PbihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgb2Jq
ZWN0SWQsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgUmVmUHRyPEluc3BlY3RvckFy
cmF5PiogY29uc3Qgb3B0aW9uYWxBcmd1bWVudHMsIGNvbnN0IGJvb2wqIGNvbnN0IGRvTm90UGF1
c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSwgY29uc3QgYm9vbCogY29uc3QgcmV0dXJuQnlW
YWx1ZSwgY29uc3QgYm9vbCogZ2VuZXJhdGVQcmV2aWV3LCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBJbnNwZWN0b3I6OlByb3RvY29s
OjpPcHRPdXRwdXQ8Ym9vbD4qIHdhc1Rocm93bikKK3ZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50
OjpjYWxsRnVuY3Rpb25PbihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYg
b2JqZWN0SWQsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgUmVmUHRyPFByb3RvY29s
OjpVbmNoZWNrZWRBcnJheT4qIGNvbnN0IG9wdGlvbmFsQXJndW1lbnRzLCBjb25zdCBib29sKiBj
b25zdCBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUsIGNvbnN0IGJvb2wqIGNv
bnN0IHJldHVybkJ5VmFsdWUsIGNvbnN0IGJvb2wqIGdlbmVyYXRlUHJldmlldywgUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCwgSW5zcGVj
dG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PGJvb2w+KiB3YXNUaHJvd24pCiB7CiAgICAgSW5qZWN0
ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBtX2luamVjdGVkU2NyaXB0TWFuYWdlci0+aW5qZWN0
ZWRTY3JpcHRGb3JPYmplY3RJZChvYmplY3RJZCk7CiAgICAgaWYgKGluamVjdGVkU2NyaXB0Lmhh
c05vVmFsdWUoKSkgewpAQCAtMTk3LDcgKzE5Nyw3IEBAIHZvaWQgSW5zcGVjdG9yUnVudGltZUFn
ZW50OjpydW4oRXJyb3JTdHJpbmcmKQogewogfQogCi12b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2Vu
dDo6Z2V0UnVudGltZVR5cGVzRm9yVmFyaWFibGVzQXRPZmZzZXRzKEVycm9yU3RyaW5nJiBlcnJv
clN0cmluZywgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+JiBsb2NhdGlv
bnMsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29s
OjpSdW50aW1lOjpUeXBlRGVzY3JpcHRpb24+PiYgdHlwZURlc2NyaXB0aW9ucykKK3ZvaWQgSW5z
cGVjdG9yUnVudGltZUFnZW50OjpnZXRSdW50aW1lVHlwZXNGb3JWYXJpYWJsZXNBdE9mZnNldHMo
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6VW5jaGVja2VkQXJyYXk+JiBsb2NhdGlvbnMsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpUeXBlRGVzY3JpcHRpb24+PiYg
dHlwZURlc2NyaXB0aW9ucykKIHsKICAgICBzdGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFs
c2U7CiAgICAgVk0mIHZtID0gZ2xvYmFsVk0oKTsKQEAgLTIxMSw4ICsyMTEsOCBAQCB2b2lkIElu
c3BlY3RvclJ1bnRpbWVBZ2VudDo6Z2V0UnVudGltZVR5cGVzRm9yVmFyaWFibGVzQXRPZmZzZXRz
KEVycm9yU3RyaW5nJiBlcgogICAgIHZtLnR5cGVQcm9maWxlckxvZygpLT5wcm9jZXNzTG9nRW50
cmllcyhBU0NJSUxpdGVyYWwoIlVzZXIgUXVlcnkiKSk7CiAKICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGxvY2F0aW9ucy0+bGVuZ3RoKCk7IGkrKykgewotICAgICAgICBSZWZQdHI8SW5zcGVj
dG9yOjpJbnNwZWN0b3JWYWx1ZT4gdmFsdWUgPSBsb2NhdGlvbnMtPmdldChpKTsKLSAgICAgICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbG9jYXRpb247CisgICAgICAgIFJlZlB0cjxQcm90b2Nv
bDo6VW5jaGVja2VkVmFsdWU+IHZhbHVlID0gbG9jYXRpb25zLT5nZXQoaSk7CisgICAgICAgIFJl
ZlB0cjxQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBsb2NhdGlvbjsKICAgICAgICAgaWYgKCF2
YWx1ZS0+YXNPYmplY3QobG9jYXRpb24pKSB7CiAgICAgICAgICAgICBlcnJvclN0cmluZyA9IEFT
Q0lJTGl0ZXJhbCgiQXJyYXkgb2YgVHlwZUxvY2F0aW9uIG9iamVjdHMgaGFzIGFuIG9iamVjdCB0
aGF0IGRvZXMgbm90IGhhdmUgdHlwZSBvZiBUeXBlTG9jYXRpb24uIik7CiAgICAgICAgICAgICBy
ZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50
cy9JbnNwZWN0b3JSdW50aW1lQWdlbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5oCmluZGV4IGMyYmZjNTU5NmE1YWMwMWVj
ZWNmN2EwZTE1ZDUwNWU3N2U3MWFmMWIuLjliMzMzODYxODIzYzMxYTg0NTNhMzczYWI5OWM3Y2Y2
ZGY2MDVkODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdl
bnRzL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5oCkBAIC00Niw5ICs0NiwxMiBA
QCBjbGFzcyBWTTsKIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKK25hbWVzcGFjZSBQcm90b2Nv
bCB7CitjbGFzcyBVbmNoZWNrZWRBcnJheTsKK30KKwogY2xhc3MgSW5qZWN0ZWRTY3JpcHQ7CiBj
bGFzcyBJbmplY3RlZFNjcmlwdE1hbmFnZXI7Ci1jbGFzcyBJbnNwZWN0b3JBcnJheTsKIGNsYXNz
IFNjcmlwdERlYnVnU2VydmVyOwogdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAKQEAgLTYz
LDEyICs2NiwxMiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRpc2FibGUoRXJyb3JTdHJp
bmcmKSBvdmVycmlkZSB7IG1fZW5hYmxlZCA9IGZhbHNlOyB9CiAgICAgdmlydHVhbCB2b2lkIHBh
cnNlKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBJbnNwZWN0b3I6OlBy
b3RvY29sOjpSdW50aW1lOjpTeW50YXhFcnJvclR5cGUqIHJlc3VsdCwgSW5zcGVjdG9yOjpQcm90
b2NvbDo6T3B0T3V0cHV0PFN0cmluZz4qIG1lc3NhZ2UsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpSdW50aW1lOjpFcnJvclJhbmdlPiYpIG92ZXJyaWRlIGZpbmFsOwogICAgIHZpcnR1YWwg
dm9pZCBldmFsdWF0ZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29u
c3QgU3RyaW5nKiBvYmplY3RHcm91cCwgY29uc3QgYm9vbCogaW5jbHVkZUNvbW1hbmRMaW5lQVBJ
LCBjb25zdCBib29sKiBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUsIGNvbnN0
IGludCogZXhlY3V0aW9uQ29udGV4dElkLCBjb25zdCBib29sKiByZXR1cm5CeVZhbHVlLCBjb25z
dCBib29sKiBnZW5lcmF0ZVByZXZpZXcsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50
aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1
dDxib29sPiogd2FzVGhyb3duKSBvdmVycmlkZSBmaW5hbDsKLSAgICB2aXJ0dWFsIHZvaWQgY2Fs
bEZ1bmN0aW9uT24oRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBjb25zdCBT
dHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5
Piogb3B0aW9uYWxBcmd1bWVudHMsIGNvbnN0IGJvb2wqIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNB
bmRNdXRlQ29uc29sZSwgY29uc3QgYm9vbCogcmV0dXJuQnlWYWx1ZSwgY29uc3QgYm9vbCogZ2Vu
ZXJhdGVQcmV2aWV3LCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3Rl
T2JqZWN0PiYgcmVzdWx0LCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8Ym9vbD4qIHdh
c1Rocm93bikgb3ZlcnJpZGUgZmluYWw7CisgICAgdmlydHVhbCB2b2lkIGNhbGxGdW5jdGlvbk9u
KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgY29uc3QgU3RyaW5nJiBleHBy
ZXNzaW9uLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkQXJyYXk+
KiBvcHRpb25hbEFyZ3VtZW50cywgY29uc3QgYm9vbCogZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0Fu
ZE11dGVDb25zb2xlLCBjb25zdCBib29sKiByZXR1cm5CeVZhbHVlLCBjb25zdCBib29sKiBnZW5l
cmF0ZVByZXZpZXcsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVP
YmplY3Q+JiByZXN1bHQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxib29sPiogd2Fz
VGhyb3duKSBvdmVycmlkZSBmaW5hbDsKICAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZU9iamVjdChF
cnJvclN0cmluZyYsIGNvbnN0IEVycm9yU3RyaW5nJiBvYmplY3RJZCkgb3ZlcnJpZGUgZmluYWw7
CiAgICAgdmlydHVhbCB2b2lkIGdldFByb3BlcnRpZXMoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJp
bmcmIG9iamVjdElkLCBjb25zdCBib29sKiBvd25Qcm9wZXJ0aWVzLCBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UHJvcGVydHlE
ZXNjcmlwdG9yPj4mIHJlc3VsdCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkludGVybmFsUHJvcGVydHlEZXNjcmlwdG9yPj4m
IGludGVybmFsUHJvcGVydGllcykgb3ZlcnJpZGUgZmluYWw7CiAgICAgdmlydHVhbCB2b2lkIHJl
bGVhc2VPYmplY3RHcm91cChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXAp
IG92ZXJyaWRlIGZpbmFsOwogICAgIHZpcnR1YWwgdm9pZCBydW4oRXJyb3JTdHJpbmcmKSBvdmVy
cmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0UnVudGltZVR5cGVzRm9yVmFyaWFibGVzQXRPZmZz
ZXRzKEVycm9yU3RyaW5nJiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+
JiBsb2NhdGlvbnMsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6
OlByb3RvY29sOjpSdW50aW1lOjpUeXBlRGVzY3JpcHRpb24+PiYpIG92ZXJyaWRlOworICAgIHZp
cnR1YWwgdm9pZCBnZXRSdW50aW1lVHlwZXNGb3JWYXJpYWJsZXNBdE9mZnNldHMoRXJyb3JTdHJp
bmcmLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkQXJyYXk+JiBs
b2NhdGlvbnMsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlBy
b3RvY29sOjpSdW50aW1lOjpUeXBlRGVzY3JpcHRpb24+PiYpIG92ZXJyaWRlOwogICAgIHZpcnR1
YWwgdm9pZCBlbmFibGVUeXBlUHJvZmlsZXIoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKICAgICB2
aXJ0dWFsIHZvaWQgZGlzYWJsZVR5cGVQcm9maWxlcihFcnJvclN0cmluZyYpIG92ZXJyaWRlOwog
ICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weSBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2JhY2tlbmRf
ZGlzcGF0Y2hlcl9oZWFkZXIucHkKaW5kZXggMDcxNGMzZGNlYzliYTFjZDAxMjFjNmZmNzZiOWFi
NGYxYTI2MDdkOS4uZDkzODk5MGRmZTY4YzMyMDFiM2JmY2EyMmIyODkxZTkwMmZiNGQzMiAxMDA3
NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Z2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9iYWNrZW5kX2Rpc3Bh
dGNoZXJfaGVhZGVyLnB5CkBAIC0xNzcsNCArMTc3LDQgQEAgY2xhc3MgQmFja2VuZERpc3BhdGNo
ZXJIZWFkZXJHZW5lcmF0b3IoR2VuZXJhdG9yKToKICAgICAgICAgcmV0dXJuIEdlbmVyYXRvci53
cmFwX3dpdGhfZ3VhcmRfZm9yX2RvbWFpbihkb21haW4sIFRlbXBsYXRlKFRlbXBsYXRlcy5CYWNr
ZW5kRGlzcGF0Y2hlckhlYWRlckRvbWFpbkRpc3BhdGNoZXJEZWNsYXJhdGlvbikuc3Vic3RpdHV0
ZShOb25lLCAqKmhhbmRsZXJfYXJncykpCiAKICAgICBkZWYgX2dlbmVyYXRlX2Rpc3BhdGNoZXJf
ZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQoc2VsZiwgY29tbWFuZCk6Ci0gICAgICAgIHJldHVybiAi
ICAgIHZvaWQgJXMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0
JiBtZXNzYWdlKTsiICUgY29tbWFuZC5jb21tYW5kX25hbWUKKyAgICAgICAgcmV0dXJuICIgICAg
dm9pZCAlcyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2Vk
T2JqZWN0JiBtZXNzYWdlKTsiICUgY29tbWFuZC5jb21tYW5kX25hbWUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2Jh
Y2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9p
bXBsZW1lbnRhdGlvbi5weQppbmRleCAxYTUyZTI2ODgxNWIzODZkNmJmZWZjOTNmMGIxZDJmY2E5
ZWZmMTU5Li4zZGYyNjYzZDY3NDcyOGE5NjQ4ZWY3NzAxNGM4ZWQ4YmE0OGVmNWM3IDEwMDc1NQot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5l
cmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfYmFja2VuZF9k
aXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CkBAIC00OSw3ICs0OSw3IEBAIGNsYXNzIEJhY2tl
bmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoR2VuZXJhdG9yKToKICAgICBkZWYg
Z2VuZXJhdGVfb3V0cHV0KHNlbGYpOgogICAgICAgICBzZWNvbmRhcnlfaGVhZGVycyA9IFsKICAg
ICAgICAgICAgICc8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPicsCi0gICAg
ICAgICAgICAnPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4nLAorICAgICAgICAgICAgJzxp
bnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPicsCiAgICAgICAgICAgICAnPHd0Zi90
ZXh0L0NTdHJpbmcuaD4nXQogCiAgICAgICAgIGhlYWRlcl9hcmdzID0gewpAQCAtMjMzLDE2ICsy
MzMsMTYgQEAgY2xhc3MgQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihH
ZW5lcmF0b3IpOgogCiAgICAgICAgIGxpbmVzID0gW10KICAgICAgICAgaWYgbGVuKGNvbW1hbmQu
Y2FsbF9wYXJhbWV0ZXJzKSA9PSAwOgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCd2b2lkIElu
c3BlY3RvciUoZG9tYWluTmFtZSlzQmFja2VuZERpc3BhdGNoZXI6OiUoY29tbWFuZE5hbWUpcyhs
b25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiknICUgY29tbWFuZF9hcmdzKQorICAg
ICAgICAgICAgbGluZXMuYXBwZW5kKCd2b2lkIEluc3BlY3RvciUoZG9tYWluTmFtZSlzQmFja2Vu
ZERpc3BhdGNoZXI6OiUoY29tbWFuZE5hbWUpcyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9y
OjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0JiknICUgY29tbWFuZF9hcmdzKQogICAgICAgICBl
bHNlOgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCd2b2lkIEluc3BlY3RvciUoZG9tYWluTmFt
ZSlzQmFja2VuZERpc3BhdGNoZXI6OiUoY29tbWFuZE5hbWUpcyhsb25nIGNhbGxJZCwgY29uc3Qg
SW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKScgJSBjb21tYW5kX2FyZ3MpCisgICAgICAgICAgICBs
aW5lcy5hcHBlbmQoJ3ZvaWQgSW5zcGVjdG9yJShkb21haW5OYW1lKXNCYWNrZW5kRGlzcGF0Y2hl
cjo6JShjb21tYW5kTmFtZSlzKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29s
OjpVbmNoZWNrZWRPYmplY3QmIG1lc3NhZ2UpJyAlIGNvbW1hbmRfYXJncykKICAgICAgICAgbGlu
ZXMuYXBwZW5kKCd7JykKIAogICAgICAgICBpZiBsZW4oY29tbWFuZC5jYWxsX3BhcmFtZXRlcnMp
ID4gMDoKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuQmFja2Vu
ZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvblByZXBhcmVDb21tYW5kQXJndW1lbnRzKS5zdWJzdGl0
dXRlKE5vbmUsICoqY29tbWFuZF9hcmdzKSkKIAogICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBF
cnJvclN0cmluZyBlcnJvcjsnKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOycpCisgICAg
ICAgIGxpbmVzLmFwcGVuZCgnICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNr
ZWRPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdDo6
Y3JlYXRlKCk7JykKICAgICAgICAgaWYgY29tbWFuZC5pc19hc3luYzoKICAgICAgICAgICAgIGxp
bmVzLmFwcGVuZCgnICAgIFJlZlB0cjxJbnNwZWN0b3IlKGRvbWFpbk5hbWUpc0JhY2tlbmREaXNw
YXRjaGVySGFuZGxlcjo6JShjYWxsYmFja05hbWUpcz4gY2FsbGJhY2sgPSBhZG9wdFJlZihuZXcg
SW5zcGVjdG9yJShkb21haW5OYW1lKXNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OiUoY2FsbGJh
Y2tOYW1lKXMobV9iYWNrZW5kRGlzcGF0Y2hlcixjYWxsSWQpKTsnICUgY29tbWFuZF9hcmdzKQog
ICAgICAgICBpZiBsZW4oY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVycykgPiAwOgpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJh
dGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2hl
YWRlci5weQppbmRleCA4NTU0MTQ3Y2Y5ODU5NGQyODFmNDBmMWFlOTFlMDk5NmJkOWQ5ZTc3Li4w
OTJjZmM1NjViNDY4ZDJhZTFiNDE2ZGE0ZTQ4YWFiNWViMDExZTU2IDEwMDc1NQotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9mcm9u
dGVuZF9kaXNwYXRjaGVyX2hlYWRlci5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRl
ci5weQpAQCAtNTEsNyArNTEsNyBAQCBjbGFzcyBGcm9udGVuZERpc3BhdGNoZXJIZWFkZXJHZW5l
cmF0b3IoR2VuZXJhdG9yKToKICAgICAgICAgaGVhZGVycyA9IFsKICAgICAgICAgICAgICciSW5z
cGVjdG9yJXNQcm90b2NvbFR5cGVzLmgiJyAlIHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGlu
ZygncHJlZml4JyksCiAgICAgICAgICAgICAnPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwuaD4nLAotICAgICAgICAgICAgJzxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+JywK
KyAgICAgICAgICAgICc8aW5zcGVjdG9yL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4nLAogICAg
ICAgICAgICAgJzx3dGYvUGFzc1JlZlB0ci5oPicsCiAgICAgICAgICAgICAnPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPiddCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50
YXRpb24ucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9nZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CmluZGV4IDk1
NzcwNDU3ZjY3MTU1NGU5YzIzNDEzOGU3YTRkMWFmYmQ0MWI5ZWQuLjBkZjQ0NTcyN2I2N2QzZTFk
NjM5MDQ1NDJhOGVhOTE1OGUzODVhNjkgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJf
aW1wbGVtZW50YXRpb24ucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlv
bi5weQpAQCAtMTA3LDExICsxMDcsMTEgQEAgY2xhc3MgRnJvbnRlbmREaXNwYXRjaGVySW1wbGVt
ZW50YXRpb25HZW5lcmF0b3IoR2VuZXJhdG9yKToKIAogICAgICAgICBsaW5lcy5hcHBlbmQoJ3Zv
aWQgSW5zcGVjdG9yJShkb21haW5OYW1lKXNGcm9udGVuZERpc3BhdGNoZXI6OiUoZXZlbnROYW1l
KXMoJShmb3JtYWxQYXJhbWV0ZXJzKXMpJyAlIGV2ZW50X2FyZ3MpCiAgICAgICAgIGxpbmVzLmFw
cGVuZCgneycpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IGpzb25NZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsnKQorICAgICAgICBs
aW5lcy5hcHBlbmQoJyAgICBSZWZQdHI8UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4ganNvbk1l
c3NhZ2UgPSBQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0OjpjcmVhdGUoKTsnKQogICAgICAgICBs
aW5lcy5hcHBlbmQoJyAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibWV0
aG9kIiksIEFTQ0lJTGl0ZXJhbCgiJShkb21haW5OYW1lKXMuJShldmVudE5hbWUpcyIpKTsnICUg
ZXZlbnRfYXJncykKIAogICAgICAgICBpZiBsZW4ocGFyYW1ldGVyX2Fzc2lnbm1lbnRzKSA+IDA6
Ci0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBw
YXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOycpCisgICAgICAgICAgICBs
aW5lcy5hcHBlbmQoJyAgICBSZWZQdHI8UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gcGFyYW1z
T2JqZWN0ID0gUHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdDo6Y3JlYXRlKCk7JykKICAgICAgICAg
ICAgIGxpbmVzLmV4dGVuZChwYXJhbWV0ZXJfYXNzaWdubWVudHMpCiAgICAgICAgICAgICBsaW5l
cy5hcHBlbmQoJyAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1z
IiksIHBhcmFtc09iamVjdCk7JykKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfcHJvdG9jb2xfdHlwZXNfaGVhZGVy
LnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2Vu
ZXJhdGVfcHJvdG9jb2xfdHlwZXNfaGVhZGVyLnB5CmluZGV4IGI0NmQ3ODhiYjg1YTdkNWE1NDQ2
N2YwYjk1YjhjMWNlZGM0MDk2YzguLmFhYjA4ZDdiZGYxNWNlMTk5MGMyNGYzMDExYTZlNDc2ZmU5
Y2ZhMWYgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL2dlbmVyYXRlX3Byb3RvY29sX3R5cGVzX2hlYWRlci5weQorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9wcm90b2Nv
bF90eXBlc19oZWFkZXIucHkKQEAgLTE4Nyw3ICsxODcsNyBAQCBjbGFzcyBQcm90b2NvbFR5cGVz
SGVhZGVyR2VuZXJhdG9yKEdlbmVyYXRvcik6CiAgICAgICAgIGxpbmVzID0gW10KICAgICAgICAg
aWYgbGVuKHR5cGVfZGVjbGFyYXRpb24uZGVzY3JpcHRpb24pID4gMDoKICAgICAgICAgICAgIGxp
bmVzLmFwcGVuZCgnLyogJXMgKi8nICUgdHlwZV9kZWNsYXJhdGlvbi5kZXNjcmlwdGlvbikKLSAg
ICAgICAgYmFzZV9jbGFzcyA9ICdJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCcKKyAgICAgICAg
YmFzZV9jbGFzcyA9ICdJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3QnCiAgICAg
ICAgIGlmIG5vdCBHZW5lcmF0b3IudHlwZV9oYXNfb3Blbl9maWVsZHModHlwZV9kZWNsYXJhdGlv
bi50eXBlKToKICAgICAgICAgICAgIGJhc2VfY2xhc3MgPSBiYXNlX2NsYXNzICsgJ0Jhc2UnCiAg
ICAgICAgIGxpbmVzLmFwcGVuZCgnY2xhc3MgJXMgOiBwdWJsaWMgJXMgeycgJSAob2JqZWN0X25h
bWUsIGJhc2VfY2xhc3MpKQpAQCAtMzA1LDkgKzMwNSw5IEBAIGNsYXNzIFByb3RvY29sVHlwZXNI
ZWFkZXJHZW5lcmF0b3IoR2VuZXJhdG9yKToKICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgdm9p
ZCBzZXQlKGNhbWVsTmFtZSlzKCUocGFyYW1ldGVyVHlwZSlzIHZhbHVlKScgJSBzZXR0ZXJfYXJn
cykKICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgeycpCiAgICAgICAgIGlmIGlzaW5zdGFuY2Uo
dHlwZV9tZW1iZXIudHlwZSwgRW51bVR5cGUpOgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcg
ICAgICAgIEluc3BlY3Rvck9iamVjdEJhc2U6OiUoa2V5ZWRTZXQpcyhBU0NJSUxpdGVyYWwoIiUo
bmFtZSlzIiksIEluc3BlY3Rvcjo6UHJvdG9jb2w6OmdldCUoZnJhbWV3b3JrUHJlZml4KXNFbnVt
Q29uc3RhbnRWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+KHZhbHVlKSkpOycgJSBzZXR0ZXJfYXJncykK
KyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBVbmNoZWNrZWRPYmplY3RCYXNlOjol
KGtleWVkU2V0KXMoQVNDSUlMaXRlcmFsKCIlKG5hbWUpcyIpLCBJbnNwZWN0b3I6OlByb3RvY29s
OjpnZXQlKGZyYW1ld29ya1ByZWZpeClzRW51bUNvbnN0YW50VmFsdWUoc3RhdGljX2Nhc3Q8aW50
Pih2YWx1ZSkpKTsnICUgc2V0dGVyX2FyZ3MpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBs
aW5lcy5hcHBlbmQoJyAgICAgICAgSW5zcGVjdG9yT2JqZWN0QmFzZTo6JShrZXllZFNldClzKEFT
Q0lJTGl0ZXJhbCgiJShuYW1lKXMiKSwgdmFsdWUpOycgJSBzZXR0ZXJfYXJncykKKyAgICAgICAg
ICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBVbmNoZWNrZWRPYmplY3RCYXNlOjolKGtleWVkU2V0
KXMoQVNDSUlMaXRlcmFsKCIlKG5hbWUpcyIpLCB2YWx1ZSk7JyAlIHNldHRlcl9hcmdzKQogICAg
ICAgICBsaW5lcy5hcHBlbmQoJyAgICB9JykKICAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5l
cykKIApAQCAtMzM3LDkgKzMzNyw5IEBAIGNsYXNzIFByb3RvY29sVHlwZXNIZWFkZXJHZW5lcmF0
b3IoR2VuZXJhdG9yKToKICAgICAgICAgZm9yIGFyZ3VtZW50IGluIHR5cGVfYXJndW1lbnRzOgog
ICAgICAgICAgICAgbGluZXMuYXBwZW5kKCd0ZW1wbGF0ZTw+ICVzIEJpbmRpbmdUcmFpdHM8JXM+
IHsnICUgKCcgJy5qb2luKHN0cnVjdF9rZXl3b3JkcyksIGFyZ3VtZW50WzBdKSkKICAgICAgICAg
ICAgIGlmIGFyZ3VtZW50WzFdOgotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnc3RhdGlj
IFBhc3NSZWZQdHI8JXM+IHJ1bnRpbWVDYXN0KFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0
b3JWYWx1ZT4gdmFsdWUpOycgJSBhcmd1bWVudFswXSkKKyAgICAgICAgICAgICAgICBsaW5lcy5h
cHBlbmQoJ3N0YXRpYyBQYXNzUmVmUHRyPCVzPiBydW50aW1lQ2FzdChQYXNzUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZFZhbHVlPiB2YWx1ZSk7JyAlIGFyZ3VtZW50WzBdKQog
ICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcjaWYgIUFTU0VSVF9ESVNBQkxFRCcpCi0gICAgICAg
ICAgICBsaW5lcy5hcHBlbmQoJyVzIGFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEluc3BlY3Rv
cjo6SW5zcGVjdG9yVmFsdWUqKTsnICUgJyAnLmpvaW4oZnVuY3Rpb25fa2V5d29yZHMpKQorICAg
ICAgICAgICAgbGluZXMuYXBwZW5kKCclcyBhc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShJbnNw
ZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRWYWx1ZSopOycgJSAnICcuam9pbihmdW5jdGlvbl9r
ZXl3b3JkcykpCiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyNlbmRpZiAvLyAhQVNTRVJUX0RJ
U0FCTEVEJykKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnfTsnKQogICAgICAgICByZXR1cm4g
J1xuJy5qb2luKGxpbmVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRp
b24ucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9n
ZW5lcmF0ZV9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weQppbmRleCA3NmUxMmZmMjI5
YjZiYzgzY2E3NTU5MDM5NDIyZDA1ZjIzM2FhY2JlLi5jNTU1ODc1ZmZiZGU0NDNjMWQxZDNkZTE4
M2U2NTcyNDVmODkzOGY2IDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlv
bi5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9nZW5lcmF0ZV9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weQpAQCAtMTIyLDkgKzEy
Miw5IEBAIGNsYXNzIFByb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihHZW5lcmF0
b3IpOgogICAgICAgICBsaW5lcyA9IFtdCiAKICAgICAgICAgbGluZXMuYXBwZW5kKCcjaWYgIUFT
U0VSVF9ESVNBQkxFRCcpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgndm9pZCBCaW5kaW5nVHJhaXRz
PCVzPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1
ZSogdmFsdWUpJyAlIChHZW5lcmF0b3IucHJvdG9jb2xfdHlwZV9zdHJpbmdfZm9yX3R5cGUob2Jq
ZWN0X2RlY2xhcmF0aW9uLnR5cGUpKSkKKyAgICAgICAgbGluZXMuYXBwZW5kKCd2b2lkIEJpbmRp
bmdUcmFpdHM8JXM+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShQcm90b2NvbDo6VW5jaGVj
a2VkVmFsdWUqIHZhbHVlKScgJSAoR2VuZXJhdG9yLnByb3RvY29sX3R5cGVfc3RyaW5nX2Zvcl90
eXBlKG9iamVjdF9kZWNsYXJhdGlvbi50eXBlKSkpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgiIiJ7
Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb2JqZWN0OworICAgIFJlZlB0cjxQcm90b2Nv
bDo6VW5jaGVja2VkT2JqZWN0PiBvYmplY3Q7CiAgICAgYm9vbCBjYXN0U3VjY2VlZGVkID0gdmFs
dWUtPmFzT2JqZWN0KG9iamVjdCk7CiAgICAgQVNTRVJUX1VOVVNFRChjYXN0U3VjY2VlZGVkLCBj
YXN0U3VjY2VlZGVkKTsiIiIpCiAgICAgICAgIGZvciB0eXBlX21lbWJlciBpbiByZXF1aXJlZF9t
ZW1iZXJzOgpAQCAtMTM0LDcgKzEzNCw3IEBAIGNsYXNzIFByb3RvY29sVHlwZXNJbXBsZW1lbnRh
dGlvbkdlbmVyYXRvcihHZW5lcmF0b3IpOgogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBs
aW5lcy5hcHBlbmQoIiIiICAgIHsKLSAgICAgICAgSW5zcGVjdG9yT2JqZWN0OjppdGVyYXRvciAl
KG1lbWJlck5hbWUpc1BvcyA9IG9iamVjdC0+ZmluZChBU0NJSUxpdGVyYWwoIiUobWVtYmVyTmFt
ZSlzIikpOworICAgICAgICBQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0OjppdGVyYXRvciAlKG1l
bWJlck5hbWUpc1BvcyA9IG9iamVjdC0+ZmluZChBU0NJSUxpdGVyYWwoIiUobWVtYmVyTmFtZSlz
IikpOwogICAgICAgICBBU1NFUlQoJShtZW1iZXJOYW1lKXNQb3MgIT0gb2JqZWN0LT5lbmQoKSk7
CiAgICAgICAgICUoYXNzZXJ0TWV0aG9kKXMoJShtZW1iZXJOYW1lKXNQb3MtPnZhbHVlLmdldCgp
KTsKICAgICB9IiIiICUgYXJncykKQEAgLTE1MCw3ICsxNTAsNyBAQCBjbGFzcyBQcm90b2NvbFR5
cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IoR2VuZXJhdG9yKToKICAgICAgICAgICAgIH0KIAog
ICAgICAgICAgICAgbGluZXMuYXBwZW5kKCIiIiAgICB7Ci0gICAgICAgIEluc3BlY3Rvck9iamVj
dDo6aXRlcmF0b3IgJShtZW1iZXJOYW1lKXNQb3MgPSBvYmplY3QtPmZpbmQoQVNDSUlMaXRlcmFs
KCIlKG1lbWJlck5hbWUpcyIpKTsKKyAgICAgICAgUHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdDo6
aXRlcmF0b3IgJShtZW1iZXJOYW1lKXNQb3MgPSBvYmplY3QtPmZpbmQoQVNDSUlMaXRlcmFsKCIl
KG1lbWJlck5hbWUpcyIpKTsKICAgICAgICAgaWYgKCUobWVtYmVyTmFtZSlzUG9zICE9IG9iamVj
dC0+ZW5kKCkpIHsKICAgICAgICAgICAgICUoYXNzZXJ0TWV0aG9kKXMoJShtZW1iZXJOYW1lKXNQ
b3MtPnZhbHVlLmdldCgpKTsiIiIgJSBhcmdzKQogCkBAIC0xNjksNyArMTY5LDcgQEAgY2xhc3Mg
UHJvdG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yKEdlbmVyYXRvcik6CiAgICAgZGVm
IF9nZW5lcmF0ZV9hc3NlcnRpb25fZm9yX2VudW0oc2VsZiwgZW51bV9tZW1iZXIsIG9iamVjdF9k
ZWNsYXJhdGlvbik6CiAgICAgICAgIGxpbmVzID0gW10KICAgICAgICAgbGluZXMuYXBwZW5kKCcj
aWYgIUFTU0VSVF9ESVNBQkxFRCcpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgndm9pZCAlcyhJbnNw
ZWN0b3I6Okluc3BlY3RvclZhbHVlKiB2YWx1ZSknICUgR2VuZXJhdG9yLmFzc2VydGlvbl9tZXRo
b2RfZm9yX3R5cGVfbWVtYmVyKGVudW1fbWVtYmVyLCBvYmplY3RfZGVjbGFyYXRpb24pKQorICAg
ICAgICBsaW5lcy5hcHBlbmQoJ3ZvaWQgJXMoUHJvdG9jb2w6OlVuY2hlY2tlZFZhbHVlKiB2YWx1
ZSknICUgR2VuZXJhdG9yLmFzc2VydGlvbl9tZXRob2RfZm9yX3R5cGVfbWVtYmVyKGVudW1fbWVt
YmVyLCBvYmplY3RfZGVjbGFyYXRpb24pKQogICAgICAgICBsaW5lcy5hcHBlbmQoJ3snKQogICAg
ICAgICBsaW5lcy5hcHBlbmQoJyAgICBTdHJpbmcgcmVzdWx0OycpCiAgICAgICAgIGxpbmVzLmFw
cGVuZCgnICAgIGJvb2wgY2FzdFN1Y2NlZWRlZCA9IHZhbHVlLT5hc1N0cmluZyhyZXN1bHQpOycp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0b3IucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvY29kZWdlbi9nZW5lcmF0b3IucHkKaW5kZXggMmE2ZWI2NzkyMzQ3Njg2YjE5NzBhYTQ5Mzcx
M2JjYWE3ZDU2Y2UzOC4uNDljYTk2YzJmNTUwNWEwODYwM2E5YzZlMGVmYzY0ODhlZjcwM2NlOCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVn
ZW4vZ2VuZXJhdG9yLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL2dlbmVyYXRvci5weQpAQCAtNDMsMTMgKzQzLDEzIEBAIF9QUklNSVRJVkVf
VE9fQ1BQX05BTUVfTUFQID0gewogICAgICdpbnRlZ2VyJzogJ2ludCcsCiAgICAgJ251bWJlcic6
ICdkb3VibGUnLAogICAgICdzdHJpbmcnOiAnU3RyaW5nJywKLSAgICAnb2JqZWN0JzogJ0luc3Bl
Y3Rvcjo6SW5zcGVjdG9yT2JqZWN0JywKLSAgICAnYW55JzogJ0luc3BlY3Rvcjo6SW5zcGVjdG9y
VmFsdWUnCisgICAgJ29iamVjdCc6ICdJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmpl
Y3QnLAorICAgICdhbnknOiAnSW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkVmFsdWUnCiB9
CiAKIF9BTFdBWVNfVVBQRVJDQVNFRF9FTlVNX1ZBTFVFX1NVQlNUUklOR1MgPSBzZXQoWydBUEkn
LCAnQ1NTJywgJ0RPTScsICdIVE1MJywgJ1hIUicsICdYTUwnXSkKIAotIyBUaGVzZSBvYmplY3Rz
IGFyZSBidWlsdCBtYW51YWxseSBieSBjcmVhdGluZyBhbmQgc2V0dGluZyBJbnNwZWN0b3JWYWx1
ZXMuCisjIFRoZXNlIG9iamVjdHMgYXJlIGJ1aWx0IG1hbnVhbGx5IGJ5IGNyZWF0aW5nIGFuZCBz
ZXR0aW5nIFVuY2hlY2tlZFZhbHVlcy4KICMgQmVmb3JlIHNlbmRpbmcgdGhlc2Ugb3ZlciB0aGUg
cHJvdG9jb2wsIHRoZWlyIHNoYXBlcyBhcmUgY2hlY2tlZCBhZ2FpbnN0IHRoZSBzcGVjaWZpY2F0
aW9uLgogIyBTbywgYW55IHR5cGVzIHJlZmVyZW5jZWQgYnkgdGhlc2UgdHlwZXMgcmVxdWlyZSBk
ZWJ1Zy1vbmx5IGFzc2VydGlvbnMgdGhhdCBjaGVjayB2YWx1ZXMuCiAjIENhbGN1bGF0aW5nIG5l
Y2Vzc2FyeSBhc3NlcnRpb25zIGlzIGFubm95aW5nLCBhbmQgYWRkcyBhIGxvdCBvZiBjb21wbGV4
aXR5IHRvIHRoZSBnZW5lcmF0b3IuCkBAIC0yNjYsNyArMjY2LDcgQEAgY2xhc3MgR2VuZXJhdG9y
OgogICAgIEBzdGF0aWNtZXRob2QKICAgICBkZWYgcHJvdG9jb2xfdHlwZV9zdHJpbmdfZm9yX3R5
cGUoX3R5cGUpOgogICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBPYmplY3RUeXBlKSBhbmQg
bGVuKF90eXBlLm1lbWJlcnMpID09IDA6Ci0gICAgICAgICAgICByZXR1cm4gJ0luc3BlY3Rvcjo6
SW5zcGVjdG9yT2JqZWN0JworICAgICAgICAgICAgcmV0dXJuICdJbnNwZWN0b3I6OlByb3RvY29s
OjpVbmNoZWNrZWRPYmplY3QnCiAgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIChPYmplY3RU
eXBlLCBBbGlhc2VkVHlwZSwgRW51bVR5cGUpKToKICAgICAgICAgICAgIHJldHVybiAnSW5zcGVj
dG9yOjpQcm90b2NvbDo6JXM6OiVzJyAlIChfdHlwZS50eXBlX2RvbWFpbigpLmRvbWFpbl9uYW1l
LCBfdHlwZS5yYXdfbmFtZSgpKQogICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBcnJheVR5
cGUpOgpAQCAtMjkzLDkgKzI5Myw5IEBAIGNsYXNzIEdlbmVyYXRvcjoKICAgICAgICAgc2lnaWwg
PSAnKicgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsIGVsc2UgJyYnCiAgICAgICAgICMgVGhpcyBo
YW5kbGVzIHRoZSAnYW55JyB0eXBlIGFuZCBvYmplY3RzIHdpdGggZGVmaW5lZCBwcm9wZXJ0aWVz
LgogICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBPYmplY3RUeXBlKSBvciBfdHlwZS5xdWFs
aWZpZWRfbmFtZSgpIGlzICdvYmplY3QnOgotICAgICAgICAgICAgcmV0dXJuICdjb25zdCBSZWZQ
dHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JyArIHNpZ2lsCisgICAgICAgICAgICByZXR1
cm4gJ2NvbnN0IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+JyAr
IHNpZ2lsCiAgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFycmF5VHlwZSk6Ci0gICAgICAg
ICAgICByZXR1cm4gJ2NvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5PicgKyBz
aWdpbAorICAgICAgICAgICAgcmV0dXJuICdjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6VW5jaGVja2VkQXJyYXk+JyArIHNpZ2lsCiAgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUs
IFByaW1pdGl2ZVR5cGUpOgogICAgICAgICAgICAgY3BwX25hbWUgPSBHZW5lcmF0b3IuY3BwX25h
bWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKQogICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlz
X29wdGlvbmFsOgpAQCAtMzMyLDkgKzMzMiw5IEBAIGNsYXNzIEdlbmVyYXRvcjoKICAgICAgICAg
aWYgaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSk6CiAgICAgICAgICAgICBjcHBfbmFt
ZSA9IEdlbmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUoX3R5cGUpCiAgICAgICAg
ICAgICBpZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpIGluIFsnb2JqZWN0J106Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuICdQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PicKKyAg
ICAgICAgICAgICAgICByZXR1cm4gJ1Bhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5j
aGVja2VkT2JqZWN0PicKICAgICAgICAgICAgIGVsaWYgX3R5cGUucXVhbGlmaWVkX25hbWUoKSBp
biBbJ2FueSddOgotICAgICAgICAgICAgICAgIHJldHVybiAnUGFzc1JlZlB0cjxJbnNwZWN0b3I6
Okluc3BlY3RvclZhbHVlPicKKyAgICAgICAgICAgICAgICByZXR1cm4gJ1Bhc3NSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkVmFsdWU+JwogICAgICAgICAgICAgZWxpZiBpc19v
cHRpb25hbDoKICAgICAgICAgICAgICAgICByZXR1cm4gJ2NvbnN0ICVzKiBjb25zdCcgJSBjcHBf
bmFtZQogICAgICAgICAgICAgZWxpZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpIGluIFsnc3RyaW5n
J106CkBAIC00MDEsNyArNDAxLDcgQEAgY2xhc3MgR2VuZXJhdG9yOgogICAgICAgICByYWlzZSBW
YWx1ZUVycm9yKCJVbmtub3duIGZvcm1hbCBhc3luYyBwYXJhbWV0ZXIgdHlwZS4iKQogCiAgICAg
IyBJbi1wYXJhbWV0ZXJzIGRvbid0IHVzZSBidWlsZGVyIHR5cGVzLCBiZWNhdXNlIHRoZXkgY291
bGQgYmUgcGFzc2VkCi0gICAgIyAib3BlbiB0eXBlcyIgdGhhdCBhcmUgbWFudWFsbHkgY29uc3Ry
dWN0ZWQgb3V0IG9mIEluc3BlY3Rvck9iamVjdHMuCisgICAgIyAib3BlbiB0eXBlcyIgdGhhdCBh
cmUgbWFudWFsbHkgY29uc3RydWN0ZWQgb3V0IG9mIFVuY2hlY2tlZE9iamVjdHMuCiAKICAgICAj
IEZJWE1FOiBPbmx5IHBhcmFtZXRlcnMgdGhhdCBhcmUgYWN0dWFsbHkgb3BlbiB0eXBlcyBzaG91
bGQgbmVlZCBub24tYnVpbGRlciBwYXJhbWV0ZXIgdHlwZXMuCiAgICAgQHN0YXRpY21ldGhvZApA
QCAtNDE0LDkgKzQxNCw5IEBAIGNsYXNzIEdlbmVyYXRvcjoKICAgICAgICAgICAgIF90eXBlID0g
X3R5cGUucHJpbWl0aXZlX3R5cGUgICMgRmFsbCB0aHJvdWdoLgogCiAgICAgICAgIGlmIGlzaW5z
dGFuY2UoX3R5cGUsIE9iamVjdFR5cGUpOgotICAgICAgICAgICAgcmV0dXJuICJSZWZQdHI8SW5z
cGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IgorICAgICAgICAgICAgcmV0dXJuICJSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiIKICAgICAgICAgaWYgaXNpbnN0YW5j
ZShfdHlwZSwgQXJyYXlUeXBlKToKLSAgICAgICAgICAgIHJldHVybiAiUmVmUHRyPEluc3BlY3Rv
cjo6SW5zcGVjdG9yQXJyYXk+IgorICAgICAgICAgICAgcmV0dXJuICJSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6VW5jaGVja2VkQXJyYXk+IgogICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBl
LCBQcmltaXRpdmVUeXBlKToKICAgICAgICAgICAgIGNwcF9uYW1lID0gR2VuZXJhdG9yLmNwcF9u
YW1lX2Zvcl9wcmltaXRpdmVfdHlwZShfdHlwZSkKICAgICAgICAgICAgIGlmIF90eXBlLnF1YWxp
ZmllZF9uYW1lKCkgaW4gWydhbnknLCAnb2JqZWN0J106CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3JfdGVtcGxhdGVz
LnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2Vu
ZXJhdG9yX3RlbXBsYXRlcy5weQppbmRleCA4NDNhNDkyOTM3NWQzOTE3ZjhhYTM2NmJhODU0ZmYx
ODg1NTE1YjdkLi40ZTE5OTFhNWE3NjEyMmNkOTMwMWU5MTM0NTNjZGVhNjU3NTJkOTVkIDEwMDc1
NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9n
ZW5lcmF0b3JfdGVtcGxhdGVzLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRvcl90ZW1wbGF0ZXMucHkKQEAgLTEwNyw3ICsxMDcs
NyBAQCBwcm90ZWN0ZWQ6CiAgICAgIiIiJHtjbGFzc0FuZEV4cG9ydE1hY3JvfSBJbnNwZWN0b3Ik
e2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yOjpJ
bnNwZWN0b3JTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyPiBj
cmVhdGUoSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciosIEluc3BlY3RvciR7
ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICB2aXJ0dWFsIHZvaWQg
ZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPElu
c3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFs
IHZvaWQgZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBQYXNzUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gbWVzc2FnZSkgb3ZlcnJp
ZGU7CiAke2NvbW1hbmREZWNsYXJhdGlvbnN9CiBwcml2YXRlOgogICAgIEluc3BlY3RvciR7ZG9t
YWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyKiwgSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciop
OwpAQCAtMTIzLDcgKzEyMyw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkICR7Y29tbWFu
ZE5hbWV9KCR7aW5QYXJhbWV0ZXJzfSkgPSAwOyIiIikKIAogICAgIEJhY2tlbmREaXNwYXRjaGVy
SW1wbGVtZW50YXRpb25TbWFsbFN3aXRjaCA9ICgKLSAgICAiIiJ2b2lkIEluc3BlY3RvciR7ZG9t
YWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0
cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbWVzc2FnZSkKKyAgICAi
IiJ2b2lkIEluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2go
bG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPFByb3RvY29sOjpV
bmNoZWNrZWRPYmplY3Q+IG1lc3NhZ2UpCiB7CiAgICAgUmVmPEluc3BlY3RvciR7ZG9tYWluTmFt
ZX1CYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CiAKQEAgLTEzMywxMSArMTMzLDEx
IEBAICR7ZGlzcGF0Y2hDYXNlc30KIH0iIiIpCiAKICAgICBCYWNrZW5kRGlzcGF0Y2hlckltcGxl
bWVudGF0aW9uTGFyZ2VTd2l0Y2ggPSAoCi0iIiJ2b2lkIEluc3BlY3RvciR7ZG9tYWluTmFtZX1C
YWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0
aG9kLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbWVzc2FnZSkKKyIiInZvaWQgSW5zcGVj
dG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIGNhbGxJZCwg
Y29uc3QgU3RyaW5nJiBtZXRob2QsIFBhc3NSZWZQdHI8UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVj
dD4gbWVzc2FnZSkKIHsKICAgICBSZWY8SW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNw
YXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKIAotICAgIHR5cGVkZWYgdm9pZCAoSW5zcGVjdG9yJHtk
b21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyOjoqQ2FsbEhhbmRsZXIpKGxvbmcgY2FsbElkLCBj
b25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CisgICAgdHlwZWRlZiB2
b2lkIChJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXI6OipDYWxsSGFuZGxl
cikobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVj
dCYgbWVzc2FnZSk7CiAgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgQ2FsbEhhbmRsZXI+IERp
c3BhdGNoTWFwOwogICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChEaXNwYXRjaE1h
cCwgZGlzcGF0Y2hNYXAsICgpKTsKICAgICBpZiAoZGlzcGF0Y2hNYXAuaXNFbXB0eSgpKSB7CkBA
IC0xNzUsMTAgKzE3NSwxMCBAQCBJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNo
ZXI6Okluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcgogfSIiIikKIAogICAg
IEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25QcmVwYXJlQ29tbWFuZEFyZ3VtZW50cyA9
ICgKLSIiIiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVj
dG9yQXJyYXk6OmNyZWF0ZSgpOwotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0Nv
bnRhaW5lciA9IG1lc3NhZ2UuZ2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIikpOwotICAg
IEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdl
dCgpOwotICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJy
b3JzLmdldCgpOworIiIiICAgIFJlZlB0cjxQcm90b2NvbDo6VW5jaGVja2VkQXJyYXk+IHByb3Rv
Y29sRXJyb3JzID0gUHJvdG9jb2w6OlVuY2hlY2tlZEFycmF5OjpjcmVhdGUoKTsKKyAgICBSZWZQ
dHI8UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gbWVzc2FnZS5n
ZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJwYXJhbXMiKSk7CisgICAgUHJvdG9jb2w6OlVuY2hlY2tl
ZE9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOworICAg
IFByb3RvY29sOjpVbmNoZWNrZWRBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVy
cm9ycy5nZXQoKTsKICR7aW5QYXJhbWV0ZXJEZWNsYXJhdGlvbnN9CiAgICAgaWYgKHByb3RvY29s
RXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgICBTdHJpbmcgZXJyb3JNZXNzYWdlID0gU3RyaW5n
Ojpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCBcJyVzXCcgY2FuJ3QgYmUgcHJvY2Vz
c2VkIiwgIiR7ZG9tYWluTmFtZX0uJHtjb21tYW5kTmFtZX0iKTsKQEAgLTE5Miw3ICsxOTIsNyBA
QCAke2luUGFyYW1ldGVyRGVjbGFyYXRpb25zfQogCiB2b2lkIEluc3BlY3RvciR7ZG9tYWluTmFt
ZX1CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OiR7Y2FsbGJhY2tOYW1lfTo6c2VuZFN1Y2Nlc3Mo
JHtmb3JtYWxQYXJhbWV0ZXJzfSkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBqc29u
TWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPFByb3RvY29s
OjpVbmNoZWNrZWRPYmplY3Q+IGpzb25NZXNzYWdlID0gUHJvdG9jb2w6OlVuY2hlY2tlZE9iamVj
dDo6Y3JlYXRlKCk7CiAke291dFBhcmFtZXRlckFzc2lnbm1lbnRzfQogICAgIHNlbmRJZkFjdGl2
ZShqc29uTWVzc2FnZSwgRXJyb3JTdHJpbmcoKSk7CiB9IiIiKQpAQCAtMjEwLDE0ICsyMTAsMTQg
QEAgcHJpdmF0ZToKICIiIiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICAgY2xhc3MgQnVpbGRl
ciB7CiAgICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2Jq
ZWN0PiBtX3Jlc3VsdDsKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hl
Y2tlZE9iamVjdD4gbV9yZXN1bHQ7CiAKICAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxk
ZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICAgewogICAgICAgICAgICAgcmV0
dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAg
ICAgICB9CiAKLSAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPC8qJHtvYmplY3RUeXBlfSovSW5z
cGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHB0cikKKyAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRy
PC8qJHtvYmplY3RUeXBlfSovSW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBw
dHIpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmll
bGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICAg
bV9yZXN1bHQgPSBwdHI7CkBAIC0yMzAsNyArMjMwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgb3Bl
cmF0b3IgUmVmUHRyPCR7b2JqZWN0VHlwZX0+JiAoKQogICAgICAgICB7CiAgICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkp
OwotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKCR7b2JqZWN0VHlwZX0pID09IHNp
emVvZihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCksIGNhbm5vdF9jYXN0KTsKKyAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZigke29iamVjdFR5cGV9KSA9PSBzaXplb2YoSW5zcGVj
dG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0KSwgY2Fubm90X2Nhc3QpOwogICAgICAgICAg
ICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjwke29iamVjdFR5cGV9Pio+KCZtX3Jl
c3VsdCk7CiAgICAgICAgIH0KIApAQCAtMjQ2LDIxICsyNDYsMjAgQEAgJHtjb25zdHJ1Y3RvckV4
YW1wbGV9CiAgICAgICovCiAgICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgp
CiAgICAgewotICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSW5zcGVjdG9yOjpJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKLSAgICB9Ci0gICAgdHlwZWRlZiBJbnNwZWN0b3I6
OlByb3RvY29sOjpTdHJ1Y3RJdGVtVHJhaXRzIEl0ZW1UcmFpdHM7IiIiKQorICAgICAgICByZXR1
cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2Jq
ZWN0OjpjcmVhdGUoKSk7CisgICAgfSIiIikKIAogICAgIFByb3RvY29sT2JqZWN0UnVudGltZUNh
c3QgPSAoCi0iIiJQYXNzUmVmUHRyPCR7b2JqZWN0VHlwZX0+IEJpbmRpbmdUcmFpdHM8JHtvYmpl
Y3RUeXBlfT46OnJ1bnRpbWVDYXN0KFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1
ZT4gdmFsdWUpCisiIiJQYXNzUmVmUHRyPCR7b2JqZWN0VHlwZX0+IEJpbmRpbmdUcmFpdHM8JHtv
YmplY3RUeXBlfT46OnJ1bnRpbWVDYXN0KFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
VW5jaGVja2VkVmFsdWU+IHZhbHVlKQogewotICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rv
ck9iamVjdD4gcmVzdWx0OworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNr
ZWRPYmplY3Q+IHJlc3VsdDsKICAgICBib29sIGNhc3RTdWNjZWVkZWQgPSB2YWx1ZS0+YXNPYmpl
Y3QocmVzdWx0KTsKICAgICBBU1NFUlRfVU5VU0VEKGNhc3RTdWNjZWVkZWQsIGNhc3RTdWNjZWVk
ZWQpOwogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICBCaW5kaW5nVHJhaXRzPCR7b2JqZWN0VHlw
ZX0+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShyZXN1bHQuZ2V0KCkpOwogI2VuZGlmICAv
LyAhQVNTRVJUX0RJU0FCTEVECi0gICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKCR7b2JqZWN0VHlw
ZX0pID09IHNpemVvZihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2UpLCB0eXBlX2Nhc3Rf
cHJvYmxlbSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PCR7b2JqZWN0VHlwZX0qPihzdGF0aWNf
Y2FzdDxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2UqPihyZXN1bHQuZ2V0KCkpKTsKKyAg
ICBDT01QSUxFX0FTU0VSVChzaXplb2YoJHtvYmplY3RUeXBlfSkgPT0gc2l6ZW9mKEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdEJhc2UpLCB0eXBlX2Nhc3RfcHJvYmxlbSk7Cisg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PCR7b2JqZWN0VHlwZX0qPihzdGF0aWNfY2FzdDxJbnNwZWN0
b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3RCYXNlKj4ocmVzdWx0LmdldCgpKSk7CiB9CiAi
IiIKICkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uLXJlc3Vs
dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3Rl
ZC9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uLXJlc3VsdAppbmRleCA0MTE3OTg5
YjI0YzIzZTk5NTRkMzA2NDU2ZWUwZGFkM2QxYmYzZWFhLi4yMDEyMjVmMzg0MmE1MzY1ZjhhNDA0
MTkyZDlkZDYyY2I4YzNhOWQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1
dGUuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24tcmVz
dWx0CkBAIC05OCwxOCArOTgsMTggQEAgcHVibGljOgogICAgICAgICBZZWxsb3cgPSA1LAogICAg
ICAgICBCbGFjayA9IDYsCiAgICAgfTsgLy8gZW51bSBjbGFzcyBQcmludENvbG9yCi0gICAgdmly
dHVhbCB2b2lkIGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMoRXJyb3JTdHJpbmcm
LCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSwgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+JiBvcHRfb3V0X2NvbHVtbk5hbWVzLCBJbnNw
ZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8U3RyaW5nPiogb3B0X291dF9ub3RlcywgSW5zcGVj
dG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PGRvdWJsZT4qIG9wdF9vdXRfdGltZXN0YW1wLCBJbnNw
ZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+KiBv
cHRfb3V0X3ZhbHVlcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6
SW5zcGVjdG9yVmFsdWU+KiBvcHRfb3V0X3BheWxvYWQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9w
dE91dHB1dDxpbnQ+KiBvcHRfb3V0X2RhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpEYXRhYmFzZTo6RXJyb3I+JiBvcHRfb3V0X3NxbEVycm9yLCBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyogb3B0X291dF9zY3JlZW5Db2xvciwgSW5zcGVj
dG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3IqIG9wdF9vdXRf
cHJpbnRDb2xvcikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMU3luY09wdGlvbmFs
UmV0dXJuVmFsdWVzKEVycm9yU3RyaW5nJiwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmlu
ZyYgaW5fcXVlcnksIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiYg
b3B0X291dF9jb2x1bW5OYW1lcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PFN0cmlu
Zz4qIG9wdF9vdXRfbm90ZXMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxkb3VibGU+
KiBvcHRfb3V0X3RpbWVzdGFtcCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4qIG9wdF9vdXRfdmFsdWVzLCBJbnNwZWN0
b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkVmFs
dWU+KiBvcHRfb3V0X3BheWxvYWQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxpbnQ+
KiBvcHRfb3V0X2RhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFz
ZTo6RXJyb3I+JiBvcHRfb3V0X3NxbEVycm9yLCBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFz
ZTo6UHJpbWFyeUNvbG9ycyogb3B0X291dF9zY3JlZW5Db2xvciwgSW5zcGVjdG9yRGF0YWJhc2VC
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3IqIG9wdF9vdXRfcHJpbnRDb2xvcikg
PSAwOwogICAgIGNsYXNzIEV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJh
Y2sgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJh
Y2tCYXNlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIEV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0
dXJuVmFsdWVzQ2FsbGJhY2soUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyPiwgaW50IGlkKTsKLSAgICAgICAgdm9pZCBzZW5kU3VjY2VzcyhQYXNzUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+IGNvbHVtbk5hbWVzLCBJbnNwZWN0
b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8U3RyaW5nPiogbm90ZXMsIEluc3BlY3Rvcjo6UHJvdG9j
b2w6Ok9wdE91dHB1dDxkb3VibGU+KiB0aW1lc3RhbXAsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9w
dE91dHB1dDxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4qIHZhbHVlcywgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+KiBwYXlsb2FkLCBJ
bnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8aW50PiogZGF0YWJhc2VJZCwgUGFzc1JlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHNxbEVycm9yLCBJbnNwZWN0
b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8U3RyaW5nPiogc2NyZWVuQ29sb3IsIEluc3BlY3Rvcjo6
UHJvdG9jb2w6Ok9wdE91dHB1dDxTdHJpbmc+KiBwcmludENvbG9yKTsKKyAgICAgICAgdm9pZCBz
ZW5kU3VjY2VzcyhQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+
IGNvbHVtbk5hbWVzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8U3RyaW5nPiogbm90
ZXMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxkb3VibGU+KiB0aW1lc3RhbXAsIElu
c3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNr
ZWRPYmplY3Q+KiB2YWx1ZXMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxJbnNwZWN0
b3I6OlByb3RvY29sOjpVbmNoZWNrZWRWYWx1ZT4qIHBheWxvYWQsIEluc3BlY3Rvcjo6UHJvdG9j
b2w6Ok9wdE91dHB1dDxpbnQ+KiBkYXRhYmFzZUlkLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gc3FsRXJyb3IsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9w
dE91dHB1dDxTdHJpbmc+KiBzY3JlZW5Db2xvciwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0
cHV0PFN0cmluZz4qIHByaW50Q29sb3IpOwogICAgIH07CiAgICAgdmlydHVhbCB2b2lkIGV4ZWN1
dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKEVycm9yU3RyaW5nJiwgaW50IGluX2RhdGFi
YXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnksIFBhc3NSZWZQdHI8RXhlY3V0ZVNRTEFzeW5j
T3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjaz4gY2FsbGJhY2spID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgZXhlY3V0ZVNRTFN5bmMoRXJyb3JTdHJpbmcmLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29u
c3QgU3RyaW5nJiBpbl9xdWVyeSwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0
cmluZz4+JiBvdXRfY29sdW1uTmFtZXMsIFN0cmluZyogb3V0X25vdGVzLCBkb3VibGUqIG91dF90
aW1lc3RhbXAsIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0KiBvdXRfdmFsdWVzLCBJbnNwZWN0
b3I6Okluc3BlY3RvclZhbHVlKiBvdXRfcGF5bG9hZCwgaW50KiBvdXRfZGF0YWJhc2VJZCwgUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mIG91dF9zcWxFcnJvciwg
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMqIG91dF9zY3JlZW5D
b2xvciwgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29s
b3IqIG91dF9wcmludENvbG9yKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxTeW5j
KEVycm9yU3RyaW5nJiwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnks
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiYgb3V0X2NvbHVtbk5h
bWVzLCBTdHJpbmcqIG91dF9ub3RlcywgZG91YmxlKiBvdXRfdGltZXN0YW1wLCBJbnNwZWN0b3I6
OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3QqIG91dF92YWx1ZXMsIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlVuY2hlY2tlZFZhbHVlKiBvdXRfcGF5bG9hZCwgaW50KiBvdXRfZGF0YWJhc2VJZCwgUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mIG91dF9zcWxFcnJvciwg
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMqIG91dF9zY3JlZW5D
b2xvciwgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29s
b3IqIG91dF9wcmludENvbG9yKSA9IDA7CiAgICAgY2xhc3MgRXhlY3V0ZVNRTEFzeW5jQ2FsbGJh
Y2sgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJh
Y2tCYXNlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIEV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrKFBh
c3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4sIGludCBpZCk7
Ci0gICAgICAgIHZvaWQgc2VuZFN1Y2Nlc3MoUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpBcnJheTxTdHJpbmc+PiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBub3RlcywgZG91Ymxl
IHRpbWVzdGFtcCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QgdmFsdWVzLCBJbnNwZWN0b3I6
Okluc3BlY3RvclZhbHVlIHBheWxvYWQsIGludCBkYXRhYmFzZUlkLCBQYXNzUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYg
c2NyZWVuQ29sb3IsIGNvbnN0IFN0cmluZyYgcHJpbnRDb2xvcik7CisgICAgICAgIHZvaWQgc2Vu
ZFN1Y2Nlc3MoUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiBj
b2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgSW5zcGVj
dG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0IHZhbHVlcywgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6VW5jaGVja2VkVmFsdWUgcGF5bG9hZCwgaW50IGRhdGFiYXNlSWQsIFBhc3NSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBzcWxFcnJvciwgY29uc3QgU3RyaW5n
JiBzY3JlZW5Db2xvciwgY29uc3QgU3RyaW5nJiBwcmludENvbG9yKTsKICAgICB9OwogICAgIHZp
cnR1YWwgdm9pZCBleGVjdXRlU1FMQXN5bmMoRXJyb3JTdHJpbmcmLCBpbnQgaW5fZGF0YWJhc2VJ
ZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSwgUGFzc1JlZlB0cjxFeGVjdXRlU1FMQXN5bmNDYWxs
YmFjaz4gY2FsbGJhY2spID0gMDsKIHByb3RlY3RlZDoKQEAgLTExOSwxMiArMTE5LDEyIEBAIHBy
b3RlY3RlZDoKIGNsYXNzIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIgZmluYWwg
OiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hl
ciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yRGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXIqLCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIHZp
cnR1YWwgdm9pZCBkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFBh
c3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2UpIG92ZXJyaWRlOwor
ICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRo
b2QsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBtZXNz
YWdlKSBvdmVycmlkZTsKIHByaXZhdGU6Ci0gICAgdm9pZCBleGVjdXRlU1FMU3luY09wdGlvbmFs
UmV0dXJuVmFsdWVzKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVj
dCYgbWVzc2FnZSk7Ci0gICAgdm9pZCBleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVl
cyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2Up
OwotICAgIHZvaWQgZXhlY3V0ZVNRTFN5bmMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6
SW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKLSAgICB2b2lkIGV4ZWN1dGVTUUxBc3luYyhsb25n
IGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOworICAg
IHZvaWQgZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIGNhbGxJZCwgY29u
c3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0JiBtZXNzYWdlKTsKKyAgICB2
b2lkIGV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgY2FsbElkLCBjb25z
dCBJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3QmIG1lc3NhZ2UpOworICAgIHZv
aWQgZXhlY3V0ZVNRTFN5bmMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlVuY2hlY2tlZE9iamVjdCYgbWVzc2FnZSk7CisgICAgdm9pZCBleGVjdXRlU1FMQXN5bmMobG9u
ZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdCYgbWVz
c2FnZSk7CiBwcml2YXRlOgogICAgIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIo
SW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciosIEluc3BlY3RvckRhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CiAgICAgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQ7CkBAIC0xNzQsNyArMTc0LDcgQEAgcHJpdmF0ZToK
ICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogCiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZy
b250ZW5kQ2hhbm5lbC5oPgotI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4K
KyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CkBAIC0xOTMsNyAr
MTkzLDcgQEAgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6SW5zcGVjdG9yRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3IKICAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oQVNDSUlMaXRlcmFsKCJEYXRhYmFzZSIpLCB0
aGlzKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpkaXNw
YXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFBhc3NSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBtZXNzYWdlKQordm9pZCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVyOjpkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFBhc3NSZWZQ
dHI8UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gbWVzc2FnZSkKIHsKICAgICBSZWY8SW5zcGVj
dG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CiAKQEAgLTIwOSwx
MiArMjA5LDEyIEBAIHZvaWQgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlz
cGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0CiAgICAgICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCBtYWtlU3RyaW5nKCdcJycsICJEYXRhYmFzZSIsICcu
JywgbWV0aG9kLCAiJyB3YXMgbm90IGZvdW5kIikpOwogfQogCi12b2lkIEluc3BlY3RvckRhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMo
bG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSkKK3ZvaWQgSW5zcGVj
dG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVy
blZhbHVlcyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2Vk
T2JqZWN0JiBtZXNzYWdlKQogewotICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xF
cnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gcGFyYW1zQ29udGFpbmVyID0gbWVzc2FnZS5nZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJw
YXJhbXMiKSk7Ci0gICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJh
bXNDb250YWluZXIuZ2V0KCk7Ci0gICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRy
ID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CisgICAgUmVmUHRyPFByb3RvY29sOjpVbmNoZWNrZWRB
cnJheT4gcHJvdG9jb2xFcnJvcnMgPSBQcm90b2NvbDo6VW5jaGVja2VkQXJyYXk6OmNyZWF0ZSgp
OworICAgIFJlZlB0cjxQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBwYXJhbXNDb250YWluZXIg
PSBtZXNzYWdlLmdldE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIpKTsKKyAgICBQcm90b2Nv
bDo6VW5jaGVja2VkT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIu
Z2V0KCk7CisgICAgUHJvdG9jb2w6OlVuY2hlY2tlZEFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9
IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgIGludCBpbl9kYXRhYmFzZUlkID0gSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXI6OmdldEludGVnZXIocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxp
dGVyYWwoImRhdGFiYXNlSWQiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgIFN0
cmluZyBpbl9xdWVyeSA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRTdHJpbmcocGFy
YW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoInF1ZXJ5IiksIG51bGxwdHIsIHByb3RvY29s
RXJyb3JzUHRyKTsKICAgICBpZiAocHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CkBAIC0yMjQs
MTIgKzIyNCwxMiBAQCB2b2lkIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4
ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZwogICAgIH0KIAogICAgIEVycm9y
U3RyaW5nIGVycm9yOwotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVu
Y2hlY2tlZE9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2Jq
ZWN0OjpjcmVhdGUoKTsKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3Ry
aW5nPj4gb3V0X2NvbHVtbk5hbWVzOwogICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1
dDxTdHJpbmc+IG91dF9ub3RlczsKICAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8
ZG91YmxlPiBvdXRfdGltZXN0YW1wOwotICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1
dDxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gb3V0X3ZhbHVlczsKLSAgICBJbnNwZWN0b3I6
OlByb3RvY29sOjpPcHRPdXRwdXQ8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gb3V0X3BheWxv
YWQ7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlVuY2hlY2tlZE9iamVjdD4gb3V0X3ZhbHVlczsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29s
OjpPcHRPdXRwdXQ8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkVmFsdWU+IG91dF9wYXls
b2FkOwogICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpEYXRhYmFzZTo6RGF0YWJhc2VJZD4gb3V0X2RhdGFiYXNlSWQ7CiAgICAgUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gb3V0X3NxbEVycm9yOwogICAgIElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzIG91dF9zY3JlZW5Db2xv
cjsKQEAgLTI2MSw5ICsyNjEsOSBAQCB2b2lkIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3Bh
dGNoZXI6OmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZwogCiBJbnNwZWN0
b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jT3B0aW9u
YWxSZXR1cm5WYWx1ZXNDYWxsYmFjazo6RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1
ZXNDYWxsYmFjayhQYXNzUmVmUHRyPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBiYWNrZW5k
RGlzcGF0Y2hlciwgaW50IGlkKSA6IEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI6OkNhbGxiYWNrQmFzZShiYWNrZW5kRGlzcGF0Y2hlciwgaWQpIHsgfQogCi12b2lkIEluc3Bl
Y3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNPcHRp
b25hbFJldHVyblZhbHVlc0NhbGxiYWNrOjpzZW5kU3VjY2VzcyhQYXNzUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+IGNvbHVtbk5hbWVzLCBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpPcHRPdXRwdXQ8U3RyaW5nPiogbm90ZXMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91
dHB1dDxkb3VibGU+KiB0aW1lc3RhbXAsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxJ
bnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4qIHZhbHVlcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6
T3B0T3V0cHV0PEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+KiBwYXlsb2FkLCBJbnNwZWN0b3I6
OlByb3RvY29sOjpPcHRPdXRwdXQ8aW50PiogZGF0YWJhc2VJZCwgUGFzc1JlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHNxbEVycm9yLCBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpPcHRPdXRwdXQ8U3RyaW5nPiogc2NyZWVuQ29sb3IsIEluc3BlY3Rvcjo6UHJvdG9jb2w6
Ok9wdE91dHB1dDxTdHJpbmc+KiBwcmludENvbG9yKQordm9pZCBJbnNwZWN0b3JEYXRhYmFzZUJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1
ZXNDYWxsYmFjazo6c2VuZFN1Y2Nlc3MoUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpB
cnJheTxTdHJpbmc+PiBjb2x1bW5OYW1lcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0
PFN0cmluZz4qIG5vdGVzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8ZG91YmxlPiog
dGltZXN0YW1wLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8SW5zcGVjdG9yOjpQcm90
b2NvbDo6VW5jaGVja2VkT2JqZWN0PiogdmFsdWVzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRP
dXRwdXQ8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkVmFsdWU+KiBwYXlsb2FkLCBJbnNw
ZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8aW50PiogZGF0YWJhc2VJZCwgUGFzc1JlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHNxbEVycm9yLCBJbnNwZWN0b3I6
OlByb3RvY29sOjpPcHRPdXRwdXQ8U3RyaW5nPiogc2NyZWVuQ29sb3IsIEluc3BlY3Rvcjo6UHJv
dG9jb2w6Ok9wdE91dHB1dDxTdHJpbmc+KiBwcmludENvbG9yKQogewotICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IGpzb25NZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAg
ICBSZWZQdHI8UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4ganNvbk1lc3NhZ2UgPSBQcm90b2Nv
bDo6VW5jaGVja2VkT2JqZWN0OjpjcmVhdGUoKTsKICAgICBpZiAoY29sdW1uTmFtZXMpCiAgICAg
ICAgIGpzb25NZXNzYWdlLT5zZXRBcnJheShBU0NJSUxpdGVyYWwoImNvbHVtbk5hbWVzIiksIGNv
bHVtbk5hbWVzKTsKICAgICBpZiAobm90ZXMuaXNBc3NpZ25lZCgpKQpAQCAtMjg1LDEyICsyODUs
MTIgQEAgdm9pZCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhl
Y3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWwKICAgICBzZW5kSWZBY3RpdmUoanNvbk1lc3Nh
Z2UsIEVycm9yU3RyaW5nKCkpOwogfQogCi12b2lkIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXI6OmV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgY2FsbElk
LCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpCit2b2lkIEluc3BlY3RvckRhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxv
bmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3QmIG1l
c3NhZ2UpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IElu
c3BlY3RvckFycmF5OjpjcmVhdGUoKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJh
bXNDb250YWluZXIgPSBtZXNzYWdlLmdldE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIpKTsK
LSAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5l
ci5nZXQoKTsKLSAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2Nv
bEVycm9ycy5nZXQoKTsKKyAgICBSZWZQdHI8UHJvdG9jb2w6OlVuY2hlY2tlZEFycmF5PiBwcm90
b2NvbEVycm9ycyA9IFByb3RvY29sOjpVbmNoZWNrZWRBcnJheTo6Y3JlYXRlKCk7CisgICAgUmVm
UHRyPFByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IG1lc3NhZ2Uu
Z2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIikpOworICAgIFByb3RvY29sOjpVbmNoZWNr
ZWRPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKKyAg
ICBQcm90b2NvbDo6VW5jaGVja2VkQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xF
cnJvcnMuZ2V0KCk7CiAgICAgaW50IGluX2RhdGFiYXNlSWQgPSBJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcjo6Z2V0SW50ZWdlcihwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgiZGF0
YWJhc2VJZCIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICAgU3RyaW5nIGluX3F1
ZXJ5ID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhwYXJhbXNDb250YWlu
ZXJQdHIsIEFTQ0lJTGl0ZXJhbCgicXVlcnkiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIp
OwogICAgIGlmIChwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKQEAgLTMwMCw3ICszMDAsNyBA
QCB2b2lkIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxBc3lu
Y09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbgogICAgIH0KIAogICAgIEVycm9yU3RyaW5nIGVycm9y
OwotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVj
dD4gcmVzdWx0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0OjpjcmVhdGUo
KTsKICAgICBSZWZQdHI8SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6
OkV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2s+IGNhbGxiYWNrID0g
YWRvcHRSZWYobmV3IEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpF
eGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrKG1fYmFja2VuZERpc3Bh
dGNoZXIsY2FsbElkKSk7CiAgICAgbV9hZ2VudC0+ZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1
cm5WYWx1ZXMoZXJyb3IsIGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5LCBjYWxsYmFjayk7CiAKQEAg
LTMxMSwxMiArMzExLDEyIEBAIHZvaWQgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hl
cjo6ZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uCiAgICAgfQogfQogCi12
b2lkIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxTeW5jKGxv
bmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpCit2b2lkIEluc3BlY3Rv
ckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxTeW5jKGxvbmcgY2FsbElkLCBj
b25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3QmIG1lc3NhZ2UpCiB7Ci0g
ICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5
OjpjcmVhdGUoKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIg
PSBtZXNzYWdlLmdldE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIpKTsKLSAgICBJbnNwZWN0
b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKLSAg
ICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQo
KTsKKyAgICBSZWZQdHI8UHJvdG9jb2w6OlVuY2hlY2tlZEFycmF5PiBwcm90b2NvbEVycm9ycyA9
IFByb3RvY29sOjpVbmNoZWNrZWRBcnJheTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPFByb3RvY29s
OjpVbmNoZWNrZWRPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IG1lc3NhZ2UuZ2V0T2JqZWN0KEFT
Q0lJTGl0ZXJhbCgicGFyYW1zIikpOworICAgIFByb3RvY29sOjpVbmNoZWNrZWRPYmplY3QqIHBh
cmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKKyAgICBQcm90b2NvbDo6
VW5jaGVja2VkQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7
CiAgICAgaW50IGluX2RhdGFiYXNlSWQgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0
SW50ZWdlcihwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgiZGF0YWJhc2VJZCIpLCBu
dWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICAgU3RyaW5nIGluX3F1ZXJ5ID0gSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJ
TGl0ZXJhbCgicXVlcnkiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgIGlmIChw
cm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKQEAgLTMyNiwxMiArMzI2LDEyIEBAIHZvaWQgSW5z
cGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTFN5bmMobG9uZyBjYWxs
SWQsIGNvbnN0IEluc3BlCiAgICAgfQogCiAgICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
KyAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiByZXN1bHQg
PSBJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q6OmNyZWF0ZSgpOwogICAgIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiBvdXRfY29sdW1uTmFtZXM7
CiAgICAgU3RyaW5nIG91dF9ub3RlczsKICAgICBkb3VibGUgb3V0X3RpbWVzdGFtcDsKLSAgICBJ
bnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCBvdXRfdmFsdWVzOwotICAgIEluc3BlY3Rvcjo6SW5z
cGVjdG9yVmFsdWUgb3V0X3BheWxvYWQ7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVj
a2VkT2JqZWN0IG91dF92YWx1ZXM7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2Vk
VmFsdWUgb3V0X3BheWxvYWQ7CiAgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkRh
dGFiYXNlSWQgb3V0X2RhdGFiYXNlSWQ7CiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpFcnJvcj4gb3V0X3NxbEVycm9yOwogICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzIG91dF9zY3JlZW5Db2xvcjsKQEAgLTM1NCw5ICszNTQs
OSBAQCB2b2lkIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxT
eW5jKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZQogCiBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2s6OkV4ZWN1dGVTUUxBc3lu
Y0NhbGxiYWNrKFBhc3NSZWZQdHI8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IGJhY2tlbmRE
aXNwYXRjaGVyLCBpbnQgaWQpIDogSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cjo6Q2FsbGJhY2tCYXNlKGJhY2tlbmREaXNwYXRjaGVyLCBpZCkgeyB9CiAKLXZvaWQgSW5zcGVj
dG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY0NhbGxi
YWNrOjpzZW5kU3VjY2VzcyhQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0
cmluZz4+IGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG5vdGVzLCBkb3VibGUgdGltZXN0YW1w
LCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCB2YWx1ZXMsIEluc3BlY3Rvcjo6SW5zcGVjdG9y
VmFsdWUgcGF5bG9hZCwgaW50IGRhdGFiYXNlSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBzcWxFcnJvciwgY29uc3QgU3RyaW5nJiBzY3JlZW5Db2xv
ciwgY29uc3QgU3RyaW5nJiBwcmludENvbG9yKQordm9pZCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tl
bmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2s6OnNlbmRTdWNjZXNz
KFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4gY29sdW1uTmFt
ZXMsIGNvbnN0IFN0cmluZyYgbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlVuY2hlY2tlZE9iamVjdCB2YWx1ZXMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hl
Y2tlZFZhbHVlIHBheWxvYWQsIGludCBkYXRhYmFzZUlkLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgc2NyZWVu
Q29sb3IsIGNvbnN0IFN0cmluZyYgcHJpbnRDb2xvcikKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBqc29uTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVm
UHRyPFByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IGpzb25NZXNzYWdlID0gUHJvdG9jb2w6OlVu
Y2hlY2tlZE9iamVjdDo6Y3JlYXRlKCk7CiAgICAganNvbk1lc3NhZ2UtPnNldEFycmF5KEFTQ0lJ
TGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgY29sdW1uTmFtZXMpOwogICAgIGpzb25NZXNzYWdlLT5z
ZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJub3RlcyIpLCBub3Rlcyk7CiAgICAganNvbk1lc3NhZ2Ut
PnNldERvdWJsZShBU0NJSUxpdGVyYWwoInRpbWVzdGFtcCIpLCB0aW1lc3RhbXApOwpAQCAtMzY5
LDEyICszNjksMTIgQEAgdm9pZCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlcjo6RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2s6OnNlbmRTdWMKICAgICBzZW5kSWZBY3RpdmUo
anNvbk1lc3NhZ2UsIEVycm9yU3RyaW5nKCkpOwogfQogCi12b2lkIEluc3BlY3RvckRhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxBc3luYyhsb25nIGNhbGxJZCwgY29uc3QgSW5z
cGVjdG9yT2JqZWN0JiBtZXNzYWdlKQordm9pZCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVyOjpleGVjdXRlU1FMQXN5bmMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlVuY2hlY2tlZE9iamVjdCYgbWVzc2FnZSkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwotICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IG1lc3NhZ2UuZ2V0T2JqZWN0
KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIikpOwotICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29u
dGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwotICAgIEluc3BlY3RvckFycmF5KiBw
cm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOworICAgIFJlZlB0cjxQcm90
b2NvbDo6VW5jaGVja2VkQXJyYXk+IHByb3RvY29sRXJyb3JzID0gUHJvdG9jb2w6OlVuY2hlY2tl
ZEFycmF5OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4g
cGFyYW1zQ29udGFpbmVyID0gbWVzc2FnZS5nZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJwYXJhbXMi
KSk7CisgICAgUHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0g
cGFyYW1zQ29udGFpbmVyLmdldCgpOworICAgIFByb3RvY29sOjpVbmNoZWNrZWRBcnJheSogcHJv
dG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgICBpbnQgaW5fZGF0YWJh
c2VJZCA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRJbnRlZ2VyKHBhcmFtc0NvbnRh
aW5lclB0ciwgQVNDSUlMaXRlcmFsKCJkYXRhYmFzZUlkIiksIG51bGxwdHIsIHByb3RvY29sRXJy
b3JzUHRyKTsKICAgICBTdHJpbmcgaW5fcXVlcnkgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cjo6Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJxdWVyeSIpLCBu
dWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5n
dGgoKSkgewpAQCAtMzg0LDcgKzM4NCw3IEBAIHZvaWQgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5k
RGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTEFzeW5jKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwCiAgICAg
fQogCiAgICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
cmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3I6OlByb3RvY29s
OjpVbmNoZWNrZWRPYmplY3Q6OmNyZWF0ZSgpOwogICAgIFJlZlB0cjxJbnNwZWN0b3JEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2s+IGNhbGxi
YWNrID0gYWRvcHRSZWYobmV3IEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyOjpFeGVjdXRlU1FMQXN5bmNDYWxsYmFjayhtX2JhY2tlbmREaXNwYXRjaGVyLGNhbGxJZCkp
OwogICAgIG1fYWdlbnQtPmV4ZWN1dGVTUUxBc3luYyhlcnJvciwgaW5fZGF0YWJhc2VJZCwgaW5f
cXVlcnksIGNhbGxiYWNrKTsKIApAQCAtNDM5LDcgKzQzOSw3IEBAIHZvaWQgSW5zcGVjdG9yRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTEFzeW5jKGxvbmcgY2FsbElkLCBjb25z
dCBJbnNwCiAKICNpbmNsdWRlICJJbnNwZWN0b3JUZXN0UHJvdG9jb2xUeXBlcy5oIgogI2luY2x1
ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KLSNpbmNsdWRlIDxpbnNw
ZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclBy
b3RvY29sVHlwZXMuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgogCkBAIC01NzcsNyArNTc3LDcgQEAgZW51bSBjbGFzcyBQcmlt
YXJ5Q29sb3JzIHsKICAgICBCbHVlID0gMiwKIH07IC8vIGVudW0gY2xhc3MgUHJpbWFyeUNvbG9y
cwogLyogRGF0YWJhc2UgZXJyb3IuICovCi1jbGFzcyBFcnJvciA6IHB1YmxpYyBJbnNwZWN0b3I6
Okluc3BlY3Rvck9iamVjdEJhc2UgeworY2xhc3MgRXJyb3IgOiBwdWJsaWMgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6VW5jaGVja2VkT2JqZWN0QmFzZSB7CiBwdWJsaWM6CiAgICAgZW51bSB7CiAgICAg
ICAgIE5vRmllbGRzU2V0ID0gMCwKQEAgLTU4OSwxNCArNTg5LDE0IEBAIHB1YmxpYzoKICAgICB0
ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICAgY2xhc3MgQnVpbGRlciB7CiAgICAgcHJpdmF0ZToKLSAg
ICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKKyAgICAg
ICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gbV9yZXN1bHQ7
CiAKICAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2Fz
dFN0YXRlKCkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0
PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVp
bGRlcihQYXNzUmVmUHRyPC8qRXJyb3IqL0luc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBwdHIp
CisgICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjwvKkVycm9yKi9JbnNwZWN0b3I6OlByb3RvY29s
OjpVbmNoZWNrZWRPYmplY3Q+IHB0cikKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9z
dGF0ZSk7CiAgICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKQEAgLTYyMSw3ICs2MjEsNyBAQCBw
dWJsaWM6CiAgICAgICAgIG9wZXJhdG9yIFJlZlB0cjxFcnJvcj4mICgpCiAgICAgICAgIHsKICAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lz
X25vdF9yZWFkeSk7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoRXJyb3IpID09
IHNpemVvZihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCksIGNhbm5vdF9jYXN0KTsKKyAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihFcnJvcikgPT0gc2l6ZW9mKEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdCksIGNhbm5vdF9jYXN0KTsKICAgICAgICAgICAgIHJl
dHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8RXJyb3I+Kj4oJm1fcmVzdWx0KTsKICAgICAg
ICAgfQogCkBAIC02MzksOSArNjM5LDggQEAgcHVibGljOgogICAgICAqLwogICAgIHN0YXRpYyBC
dWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEJ1aWxk
ZXI8Tm9GaWVsZHNTZXQ+KEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7Cisg
ICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihJbnNwZWN0b3I6OlByb3RvY29sOjpV
bmNoZWNrZWRPYmplY3Q6OmNyZWF0ZSgpKTsKICAgICB9Ci0gICAgdHlwZWRlZiBJbnNwZWN0b3I6
OlByb3RvY29sOjpTdHJ1Y3RJdGVtVHJhaXRzIEl0ZW1UcmFpdHM7CiB9OwogCiB9IC8vIERhdGFi
YXNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0
ZXJzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1l
dGVycy5qc29uLXJlc3VsdAppbmRleCA3MDdiNTQ4ODI3MDQ1NmM3ZDAyMzNmNDc5MGQzNzFmMTJk
ODQ1ZTlkLi5kZDNlMGUyM2VlODQ0YTYwZmI5NWEzNjE0MWYwMTg5Mjg4NWVkOWZlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24tcmVz
dWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNv
bi1yZXN1bHQKQEAgLTk1LDggKzk1LDggQEAgcHVibGljOgogICAgICAgICBZZWxsb3cgPSA1LAog
ICAgICAgICBCbGFjayA9IDYsCiAgICAgfTsgLy8gZW51bSBjbGFzcyBQcmludENvbG9yCi0gICAg
dmlydHVhbCB2b2lkIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMoRXJyb3JTdHJpbmcmLCBj
b25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4qIGluX2NvbHVtbk5hbWVzLCBj
b25zdCBTdHJpbmcqIGluX25vdGVzLCBjb25zdCBkb3VibGUqIGluX3RpbWVzdGFtcCwgY29uc3Qg
UmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiogaW5fdmFsdWVzLCBjb25zdCBJbnNw
ZWN0b3I6Okluc3BlY3RvclZhbHVlKiBpbl9wYXlsb2FkLCBjb25zdCBpbnQqIGluX2RhdGFiYXNl
SWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4qIGluX3NxbEVycm9y
LCBjb25zdCBTdHJpbmcqIGluX3NjcmVlbkNvbG9yLCBjb25zdCBTdHJpbmcqIGluX3ByaW50Q29s
b3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiYgb3B0X291dF9j
b2x1bW5OYW1lcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PFN0cmluZz4qIG9wdF9v
dXRfbm90ZXMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxkb3VibGU+KiBvcHRfb3V0
X3RpbWVzdGFtcCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6SW5z
cGVjdG9yT2JqZWN0Piogb3B0X291dF92YWx1ZXMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91
dHB1dDxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiogb3B0X291dF9wYXlsb2FkLCBJbnNwZWN0
b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8aW50Piogb3B0X291dF9kYXRhYmFzZUlkLCBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYgb3B0X291dF9zcWxFcnJvciwg
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMqIG9wdF9vdXRfc2Ny
ZWVuQ29sb3IsIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmlu
dENvbG9yKiBvcHRfb3V0X3ByaW50Q29sb3IpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0
ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKEVycm9yU3RyaW5nJiwgY29uc3QgUmVmUHRyPEluc3BlY3Rv
cjo6SW5zcGVjdG9yQXJyYXk+JiBpbl9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBpbl9ub3Rl
cywgZG91YmxlIGluX3RpbWVzdGFtcCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9y
T2JqZWN0PiYgaW5fdmFsdWVzLCBJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlIGluX3BheWxvYWQs
IGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmpl
Y3Q+JiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nJiBpbl9zY3JlZW5Db2xvciwgY29uc3QgU3Ry
aW5nJiBpbl9wcmludENvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3Ry
aW5nPj4mIG91dF9jb2x1bW5OYW1lcywgU3RyaW5nKiBvdXRfbm90ZXMsIGRvdWJsZSogb3V0X3Rp
bWVzdGFtcCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QqIG91dF92YWx1ZXMsIEluc3BlY3Rv
cjo6SW5zcGVjdG9yVmFsdWUqIG91dF9wYXlsb2FkLCBpbnQqIG91dF9kYXRhYmFzZUlkLCBSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYgb3V0X3NxbEVycm9yLCBJ
bnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyogb3V0X3NjcmVlbkNv
bG9yLCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xv
ciogb3V0X3ByaW50Q29sb3IpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZUFsbE9wdGlv
bmFsUGFyYW1ldGVycyhFcnJvclN0cmluZyYsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpVbmNoZWNrZWRBcnJheT4qIGluX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcqIGluX25v
dGVzLCBjb25zdCBkb3VibGUqIGluX3RpbWVzdGFtcCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4qIGluX3ZhbHVlcywgY29uc3QgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6VW5jaGVja2VkVmFsdWUqIGluX3BheWxvYWQsIGNvbnN0IGludCogaW5fZGF0YWJh
c2VJZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4q
IGluX3NxbEVycm9yLCBjb25zdCBTdHJpbmcqIGluX3NjcmVlbkNvbG9yLCBjb25zdCBTdHJpbmcq
IGluX3ByaW50Q29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+
PiYgb3B0X291dF9jb2x1bW5OYW1lcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PFN0
cmluZz4qIG9wdF9vdXRfbm90ZXMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxkb3Vi
bGU+KiBvcHRfb3V0X3RpbWVzdGFtcCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4qIG9wdF9vdXRfdmFsdWVzLCBJbnNw
ZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2Vk
VmFsdWU+KiBvcHRfb3V0X3BheWxvYWQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxp
bnQ+KiBvcHRfb3V0X2RhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRh
YmFzZTo6RXJyb3I+JiBvcHRfb3V0X3NxbEVycm9yLCBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRh
YmFzZTo6UHJpbWFyeUNvbG9ycyogb3B0X291dF9zY3JlZW5Db2xvciwgSW5zcGVjdG9yRGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3IqIG9wdF9vdXRfcHJpbnRDb2xv
cikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMoRXJy
b3JTdHJpbmcmLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkQXJy
YXk+JiBpbl9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBpbl9ub3RlcywgZG91YmxlIGluX3Rp
bWVzdGFtcCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVj
dD4mIGluX3ZhbHVlcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkVmFsdWUgaW5fcGF5
bG9hZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpVbmNoZWNrZWRPYmplY3Q+JiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nJiBpbl9zY3JlZW5D
b2xvciwgY29uc3QgU3RyaW5nJiBpbl9wcmludENvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6QXJyYXk8U3RyaW5nPj4mIG91dF9jb2x1bW5OYW1lcywgU3RyaW5nKiBvdXRfbm90ZXMs
IGRvdWJsZSogb3V0X3RpbWVzdGFtcCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2Jq
ZWN0KiBvdXRfdmFsdWVzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRWYWx1ZSogb3V0
X3BheWxvYWQsIGludCogb3V0X2RhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpEYXRhYmFzZTo6RXJyb3I+JiBvdXRfc3FsRXJyb3IsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRh
dGFiYXNlOjpQcmltYXJ5Q29sb3JzKiBvdXRfc2NyZWVuQ29sb3IsIEluc3BlY3RvckRhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9yKiBvdXRfcHJpbnRDb2xvcikgPSAw
OwogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgfkluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyKCk7CiB9OwpAQCAtMTA0LDEwICsxMDQsMTAgQEAgcHJvdGVjdGVkOgogY2xh
c3MgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBJbnNw
ZWN0b3I6Okluc3BlY3RvclN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoK
ICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
PiBjcmVhdGUoSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciosIEluc3BlY3Rv
ckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdmlydHVhbCB2b2lkIGRp
c3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUGFzc1JlZlB0cjxJbnNw
ZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gbWVzc2FnZSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2
b2lkIGRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUGFzc1JlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IG1lc3NhZ2UpIG92ZXJyaWRl
OwogcHJpdmF0ZToKLSAgICB2b2lkIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyBj
YWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKLSAgICB2
b2lkIGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVj
dG9yOjpJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOworICAgIHZvaWQgZXhlY3V0ZUFsbE9wdGlv
bmFsUGFyYW1ldGVycyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6VW5j
aGVja2VkT2JqZWN0JiBtZXNzYWdlKTsKKyAgICB2b2lkIGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1l
dGVycyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2Jq
ZWN0JiBtZXNzYWdlKTsKIHByaXZhdGU6CiAgICAgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlcihJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiwgSW5zcGVjdG9y
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKICAgICBJbnNwZWN0b3JEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9hZ2VudDsKQEAgLTE1Nyw3ICsxNTcsNyBAQCBw
cml2YXRlOgogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAKICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+Ci0jaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZh
bHVlcy5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAg
LTE3Niw3ICsxNzYsNyBAQCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpJbnNw
ZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKEluc3BlY3RvcgogICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbihBU0NJSUxpdGVyYWwoIkRhdGFi
YXNlIiksIHRoaXMpOwogfQogCi12b2lkIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXI6OmRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUGFzc1JlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2UpCit2b2lkIEluc3BlY3RvckRhdGFiYXNlQmFja2Vu
ZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwg
UGFzc1JlZlB0cjxQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBtZXNzYWdlKQogewogICAgIFJl
ZjxJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKIApA
QCAtMTg4LDI2ICsxODgsMjYgQEAgdm9pZCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVyOjpkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXQKICAgICAgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsIG1ha2VTdHJpbmcoJ1wnJywgIkRhdGFi
YXNlIiwgJy4nLCBtZXRob2QsICInIHdhcyBub3QgZm91bmQiKSk7CiB9CiAKLXZvaWQgSW5zcGVj
dG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVy
cyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKQordm9pZCBJbnNw
ZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0
ZXJzKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmpl
Y3QmIG1lc3NhZ2UpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9y
cyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBwYXJhbXNDb250YWluZXIgPSBtZXNzYWdlLmdldE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFt
cyIpKTsKLSAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0Nv
bnRhaW5lci5nZXQoKTsKLSAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBw
cm90b2NvbEVycm9ycy5nZXQoKTsKKyAgICBSZWZQdHI8UHJvdG9jb2w6OlVuY2hlY2tlZEFycmF5
PiBwcm90b2NvbEVycm9ycyA9IFByb3RvY29sOjpVbmNoZWNrZWRBcnJheTo6Y3JlYXRlKCk7Cisg
ICAgUmVmUHRyPFByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IG1l
c3NhZ2UuZ2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIikpOworICAgIFByb3RvY29sOjpV
bmNoZWNrZWRPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQo
KTsKKyAgICBQcm90b2NvbDo6VW5jaGVja2VkQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJv
dG9jb2xFcnJvcnMuZ2V0KCk7CiAgICAgYm9vbCBjb2x1bW5OYW1lc192YWx1ZUZvdW5kID0gZmFs
c2U7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+IGluX2NvbHVtbk5hbWVz
ID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldEFycmF5KHBhcmFtc0NvbnRhaW5lclB0
ciwgQVNDSUlMaXRlcmFsKCJjb2x1bW5OYW1lcyIpLCAmY29sdW1uTmFtZXNfdmFsdWVGb3VuZCwg
cHJvdG9jb2xFcnJvcnNQdHIpOworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNo
ZWNrZWRBcnJheT4gaW5fY29sdW1uTmFtZXMgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6
Z2V0QXJyYXkocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoImNvbHVtbk5hbWVzIiks
ICZjb2x1bW5OYW1lc192YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICAgYm9vbCBu
b3Rlc192YWx1ZUZvdW5kID0gZmFsc2U7CiAgICAgU3RyaW5nIGluX25vdGVzID0gSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0
ZXJhbCgibm90ZXMiKSwgJm5vdGVzX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKICAg
ICBib29sIHRpbWVzdGFtcF92YWx1ZUZvdW5kID0gZmFsc2U7CiAgICAgSW5zcGVjdG9yOjpQcm90
b2NvbDo6T3B0T3V0cHV0PGRvdWJsZT4gaW5fdGltZXN0YW1wID0gSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXI6OmdldERvdWJsZShwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgidGlt
ZXN0YW1wIiksICZ0aW1lc3RhbXBfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAg
IGJvb2wgdmFsdWVzX3ZhbHVlRm91bmQgPSBmYWxzZTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpJ
bnNwZWN0b3JPYmplY3Q+IGluX3ZhbHVlcyA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpn
ZXRPYmplY3QocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoInZhbHVlcyIpLCAmdmFs
dWVzX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBpbl92YWx1ZXMgPSBJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlcjo6Z2V0T2JqZWN0KHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJ2
YWx1ZXMiKSwgJnZhbHVlc192YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICAgYm9v
bCBwYXlsb2FkX3ZhbHVlRm91bmQgPSBmYWxzZTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNw
ZWN0b3JWYWx1ZT4gaW5fcGF5bG9hZCA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRB
bnkocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoInBheWxvYWQiKSwgJnBheWxvYWRf
dmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIpOworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpVbmNoZWNrZWRWYWx1ZT4gaW5fcGF5bG9hZCA9IEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyOjpnZXRBbnkocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoInBheWxvYWQi
KSwgJnBheWxvYWRfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgIGJvb2wgZGF0
YWJhc2VJZF92YWx1ZUZvdW5kID0gZmFsc2U7CiAgICAgaW50IGluX2RhdGFiYXNlSWQgPSBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0SW50ZWdlcihwYXJhbXNDb250YWluZXJQdHIsIEFT
Q0lJTGl0ZXJhbCgiZGF0YWJhc2VJZCIpLCAmZGF0YWJhc2VJZF92YWx1ZUZvdW5kLCBwcm90b2Nv
bEVycm9yc1B0cik7CiAgICAgYm9vbCBzcWxFcnJvcl92YWx1ZUZvdW5kID0gZmFsc2U7Ci0gICAg
UmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBpbl9zcWxFcnJvciA9IEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyOjpnZXRPYmplY3QocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxp
dGVyYWwoInNxbEVycm9yIiksICZzcWxFcnJvcl92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0
cik7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gaW5f
c3FsRXJyb3IgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0T2JqZWN0KHBhcmFtc0Nv
bnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJzcWxFcnJvciIpLCAmc3FsRXJyb3JfdmFsdWVGb3Vu
ZCwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgIGJvb2wgc2NyZWVuQ29sb3JfdmFsdWVGb3VuZCA9
IGZhbHNlOwogICAgIFN0cmluZyBpbl9zY3JlZW5Db2xvciA9IEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyOjpnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoInNjcmVl
bkNvbG9yIiksICZzY3JlZW5Db2xvcl92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7CiAg
ICAgYm9vbCBwcmludENvbG9yX3ZhbHVlRm91bmQgPSBmYWxzZTsKQEAgLTIxOSwxMiArMjE5LDEy
IEBAIHZvaWQgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZUFsbE9w
dGlvbmFsUGFyYW1ldGVycyhsb25nIGNhbGxJCiAgICAgfQogCiAgICAgRXJyb3JTdHJpbmcgZXJy
b3I7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2Jq
ZWN0PiByZXN1bHQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q6OmNyZWF0
ZSgpOwogICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiBvdXRf
Y29sdW1uTmFtZXM7CiAgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PFN0cmluZz4g
b3V0X25vdGVzOwogICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxkb3VibGU+IG91
dF90aW1lc3RhbXA7Ci0gICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PEluc3BlY3Rv
cjo6SW5zcGVjdG9yT2JqZWN0PiBvdXRfdmFsdWVzOwotICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6
Ok9wdE91dHB1dDxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiBvdXRfcGF5bG9hZDsKKyAgICBJ
bnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVj
a2VkT2JqZWN0PiBvdXRfdmFsdWVzOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1
dDxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRWYWx1ZT4gb3V0X3BheWxvYWQ7CiAgICAg
SW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFi
YXNlOjpEYXRhYmFzZUlkPiBvdXRfZGF0YWJhc2VJZDsKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBvdXRfc3FsRXJyb3I7CiAgICAgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMgb3V0X3NjcmVlbkNvbG9yOwpAQCAtMjU0
LDE5ICsyNTQsMTkgQEAgdm9pZCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpl
eGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgY2FsbEkKICAgICBtX2JhY2tlbmREaXNw
YXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBlcnJvcik7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZU5vT3B0
aW9uYWxQYXJhbWV0ZXJzKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3Nh
Z2UpCit2b2lkIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVOb09w
dGlvbmFsUGFyYW1ldGVycyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6
VW5jaGVja2VkT2JqZWN0JiBtZXNzYWdlKQogewotICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4g
cHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7Ci0gICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gbWVzc2FnZS5nZXRPYmplY3QoQVNDSUlM
aXRlcmFsKCJwYXJhbXMiKSk7Ci0gICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQ
dHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7Ci0gICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29s
RXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6
SW5zcGVjdG9yQXJyYXk+IGluX2NvbHVtbk5hbWVzID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI6OmdldEFycmF5KHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJjb2x1bW5OYW1l
cyIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7CisgICAgUmVmUHRyPFByb3RvY29sOjpV
bmNoZWNrZWRBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBQcm90b2NvbDo6VW5jaGVja2VkQXJyYXk6
OmNyZWF0ZSgpOworICAgIFJlZlB0cjxQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBwYXJhbXND
b250YWluZXIgPSBtZXNzYWdlLmdldE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIpKTsKKyAg
ICBQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXND
b250YWluZXIuZ2V0KCk7CisgICAgUHJvdG9jb2w6OlVuY2hlY2tlZEFycmF5KiBwcm90b2NvbEVy
cm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpVbmNoZWNrZWRBcnJheT4gaW5fY29sdW1uTmFtZXMgPSBJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlcjo6Z2V0QXJyYXkocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoImNv
bHVtbk5hbWVzIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgICBTdHJpbmcgaW5f
bm90ZXMgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKHBhcmFtc0NvbnRh
aW5lclB0ciwgQVNDSUlMaXRlcmFsKCJub3RlcyIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0
cik7CiAgICAgZG91YmxlIGluX3RpbWVzdGFtcCA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
OjpnZXREb3VibGUocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoInRpbWVzdGFtcCIp
LCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5z
cGVjdG9yT2JqZWN0PiBpbl92YWx1ZXMgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0
T2JqZWN0KHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJ2YWx1ZXMiKSwgbnVsbHB0
ciwgcHJvdG9jb2xFcnJvcnNQdHIpOwotICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZh
bHVlPiBpbl9wYXlsb2FkID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldEFueShwYXJh
bXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgicGF5bG9hZCIpLCBudWxscHRyLCBwcm90b2Nv
bEVycm9yc1B0cik7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9i
amVjdD4gaW5fdmFsdWVzID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldE9iamVjdChw
YXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgidmFsdWVzIiksIG51bGxwdHIsIHByb3Rv
Y29sRXJyb3JzUHRyKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2Vk
VmFsdWU+IGluX3BheWxvYWQgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0QW55KHBh
cmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJwYXlsb2FkIiksIG51bGxwdHIsIHByb3Rv
Y29sRXJyb3JzUHRyKTsKICAgICBpbnQgaW5fZGF0YWJhc2VJZCA9IEluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyOjpnZXRJbnRlZ2VyKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJk
YXRhYmFzZUlkIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKLSAgICBSZWZQdHI8SW5z
cGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGluX3NxbEVycm9yID0gSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXI6OmdldE9iamVjdChwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgic3Fs
RXJyb3IiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIpOworICAgIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IGluX3NxbEVycm9yID0gSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI6OmdldE9iamVjdChwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJh
bCgic3FsRXJyb3IiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgIFN0cmluZyBp
bl9zY3JlZW5Db2xvciA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRTdHJpbmcocGFy
YW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoInNjcmVlbkNvbG9yIiksIG51bGxwdHIsIHBy
b3RvY29sRXJyb3JzUHRyKTsKICAgICBTdHJpbmcgaW5fcHJpbnRDb2xvciA9IEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyOjpnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVy
YWwoInByaW50Q29sb3IiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgIGlmIChw
cm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKQEAgLTI3NiwxMiArMjc2LDEyIEBAIHZvaWQgSW5z
cGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0
ZXJzKGxvbmcgY2FsbElkCiAgICAgfQogCiAgICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
KyAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiByZXN1bHQg
PSBJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q6OmNyZWF0ZSgpOwogICAgIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiBvdXRfY29sdW1uTmFtZXM7
CiAgICAgU3RyaW5nIG91dF9ub3RlczsKICAgICBkb3VibGUgb3V0X3RpbWVzdGFtcDsKLSAgICBJ
bnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCBvdXRfdmFsdWVzOwotICAgIEluc3BlY3Rvcjo6SW5z
cGVjdG9yVmFsdWUgb3V0X3BheWxvYWQ7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVj
a2VkT2JqZWN0IG91dF92YWx1ZXM7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2Vk
VmFsdWUgb3V0X3BheWxvYWQ7CiAgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkRh
dGFiYXNlSWQgb3V0X2RhdGFiYXNlSWQ7CiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpFcnJvcj4gb3V0X3NxbEVycm9yOwogICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzIG91dF9zY3JlZW5Db2xvcjsKQEAgLTM0Niw3ICszNDYs
NyBAQCB2b2lkIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVOb09w
dGlvbmFsUGFyYW1ldGVycyhsb25nIGNhbGxJZAogCiAjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdFBy
b3RvY29sVHlwZXMuaCIKICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsLmg+Ci0jaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUg
PGluc3BlY3Rvci9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NS
ZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtNDg0LDcgKzQ4
NCw3IEBAIGVudW0gY2xhc3MgUHJpbWFyeUNvbG9ycyB7CiAgICAgQmx1ZSA9IDIsCiB9OyAvLyBl
bnVtIGNsYXNzIFByaW1hcnlDb2xvcnMKIC8qIERhdGFiYXNlIGVycm9yLiAqLwotY2xhc3MgRXJy
b3IgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3RCYXNlIHsKK2NsYXNzIEVycm9y
IDogcHVibGljIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdEJhc2UgewogcHVi
bGljOgogICAgIGVudW0gewogICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCkBAIC00OTYsMTQgKzQ5
NiwxNCBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgIGNsYXNzIEJ1aWxk
ZXIgewogICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9i
amVjdD4gbV9yZXN1bHQ7CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNo
ZWNrZWRPYmplY3Q+IG1fcmVzdWx0OwogCiAgICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWls
ZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJl
dHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAg
ICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjwvKkVycm9yKi9JbnNwZWN0b3I6
Okluc3BlY3Rvck9iamVjdD4gcHRyKQorICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8LypFcnJv
ciovSW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBwdHIpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVy
X2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7
CkBAIC01MjgsNyArNTI4LDcgQEAgcHVibGljOgogICAgICAgICBvcGVyYXRvciBSZWZQdHI8RXJy
b3I+JiAoKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBB
bGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwotICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoc2l6ZW9mKEVycm9yKSA9PSBzaXplb2YoSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Qp
LCBjYW5ub3RfY2FzdCk7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoRXJyb3Ip
ID09IHNpemVvZihJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3QpLCBjYW5ub3Rf
Y2FzdCk7CiAgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPEVycm9y
Pio+KCZtX3Jlc3VsdCk7CiAgICAgICAgIH0KIApAQCAtNTQ2LDkgKzU0Niw4IEBAIHB1YmxpYzoK
ICAgICAgKi8KICAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgICB7
Ci0gICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihJbnNwZWN0b3I6Okluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCkpOworICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4o
SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0OjpjcmVhdGUoKSk7CiAgICAgfQot
ICAgIHR5cGVkZWYgSW5zcGVjdG9yOjpQcm90b2NvbDo6U3RydWN0SXRlbVRyYWl0cyBJdGVtVHJh
aXRzOwogfTsKIAogfSAvLyBEYXRhYmFzZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RvbWFpbnMtd2l0aC12YXJ5aW5n
LWNvbW1hbmQtc2l6ZXMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1z
aXplcy5qc29uLXJlc3VsdAppbmRleCA1NWRiZDUyNTZjY2M5MWU4ZjM0MGU4MDJjZWMwZDNiM2Fh
NDQxZDM4Li5kNDI5MmM3YTI5NTc5NzJhMzgxM2JjZDg1ZmY1MmNkNzM3ZDc3MWQzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uLXJlc3VsdAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9t
YWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uLXJlc3VsdApAQCAtMTEwLDkgKzEx
MCw5IEBAIHByb3RlY3RlZDoKIGNsYXNzIEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNo
ZXIgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JTdXBwbGVtZW50YWxCYWNrZW5k
RGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yTmV0
d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXIqLCBJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciop
OwotICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBt
ZXRob2QsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2UpIG92
ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3Ry
aW5nJiBtZXRob2QsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2Jq
ZWN0PiBtZXNzYWdlKSBvdmVycmlkZTsKIHByaXZhdGU6Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2Ux
KGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7
CisgICAgdm9pZCBsb2FkUmVzb3VyY2UxKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3I6OlBy
b3RvY29sOjpVbmNoZWNrZWRPYmplY3QmIG1lc3NhZ2UpOwogcHJpdmF0ZToKICAgICBJbnNwZWN0
b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXIqLCBJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwog
ICAgIEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBtX2FnZW50OwpA
QCAtMTIxLDE1ICsxMjEsMTUgQEAgcHJpdmF0ZToKIGNsYXNzIEluc3BlY3Rvck5ldHdvcmszQmFj
a2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JTdXBwbGVt
ZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8
SW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEluc3BlY3Rvcjo6SW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXIqLCBJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRj
aGVySGFuZGxlciopOwotICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaChsb25nIGNhbGxJZCwgY29u
c3QgU3RyaW5nJiBtZXRob2QsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+
IG1lc3NhZ2UpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaChsb25nIGNhbGxJ
ZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
VW5jaGVja2VkT2JqZWN0PiBtZXNzYWdlKSBvdmVycmlkZTsKIHByaXZhdGU6Ci0gICAgdm9pZCBs
b2FkUmVzb3VyY2UxKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVj
dCYgbWVzc2FnZSk7Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2UyKGxvbmcgY2FsbElkLCBjb25zdCBJ
bnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7Ci0gICAgdm9pZCBsb2FkUmVzb3Vy
Y2UzKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgbWVzc2Fn
ZSk7Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2U0KGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3I6
Okluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2U1KGxvbmcg
Y2FsbElkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7Ci0gICAg
dm9pZCBsb2FkUmVzb3VyY2U2KGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rv
ck9iamVjdCYgbWVzc2FnZSk7Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2U3KGxvbmcgY2FsbElkLCBj
b25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CisgICAgdm9pZCBsb2Fk
UmVzb3VyY2UxKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNr
ZWRPYmplY3QmIG1lc3NhZ2UpOworICAgIHZvaWQgbG9hZFJlc291cmNlMihsb25nIGNhbGxJZCwg
Y29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0JiBtZXNzYWdlKTsKKyAg
ICB2b2lkIGxvYWRSZXNvdXJjZTMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlVuY2hlY2tlZE9iamVjdCYgbWVzc2FnZSk7CisgICAgdm9pZCBsb2FkUmVzb3VyY2U0KGxv
bmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3QmIG1l
c3NhZ2UpOworICAgIHZvaWQgbG9hZFJlc291cmNlNShsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVj
dG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0JiBtZXNzYWdlKTsKKyAgICB2b2lkIGxvYWRS
ZXNvdXJjZTYobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tl
ZE9iamVjdCYgbWVzc2FnZSk7CisgICAgdm9pZCBsb2FkUmVzb3VyY2U3KGxvbmcgY2FsbElkLCBj
b25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3QmIG1lc3NhZ2UpOwogcHJp
dmF0ZToKICAgICBJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyKEluc3BlY3Rvcjo6
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqLCBJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNw
YXRjaGVySGFuZGxlciopOwogICAgIEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyKiBtX2FnZW50OwpAQCAtMTc5LDcgKzE3OSw3IEBAIHByaXZhdGU6CiAjaWYgRU5BQkxF
KElOU1BFQ1RPUikKIAogI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwuaD4KLSNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8
aW5zcGVjdG9yL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewpAQCAtMTk5LDcgKzE5OSw3IEBAIElu
c3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6Okluc3BlY3Rvck5ldHdvcmsxQmFja2Vu
ZERpc3BhdGNoZXIoSW5zcGVjdG9yCiAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJE
aXNwYXRjaGVyRm9yRG9tYWluKEFTQ0lJTGl0ZXJhbCgiTmV0d29yazEiKSwgdGhpcyk7CiB9CiAK
LXZvaWQgSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBj
YWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
bWVzc2FnZSkKK3ZvaWQgSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0
Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPFByb3RvY29s
OjpVbmNoZWNrZWRPYmplY3Q+IG1lc3NhZ2UpCiB7CiAgICAgUmVmPEluc3BlY3Rvck5ldHdvcmsx
QmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwogCkBAIC0yMDksMTAgKzIwOSwxMCBA
QCB2b2lkIEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcg
Y2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldAogICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5y
ZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpN
ZXRob2ROb3RGb3VuZCwgbWFrZVN0cmluZygnXCcnLCAiTmV0d29yazEiLCAnLicsIG1ldGhvZCwg
Iicgd2FzIG5vdCBmb3VuZCIpKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmRE
aXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UxKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmpl
Y3QmKQordm9pZCBJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3Vy
Y2UxKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmpl
Y3QmKQogewogICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yOjpQcm90
b2NvbDo6VW5jaGVja2VkT2JqZWN0OjpjcmVhdGUoKTsKICAgICBtX2FnZW50LT5sb2FkUmVzb3Vy
Y2UxKGVycm9yKTsKIAogICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxs
SWQsIHJlc3VsdC5yZWxlYXNlKCksIGVycm9yKTsKQEAgLTIzMCwxMSArMjMwLDExIEBAIEluc3Bl
Y3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6Okluc3BlY3Rvck5ldHdvcmszQmFja2VuZERp
c3BhdGNoZXIoSW5zcGVjdG9yCiAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNw
YXRjaGVyRm9yRG9tYWluKEFTQ0lJTGl0ZXJhbCgiTmV0d29yazMiKSwgdGhpcyk7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBjYWxs
SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbWVz
c2FnZSkKK3ZvaWQgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2go
bG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPFByb3RvY29sOjpV
bmNoZWNrZWRPYmplY3Q+IG1lc3NhZ2UpCiB7CiAgICAgUmVmPEluc3BlY3Rvck5ldHdvcmszQmFj
a2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwogCi0gICAgdHlwZWRlZiB2b2lkIChJbnNw
ZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjoqQ2FsbEhhbmRsZXIpKGxvbmcgY2FsbElk
LCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CisgICAgdHlwZWRl
ZiB2b2lkIChJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjoqQ2FsbEhhbmRsZXIp
KGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Qm
IG1lc3NhZ2UpOwogICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIENhbGxIYW5kbGVyPiBEaXNw
YXRjaE1hcDsKICAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoRGlzcGF0Y2hNYXAs
IGRpc3BhdGNoTWFwLCAoKSk7CiAgICAgaWYgKGRpc3BhdGNoTWFwLmlzRW1wdHkoKSkgewpAQCAt
MjY0LDY0ICsyNjQsNjQgQEAgdm9pZCBJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVy
OjpkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXQKICAgICAoKCp0aGlzKS4q
aXQtPnZhbHVlKShjYWxsSWQsICptZXNzYWdlLmdldCgpKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JO
ZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UxKGxvbmcgY2FsbElkLCBjb25z
dCBJbnNwZWN0b3JPYmplY3QmKQordm9pZCBJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRj
aGVyOjpsb2FkUmVzb3VyY2UxKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29s
OjpVbmNoZWNrZWRPYmplY3QmKQogewogICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Cisg
ICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gcmVzdWx0ID0g
SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0OjpjcmVhdGUoKTsKICAgICBtX2Fn
ZW50LT5sb2FkUmVzb3VyY2UxKGVycm9yKTsKIAogICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNl
bmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGVycm9yKTsKIH0KIAotdm9pZCBJ
bnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UyKGxvbmcgY2Fs
bElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmKQordm9pZCBJbnNwZWN0b3JOZXR3b3JrM0JhY2tl
bmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UyKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3I6
OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3QmKQogewogICAgIEVycm9yU3RyaW5nIGVycm9yOwot
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4g
cmVzdWx0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0OjpjcmVhdGUoKTsK
ICAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2UyKGVycm9yKTsKIAogICAgIG1fYmFja2VuZERpc3Bh
dGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGVycm9yKTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2Uz
KGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmKQordm9pZCBJbnNwZWN0b3JOZXR3
b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UzKGxvbmcgY2FsbElkLCBjb25zdCBJ
bnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3QmKQogewogICAgIEVycm9yU3RyaW5n
IGVycm9yOwotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tl
ZE9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0Ojpj
cmVhdGUoKTsKICAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2UzKGVycm9yKTsKIAogICAgIG1fYmFj
a2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGVy
cm9yKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2Fk
UmVzb3VyY2U0KGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmKQordm9pZCBJbnNw
ZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U0KGxvbmcgY2FsbElk
LCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3QmKQogewogICAgIEVy
cm9yU3RyaW5nIGVycm9yOwotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlVuY2hlY2tlZE9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2Vk
T2JqZWN0OjpjcmVhdGUoKTsKICAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2U0KGVycm9yKTsKIAog
ICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxl
YXNlKCksIGVycm9yKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRj
aGVyOjpsb2FkUmVzb3VyY2U1KGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmKQor
dm9pZCBJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U1KGxv
bmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3QmKQog
ewogICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJl
c3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6
VW5jaGVja2VkT2JqZWN0OjpjcmVhdGUoKTsKICAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2U1KGVy
cm9yKTsKIAogICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIHJl
c3VsdC5yZWxlYXNlKCksIGVycm9yKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JOZXR3b3JrM0JhY2tl
bmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U2KGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JP
YmplY3QmKQordm9pZCBJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVz
b3VyY2U2KGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRP
YmplY3QmKQogewogICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yOjpQ
cm90b2NvbDo6VW5jaGVja2VkT2JqZWN0OjpjcmVhdGUoKTsKICAgICBtX2FnZW50LT5sb2FkUmVz
b3VyY2U2KGVycm9yKTsKIAogICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShj
YWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGVycm9yKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JOZXR3
b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U3KGxvbmcgY2FsbElkLCBjb25zdCBJ
bnNwZWN0b3JPYmplY3QmKQordm9pZCBJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVy
Ojpsb2FkUmVzb3VyY2U3KGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpV
bmNoZWNrZWRPYmplY3QmKQogewogICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gcmVzdWx0ID0gSW5z
cGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0OjpjcmVhdGUoKTsKICAgICBtX2FnZW50
LT5sb2FkUmVzb3VyY2U3KGVycm9yKTsKIAogICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRS
ZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGVycm9yKTsKQEAgLTM3MSw3ICszNzEs
NyBAQCB2b2lkIEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJj
ZTcobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlYwogCiAjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdFBy
b3RvY29sVHlwZXMuaCIKICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsLmg+Ci0jaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUg
PGluc3BlY3Rvci9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NS
ZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2V2
ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZXZlbnRzLXdpdGgtb3B0
aW9uYWwtcGFyYW1ldGVycy5qc29uLXJlc3VsdAppbmRleCBjOTg4NzYxY2U1NjI0ZDNlZWVkM2Q0
NWNmNmIxMzFiMzlkMzZiNGU2Li4yMDU2NDRiZmI1MmU1ZmJlNmYwNWM1OGM2MjJiYTIxZTIxODJh
YmVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZXhwZWN0ZWQvZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uLXJlc3Vs
dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhw
ZWN0ZWQvZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uLXJlc3VsdApAQCAtMTI0
LDcgKzEyNCw3IEBAIHR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwogI2lmIEVOQUJMRShJTlNQ
RUNUT1IpCiAKICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+
Ci0jaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPGluc3Bl
Y3Rvci9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTE3NSw3ICsxNzUsNyBAQCBuYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKIAogI2luY2x1ZGUgIkluc3BlY3RvclRlc3RQcm90b2NvbFR5cGVzLmgi
CiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgotI2luY2x1
ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5z
cGVjdG9yUHJvdG9jb2xUeXBlcy5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTE4Niw4ICsxODYsOCBAQCBuYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKIGNsYXNzIEluc3BlY3RvckRhdGFiYXNlRnJvbnRlbmREaXNwYXRjaGVy
IHsKIHB1YmxpYzoKICAgICBJbnNwZWN0b3JEYXRhYmFzZUZyb250ZW5kRGlzcGF0Y2hlcihJbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgOiBtX2luc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgfQotICAgIHZv
aWQgZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyhQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkFycmF5PFN0cmluZz4+IGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcqIGNvbnN0IG5v
dGVzLCBjb25zdCBkb3VibGUqIGNvbnN0IHRpbWVzdGFtcCwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6
Okluc3BlY3Rvck9iamVjdD4gdmFsdWVzLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9y
VmFsdWU+IHBheWxvYWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6
OkVycm9yPiBzcWxFcnJvciwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlBy
aW1hcnlDb2xvcnMqIGNvbnN0IHNjcmVlbkNvbG9yLCBjb25zdCBTdHJpbmcqIGNvbnN0IHByaW50
Q29sb3IpOwotICAgIHZvaWQgZGlkRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKFBhc3NSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4gY29sdW1uTmFtZXMsIGNvbnN0
IFN0cmluZyYgbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJ
bnNwZWN0b3JPYmplY3Q+IHZhbHVlcywgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZh
bHVlPiBwYXlsb2FkLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpF
cnJvcj4gc3FsRXJyb3IsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmlt
YXJ5Q29sb3JzJiBzY3JlZW5Db2xvciwgY29uc3QgU3RyaW5nJiBwcmludENvbG9yKTsKKyAgICB2
b2lkIGRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnMoUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpBcnJheTxTdHJpbmc+PiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nKiBjb25zdCBu
b3RlcywgY29uc3QgZG91YmxlKiBjb25zdCB0aW1lc3RhbXAsIFBhc3NSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiB2YWx1ZXMsIFBhc3NSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6VW5jaGVja2VkVmFsdWU+IHBheWxvYWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBzcWxFcnJvciwgY29uc3QgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMqIGNvbnN0IHNjcmVlbkNvbG9yLCBjb25z
dCBTdHJpbmcqIGNvbnN0IHByaW50Q29sb3IpOworICAgIHZvaWQgZGlkRXhlY3V0ZU5vT3B0aW9u
YWxQYXJhbWV0ZXJzKFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5n
Pj4gY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFBh
c3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiB2YWx1ZXMsIFBh
c3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkVmFsdWU+IHBheWxvYWQsIFBh
c3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBzcWxFcnJvciwg
Y29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMmIHNjcmVl
bkNvbG9yLCBjb25zdCBTdHJpbmcmIHByaW50Q29sb3IpOwogcHJpdmF0ZToKICAgICBJbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOwogfTsKQEAgLTIz
OSwxMSArMjM5LDExIEBAIHByaXZhdGU6CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCi12b2lk
IEluc3BlY3RvckRhdGFiYXNlRnJvbnRlbmREaXNwYXRjaGVyOjpkaWRFeGVjdXRlT3B0aW9uYWxQ
YXJhbWV0ZXJzKFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4g
Y29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyogY29uc3Qgbm90ZXMsIGNvbnN0IGRvdWJsZSogY29u
c3QgdGltZXN0YW1wLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiB2YWx1
ZXMsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gcGF5bG9hZCwgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHNxbEVycm9yLCBjb25z
dCBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyogY29uc3Qgc2Ny
ZWVuQ29sb3IsIGNvbnN0IFN0cmluZyogY29uc3QgcHJpbnRDb2xvcikKK3ZvaWQgSW5zcGVjdG9y
RGF0YWJhc2VGcm9udGVuZERpc3BhdGNoZXI6OmRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnMo
UGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiBjb2x1bW5OYW1l
cywgY29uc3QgU3RyaW5nKiBjb25zdCBub3RlcywgY29uc3QgZG91YmxlKiBjb25zdCB0aW1lc3Rh
bXAsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiB2YWx1
ZXMsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkVmFsdWU+IHBheWxv
YWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBzcWxF
cnJvciwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMq
IGNvbnN0IHNjcmVlbkNvbG9yLCBjb25zdCBTdHJpbmcqIGNvbnN0IHByaW50Q29sb3IpCiB7Ci0g
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4ganNvbk1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOworICAgIFJlZlB0cjxQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBqc29uTWVz
c2FnZSA9IFByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q6OmNyZWF0ZSgpOwogICAgIGpzb25NZXNz
YWdlLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJtZXRob2QiKSwgQVNDSUlMaXRlcmFsKCJEYXRh
YmFzZS5kaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzIikpOwotICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAg
UmVmUHRyPFByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IHBhcmFtc09iamVjdCA9IFByb3RvY29s
OjpVbmNoZWNrZWRPYmplY3Q6OmNyZWF0ZSgpOwogICAgIGlmIChjb2x1bW5OYW1lcykKICAgICAg
ICAgcGFyYW1zT2JqZWN0LT5zZXRBcnJheShBU0NJSUxpdGVyYWwoImNvbHVtbk5hbWVzIiksIGNv
bHVtbk5hbWVzKTsKICAgICBpZiAobm90ZXMpCkBAIC0yNjUsMTEgKzI2NSwxMSBAQCB2b2lkIElu
c3BlY3RvckRhdGFiYXNlRnJvbnRlbmREaXNwYXRjaGVyOjpkaWRFeGVjdXRlT3B0aW9uYWxQYXJh
bWV0ZXJzKFBhc3NSZWZQdAogICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVz
c2FnZVRvRnJvbnRlbmQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKIH0KIAotdm9pZCBJ
bnNwZWN0b3JEYXRhYmFzZUZyb250ZW5kRGlzcGF0Y2hlcjo6ZGlkRXhlY3V0ZU5vT3B0aW9uYWxQ
YXJhbWV0ZXJzKFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4g
Y29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHZhbHVlcywgUGFzc1JlZlB0cjxJbnNw
ZWN0b3I6Okluc3BlY3RvclZhbHVlPiBwYXlsb2FkLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gc3FsRXJyb3IsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzJiBzY3JlZW5Db2xvciwgY29uc3QgU3RyaW5nJiBw
cmludENvbG9yKQordm9pZCBJbnNwZWN0b3JEYXRhYmFzZUZyb250ZW5kRGlzcGF0Y2hlcjo6ZGlk
RXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXJyYXk8U3RyaW5nPj4gY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgbm90ZXMsIGRvdWJs
ZSB0aW1lc3RhbXAsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2Jq
ZWN0PiB2YWx1ZXMsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkVmFs
dWU+IHBheWxvYWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVy
cm9yPiBzcWxFcnJvciwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1h
cnlDb2xvcnMmIHNjcmVlbkNvbG9yLCBjb25zdCBTdHJpbmcmIHByaW50Q29sb3IpCiB7Ci0gICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4ganNvbk1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpOworICAgIFJlZlB0cjxQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBqc29uTWVzc2Fn
ZSA9IFByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q6OmNyZWF0ZSgpOwogICAgIGpzb25NZXNzYWdl
LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJtZXRob2QiKSwgQVNDSUlMaXRlcmFsKCJEYXRhYmFz
ZS5kaWRFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMiKSk7Ci0gICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBS
ZWZQdHI8UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gcGFyYW1zT2JqZWN0ID0gUHJvdG9jb2w6
OlVuY2hlY2tlZE9iamVjdDo6Y3JlYXRlKCk7CiAgICAgcGFyYW1zT2JqZWN0LT5zZXRBcnJheShB
U0NJSUxpdGVyYWwoImNvbHVtbk5hbWVzIiksIGNvbHVtbk5hbWVzKTsKICAgICBwYXJhbXNPYmpl
Y3QtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm5vdGVzIiksIG5vdGVzKTsKICAgICBwYXJhbXNP
YmplY3QtPnNldERvdWJsZShBU0NJSUxpdGVyYWwoInRpbWVzdGFtcCIpLCB0aW1lc3RhbXApOwpA
QCAtMzYxLDcgKzM2MSw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBnZXRUZXN0RW51
bUNvbnN0YW50VmFsdWUoVCBlbnVtVmFsdWUpCiAKIG5hbWVzcGFjZSBEYXRhYmFzZSB7CiAvKiBE
YXRhYmFzZSBlcnJvci4gKi8KLWNsYXNzIEVycm9yIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVj
dG9yT2JqZWN0QmFzZSB7CitjbGFzcyBFcnJvciA6IHB1YmxpYyBJbnNwZWN0b3I6OlByb3RvY29s
OjpVbmNoZWNrZWRPYmplY3RCYXNlIHsKIHB1YmxpYzoKICAgICBlbnVtIHsKICAgICAgICAgTm9G
aWVsZHNTZXQgPSAwLApAQCAtMzczLDE0ICszNzMsMTQgQEAgcHVibGljOgogICAgIHRlbXBsYXRl
PGludCBTVEFURT4KICAgICBjbGFzcyBCdWlsZGVyIHsKICAgICBwcml2YXRlOgotICAgICAgICBS
ZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OworICAgICAgICBSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBtX3Jlc3VsdDsKIAogICAg
ICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUo
KQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRl
cjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgIH0KIAotICAgICAgICBCdWlsZGVyKFBh
c3NSZWZQdHI8LypFcnJvciovSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHB0cikKKyAgICAg
ICAgQnVpbGRlcihQYXNzUmVmUHRyPC8qRXJyb3IqL0luc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hl
Y2tlZE9iamVjdD4gcHRyKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChT
VEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsK
ICAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwpAQCAtNDA1LDcgKzQwNSw3IEBAIHB1YmxpYzoK
ICAgICAgICAgb3BlcmF0b3IgUmVmUHRyPEVycm9yPiYgKCkKICAgICAgICAgewogICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3Jl
YWR5KTsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihFcnJvcikgPT0gc2l6ZW9m
KEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0KSwgY2Fubm90X2Nhc3QpOworICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoc2l6ZW9mKEVycm9yKSA9PSBzaXplb2YoSW5zcGVjdG9yOjpQcm90b2Nv
bDo6VW5jaGVja2VkT2JqZWN0KSwgY2Fubm90X2Nhc3QpOwogICAgICAgICAgICAgcmV0dXJuICpy
ZWludGVycHJldF9jYXN0PFJlZlB0cjxFcnJvcj4qPigmbV9yZXN1bHQpOwogICAgICAgICB9CiAK
QEAgLTQyMyw5ICs0MjMsOCBAQCBwdWJsaWM6CiAgICAgICovCiAgICAgc3RhdGljIEJ1aWxkZXI8
Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICAgewotICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0Zp
ZWxkc1NldD4oSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICAgICAg
cmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tl
ZE9iamVjdDo6Y3JlYXRlKCkpOwogICAgIH0KLSAgICB0eXBlZGVmIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlN0cnVjdEl0ZW1UcmFpdHMgSXRlbVRyYWl0czsKIH07CiAKIH0gLy8gRGF0YWJhc2UKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC9nZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbi1yZXN1bHQg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
Z2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24tcmVzdWx0CmluZGV4IGEy
MmNhYmE4ZWZjZTNlMjc0Mzg2NTcwYzFlODcyNDljZjM3OWI1NTIuLjljYTdmMmJlODhjOTQ2NzMy
YTA4NzdmMzk5OGExMGZlN2RjOTA1OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9nZW5lcmF0ZS1kb21haW5zLXdpdGgt
ZmVhdHVyZS1ndWFyZHMuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2dlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0
dXJlLWd1YXJkcy5qc29uLXJlc3VsdApAQCAtOTUsOSArOTUsOSBAQCBwcm90ZWN0ZWQ6CiBjbGFz
cyBJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgog
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI+
IGNyZWF0ZShJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiwgSW5zcGVjdG9y
TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlz
cGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZv
aWQgZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gbWVzc2FnZSkgb3ZlcnJpZGU7
CiBwcml2YXRlOgotICAgIHZvaWQgbG9hZFJlc291cmNlKGxvbmcgY2FsbElkLCBjb25zdCBJbnNw
ZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CisgICAgdm9pZCBsb2FkUmVzb3VyY2Uo
bG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdCYg
bWVzc2FnZSk7CiBwcml2YXRlOgogICAgIEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNo
ZXIoSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciosIEluc3BlY3Rvck5ldHdv
cmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CiAgICAgSW5zcGVjdG9yTmV0d29yazFCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQ7CkBAIC0xNDgsNyArMTQ4LDcgQEAgcHJpdmF0
ZToKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogCiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbC5oPgotI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMu
aD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CkBAIC0xNzAs
NyArMTcwLDcgQEAgSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6SW5zcGVjdG9y
TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3IKICAgICBtX2JhY2tlbmREaXNwYXRj
aGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oQVNDSUlMaXRlcmFsKCJOZXR3b3JrMSIp
LCB0aGlzKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpk
aXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFBhc3NSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBtZXNzYWdlKQordm9pZCBJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNw
YXRjaGVyOjpkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFBhc3NS
ZWZQdHI8UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gbWVzc2FnZSkKIHsKICAgICBSZWY8SW5z
cGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CiAKQEAgLTE4
MCwxMCArMTgwLDEwIEBAIHZvaWQgSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6
ZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0CiAgICAgICAgIG1fYmFja2Vu
ZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCBtYWtlU3RyaW5nKCdcJycsICJOZXR3b3JrMSIs
ICcuJywgbWV0aG9kLCAiJyB3YXMgbm90IGZvdW5kIikpOwogfQogCi12b2lkIEluc3BlY3Rvck5l
dHdvcmsxQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZShsb25nIGNhbGxJZCwgY29uc3Qg
SW5zcGVjdG9yT2JqZWN0JikKK3ZvaWQgSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hl
cjo6bG9hZFJlc291cmNlKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpV
bmNoZWNrZWRPYmplY3QmKQogewogICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gcmVzdWx0ID0gSW5z
cGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0OjpjcmVhdGUoKTsKICAgICBtX2FnZW50
LT5sb2FkUmVzb3VyY2UoZXJyb3IpOwogCiAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJl
c3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgZXJyb3IpOwpAQCAtMjM0LDcgKzIzNCw3
IEBAIHZvaWQgSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNl
KGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0CiAKICNpbmNsdWRlICJJbnNwZWN0b3JUZXN0UHJv
dG9jb2xUeXBlcy5oIgogI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwuaD4KLSNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8
aW5zcGVjdG9yL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1Jl
ZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkBAIC0zMDIsNyArMzAy
LDcgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAjaWYgUExBVEZPUk0oV0VCX0VWRU5UUykKIHZv
aWQgSW5zcGVjdG9yTmV0d29yazNGcm9udGVuZERpc3BhdGNoZXI6OnJlc291cmNlTG9hZGVkKCkK
IHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBqc29uTWVzc2FnZSA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPFByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IGpz
b25NZXNzYWdlID0gUHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdDo6Y3JlYXRlKCk7CiAgICAganNv
bk1lc3NhZ2UtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm1ldGhvZCIpLCBBU0NJSUxpdGVyYWwo
Ik5ldHdvcmszLnJlc291cmNlTG9hZGVkIikpOwogCiAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkp
OwpAQCAtMzgyLDcgKzM4Miw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBnZXRUZXN0
RW51bUNvbnN0YW50VmFsdWUoVCBlbnVtVmFsdWUpCiAKICNpZiBQTEFURk9STShXRUJfVFlQRVMp
CiBuYW1lc3BhY2UgTmV0d29yazIgewotY2xhc3MgTmV0d29ya0Vycm9yIDogcHVibGljIEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZSB7CitjbGFzcyBOZXR3b3JrRXJyb3IgOiBwdWJsaWMg
SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0QmFzZSB7CiBwdWJsaWM6CiAgICAg
ZW51bSB7CiAgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKQEAgLTM5NCwxNCArMzk0LDE0IEBAIHB1
YmxpYzoKICAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICAgY2xhc3MgQnVpbGRlciB7CiAgICAg
cHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBtX3Jl
c3VsdDsKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVj
dD4gbV9yZXN1bHQ7CiAKICAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUg
fCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuICpyZWlu
dGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgICB9CiAK
LSAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPC8qTmV0d29ya0Vycm9yKi9JbnNwZWN0b3I6Oklu
c3BlY3Rvck9iamVjdD4gcHRyKQorICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8LypOZXR3b3Jr
RXJyb3IqL0luc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gcHRyKQogICAgICAg
ICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVp
bGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgIG1fcmVzdWx0ID0g
cHRyOwpAQCAtNDI2LDcgKzQyNiw3IEBAIHB1YmxpYzoKICAgICAgICAgb3BlcmF0b3IgUmVmUHRy
PE5ldHdvcmtFcnJvcj4mICgpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7Ci0gICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVChzaXplb2YoTmV0d29ya0Vycm9yKSA9PSBzaXplb2YoSW5zcGVjdG9y
OjpJbnNwZWN0b3JPYmplY3QpLCBjYW5ub3RfY2FzdCk7CisgICAgICAgICAgICBDT01QSUxFX0FT
U0VSVChzaXplb2YoTmV0d29ya0Vycm9yKSA9PSBzaXplb2YoSW5zcGVjdG9yOjpQcm90b2NvbDo6
VW5jaGVja2VkT2JqZWN0KSwgY2Fubm90X2Nhc3QpOwogICAgICAgICAgICAgcmV0dXJuICpyZWlu
dGVycHJldF9jYXN0PFJlZlB0cjxOZXR3b3JrRXJyb3I+Kj4oJm1fcmVzdWx0KTsKICAgICAgICAg
fQogCkBAIC00NDQsOSArNDQ0LDggQEAgcHVibGljOgogICAgICAqLwogICAgIHN0YXRpYyBCdWls
ZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEJ1aWxkZXI8
Tm9GaWVsZHNTZXQ+KEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7CisgICAg
ICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNo
ZWNrZWRPYmplY3Q6OmNyZWF0ZSgpKTsKICAgICB9Ci0gICAgdHlwZWRlZiBJbnNwZWN0b3I6OlBy
b3RvY29sOjpTdHJ1Y3RJdGVtVHJhaXRzIEl0ZW1UcmFpdHM7CiB9OwogCiB9IC8vIE5ldHdvcmsy
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZXhwZWN0ZWQvc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbi1yZXN1bHQgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2Ft
ZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbi1yZXN1bHQKaW5kZXggNTQyMTU1NDY4YWZm
YzMwNGMxZWVjNTE3OTQ1NjZiY2VmOTY2NDVhMi4uZTg0MjE0Y2Q1NDVhOTUzNGE0ZGRmZjMwZjcy
MGZhMjk5Njk3ODQ0MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3NhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpz
b24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uLXJlc3VsdApA
QCAtMTE5LDcgKzExOSw3IEBAIHR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwogI2lmIEVOQUJM
RShJTlNQRUNUT1IpCiAKICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsLmg+Ci0jaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUg
PGluc3BlY3Rvci9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTE3MCw3ICsxNzAsNyBAQCBu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogI2luY2x1ZGUgIkluc3BlY3RvclRlc3RQcm90b2NvbFR5
cGVzLmgiCiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgot
I2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDxpbnNwZWN0
b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zaGFkb3dlZC1v
cHRpb25hbC10eXBlLXNldHRlcnMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1z
ZXR0ZXJzLmpzb24tcmVzdWx0CmluZGV4IGQ5ZGIxM2Y5YWVhZjE3MzVmM2YxYWQ2YTkyMjJiNjY1
NWMzYjZhNDQuLjllZTEzZGNlMjNhMzczN2M2OGQyMjI3NjQyYTM3NjBjNDczZTVkYjkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC9zaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbi1yZXN1bHQKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3NoYWRv
d2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uLXJlc3VsdApAQCAtMTE5LDcgKzExOSw3IEBA
IHR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAKICNp
bmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+Ci0jaW5jbHVkZSA8
aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0
b3JQcm90b2NvbFR5cGVzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiBuYW1l
c3BhY2UgSW5zcGVjdG9yIHsKQEAgLTE3MCw3ICsxNzAsNyBAQCBuYW1lc3BhY2UgSW5zcGVjdG9y
IHsKIAogI2luY2x1ZGUgIkluc3BlY3RvclRlc3RQcm90b2NvbFR5cGVzLmgiCiAjaW5jbHVkZSA8
aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgotI2luY2x1ZGUgPGluc3BlY3Rv
ci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9j
b2xUeXBlcy5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CiAKQEAgLTI5Niw3ICsyOTYsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBTdHJpbmcgZ2V0VGVzdEVudW1Db25zdGFudFZhbHVlKFQgZW51bVZhbHVlKQogCiBuYW1lc3Bh
Y2UgUnVudGltZSB7CiAvKiBLZXkgcGF0aC4gKi8KLWNsYXNzIEtleVBhdGggOiBwdWJsaWMgSW5z
cGVjdG9yOjpJbnNwZWN0b3JPYmplY3RCYXNlIHsKK2NsYXNzIEtleVBhdGggOiBwdWJsaWMgSW5z
cGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0QmFzZSB7CiBwdWJsaWM6CiAgICAgLy8g
TmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAndHlwZScgd2hpbGUgZ2VuZXJhdGluZyBLZXlQYXRo
LgogICAgIGVudW0gY2xhc3MgVHlwZSB7CkBAIC0zMTMsMTQgKzMxMywxNCBAQCBwdWJsaWM6CiAg
ICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgIGNsYXNzIEJ1aWxkZXIgewogICAgIHByaXZhdGU6
Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7Cisg
ICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IG1fcmVz
dWx0OwogCiAgICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4m
IGNhc3RTdGF0ZSgpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRf
Y2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICAgfQogCi0gICAgICAg
IEJ1aWxkZXIoUGFzc1JlZlB0cjwvKktleVBhdGgqL0luc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0
PiBwdHIpCisgICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjwvKktleVBhdGgqL0luc3BlY3Rvcjo6
UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gcHRyKQogICAgICAgICB7CiAgICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25v
bl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwpAQCAtMzM4LDcgKzMz
OCw3IEBAIHB1YmxpYzoKICAgICAgICAgb3BlcmF0b3IgUmVmUHRyPEtleVBhdGg+JiAoKQogICAg
ICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQs
IHJlc3VsdF9pc19ub3RfcmVhZHkpOwotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9m
KEtleVBhdGgpID09IHNpemVvZihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCksIGNhbm5vdF9j
YXN0KTsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihLZXlQYXRoKSA9PSBzaXpl
b2YoSW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0KSwgY2Fubm90X2Nhc3QpOwog
ICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxLZXlQYXRoPio+KCZt
X3Jlc3VsdCk7CiAgICAgICAgIH0KIApAQCAtMzU1LDE4ICszNTUsMTcgQEAgcHVibGljOgogICAg
ICAqLwogICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEluc3BlY3Rvcjo6SW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKSk7CisgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihJbnNw
ZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q6OmNyZWF0ZSgpKTsKICAgICB9Ci0gICAg
dHlwZWRlZiBJbnNwZWN0b3I6OlByb3RvY29sOjpTdHJ1Y3RJdGVtVHJhaXRzIEl0ZW1UcmFpdHM7
CiAKICAgICB2b2lkIHNldFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgIHsKLSAgICAg
ICAgSW5zcGVjdG9yT2JqZWN0QmFzZTo6c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgic3RyaW5nIiks
IHZhbHVlKTsKKyAgICAgICAgVW5jaGVja2VkT2JqZWN0QmFzZTo6c2V0U3RyaW5nKEFTQ0lJTGl0
ZXJhbCgic3RyaW5nIiksIHZhbHVlKTsKICAgICB9CiAKICAgICB2b2lkIHNldEFycmF5KFBhc3NS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4gdmFsdWUpCiAgICAgewot
ICAgICAgICBJbnNwZWN0b3JPYmplY3RCYXNlOjpzZXRBcnJheShBU0NJSUxpdGVyYWwoImFycmF5
IiksIHZhbHVlKTsKKyAgICAgICAgVW5jaGVja2VkT2JqZWN0QmFzZTo6c2V0QXJyYXkoQVNDSUlM
aXRlcmFsKCJhcnJheSIpLCB2YWx1ZSk7CiAgICAgfQogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVj
bGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0
aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbi1yZXN1bHQKaW5kZXggNWYxNTZkY2Q5ODZl
MDc3NDNmNzY4MTVmZWExNmIwM2NjNGU0NmRlYy4uZDk3MzljMmU2NGQ5ZmUyMzdjNWJjYjAyY2E0
ZWMxMzM1YmIxNjhiNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRp
dmUtdHlwZS5qc29uLXJlc3VsdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2
ZS10eXBlLmpzb24tcmVzdWx0CkBAIC0xMTksNyArMTE5LDcgQEAgdHlwZWRlZiBTdHJpbmcgRXJy
b3JTdHJpbmc7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKIAogI2luY2x1ZGUgPGluc3BlY3Rvci9J
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KLSNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9y
VmFsdWVzLmg+CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewpA
QCAtMTcwLDcgKzE3MCw3IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiAjaW5jbHVkZSAiSW5z
cGVjdG9yVGVzdFByb3RvY29sVHlwZXMuaCIKICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsLmg+Ci0jaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5o
PgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+CiAjaW5jbHVk
ZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uLXJlc3VsdCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRl
Y2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbi1yZXN1bHQKaW5kZXggMjg4YzhkOWM5MzFiN2JkMDE1
ZGUzOGRiM2M0MjM2ZWFmYWJhMTkwOC4uZmJkMzU0ODc4OTY1YmM0MTQ0NmExZDBmMzZlMzA4ZGM4
NTMyYjc5ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uLXJlc3Vs
dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhw
ZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24tcmVzdWx0CkBAIC0xMjIsNyAr
MTIyLDcgQEAgdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAjaWYgRU5BQkxFKElOU1BFQ1RP
UikKIAogI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KLSNp
bmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8aW5zcGVjdG9y
L0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewpAQCAtMTczLDcgKzE3Myw3IEBAIG5hbWVzcGFjZSBJ
bnNwZWN0b3IgewogCiAjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdFByb3RvY29sVHlwZXMuaCIKICNp
bmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+Ci0jaW5jbHVkZSA8
aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0
b3JQcm90b2NvbFR5cGVzLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tZW51
bS10eXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24tcmVzdWx0
CmluZGV4IDZhODJiZGU3MDA2NmU2OTFlNjMxNmRhYmEwNWQ2NDM2NGZhNWY2MjIuLjcxODA3YmEy
ZWE5OWU1NDgxOGVlZDMwZWE4ODYxZTBmMjU4YmM3OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0
aW9uLWVudW0tdHlwZS5qc29uLXJlc3VsdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUu
anNvbi1yZXN1bHQKQEAgLTEyMyw3ICsxMjMsNyBAQCB0eXBlZGVmIFN0cmluZyBFcnJvclN0cmlu
ZzsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogCiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbC5oPgotI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMu
aD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CkBAIC0xNzQs
NyArMTc0LDcgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKICNpbmNsdWRlICJJbnNwZWN0b3JU
ZXN0UHJvdG9jb2xUeXBlcy5oIgogI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwuaD4KLSNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5j
bHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KICNpbmNsdWRlIDx3dGYv
UGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0
aW9uLW9iamVjdC10eXBlLmpzb24tcmVzdWx0CmluZGV4IGNhOGZkMmE4MjliZjZiOTc0MDYzZGNi
ZWY5YTM3Njg2ZTMxNjZmNTcuLmUxNjZlNWJlMmM0YzE2ZWFlODU3NzdhYmU0ODM0YTBmMTIxMjYz
MDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24tcmVzdWx0Cisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3Rl
ZC90eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24tcmVzdWx0CkBAIC0xMTksNyArMTE5
LDcgQEAgdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikK
IAogI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KLSNpbmNs
dWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8aW5zcGVjdG9yL0lu
c3BlY3RvclByb3RvY29sVHlwZXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAK
IG5hbWVzcGFjZSBJbnNwZWN0b3IgewpAQCAtMTcwLDcgKzE3MCw3IEBAIG5hbWVzcGFjZSBJbnNw
ZWN0b3IgewogCiAjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdFByb3RvY29sVHlwZXMuaCIKICNpbmNs
dWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+Ci0jaW5jbHVkZSA8aW5z
cGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JQ
cm90b2NvbFR5cGVzLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtMzA0LDcgKzMwNCw3IEBAIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+IFN0cmluZyBnZXRUZXN0RW51bUNvbnN0YW50VmFsdWUoVCBlbnVtVmFsdWUpCiAKIG5h
bWVzcGFjZSBEYXRhYmFzZSB7CiAvKiBEYXRhYmFzZSBlcnJvci4gKi8KLWNsYXNzIEVycm9yIDog
cHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZSB7CitjbGFzcyBFcnJvciA6IHB1
YmxpYyBJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3RCYXNlIHsKIHB1YmxpYzoK
ICAgICBlbnVtIHsKICAgICAgICAgTm9GaWVsZHNTZXQgPSAwLApAQCAtMzE2LDE0ICszMTYsMTQg
QEAgcHVibGljOgogICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgICBjbGFzcyBCdWlsZGVyIHsK
ICAgICBwcml2YXRlOgotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+
IG1fcmVzdWx0OworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2Vk
T2JqZWN0PiBtX3Jlc3VsdDsKIAogICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxT
VEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4g
KnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAg
IH0KIAotICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8LypFcnJvciovSW5zcGVjdG9yOjpJbnNw
ZWN0b3JPYmplY3Q+IHB0cikKKyAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPC8qRXJyb3IqL0lu
c3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gcHRyKQogICAgICAgICB7CiAgICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVh
dGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwpAQCAt
MzQ4LDcgKzM0OCw3IEBAIHB1YmxpYzoKICAgICAgICAgb3BlcmF0b3IgUmVmUHRyPEVycm9yPiYg
KCkKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmll
bGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KHNpemVvZihFcnJvcikgPT0gc2l6ZW9mKEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0KSwgY2Fu
bm90X2Nhc3QpOworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEVycm9yKSA9PSBz
aXplb2YoSW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0KSwgY2Fubm90X2Nhc3Qp
OwogICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxFcnJvcj4qPigm
bV9yZXN1bHQpOwogICAgICAgICB9CiAKQEAgLTM2NiwxMiArMzY2LDExIEBAIHB1YmxpYzoKICAg
ICAgKi8KICAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgICB7Ci0g
ICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihJbnNwZWN0b3I6Okluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCkpOworICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSW5z
cGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0OjpjcmVhdGUoKSk7CiAgICAgfQotICAg
IHR5cGVkZWYgSW5zcGVjdG9yOjpQcm90b2NvbDo6U3RydWN0SXRlbVRyYWl0cyBJdGVtVHJhaXRz
OwogfTsKIAotY2xhc3MgT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGUgOiBwdWJsaWMgSW5zcGVjdG9y
OjpJbnNwZWN0b3JPYmplY3RCYXNlIHsKK2NsYXNzIE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlIDog
cHVibGljIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdEJhc2UgewogcHVibGlj
OgogICAgIGVudW0gewogICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCkBAIC0zODEsMTQgKzM4MCwx
NCBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgIGNsYXNzIEJ1aWxkZXIg
ewogICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVj
dD4gbV9yZXN1bHQ7CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNr
ZWRPYmplY3Q+IG1fcmVzdWx0OwogCiAgICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVy
PFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVy
biAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAg
ICAgfQogCi0gICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjwvKk9wdGlvbmFsUGFyYW1ldGVyQnVu
ZGxlKi9JbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gcHRyKQorICAgICAgICBCdWlsZGVyKFBh
c3NSZWZQdHI8LypPcHRpb25hbFBhcmFtZXRlckJ1bmRsZSovSW5zcGVjdG9yOjpQcm90b2NvbDo6
VW5jaGVja2VkT2JqZWN0PiBwdHIpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3Rh
dGUpOwogICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CkBAIC0zOTksNyArMzk4LDcgQEAgcHVi
bGljOgogICAgICAgICBvcGVyYXRvciBSZWZQdHI8T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU+JiAo
KQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVs
ZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
c2l6ZW9mKE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlKSA9PSBzaXplb2YoSW5zcGVjdG9yOjpJbnNw
ZWN0b3JPYmplY3QpLCBjYW5ub3RfY2FzdCk7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChz
aXplb2YoT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGUpID09IHNpemVvZihJbnNwZWN0b3I6OlByb3Rv
Y29sOjpVbmNoZWNrZWRPYmplY3QpLCBjYW5ub3RfY2FzdCk7CiAgICAgICAgICAgICByZXR1cm4g
KnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlPio+KCZtX3Jl
c3VsdCk7CiAgICAgICAgIH0KIApAQCAtNDE1LDQyICs0MTQsNDEgQEAgcHVibGljOgogICAgICAq
LwogICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKSk7CisgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihJbnNwZWN0
b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q6OmNyZWF0ZSgpKTsKICAgICB9Ci0gICAgdHlw
ZWRlZiBJbnNwZWN0b3I6OlByb3RvY29sOjpTdHJ1Y3RJdGVtVHJhaXRzIEl0ZW1UcmFpdHM7CiAK
ICAgICB2b2lkIHNldENvbHVtbk5hbWVzKFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
QXJyYXk8U3RyaW5nPj4gdmFsdWUpCiAgICAgewotICAgICAgICBJbnNwZWN0b3JPYmplY3RCYXNl
OjpzZXRBcnJheShBU0NJSUxpdGVyYWwoImNvbHVtbk5hbWVzIiksIHZhbHVlKTsKKyAgICAgICAg
VW5jaGVja2VkT2JqZWN0QmFzZTo6c2V0QXJyYXkoQVNDSUlMaXRlcmFsKCJjb2x1bW5OYW1lcyIp
LCB2YWx1ZSk7CiAgICAgfQogCiAgICAgdm9pZCBzZXROb3Rlcyhjb25zdCBTdHJpbmcmIHZhbHVl
KQogICAgIHsKLSAgICAgICAgSW5zcGVjdG9yT2JqZWN0QmFzZTo6c2V0U3RyaW5nKEFTQ0lJTGl0
ZXJhbCgibm90ZXMiKSwgdmFsdWUpOworICAgICAgICBVbmNoZWNrZWRPYmplY3RCYXNlOjpzZXRT
dHJpbmcoQVNDSUlMaXRlcmFsKCJub3RlcyIpLCB2YWx1ZSk7CiAgICAgfQogCiAgICAgdm9pZCBz
ZXRUaW1lc3RhbXAoZG91YmxlIHZhbHVlKQogICAgIHsKLSAgICAgICAgSW5zcGVjdG9yT2JqZWN0
QmFzZTo6c2V0RG91YmxlKEFTQ0lJTGl0ZXJhbCgidGltZXN0YW1wIiksIHZhbHVlKTsKKyAgICAg
ICAgVW5jaGVja2VkT2JqZWN0QmFzZTo6c2V0RG91YmxlKEFTQ0lJTGl0ZXJhbCgidGltZXN0YW1w
IiksIHZhbHVlKTsKICAgICB9CiAKLSAgICB2b2lkIHNldFZhbHVlcyhQYXNzUmVmUHRyPEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKKyAgICB2b2lkIHNldFZhbHVlcyhQYXNzUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gdmFsdWUpCiAgICAgewot
ICAgICAgICBJbnNwZWN0b3JPYmplY3RCYXNlOjpzZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJ2YWx1
ZXMiKSwgdmFsdWUpOworICAgICAgICBVbmNoZWNrZWRPYmplY3RCYXNlOjpzZXRPYmplY3QoQVND
SUlMaXRlcmFsKCJ2YWx1ZXMiKSwgdmFsdWUpOwogICAgIH0KIAotICAgIHZvaWQgc2V0UGF5bG9h
ZChQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IHZhbHVlKQorICAgIHZvaWQg
c2V0UGF5bG9hZChQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZFZhbHVl
PiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIEluc3BlY3Rvck9iamVjdEJhc2U6OnNldFZhbHVlKEFT
Q0lJTGl0ZXJhbCgicGF5bG9hZCIpLCB2YWx1ZSk7CisgICAgICAgIFVuY2hlY2tlZE9iamVjdEJh
c2U6OnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgicGF5bG9hZCIpLCB2YWx1ZSk7CiAgICAgfQogCiAg
ICAgdm9pZCBzZXRFcnJvcihQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNl
OjpFcnJvcj4gdmFsdWUpCiAgICAgewotICAgICAgICBJbnNwZWN0b3JPYmplY3RCYXNlOjpzZXRP
YmplY3QoQVNDSUlMaXRlcmFsKCJlcnJvciIpLCB2YWx1ZSk7CisgICAgICAgIFVuY2hlY2tlZE9i
amVjdEJhc2U6OnNldE9iamVjdChBU0NJSUxpdGVyYWwoImVycm9yIiksIHZhbHVlKTsKICAgICB9
CiB9OwogCi1jbGFzcyBQYXJhbWV0ZXJCdW5kbGUgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0
b3JPYmplY3RCYXNlIHsKK2NsYXNzIFBhcmFtZXRlckJ1bmRsZSA6IHB1YmxpYyBJbnNwZWN0b3I6
OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3RCYXNlIHsKIHB1YmxpYzoKICAgICBlbnVtIHsKICAg
ICAgICAgTm9GaWVsZHNTZXQgPSAwLApAQCAtNDY2LDE0ICs0NjQsMTQgQEAgcHVibGljOgogICAg
IHRlbXBsYXRlPGludCBTVEFURT4KICAgICBjbGFzcyBCdWlsZGVyIHsKICAgICBwcml2YXRlOgot
ICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OworICAg
ICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBtX3Jlc3Vs
dDsKIAogICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBj
YXN0U3RhdGUoKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nh
c3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgIH0KIAotICAgICAgICBC
dWlsZGVyKFBhc3NSZWZQdHI8LypQYXJhbWV0ZXJCdW5kbGUqL0luc3BlY3Rvcjo6SW5zcGVjdG9y
T2JqZWN0PiBwdHIpCisgICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjwvKlBhcmFtZXRlckJ1bmRs
ZSovSW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBwdHIpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVy
X2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7
CkBAIC01MDIsMTQgKzUwMCwxNCBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0
YXRlPFRpbWVzdGFtcFNldD4oKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBWYWx1ZXNTZXQ+JiBzZXRWYWx1ZXMoUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9i
amVjdD4gdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBWYWx1ZXNTZXQ+JiBzZXRWYWx1
ZXMoUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IHZhbHVl
KQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVmFsdWVz
U2V0KSwgcHJvcGVydHlfdmFsdWVzX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgIG1fcmVzdWx0
LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJ2YWx1ZXMiKSwgdmFsdWUpOwogICAgICAgICAgICAg
cmV0dXJuIGNhc3RTdGF0ZTxWYWx1ZXNTZXQ+KCk7CiAgICAgICAgIH0KIAotICAgICAgICBCdWls
ZGVyPFNUQVRFIHwgUGF5bG9hZFNldD4mIHNldFBheWxvYWQoUGFzc1JlZlB0cjxJbnNwZWN0b3I6
Okluc3BlY3RvclZhbHVlPiB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFBheWxvYWRT
ZXQ+JiBzZXRQYXlsb2FkKFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2Vk
VmFsdWU+IHZhbHVlKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgUGF5bG9hZFNldCksIHByb3BlcnR5X3BheWxvYWRfYWxyZWFkeV9zZXQpOwogICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgicGF5bG9hZCIpLCB2YWx1ZSk7
CkBAIC01MjYsNyArNTI0LDcgQEAgcHVibGljOgogICAgICAgICBvcGVyYXRvciBSZWZQdHI8UGFy
YW1ldGVyQnVuZGxlPiYgKCkKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
U1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKLSAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKHNpemVvZihQYXJhbWV0ZXJCdW5kbGUpID09IHNpemVvZihJbnNwZWN0
b3I6Okluc3BlY3Rvck9iamVjdCksIGNhbm5vdF9jYXN0KTsKKyAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKHNpemVvZihQYXJhbWV0ZXJCdW5kbGUpID09IHNpemVvZihJbnNwZWN0b3I6OlByb3Rv
Y29sOjpVbmNoZWNrZWRPYmplY3QpLCBjYW5ub3RfY2FzdCk7CiAgICAgICAgICAgICByZXR1cm4g
KnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPFBhcmFtZXRlckJ1bmRsZT4qPigmbV9yZXN1bHQpOwog
ICAgICAgICB9CiAKQEAgLTU0OCwxMyArNTQ2LDEyIEBAIHB1YmxpYzoKICAgICAgKi8KICAgICBz
dGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgICB7Ci0gICAgICAgIHJldHVy
biBCdWlsZGVyPE5vRmllbGRzU2V0PihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCkpOworICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSW5zcGVjdG9yOjpQcm90
b2NvbDo6VW5jaGVja2VkT2JqZWN0OjpjcmVhdGUoKSk7CiAgICAgfQotICAgIHR5cGVkZWYgSW5z
cGVjdG9yOjpQcm90b2NvbDo6U3RydWN0SXRlbVRyYWl0cyBJdGVtVHJhaXRzOwogfTsKIAogLyog
Q29uZmxpY3RlZCBuYW1lcyBtYXkgY2F1c2UgZ2VuZXJhdGVkIGdldHRlcnMvc2V0dGVycyB0byBj
bGFzaCB3aXRoIGJ1aWx0LWluIEluc3BlY3Rvck9iamVjdCBtZXRob2RzLiAqLwotY2xhc3MgT2Jq
ZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0cyA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3Rv
ck9iamVjdEJhc2UgeworY2xhc3MgT2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0cyA6IHB1
YmxpYyBJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3RCYXNlIHsKIHB1YmxpYzoK
ICAgICBlbnVtIHsKICAgICAgICAgTm9GaWVsZHNTZXQgPSAwLApAQCAtNTY5LDE0ICs1NjYsMTQg
QEAgcHVibGljOgogICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgICBjbGFzcyBCdWlsZGVyIHsK
ICAgICBwcml2YXRlOgotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+
IG1fcmVzdWx0OworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2Vk
T2JqZWN0PiBtX3Jlc3VsdDsKIAogICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxT
VEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4g
KnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAg
IH0KIAotICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8LypPYmplY3RXaXRoUHJvcGVydHlOYW1l
Q29uZmxpY3RzKi9JbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gcHRyKQorICAgICAgICBCdWls
ZGVyKFBhc3NSZWZQdHI8LypPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzKi9JbnNwZWN0
b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IHB0cikKICAgICAgICAgewogICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9p
bl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKQEAgLTYyMiw3
ICs2MTksNyBAQCBwdWJsaWM6CiAgICAgICAgIG9wZXJhdG9yIFJlZlB0cjxPYmplY3RXaXRoUHJv
cGVydHlOYW1lQ29uZmxpY3RzPiYgKCkKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKLSAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxp
Y3RzKSA9PSBzaXplb2YoSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QpLCBjYW5ub3RfY2FzdCk7
CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoT2JqZWN0V2l0aFByb3BlcnR5TmFt
ZUNvbmZsaWN0cykgPT0gc2l6ZW9mKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVj
dCksIGNhbm5vdF9jYXN0KTsKICAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxS
ZWZQdHI8T2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0cz4qPigmbV9yZXN1bHQpOwogICAg
ICAgICB9CiAKQEAgLTY0MywxNSArNjQwLDE0IEBAIHB1YmxpYzoKICAgICAgKi8KICAgICBzdGF0
aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBC
dWlsZGVyPE5vRmllbGRzU2V0PihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkp
OworICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSW5zcGVjdG9yOjpQcm90b2Nv
bDo6VW5jaGVja2VkT2JqZWN0OjpjcmVhdGUoKSk7CiAgICAgfQotICAgIHR5cGVkZWYgSW5zcGVj
dG9yOjpQcm90b2NvbDo6U3RydWN0SXRlbVRyYWl0cyBJdGVtVHJhaXRzOwogfTsKIAogfSAvLyBE
YXRhYmFzZQogCiBuYW1lc3BhY2UgVGVzdCB7Ci1jbGFzcyBQYXJhbWV0ZXJCdW5kbGUgOiBwdWJs
aWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3RCYXNlIHsKK2NsYXNzIFBhcmFtZXRlckJ1bmRs
ZSA6IHB1YmxpYyBJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3RCYXNlIHsKIHB1
YmxpYzoKICAgICBlbnVtIHsKICAgICAgICAgTm9GaWVsZHNTZXQgPSAwLApAQCAtNjY3LDE0ICs2
NjMsMTQgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgICBjbGFzcyBCdWls
ZGVyIHsKICAgICBwcml2YXRlOgotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JP
YmplY3Q+IG1fcmVzdWx0OworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5j
aGVja2VkT2JqZWN0PiBtX3Jlc3VsdDsKIAogICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVp
bGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgICB7CiAgICAgICAgICAgICBy
ZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAg
ICAgICAgIH0KIAotICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8LypQYXJhbWV0ZXJCdW5kbGUq
L0luc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBwdHIpCisgICAgICAgIEJ1aWxkZXIoUGFzc1Jl
ZlB0cjwvKlBhcmFtZXRlckJ1bmRsZSovSW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2Jq
ZWN0PiBwdHIpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09
IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAg
ICAgICAgbV9yZXN1bHQgPSBwdHI7CkBAIC03MDMsMTQgKzY5OSwxNCBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFRpbWVzdGFtcFNldD4oKTsKICAgICAgICAgfQogCi0g
ICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBWYWx1ZXNTZXQ+JiBzZXRWYWx1ZXMoUGFzc1JlZlB0cjxJ
bnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBWYWx1ZXNTZXQ+JiBzZXRWYWx1ZXMoUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpV
bmNoZWNrZWRPYmplY3Q+IHZhbHVlKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgVmFsdWVzU2V0KSwgcHJvcGVydHlfdmFsdWVzX2FscmVhZHlfc2V0KTsK
ICAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJ2YWx1ZXMiKSwg
dmFsdWUpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxWYWx1ZXNTZXQ+KCk7CiAgICAg
ICAgIH0KIAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgUGF5bG9hZFNldD4mIHNldFBheWxvYWQo
UGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiB2YWx1ZSkKKyAgICAgICAgQnVp
bGRlcjxTVEFURSB8IFBheWxvYWRTZXQ+JiBzZXRQYXlsb2FkKFBhc3NSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6VW5jaGVja2VkVmFsdWU+IHZhbHVlKQogICAgICAgICB7CiAgICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgUGF5bG9hZFNldCksIHByb3BlcnR5X3BheWxvYWRf
YWxyZWFkeV9zZXQpOwogICAgICAgICAgICAgbV9yZXN1bHQtPnNldFZhbHVlKEFTQ0lJTGl0ZXJh
bCgicGF5bG9hZCIpLCB2YWx1ZSk7CkBAIC03MjcsNyArNzIzLDcgQEAgcHVibGljOgogICAgICAg
ICBvcGVyYXRvciBSZWZQdHI8UGFyYW1ldGVyQnVuZGxlPiYgKCkKICAgICAgICAgewogICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90
X3JlYWR5KTsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihQYXJhbWV0ZXJCdW5k
bGUpID09IHNpemVvZihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCksIGNhbm5vdF9jYXN0KTsK
KyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihQYXJhbWV0ZXJCdW5kbGUpID09IHNp
emVvZihJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3QpLCBjYW5ub3RfY2FzdCk7
CiAgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPFBhcmFtZXRlckJ1
bmRsZT4qPigmbV9yZXN1bHQpOwogICAgICAgICB9CiAKQEAgLTc0OSw5ICs3NDUsOCBAQCBwdWJs
aWM6CiAgICAgICovCiAgICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAg
ICAgewotICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSW5zcGVjdG9yOjpJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNT
ZXQ+KEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdDo6Y3JlYXRlKCkpOwogICAg
IH0KLSAgICB0eXBlZGVmIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlN0cnVjdEl0ZW1UcmFpdHMgSXRl
bVRyYWl0czsKIH07CiAKIH0gLy8gVGVzdApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtcmVxdWlyaW5nLXJ1bnRp
bWUtY2FzdHMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uLXJl
c3VsdAppbmRleCBhMTg5YmI5MzU0YjNkNDQ0OTdmYmVmZjE1NmE5ZThhMTBiYTZmNTc0Li4yMTM1
ZmFjNjBjMWUzODg5MGNhYzVmMmZlNDI4NmI3NzdlOTFjNjk5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1yZXF1
aXJpbmctcnVudGltZS1jYXN0cy5qc29uLXJlc3VsdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1yZXF1aXJpbmctcnVudGlt
ZS1jYXN0cy5qc29uLXJlc3VsdApAQCAtMTIzLDcgKzEyMyw3IEBAIHR5cGVkZWYgU3RyaW5nIEVy
cm9yU3RyaW5nOwogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAKICNpbmNsdWRlIDxpbnNwZWN0b3Iv
SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+Ci0jaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3Rv
clZhbHVlcy5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsK
QEAgLTE3NCw3ICsxNzQsNyBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogI2luY2x1ZGUgIklu
c3BlY3RvclRlc3RQcm90b2NvbFR5cGVzLmgiCiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbC5oPgotI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMu
aD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgogI2luY2x1
ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAK
QEAgLTMxMCw3ICszMTAsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgZ2V0VGVzdEVu
dW1Db25zdGFudFZhbHVlKFQgZW51bVZhbHVlKQogCiBuYW1lc3BhY2UgVGVzdCB7CiAvKiBBIGR1
bW15IHR5cGUgdGhhdCByZXF1aXJlcyBydW50aW1lIGNhc3RzLCBhbmQgZm9yY2VzIG5vbi1wcmlt
aXRpdmUgcmVmZXJlbmNlZCB0eXBlcyB0byBhbHNvIGVtaXQgcnVudGltZSBjYXN0IGhlbHBlcnMu
ICovCi1jbGFzcyBUeXBlTmVlZGluZ0Nhc3QgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JP
YmplY3RCYXNlIHsKK2NsYXNzIFR5cGVOZWVkaW5nQ2FzdCA6IHB1YmxpYyBJbnNwZWN0b3I6OlBy
b3RvY29sOjpVbmNoZWNrZWRPYmplY3RCYXNlIHsKIHB1YmxpYzoKICAgICBlbnVtIHsKICAgICAg
ICAgTm9GaWVsZHNTZXQgPSAwLApAQCAtMzI1LDE0ICszMjUsMTQgQEAgcHVibGljOgogICAgIHRl
bXBsYXRlPGludCBTVEFURT4KICAgICBjbGFzcyBCdWlsZGVyIHsKICAgICBwcml2YXRlOgotICAg
ICAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OworICAgICAg
ICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBtX3Jlc3VsdDsK
IAogICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0
U3RhdGUoKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8
QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgIH0KIAotICAgICAgICBCdWls
ZGVyKFBhc3NSZWZQdHI8LypUeXBlTmVlZGluZ0Nhc3QqL0luc3BlY3Rvcjo6SW5zcGVjdG9yT2Jq
ZWN0PiBwdHIpCisgICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjwvKlR5cGVOZWVkaW5nQ2FzdCov
SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBwdHIpCiAgICAgICAgIHsKICAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2Ny
ZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CkBA
IC0zNzgsNyArMzc4LDcgQEAgcHVibGljOgogICAgICAgICBvcGVyYXRvciBSZWZQdHI8VHlwZU5l
ZWRpbmdDYXN0PiYgKCkKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RB
VEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKLSAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKHNpemVvZihUeXBlTmVlZGluZ0Nhc3QpID09IHNpemVvZihJbnNwZWN0b3I6
Okluc3BlY3Rvck9iamVjdCksIGNhbm5vdF9jYXN0KTsKKyAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKHNpemVvZihUeXBlTmVlZGluZ0Nhc3QpID09IHNpemVvZihJbnNwZWN0b3I6OlByb3RvY29s
OjpVbmNoZWNrZWRPYmplY3QpLCBjYW5ub3RfY2FzdCk7CiAgICAgICAgICAgICByZXR1cm4gKnJl
aW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPFR5cGVOZWVkaW5nQ2FzdD4qPigmbV9yZXN1bHQpOwogICAg
ICAgICB9CiAKQEAgLTM5OSw5ICszOTksOCBAQCBwdWJsaWM6CiAgICAgICovCiAgICAgc3RhdGlj
IEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICAgewotICAgICAgICByZXR1cm4gQnVp
bGRlcjxOb0ZpZWxkc1NldD4oSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsK
KyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlVuY2hlY2tlZE9iamVjdDo6Y3JlYXRlKCkpOwogICAgIH0KLSAgICB0eXBlZGVmIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlN0cnVjdEl0ZW1UcmFpdHMgSXRlbVRyYWl0czsKIH07CiAKIC8qICAqLwpA
QCAtNDE4LDcgKzQxNyw3IEBAIGVudW0gY2xhc3MgQ2FzdGVkQW5pbWFscyB7CiAgICAgQ3Jvd3Mg
PSAyLAogICAgIEZsYW1pbmdvcyA9IDMsCiB9OyAvLyBlbnVtIGNsYXNzIENhc3RlZEFuaW1hbHMK
LWNsYXNzIFJlY3Vyc2l2ZU9iamVjdDEgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmpl
Y3RCYXNlIHsKK2NsYXNzIFJlY3Vyc2l2ZU9iamVjdDEgOiBwdWJsaWMgSW5zcGVjdG9yOjpQcm90
b2NvbDo6VW5jaGVja2VkT2JqZWN0QmFzZSB7CiBwdWJsaWM6CiAgICAgZW51bSB7CiAgICAgICAg
IE5vRmllbGRzU2V0ID0gMCwKQEAgLTQyOCwxNCArNDI3LDE0IEBAIHB1YmxpYzoKICAgICB0ZW1w
bGF0ZTxpbnQgU1RBVEU+CiAgICAgY2xhc3MgQnVpbGRlciB7CiAgICAgcHJpdmF0ZToKLSAgICAg
ICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKKyAgICAgICAg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gbV9yZXN1bHQ7CiAK
ICAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0
YXRlKCkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1
aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRl
cihQYXNzUmVmUHRyPC8qUmVjdXJzaXZlT2JqZWN0MSovSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmpl
Y3Q+IHB0cikKKyAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPC8qUmVjdXJzaXZlT2JqZWN0MSov
SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBwdHIpCiAgICAgICAgIHsKICAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2Ny
ZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CkBA
IC00NDYsNyArNDQ1LDcgQEAgcHVibGljOgogICAgICAgICBvcGVyYXRvciBSZWZQdHI8UmVjdXJz
aXZlT2JqZWN0MT4mICgpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNU
QVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7Ci0gICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChzaXplb2YoUmVjdXJzaXZlT2JqZWN0MSkgPT0gc2l6ZW9mKEluc3BlY3Rv
cjo6SW5zcGVjdG9yT2JqZWN0KSwgY2Fubm90X2Nhc3QpOworICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoc2l6ZW9mKFJlY3Vyc2l2ZU9iamVjdDEpID09IHNpemVvZihJbnNwZWN0b3I6OlByb3Rv
Y29sOjpVbmNoZWNrZWRPYmplY3QpLCBjYW5ub3RfY2FzdCk7CiAgICAgICAgICAgICByZXR1cm4g
KnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPFJlY3Vyc2l2ZU9iamVjdDE+Kj4oJm1fcmVzdWx0KTsK
ICAgICAgICAgfQogCkBAIC00NjIsMTcgKzQ2MSwxNiBAQCBwdWJsaWM6CiAgICAgICovCiAgICAg
c3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICAgewotICAgICAgICByZXR1
cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpKTsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlVuY2hlY2tlZE9iamVjdDo6Y3JlYXRlKCkpOwogICAgIH0KLSAgICB0eXBlZGVmIElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlN0cnVjdEl0ZW1UcmFpdHMgSXRlbVRyYWl0czsKIAogICAgIHZv
aWQgc2V0T2JqKFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZl
T2JqZWN0Mj4gdmFsdWUpCiAgICAgewotICAgICAgICBJbnNwZWN0b3JPYmplY3RCYXNlOjpzZXRP
YmplY3QoQVNDSUlMaXRlcmFsKCJvYmoiKSwgdmFsdWUpOworICAgICAgICBVbmNoZWNrZWRPYmpl
Y3RCYXNlOjpzZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJvYmoiKSwgdmFsdWUpOwogICAgIH0KIH07
CiAKLWNsYXNzIFJlY3Vyc2l2ZU9iamVjdDIgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JP
YmplY3RCYXNlIHsKK2NsYXNzIFJlY3Vyc2l2ZU9iamVjdDIgOiBwdWJsaWMgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6VW5jaGVja2VkT2JqZWN0QmFzZSB7CiBwdWJsaWM6CiAgICAgZW51bSB7CiAgICAg
ICAgIE5vRmllbGRzU2V0ID0gMCwKQEAgLTQ4MiwxNCArNDgwLDE0IEBAIHB1YmxpYzoKICAgICB0
ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICAgY2xhc3MgQnVpbGRlciB7CiAgICAgcHJpdmF0ZToKLSAg
ICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKKyAgICAg
ICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gbV9yZXN1bHQ7
CiAKICAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2Fz
dFN0YXRlKCkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0
PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVp
bGRlcihQYXNzUmVmUHRyPC8qUmVjdXJzaXZlT2JqZWN0MiovSW5zcGVjdG9yOjpJbnNwZWN0b3JP
YmplY3Q+IHB0cikKKyAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPC8qUmVjdXJzaXZlT2JqZWN0
MiovSW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBwdHIpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVy
X2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7
CkBAIC01MDAsNyArNDk4LDcgQEAgcHVibGljOgogICAgICAgICBvcGVyYXRvciBSZWZQdHI8UmVj
dXJzaXZlT2JqZWN0Mj4mICgpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7Ci0gICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVChzaXplb2YoUmVjdXJzaXZlT2JqZWN0MikgPT0gc2l6ZW9mKEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yT2JqZWN0KSwgY2Fubm90X2Nhc3QpOworICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoc2l6ZW9mKFJlY3Vyc2l2ZU9iamVjdDIpID09IHNpemVvZihJbnNwZWN0b3I6OlBy
b3RvY29sOjpVbmNoZWNrZWRPYmplY3QpLCBjYW5ub3RfY2FzdCk7CiAgICAgICAgICAgICByZXR1
cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPFJlY3Vyc2l2ZU9iamVjdDI+Kj4oJm1fcmVzdWx0
KTsKICAgICAgICAgfQogCkBAIC01MTYsMTMgKzUxNCwxMiBAQCBwdWJsaWM6CiAgICAgICovCiAg
ICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICAgewotICAgICAgICBy
ZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpKTsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdDo6Y3JlYXRlKCkpOwogICAgIH0KLSAgICB0eXBlZGVm
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlN0cnVjdEl0ZW1UcmFpdHMgSXRlbVRyYWl0czsKIAogICAg
IHZvaWQgc2V0T2JqKFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UmVjdXJz
aXZlT2JqZWN0MT4gdmFsdWUpCiAgICAgewotICAgICAgICBJbnNwZWN0b3JPYmplY3RCYXNlOjpz
ZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJvYmoiKSwgdmFsdWUpOworICAgICAgICBVbmNoZWNrZWRP
YmplY3RCYXNlOjpzZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJvYmoiKSwgdmFsdWUpOwogICAgIH0K
IH07CiAKQEAgLTUzMCwyMyArNTI3LDIzIEBAIHB1YmxpYzoKIAogdGVtcGxhdGU8PiBzdHJ1Y3Qg
QmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPiB7
CiAjaWYgIUFTU0VSVF9ESVNBQkxFRAotc3RhdGljIHZvaWQgYXNzZXJ0VmFsdWVIYXNFeHBlY3Rl
ZFR5cGUoSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSopOworc3RhdGljIHZvaWQgYXNzZXJ0VmFs
dWVIYXNFeHBlY3RlZFR5cGUoSW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkVmFsdWUqKTsK
ICNlbmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVECiB9OwogdGVtcGxhdGU8PiBzdHJ1Y3QgQmluZGlu
Z1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+IHsKLXN0
YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2Fz
dD4gcnVudGltZUNhc3QoUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiB2YWx1
ZSk7CitzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpUeXBlTmVl
ZGluZ0Nhc3Q+IHJ1bnRpbWVDYXN0KFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5j
aGVja2VkVmFsdWU+IHZhbHVlKTsKICNpZiAhQVNTRVJUX0RJU0FCTEVECi1zdGF0aWMgdm9pZCBh
c3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKik7Citz
dGF0aWMgdm9pZCBhc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShJbnNwZWN0b3I6OlByb3RvY29s
OjpVbmNoZWNrZWRWYWx1ZSopOwogI2VuZGlmIC8vICFBU1NFUlRfRElTQUJMRUQKIH07CiB0ZW1w
bGF0ZTw+IHN0cnVjdCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJl
Y3Vyc2l2ZU9iamVjdDE+IHsKICNpZiAhQVNTRVJUX0RJU0FCTEVECi1zdGF0aWMgdm9pZCBhc3Nl
cnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKik7CitzdGF0
aWMgdm9pZCBhc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShJbnNwZWN0b3I6OlByb3RvY29sOjpV
bmNoZWNrZWRWYWx1ZSopOwogI2VuZGlmIC8vICFBU1NFUlRfRElTQUJMRUQKIH07CiB0ZW1wbGF0
ZTw+IHN0cnVjdCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vy
c2l2ZU9iamVjdDI+IHsKICNpZiAhQVNTRVJUX0RJU0FCTEVECi1zdGF0aWMgdm9pZCBhc3NlcnRW
YWx1ZUhhc0V4cGVjdGVkVHlwZShJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKik7CitzdGF0aWMg
dm9pZCBhc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNo
ZWNrZWRWYWx1ZSopOwogI2VuZGlmIC8vICFBU1NFUlRfRElTQUJMRUQKIH07CiAKQEAgLTYxOCw3
ICs2MTUsNyBAQCBTdHJpbmcgZ2V0VGVzdEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7CiAK
IAogI2lmICFBU1NFUlRfRElTQUJMRUQKLXZvaWQgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlBy
b3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUo
SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSogdmFsdWUpCit2b2lkIEJpbmRpbmdUcmFpdHM8SW5z
cGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscz46OmFzc2VydFZhbHVlSGFzRXhw
ZWN0ZWRUeXBlKFByb3RvY29sOjpVbmNoZWNrZWRWYWx1ZSogdmFsdWUpCiB7CiAgICAgU3RyaW5n
IHJlc3VsdDsKICAgICBib29sIGNhc3RTdWNjZWVkZWQgPSB2YWx1ZS0+YXNTdHJpbmcocmVzdWx0
KTsKQEAgLTYyOCwzMyArNjI1LDMzIEBAIHZvaWQgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlBy
b3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPjo6YXNzZXJ0VmFsdWVIYXNFeHBlCiAjZW5kaWYg
Ly8gIUFTU0VSVF9ESVNBQkxFRAogCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAotdm9pZCBCaW5kaW5n
VHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD46OmFzc2Vy
dFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqIHZhbHVlKQor
dm9pZCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5n
Q2FzdD46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKFByb3RvY29sOjpVbmNoZWNrZWRWYWx1
ZSogdmFsdWUpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb2JqZWN0OworICAgIFJl
ZlB0cjxQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBvYmplY3Q7CiAgICAgYm9vbCBjYXN0U3Vj
Y2VlZGVkID0gdmFsdWUtPmFzT2JqZWN0KG9iamVjdCk7CiAgICAgQVNTRVJUX1VOVVNFRChjYXN0
U3VjY2VlZGVkLCBjYXN0U3VjY2VlZGVkKTsKICAgICB7Ci0gICAgICAgIEluc3BlY3Rvck9iamVj
dDo6aXRlcmF0b3Igc3RyaW5nUG9zID0gb2JqZWN0LT5maW5kKEFTQ0lJTGl0ZXJhbCgic3RyaW5n
IikpOworICAgICAgICBQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0OjppdGVyYXRvciBzdHJpbmdQ
b3MgPSBvYmplY3QtPmZpbmQoQVNDSUlMaXRlcmFsKCJzdHJpbmciKSk7CiAgICAgICAgIEFTU0VS
VChzdHJpbmdQb3MgIT0gb2JqZWN0LT5lbmQoKSk7CiAgICAgICAgIEJpbmRpbmdUcmFpdHM8U3Ry
aW5nPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoc3RyaW5nUG9zLT52YWx1ZS5nZXQoKSk7
CiAgICAgfQogICAgIHsKLSAgICAgICAgSW5zcGVjdG9yT2JqZWN0OjppdGVyYXRvciBudW1iZXJQ
b3MgPSBvYmplY3QtPmZpbmQoQVNDSUlMaXRlcmFsKCJudW1iZXIiKSk7CisgICAgICAgIFByb3Rv
Y29sOjpVbmNoZWNrZWRPYmplY3Q6Oml0ZXJhdG9yIG51bWJlclBvcyA9IG9iamVjdC0+ZmluZChB
U0NJSUxpdGVyYWwoIm51bWJlciIpKTsKICAgICAgICAgQVNTRVJUKG51bWJlclBvcyAhPSBvYmpl
Y3QtPmVuZCgpKTsKICAgICAgICAgQmluZGluZ1RyYWl0czxpbnQ+Ojphc3NlcnRWYWx1ZUhhc0V4
cGVjdGVkVHlwZShudW1iZXJQb3MtPnZhbHVlLmdldCgpKTsKICAgICB9CiAgICAgewotICAgICAg
ICBJbnNwZWN0b3JPYmplY3Q6Oml0ZXJhdG9yIGFuaW1hbHNQb3MgPSBvYmplY3QtPmZpbmQoQVND
SUlMaXRlcmFsKCJhbmltYWxzIikpOworICAgICAgICBQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0
OjppdGVyYXRvciBhbmltYWxzUG9zID0gb2JqZWN0LT5maW5kKEFTQ0lJTGl0ZXJhbCgiYW5pbWFs
cyIpKTsKICAgICAgICAgQVNTRVJUKGFuaW1hbHNQb3MgIT0gb2JqZWN0LT5lbmQoKSk7CiAgICAg
ICAgIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFs
cz46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKGFuaW1hbHNQb3MtPnZhbHVlLmdldCgpKTsK
ICAgICB9CiAgICAgewotICAgICAgICBJbnNwZWN0b3JPYmplY3Q6Oml0ZXJhdG9yIGlkUG9zID0g
b2JqZWN0LT5maW5kKEFTQ0lJTGl0ZXJhbCgiaWQiKSk7CisgICAgICAgIFByb3RvY29sOjpVbmNo
ZWNrZWRPYmplY3Q6Oml0ZXJhdG9yIGlkUG9zID0gb2JqZWN0LT5maW5kKEFTQ0lJTGl0ZXJhbCgi
aWQiKSk7CiAgICAgICAgIEFTU0VSVChpZFBvcyAhPSBvYmplY3QtPmVuZCgpKTsKICAgICAgICAg
QmluZGluZ1RyYWl0czxpbnQ+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShpZFBvcy0+dmFs
dWUuZ2V0KCkpOwogICAgIH0KICAgICB7Ci0gICAgICAgIEluc3BlY3Rvck9iamVjdDo6aXRlcmF0
b3IgdHJlZVBvcyA9IG9iamVjdC0+ZmluZChBU0NJSUxpdGVyYWwoInRyZWUiKSk7CisgICAgICAg
IFByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q6Oml0ZXJhdG9yIHRyZWVQb3MgPSBvYmplY3QtPmZp
bmQoQVNDSUlMaXRlcmFsKCJ0cmVlIikpOwogICAgICAgICBBU1NFUlQodHJlZVBvcyAhPSBvYmpl
Y3QtPmVuZCgpKTsKICAgICAgICAgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpU
ZXN0OjpSZWN1cnNpdmVPYmplY3QxPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUodHJlZVBv
cy0+dmFsdWUuZ2V0KCkpOwogICAgIH0KQEAgLTY2NSwyOSArNjYyLDI5IEBAIHZvaWQgQmluZGlu
Z1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+Ojphc3Nl
cnRWYWx1ZUhhc0V4CiB9CiAjZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRAogCi1QYXNzUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD4gQmluZGluZ1RyYWl0
czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+OjpydW50aW1lQ2Fz
dChQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IHZhbHVlKQorUGFzc1JlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+IEJpbmRpbmdUcmFp
dHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0Pjo6cnVudGltZUNh
c3QoUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRWYWx1ZT4gdmFsdWUp
CiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQ7CisgICAg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gcmVzdWx0OwogICAg
IGJvb2wgY2FzdFN1Y2NlZWRlZCA9IHZhbHVlLT5hc09iamVjdChyZXN1bHQpOwogICAgIEFTU0VS
VF9VTlVTRUQoY2FzdFN1Y2NlZWRlZCwgY2FzdFN1Y2NlZWRlZCk7CiAjaWYgIUFTU0VSVF9ESVNB
QkxFRAogICAgIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VHlwZU5l
ZWRpbmdDYXN0Pjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUocmVzdWx0LmdldCgpKTsKICNl
bmRpZiAgLy8gIUFTU0VSVF9ESVNBQkxFRAotICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihJbnNw
ZWN0b3I6OlByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3QpID09IHNpemVvZihJbnNwZWN0
b3I6Okluc3BlY3Rvck9iamVjdEJhc2UpLCB0eXBlX2Nhc3RfcHJvYmxlbSk7Ci0gICAgcmV0dXJu
IHN0YXRpY19jYXN0PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdCo+
KHN0YXRpY19jYXN0PEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZSo+KHJlc3VsdC5nZXQo
KSkpOworICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0
OjpUeXBlTmVlZGluZ0Nhc3QpID09IHNpemVvZihJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNr
ZWRPYmplY3RCYXNlKSwgdHlwZV9jYXN0X3Byb2JsZW0pOworICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3QqPihzdGF0aWNfY2Fz
dDxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3RCYXNlKj4ocmVzdWx0LmdldCgp
KSk7CiB9CiAKIAogI2lmICFBU1NFUlRfRElTQUJMRUQKLXZvaWQgQmluZGluZ1RyYWl0czxJbnNw
ZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QxPjo6YXNzZXJ0VmFsdWVIYXNF
eHBlY3RlZFR5cGUoSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSogdmFsdWUpCit2b2lkIEJpbmRp
bmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0MT46OmFz
c2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKFByb3RvY29sOjpVbmNoZWNrZWRWYWx1ZSogdmFsdWUp
CiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb2JqZWN0OworICAgIFJlZlB0cjxQcm90
b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBvYmplY3Q7CiAgICAgYm9vbCBjYXN0U3VjY2VlZGVkID0g
dmFsdWUtPmFzT2JqZWN0KG9iamVjdCk7CiAgICAgQVNTRVJUX1VOVVNFRChjYXN0U3VjY2VlZGVk
LCBjYXN0U3VjY2VlZGVkKTsKIAogICAgIGludCBmb3VuZFByb3BlcnRpZXNDb3VudCA9IDA7CiAg
ICAgewotICAgICAgICBJbnNwZWN0b3JPYmplY3Q6Oml0ZXJhdG9yIG9ialBvcyA9IG9iamVjdC0+
ZmluZChBU0NJSUxpdGVyYWwoIm9iaiIpKTsKKyAgICAgICAgUHJvdG9jb2w6OlVuY2hlY2tlZE9i
amVjdDo6aXRlcmF0b3Igb2JqUG9zID0gb2JqZWN0LT5maW5kKEFTQ0lJTGl0ZXJhbCgib2JqIikp
OwogICAgICAgICBpZiAob2JqUG9zICE9IG9iamVjdC0+ZW5kKCkpIHsKICAgICAgICAgICAgIEJp
bmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0Mj46
OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKG9ialBvcy0+dmFsdWUuZ2V0KCkpOwogICAgICAg
ICAgICAgKytmb3VuZFByb3BlcnRpZXNDb3VudDsKQEAgLTY5OSwxNSArNjk2LDE1IEBAIHZvaWQg
QmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3Qx
Pjo6YXNzZXJ0VmFsdWVIYXNFCiAjZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRAogCiAjaWYgIUFT
U0VSVF9ESVNBQkxFRAotdm9pZCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRl
c3Q6OlJlY3Vyc2l2ZU9iamVjdDI+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShJbnNwZWN0
b3I6Okluc3BlY3RvclZhbHVlKiB2YWx1ZSkKK3ZvaWQgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6
OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QyPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3Rl
ZFR5cGUoUHJvdG9jb2w6OlVuY2hlY2tlZFZhbHVlKiB2YWx1ZSkKIHsKLSAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBvYmplY3Q7CisgICAgUmVmUHRyPFByb3RvY29sOjpVbmNoZWNrZWRPYmpl
Y3Q+IG9iamVjdDsKICAgICBib29sIGNhc3RTdWNjZWVkZWQgPSB2YWx1ZS0+YXNPYmplY3Qob2Jq
ZWN0KTsKICAgICBBU1NFUlRfVU5VU0VEKGNhc3RTdWNjZWVkZWQsIGNhc3RTdWNjZWVkZWQpOwog
CiAgICAgaW50IGZvdW5kUHJvcGVydGllc0NvdW50ID0gMDsKICAgICB7Ci0gICAgICAgIEluc3Bl
Y3Rvck9iamVjdDo6aXRlcmF0b3Igb2JqUG9zID0gb2JqZWN0LT5maW5kKEFTQ0lJTGl0ZXJhbCgi
b2JqIikpOworICAgICAgICBQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0OjppdGVyYXRvciBvYmpQ
b3MgPSBvYmplY3QtPmZpbmQoQVNDSUlMaXRlcmFsKCJvYmoiKSk7CiAgICAgICAgIGlmIChvYmpQ
b3MgIT0gb2JqZWN0LT5lbmQoKSkgewogICAgICAgICAgICAgQmluZGluZ1RyYWl0czxJbnNwZWN0
b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QxPjo6YXNzZXJ0VmFsdWVIYXNFeHBl
Y3RlZFR5cGUob2JqUG9zLT52YWx1ZS5nZXQoKSk7CiAgICAgICAgICAgICArK2ZvdW5kUHJvcGVy
dGllc0NvdW50OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3JlcGxheS9FbmNv
ZGVkVmFsdWUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3JlcGxheS9FbmNvZGVkVmFsdWUu
Y3BwCmluZGV4IGM3MWRiYzYzOWViZjMwMGEwNjZhNDExMjk3MjM3NmY1NmM4OGQ3ZjUuLmQ2N2Yy
MTM4NzIzOGVjNGMzNTQ4M2EyYzI5NjgxMzI2OTZkYzhiNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9yZXBsYXkvRW5jb2RlZFZhbHVlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcmVwbGF5L0VuY29kZWRWYWx1ZS5jcHAKQEAgLTMwLDI1ICszMCwyNSBAQAogCiAj
aWYgRU5BQkxFKFdFQl9SRVBMQVkpCiAKLSNpbmNsdWRlICJJbnNwZWN0b3JWYWx1ZXMuaCIKKyNp
bmNsdWRlICJJbnNwZWN0b3JQcm90b2NvbFR5cGVzLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvQmFz
ZTY0Lmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiAKIG5hbWVzcGFjZSBKU0Mgewog
Ci1QYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gRW5jb2RlZFZhbHVlOjphc09iamVjdCgpCitQ
YXNzUmVmUHRyPFByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IEVuY29kZWRWYWx1ZTo6YXNPYmpl
Y3QoKQogewotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdDsKKyAgICBSZWZQdHI8
UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gcmVzdWx0OwogICAgIGJvb2wgY2FzdFN1Y2NlZWRl
ZCA9IG1fdmFsdWUtPmFzT2JqZWN0KHJlc3VsdCk7CiAgICAgQVNTRVJUX1VOVVNFRChjYXN0U3Vj
Y2VlZGVkLCBjYXN0U3VjY2VlZGVkKTsKIAogICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwog
fQogCi1QYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBFbmNvZGVkVmFsdWU6OmFzQXJyYXkoKQor
UGFzc1JlZlB0cjxQcm90b2NvbDo6VW5jaGVja2VkQXJyYXk+IEVuY29kZWRWYWx1ZTo6YXNBcnJh
eSgpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiByZXN1bHQ7CisgICAgUmVmUHRyPFBy
b3RvY29sOjpVbmNoZWNrZWRBcnJheT4gcmVzdWx0OwogICAgIGJvb2wgY2FzdFN1Y2NlZWRlZCA9
IG1fdmFsdWUtPmFzQXJyYXkocmVzdWx0KTsKICAgICBBU1NFUlRfVU5VU0VEKGNhc3RTdWNjZWVk
ZWQsIGNhc3RTdWNjZWVkZWQpOwogCkBAIC02NywzNyArNjcsMzcgQEAgYm9vbCBFbmNvZGluZ1Ry
YWl0czxWZWN0b3I8Y2hhcj4+OjpkZWNvZGVWYWx1ZShFbmNvZGVkVmFsdWUmIGVuY29kZWRCdWZm
ZXIsIFZlY3QKIAogdGVtcGxhdGU8PiBFbmNvZGVkVmFsdWUgU2NhbGFyRW5jb2RpbmdUcmFpdHM8
Ym9vbD46OmVuY29kZVZhbHVlKGNvbnN0IGJvb2wmIHZhbHVlKQogewotICAgIHJldHVybiBFbmNv
ZGVkVmFsdWUoSW5zcGVjdG9yQmFzaWNWYWx1ZTo6Y3JlYXRlKHZhbHVlKSk7CisgICAgcmV0dXJu
IEVuY29kZWRWYWx1ZShQcm90b2NvbDo6UHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSh2YWx1ZSkpOwog
fQogCiB0ZW1wbGF0ZTw+IEVuY29kZWRWYWx1ZSBTY2FsYXJFbmNvZGluZ1RyYWl0czxkb3VibGU+
OjplbmNvZGVWYWx1ZShjb25zdCBkb3VibGUmIHZhbHVlKQogewotICAgIHJldHVybiBFbmNvZGVk
VmFsdWUoSW5zcGVjdG9yQmFzaWNWYWx1ZTo6Y3JlYXRlKHZhbHVlKSk7CisgICAgcmV0dXJuIEVu
Y29kZWRWYWx1ZShQcm90b2NvbDo6UHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSh2YWx1ZSkpOwogfQog
CiB0ZW1wbGF0ZTw+IEVuY29kZWRWYWx1ZSBTY2FsYXJFbmNvZGluZ1RyYWl0czxmbG9hdD46OmVu
Y29kZVZhbHVlKGNvbnN0IGZsb2F0JiB2YWx1ZSkKIHsKLSAgICByZXR1cm4gRW5jb2RlZFZhbHVl
KEluc3BlY3RvckJhc2ljVmFsdWU6OmNyZWF0ZSgoZG91YmxlKXZhbHVlKSk7CisgICAgcmV0dXJu
IEVuY29kZWRWYWx1ZShQcm90b2NvbDo6UHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSgoZG91YmxlKXZh
bHVlKSk7CiB9CiAKIHRlbXBsYXRlPD4gRW5jb2RlZFZhbHVlIFNjYWxhckVuY29kaW5nVHJhaXRz
PGludDMyX3Q+OjplbmNvZGVWYWx1ZShjb25zdCBpbnQzMl90JiB2YWx1ZSkKIHsKLSAgICByZXR1
cm4gRW5jb2RlZFZhbHVlKEluc3BlY3RvckJhc2ljVmFsdWU6OmNyZWF0ZSgoZG91YmxlKXZhbHVl
KSk7CisgICAgcmV0dXJuIEVuY29kZWRWYWx1ZShQcm90b2NvbDo6UHJpbWl0aXZlVmFsdWU6OmNy
ZWF0ZSgoZG91YmxlKXZhbHVlKSk7CiB9CiAKIHRlbXBsYXRlPD4gRW5jb2RlZFZhbHVlIFNjYWxh
ckVuY29kaW5nVHJhaXRzPGludDY0X3Q+OjplbmNvZGVWYWx1ZShjb25zdCBpbnQ2NF90JiB2YWx1
ZSkKIHsKLSAgICByZXR1cm4gRW5jb2RlZFZhbHVlKEluc3BlY3RvckJhc2ljVmFsdWU6OmNyZWF0
ZSgoZG91YmxlKXZhbHVlKSk7CisgICAgcmV0dXJuIEVuY29kZWRWYWx1ZShQcm90b2NvbDo6UHJp
bWl0aXZlVmFsdWU6OmNyZWF0ZSgoZG91YmxlKXZhbHVlKSk7CiB9CiAKIHRlbXBsYXRlPD4gRW5j
b2RlZFZhbHVlIFNjYWxhckVuY29kaW5nVHJhaXRzPHVpbnQzMl90Pjo6ZW5jb2RlVmFsdWUoY29u
c3QgdWludDMyX3QmIHZhbHVlKQogewotICAgIHJldHVybiBFbmNvZGVkVmFsdWUoSW5zcGVjdG9y
QmFzaWNWYWx1ZTo6Y3JlYXRlKChkb3VibGUpdmFsdWUpKTsKKyAgICByZXR1cm4gRW5jb2RlZFZh
bHVlKFByb3RvY29sOjpQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKChkb3VibGUpdmFsdWUpKTsKIH0K
IAogdGVtcGxhdGU8PiBFbmNvZGVkVmFsdWUgU2NhbGFyRW5jb2RpbmdUcmFpdHM8dWludDY0X3Q+
OjplbmNvZGVWYWx1ZShjb25zdCB1aW50NjRfdCYgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIEVuY29k
ZWRWYWx1ZShJbnNwZWN0b3JCYXNpY1ZhbHVlOjpjcmVhdGUoKGRvdWJsZSl2YWx1ZSkpOworICAg
IHJldHVybiBFbmNvZGVkVmFsdWUoUHJvdG9jb2w6OlByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoKGRv
dWJsZSl2YWx1ZSkpOwogfQogCiB0ZW1wbGF0ZTw+IGJvb2wgRW5jb2RlZFZhbHVlOjpjb252ZXJ0
VG88Ym9vbD4oKQpAQCAtMTg3LDcgKzE4Nyw3IEBAIHZvaWQgRW5jb2RlZFZhbHVlOjphcHBlbmQ8
RW5jb2RlZFZhbHVlPihjb25zdCB0eXBlbmFtZSBFbmNvZGluZ1RyYWl0czxFbmNvZGVkVmFsCiB0
ZW1wbGF0ZTw+CiBib29sIEVuY29kZWRWYWx1ZTo6Z2V0PEVuY29kZWRWYWx1ZT4oY29uc3QgU3Ry
aW5nJiBrZXksIHR5cGVuYW1lIEVuY29kaW5nVHJhaXRzPEVuY29kZWRWYWx1ZT46OkRlY29kZWRU
eXBlJiBkZWNvZGVkVmFsdWUpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFs
dWU+IGluc3BlY3RvclZhbHVlKGFzT2JqZWN0KCktPmdldChrZXkpKTsKKyAgICBSZWZQdHI8UHJv
dG9jb2w6OlVuY2hlY2tlZFZhbHVlPiBpbnNwZWN0b3JWYWx1ZShhc09iamVjdCgpLT5nZXQoa2V5
KSk7CiAgICAgaWYgKCFpbnNwZWN0b3JWYWx1ZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcmVwbGF5L0VuY29kZWRWYWx1ZS5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3JlcGxheS9FbmNvZGVkVmFsdWUuaAppbmRleCBjMDAxMGU4
YThhMGZmNjU5M2JjYmZhMDU2NzAzMDkxNjZhNjA2NTZkLi5iMmQ0YWQwODhkYTNlMWQyNGUwMmMy
ZjUxNGY2YjAxNmM0YjM2ZWNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcmVw
bGF5L0VuY29kZWRWYWx1ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9yZXBsYXkvRW5j
b2RlZFZhbHVlLmgKQEAgLTMwLDcgKzMwLDcgQEAKIAogI2lmIEVOQUJMRShXRUJfUkVQTEFZKQog
Ci0jaW5jbHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yUHJvdG9j
b2xUeXBlcy5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgogCkBAIC00MSw3ICs0MSw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBFbmNv
ZGluZ1RyYWl0czsKIAogY2xhc3MgRW5jb2RlZFZhbHVlIGZpbmFsIHsKIHB1YmxpYzoKLSAgICBl
eHBsaWNpdCBFbmNvZGVkVmFsdWUoUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVl
PiB2YWx1ZSkKKyAgICBleHBsaWNpdCBFbmNvZGVkVmFsdWUoUGFzc1JlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpVbmNoZWNrZWRWYWx1ZT4gdmFsdWUpCiAgICAgICAgIDogbV92YWx1ZSh2YWx1
ZSkgeyB9CiAKICAgICBFbmNvZGVkVmFsdWUoKQpAQCAtNDksMjIgKzQ5LDIyIEBAIHB1YmxpYzoK
IAogICAgIHN0YXRpYyBFbmNvZGVkVmFsdWUgY3JlYXRlT2JqZWN0KCkKICAgICB7Ci0gICAgICAg
IHJldHVybiBFbmNvZGVkVmFsdWUoSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
KTsKKyAgICAgICAgcmV0dXJuIEVuY29kZWRWYWx1ZShJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNo
ZWNrZWRPYmplY3Q6OmNyZWF0ZSgpKTsKICAgICB9CiAKICAgICBzdGF0aWMgRW5jb2RlZFZhbHVl
IGNyZWF0ZUFycmF5KCkKICAgICB7Ci0gICAgICAgIHJldHVybiBFbmNvZGVkVmFsdWUoSW5zcGVj
dG9yOjpJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCkpOworICAgICAgICByZXR1cm4gRW5jb2RlZFZh
bHVlKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZEFycmF5OjpjcmVhdGUoKSk7CiAgICAg
fQogCiAgICAgc3RhdGljIEVuY29kZWRWYWx1ZSBjcmVhdGVTdHJpbmcoY29uc3QgU3RyaW5nJiB2
YWx1ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBFbmNvZGVkVmFsdWUoSW5zcGVjdG9yOjpJbnNw
ZWN0b3JTdHJpbmc6OmNyZWF0ZSh2YWx1ZSkpOworICAgICAgICByZXR1cm4gRW5jb2RlZFZhbHVl
KEluc3BlY3Rvcjo6UHJvdG9jb2w6OlN0cmluZ1ZhbHVlOjpjcmVhdGUodmFsdWUpKTsKICAgICB9
CiAKICAgICBzdGF0aWMgRW5jb2RlZFZhbHVlIGNyZWF0ZVN0cmluZyhjb25zdCBjaGFyKiB2YWx1
ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBFbmNvZGVkVmFsdWUoSW5zcGVjdG9yOjpJbnNwZWN0
b3JTdHJpbmc6OmNyZWF0ZSh2YWx1ZSkpOworICAgICAgICByZXR1cm4gRW5jb2RlZFZhbHVlKElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlByaW1pdGl2ZVZhbHVlOjpjcmVhdGUodmFsdWUpKTsKICAgICB9
CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgpAQCAtNzgsMTEgKzc4LDExIEBAIHB1YmxpYzoK
IAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQgY29udmVydFRvKCk7CiAKLSAgICBKU19FWFBP
UlRfUFJJVkFURSBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBhc09iamVj
dCgpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0
b3JBcnJheT4gYXNBcnJheSgpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIFBhc3NSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBhc09iamVjdCgpOworICAgIEpTX0VY
UE9SVF9QUklWQVRFIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkQXJy
YXk+IGFzQXJyYXkoKTsKIAogcHJpdmF0ZToKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0
b3JWYWx1ZT4gbV92YWx1ZTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVj
a2VkVmFsdWU+IG1fdmFsdWU7CiB9OwogCiB0ZW1wbGF0ZTw+IEpTX0VYUE9SVF9QUklWQVRFIGJv
b2wgRW5jb2RlZFZhbHVlOjpjb252ZXJ0VG88Ym9vbD4oKTsKQEAgLTExOSw3ICsxMTksNyBAQCBz
dHJ1Y3QgRW5jb2RpbmdUcmFpdHM8VmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hh
bmRsZXI+PiB7CiAKICAgICBzdGF0aWMgYm9vbCBkZWNvZGVWYWx1ZShFbmNvZGVkVmFsdWUmIGVu
Y29kZWRWZWN0b3IsIERlY29kZWRUeXBlJiBkZWNvZGVkVmFsdWUpCiAgICAgewotICAgICAgICBS
ZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4gaW5zcGVjdG9yQXJyYXkgPSBlbmNvZGVk
VmVjdG9yLmFzQXJyYXkoKTsKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVu
Y2hlY2tlZEFycmF5PiBpbnNwZWN0b3JBcnJheSA9IGVuY29kZWRWZWN0b3IuYXNBcnJheSgpOwog
ICAgICAgICBkZWNvZGVkVmFsdWUgPSBWZWN0b3I8dHlwZW5hbWUgRW5jb2RpbmdUcmFpdHM8VD46
OkRlY29kZWRUeXBlLCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPihpbnNwZWN0b3JB
cnJheS0+bGVuZ3RoKCkpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGluc3BlY3Rv
ckFycmF5LT5sZW5ndGgoKTsgKytpKSB7CiAgICAgICAgICAgICBFbmNvZGVkVmFsdWUgZW5jb2Rl
ZEVsZW1lbnQoaW5zcGVjdG9yQXJyYXktPmdldChpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvclJlcGxheUlucHV0cy5weSBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9yUmVwbGF5
SW5wdXRzLnB5CmluZGV4IGQ5OTM1YzJjNGZhZjk3NjgwOGRhMGU3MDU0NGQxNTA4OWY5ZmNlODEu
LjBiMDNmNDhlZDZkOTExNzZmZjU1OGEyM2I0N2I3N2RjYzYwNGU1NTEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9yUmVwbGF5SW5w
dXRzLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9yUmVwbGF5SW5wdXRzLnB5CkBAIC03NSw3ICs3NSw3IEBAIEdMT0JBTF9DT05GSUcgPSB7
CiAgICAgICAgICAgICAoIldlYkNvcmUiLCAicmVwbGF5L1NlcmlhbGl6YXRpb25NZXRob2RzLmgi
KQogICAgICAgICApLAogICAgICAgICAoWyJXZWJDb3JlIiwgIkphdmFTY3JpcHRDb3JlIl0sCi0g
ICAgICAgICAgICAoIkphdmFTY3JpcHRDb3JlIiwgImluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMu
aCIpCisgICAgICAgICAgICAoIkphdmFTY3JpcHRDb3JlIiwgImluc3BlY3Rvci9JbnNwZWN0b3JQ
cm90b2NvbFR5cGVzLmgiKQogICAgICAgICApLAogICAgICAgICAoWyJXZWJDb3JlIiwgIkphdmFT
Y3JpcHRDb3JlIl0sCiAgICAgICAgICAgICAoIldURiIsICJ3dGYvTmV2ZXJEZXN0cm95ZWQuaCIp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9pbnNwZWN0b3Iv
SW5zcGVjdG9yVmFsdWVzLmggYi9Tb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9pbnNw
ZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJk
OTg1ZjY5MWY3YjI4YmJlZTg1Y2M3YmM3NDc2YjEwM2RmYjNjYzUuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hl
YWRlcnMvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oCisrKyAvZGV2L251bGwKQEAgLTEsNCAr
MCwwIEBACi0jaWZuZGVmIFdlYkNvcmVfRldEX0luc3BlY3RvclZhbHVlc19oCi0jZGVmaW5lIFdl
YkNvcmVfRldEX0luc3BlY3RvclZhbHVlc19oCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yVmFsdWVzLmg+Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUub3JkZXIgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLm9yZGVyCmluZGV4IGM5ZGMxMTAyYWMw
ODM5Nzc1M2Q4OTZhZjI4YmE3NDU4NjE4ODQ5Y2EuLmQ0YWRlZjkyY2Y0ODYyNjk0MzY1YzU1NTQ1
MjkwODg5ZmMyOTJhNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUub3JkZXIK
KysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5vcmRlcgpAQCAtNjk0LDEyICs2OTQsMTIgQEAg
X19aTjdXZWJDb3JlMTRJbnNwZWN0b3JBZ2VudEMxRVBOU180UGFnZUVQTlNfMjFJbmplY3RlZFNj
cmlwdE1hbmFnZXJFUE5TXzE5SW5zdHIKIF9fWk43V2ViQ29yZTI3SW5zcGVjdG9yQmFzZUFnZW50
SW50ZXJmYWNlQzJFUktOM1dURjZTdHJpbmdFUE5TXzE5SW5zdHJ1bWVudGluZ0FnZW50c0VQTlNf
MjNJbnNwZWN0b3JDb21wb3NpdGVTdGF0ZUUKIF9fWk43V2ViQ29yZTIzSW5zcGVjdG9yQ29tcG9z
aXRlU3RhdGUxNmNyZWF0ZUFnZW50U3RhdGVFUktOM1dURjZTdHJpbmdFCiBfX1pON1dlYkNvcmUx
OUluc3BlY3Rvck9iamVjdEJhc2U5c2V0T2JqZWN0RVJLTjNXVEY2U3RyaW5nRU5TMV8xMFBhc3NS
ZWZQdHJJTlNfMTVJbnNwZWN0b3JPYmplY3RFRUUKLV9fWk4zV1RGOUhhc2hUYWJsZUlOU182U3Ry
aW5nRU5TXzEyS2V5VmFsdWVQYWlySVMxX05TXzZSZWZQdHJJTjdXZWJDb3JlMTRJbnNwZWN0b3JW
YWx1ZUVFRUVFTlNfMjRLZXlWYWx1ZVBhaXJLZXlFeHRyYWN0b3JJUzdfRUVOU18xMFN0cmluZ0hh
c2hFTlNfMThIYXNoTWFwVmFsdWVUcmFpdHNJTlNfMTBIYXNoVHJhaXRzSVMxX0VFTlNDX0lTNl9F
RUVFU0RfRTE1ZGVhbGxvY2F0ZVRhYmxlRVBTN19pCi1fX1pOM1dURjlIYXNoVGFibGVJTlNfNlN0
cmluZ0VOU18xMktleVZhbHVlUGFpcklTMV9OU182UmVmUHRySU43V2ViQ29yZTE0SW5zcGVjdG9y
VmFsdWVFRUVFRU5TXzI0S2V5VmFsdWVQYWlyS2V5RXh0cmFjdG9ySVM3X0VFTlNfMTBTdHJpbmdI
YXNoRU5TXzE4SGFzaE1hcFZhbHVlVHJhaXRzSU5TXzEwSGFzaFRyYWl0c0lTMV9FRU5TQ19JUzZf
RUVFRVNEX0UxNmxvb2t1cEZvcldyaXRpbmdJTlNfMjJJZGVudGl0eUhhc2hUcmFuc2xhdG9ySVNB
X0VFUzFfRUVOU3QzX18xNHBhaXJJUFM3X2JFRVJLVDBfCi1fX1pOM1dURjlIYXNoVGFibGVJTlNf
NlN0cmluZ0VOU18xMktleVZhbHVlUGFpcklTMV9OU182UmVmUHRySU43V2ViQ29yZTE0SW5zcGVj
dG9yVmFsdWVFRUVFRU5TXzI0S2V5VmFsdWVQYWlyS2V5RXh0cmFjdG9ySVM3X0VFTlNfMTBTdHJp
bmdIYXNoRU5TXzE4SGFzaE1hcFZhbHVlVHJhaXRzSU5TXzEwSGFzaFRyYWl0c0lTMV9FRU5TQ19J
UzZfRUVFRVNEX0UzYWRkSU5TXzE3SGFzaE1hcFRyYW5zbGF0b3JJU0ZfU0FfRUVTMV9OU18xMFBh
c3NSZWZQdHJJUzVfRUVFRU5TXzE4SGFzaFRhYmxlQWRkUmVzdWx0SU5TXzE3SGFzaFRhYmxlSXRl
cmF0b3JJUzFfUzdfUzlfU0FfU0ZfU0RfRUVFRVJLVDBfUktUMV8KLV9fWk4zV1RGOUhhc2hUYWJs
ZUlOU182U3RyaW5nRU5TXzEyS2V5VmFsdWVQYWlySVMxX05TXzZSZWZQdHJJTjdXZWJDb3JlMTRJ
bnNwZWN0b3JWYWx1ZUVFRUVFTlNfMjRLZXlWYWx1ZVBhaXJLZXlFeHRyYWN0b3JJUzdfRUVOU18x
MFN0cmluZ0hhc2hFTlNfMThIYXNoTWFwVmFsdWVUcmFpdHNJTlNfMTBIYXNoVHJhaXRzSVMxX0VF
TlNDX0lTNl9FRUVFU0RfRTZsb29rdXBJTlNfMjJJZGVudGl0eUhhc2hUcmFuc2xhdG9ySVNBX0VF
UzFfRUVQUzdfUktUMF8KLV9fWk4zV1RGOUhhc2hUYWJsZUlOU182U3RyaW5nRU5TXzEyS2V5VmFs
dWVQYWlySVMxX05TXzZSZWZQdHJJTjdXZWJDb3JlMTRJbnNwZWN0b3JWYWx1ZUVFRUVFTlNfMjRL
ZXlWYWx1ZVBhaXJLZXlFeHRyYWN0b3JJUzdfRUVOU18xMFN0cmluZ0hhc2hFTlNfMThIYXNoTWFw
VmFsdWVUcmFpdHNJTlNfMTBIYXNoVHJhaXRzSVMxX0VFTlNDX0lTNl9FRUVFU0RfRTZyZWhhc2hF
aQotX19aTjNXVEY5SGFzaFRhYmxlSU5TXzZTdHJpbmdFTlNfMTJLZXlWYWx1ZVBhaXJJUzFfTlNf
NlJlZlB0cklON1dlYkNvcmUxNEluc3BlY3RvclZhbHVlRUVFRUVOU18yNEtleVZhbHVlUGFpcktl
eUV4dHJhY3RvcklTN19FRU5TXzEwU3RyaW5nSGFzaEVOU18xOEhhc2hNYXBWYWx1ZVRyYWl0c0lO
U18xMEhhc2hUcmFpdHNJUzFfRUVOU0NfSVM2X0VFRUVTRF9FNnJlbW92ZUVQUzdfCitfX1pOM1dU
RjlIYXNoVGFibGVJTlNfNlN0cmluZ0VOU18xMktleVZhbHVlUGFpcklTMV9OU182UmVmUHRySU43
V2ViQ29yZTE0VW5jaGVja2VkVmFsdWVFRUVFRU5TXzI0S2V5VmFsdWVQYWlyS2V5RXh0cmFjdG9y
SVM3X0VFTlNfMTBTdHJpbmdIYXNoRU5TXzE4SGFzaE1hcFZhbHVlVHJhaXRzSU5TXzEwSGFzaFRy
YWl0c0lTMV9FRU5TQ19JUzZfRUVFRVNEX0UxNWRlYWxsb2NhdGVUYWJsZUVQUzdfaQorX19aTjNX
VEY5SGFzaFRhYmxlSU5TXzZTdHJpbmdFTlNfMTJLZXlWYWx1ZVBhaXJJUzFfTlNfNlJlZlB0cklO
N1dlYkNvcmUxNFVuY2hlY2tlZFZhbHVlRUVFRUVOU18yNEtleVZhbHVlUGFpcktleUV4dHJhY3Rv
cklTN19FRU5TXzEwU3RyaW5nSGFzaEVOU18xOEhhc2hNYXBWYWx1ZVRyYWl0c0lOU18xMEhhc2hU
cmFpdHNJUzFfRUVOU0NfSVM2X0VFRUVTRF9FMTZsb29rdXBGb3JXcml0aW5nSU5TXzIySWRlbnRp
dHlIYXNoVHJhbnNsYXRvcklTQV9FRVMxX0VFTlN0M19fMTRwYWlySVBTN19iRUVSS1QwXworX19a
TjNXVEY5SGFzaFRhYmxlSU5TXzZTdHJpbmdFTlNfMTJLZXlWYWx1ZVBhaXJJUzFfTlNfNlJlZlB0
cklON1dlYkNvcmUxNFVuY2hlY2tlZFZhbHVlRUVFRUVOU18yNEtleVZhbHVlUGFpcktleUV4dHJh
Y3RvcklTN19FRU5TXzEwU3RyaW5nSGFzaEVOU18xOEhhc2hNYXBWYWx1ZVRyYWl0c0lOU18xMEhh
c2hUcmFpdHNJUzFfRUVOU0NfSVM2X0VFRUVTRF9FM2FkZElOU18xN0hhc2hNYXBUcmFuc2xhdG9y
SVNGX1NBX0VFUzFfTlNfMTBQYXNzUmVmUHRySVM1X0VFRUVOU18xOEhhc2hUYWJsZUFkZFJlc3Vs
dElOU18xN0hhc2hUYWJsZUl0ZXJhdG9ySVMxX1M3X1M5X1NBX1NGX1NEX0VFRUVSS1QwX1JLVDFf
CitfX1pOM1dURjlIYXNoVGFibGVJTlNfNlN0cmluZ0VOU18xMktleVZhbHVlUGFpcklTMV9OU182
UmVmUHRySU43V2ViQ29yZTE0VW5jaGVja2VkVmFsdWVFRUVFRU5TXzI0S2V5VmFsdWVQYWlyS2V5
RXh0cmFjdG9ySVM3X0VFTlNfMTBTdHJpbmdIYXNoRU5TXzE4SGFzaE1hcFZhbHVlVHJhaXRzSU5T
XzEwSGFzaFRyYWl0c0lTMV9FRU5TQ19JUzZfRUVFRVNEX0U2bG9va3VwSU5TXzIySWRlbnRpdHlI
YXNoVHJhbnNsYXRvcklTQV9FRVMxX0VFUFM3X1JLVDBfCitfX1pOM1dURjlIYXNoVGFibGVJTlNf
NlN0cmluZ0VOU18xMktleVZhbHVlUGFpcklTMV9OU182UmVmUHRySU43V2ViQ29yZTE0VW5jaGVj
a2VkVmFsdWVFRUVFRU5TXzI0S2V5VmFsdWVQYWlyS2V5RXh0cmFjdG9ySVM3X0VFTlNfMTBTdHJp
bmdIYXNoRU5TXzE4SGFzaE1hcFZhbHVlVHJhaXRzSU5TXzEwSGFzaFRyYWl0c0lTMV9FRU5TQ19J
UzZfRUVFRVNEX0U2cmVoYXNoRWkKK19fWk4zV1RGOUhhc2hUYWJsZUlOU182U3RyaW5nRU5TXzEy
S2V5VmFsdWVQYWlySVMxX05TXzZSZWZQdHJJTjdXZWJDb3JlMTRVbmNoZWNrZWRWYWx1ZUVFRUVF
TlNfMjRLZXlWYWx1ZVBhaXJLZXlFeHRyYWN0b3JJUzdfRUVOU18xMFN0cmluZ0hhc2hFTlNfMThI
YXNoTWFwVmFsdWVUcmFpdHNJTlNfMTBIYXNoVHJhaXRzSVMxX0VFTlNDX0lTNl9FRUVFU0RfRTZy
ZW1vdmVFUFM3XwogX19aTjNXVEY5SGFzaFRhYmxlSU5TXzZTdHJpbmdFTlNfMTJLZXlWYWx1ZVBh
aXJJUzFfTlNfNk93blB0cklON1dlYkNvcmUxNEluc3BlY3RvclN0YXRlRUVFRUVOU18yNEtleVZh
bHVlUGFpcktleUV4dHJhY3RvcklTN19FRU5TXzEwU3RyaW5nSGFzaEVOU18xOEhhc2hNYXBWYWx1
ZVRyYWl0c0lOU18xMEhhc2hUcmFpdHNJUzFfRUVOU0NfSVM2X0VFRUVTRF9FMTZsb29rdXBGb3JX
cml0aW5nSU5TXzIySWRlbnRpdHlIYXNoVHJhbnNsYXRvcklTQV9FRVMxX0VFTlN0M19fMTRwYWly
SVBTN19iRUVSS1QwXwogX19aTjNXVEY5SGFzaFRhYmxlSU5TXzZTdHJpbmdFTlNfMTJLZXlWYWx1
ZVBhaXJJUzFfTlNfNk93blB0cklON1dlYkNvcmUxNEluc3BlY3RvclN0YXRlRUVFRUVOU18yNEtl
eVZhbHVlUGFpcktleUV4dHJhY3RvcklTN19FRU5TXzEwU3RyaW5nSGFzaEVOU18xOEhhc2hNYXBW
YWx1ZVRyYWl0c0lOU18xMEhhc2hUcmFpdHNJUzFfRUVOU0NfSVM2X0VFRUVTRF9FM2FkZElOU18x
N0hhc2hNYXBUcmFuc2xhdG9ySVNGX1NBX0VFUzFfTlNfMTBQYXNzT3duUHRySVM1X0VFRUVOU18x
OEhhc2hUYWJsZUFkZFJlc3VsdElOU18xN0hhc2hUYWJsZUl0ZXJhdG9ySVMxX1M3X1M5X1NBX1NG
X1NEX0VFRUVSS1QwX1JLVDFfCiBfX1pOM1dURjlIYXNoVGFibGVJTlNfNlN0cmluZ0VOU18xMktl
eVZhbHVlUGFpcklTMV9OU182T3duUHRySU43V2ViQ29yZTE0SW5zcGVjdG9yU3RhdGVFRUVFRU5T
XzI0S2V5VmFsdWVQYWlyS2V5RXh0cmFjdG9ySVM3X0VFTlNfMTBTdHJpbmdIYXNoRU5TXzE4SGFz
aE1hcFZhbHVlVHJhaXRzSU5TXzEwSGFzaFRyYWl0c0lTMV9FRU5TQ19JUzZfRUVFRVNEX0U2bG9v
a3VwSU5TXzIySWRlbnRpdHlIYXNoVHJhbnNsYXRvcklTQV9FRVMxX0VFUFM3X1JLVDBfCkBAIC03
MjYsOCArNzI2LDggQEAgX19aTjdXZWJDb3JlMTZQYWdlQ29uc29sZUFnZW50QzFFUE5TXzE5SW5z
dHJ1bWVudGluZ0FnZW50c0VQTlNfMTRJbnNwZWN0b3JBZ2VudEUKIF9fWk43V2ViQ29yZTIxSW5z
cGVjdG9yQ29uc29sZUFnZW50QzJFUE5TXzE5SW5zdHJ1bWVudGluZ0FnZW50c0VQTlNfMjNJbnNw
ZWN0b3JDb21wb3NpdGVTdGF0ZUVQTlNfMjFJbmplY3RlZFNjcmlwdE1hbmFnZXJFCiBfX1pON1dl
YkNvcmUxN1BhZ2VEZWJ1Z2dlckFnZW50NmNyZWF0ZUVQTlNfMTlJbnN0cnVtZW50aW5nQWdlbnRz
RVBOU18yM0luc3BlY3RvckNvbXBvc2l0ZVN0YXRlRVBOU18xOEluc3BlY3RvclBhZ2VBZ2VudEVQ
TlNfMjFJbmplY3RlZFNjcmlwdE1hbmFnZXJFUE5TXzE2SW5zcGVjdG9yT3ZlcmxheUUKIF9fWk43
V2ViQ29yZTIySW5zcGVjdG9yRGVidWdnZXJBZ2VudEMyRVBOU18xOUluc3RydW1lbnRpbmdBZ2Vu
dHNFUE5TXzIzSW5zcGVjdG9yQ29tcG9zaXRlU3RhdGVFUE5TXzIxSW5qZWN0ZWRTY3JpcHRNYW5h
Z2VyRQotX19aTjdXZWJDb3JlMTRJbnNwZWN0b3JTdGF0ZThzZXRWYWx1ZUVSS04zV1RGNlN0cmlu
Z0VOUzFfMTBQYXNzUmVmUHRySU5TXzE0SW5zcGVjdG9yVmFsdWVFRUUKLV9fWk43V2ViQ29yZTE5
SW5zcGVjdG9yT2JqZWN0QmFzZThzZXRWYWx1ZUVSS04zV1RGNlN0cmluZ0VOUzFfMTBQYXNzUmVm
UHRySU5TXzE0SW5zcGVjdG9yVmFsdWVFRUUKK19fWk43V2ViQ29yZTE0SW5zcGVjdG9yU3RhdGU4
c2V0VmFsdWVFUktOM1dURjZTdHJpbmdFTlMxXzEwUGFzc1JlZlB0cklOU18xNFVuY2hlY2tlZFZh
bHVlRUVFCitfX1pON1dlYkNvcmUxOUluc3BlY3Rvck9iamVjdEJhc2U4c2V0VmFsdWVFUktOM1dU
RjZTdHJpbmdFTlMxXzEwUGFzc1JlZlB0cklOU18xNFVuY2hlY2tlZFZhbHVlRUVFCiBfX1pON1dl
YkNvcmUyM0luc3BlY3RvckNvbXBvc2l0ZVN0YXRlMjFpbnNwZWN0b3JTdGF0ZVVwZGF0ZWRFdgog
X19aTjdXZWJDb3JlMjVJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50NmNyZWF0ZUVQTlNfMTlJbnN0
cnVtZW50aW5nQWdlbnRzRVBOU18yM0luc3BlY3RvckNvbXBvc2l0ZVN0YXRlRVBOU18xN0luc3Bl
Y3RvckRPTUFnZW50RVBOU18yMkluc3BlY3RvckRlYnVnZ2VyQWdlbnRFUE5TXzE0SW5zcGVjdG9y
QWdlbnRFCiBfX1pON1dlYkNvcmUyMEluc3BlY3RvcldvcmtlckFnZW50NmNyZWF0ZUVQTlNfMTlJ
bnN0cnVtZW50aW5nQWdlbnRzRVBOU18yM0luc3BlY3RvckNvbXBvc2l0ZVN0YXRlRQpAQCAtMjA5
OTQsNyArMjA5OTQsNyBAQCBfX1pUVk43V2ViQ29yZTIySW5zcGVjdG9yVGltZWxpbmVBZ2VudEUK
IF9fWk43V2ViQ29yZThQcm90b2NvbEwyMGVudW1fY29uc3RhbnRfdmFsdWVzRQogX19aVFZON1dl
YkNvcmUxOUluc3BlY3Rvck9iamVjdEJhc2VFCiBfX1pUVk43V2ViQ29yZTE4SW5zcGVjdG9yQXJy
YXlCYXNlRQotX19aVFZON1dlYkNvcmUxNEluc3BlY3RvclZhbHVlRQorX19aVFZON1dlYkNvcmUx
NFVuY2hlY2tlZFZhbHVlRQogX19aVFZON1dlYkNvcmUxOUluc3BlY3RvckJhc2ljVmFsdWVFCiBf
X1pUVk43V2ViQ29yZTE1SW5zcGVjdG9yU3RyaW5nRQogX19aVFZON1dlYkNvcmUyMEluc3BlY3Rv
cldvcmtlckFnZW50RQpAQCAtMjQzOTIsNyArMjQzOTIsNyBAQCBfX1pUVk43V2ViQ29yZTE3SW5z
cGVjdG9yQ1NTQWdlbnQyMFRvZ2dsZVByb3BlcnR5QWN0aW9uRQogX19aVFZON1dlYkNvcmUxN0lu
c3BlY3RvckNTU0FnZW50MjFTZXRQcm9wZXJ0eVRleHRBY3Rpb25FCiBfX1pUVk43V2ViQ29yZTE3
SW5zcGVjdG9yQ1NTQWdlbnQyM1NldFN0eWxlU2hlZXRUZXh0QWN0aW9uRQogX19aVFZON1dlYkNv
cmUxOEluc3BlY3RvckJhc2VBZ2VudElOU18yMkluc3BlY3RvckRhdGFiYXNlQWdlbnRFRUUKLV9f
WlRWTjdXZWJDb3JlOFByb3RvY29sNUFycmF5SU5TXzE0SW5zcGVjdG9yVmFsdWVFRUUKK19fWlRW
TjdXZWJDb3JlOFByb3RvY29sNUFycmF5SU5TXzE0VW5jaGVja2VkVmFsdWVFRUUKIF9fWk43V2Vi
Q29yZUwxMm5leHRVbnVzZWRJZEUKIF9fWk43V2ViQ29yZTIySW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dDIwYmFja3RyYWNlT2JqZWN0R3JvdXBFCiBfX1pUVk4zV1RGMjFNZW1vcnlJbnN0cnVtZW50YXRp
b243V3JhcHBlcklON1dlYkNvcmUxNUluc3BlY3Rvck9iamVjdEVFRQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvaiBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oKaW5kZXggMmI4N2M4MjRmYmQ4MDk1
MTVkZDJjMTg1ZDNlZmFmZDkzMDI4MmM5Yy4uYzA4NjU0NWMwNWYxZWY4ZjlmMWMzMDI1OTZkYzgz
MmI3NDUzMGUxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dl
YkNvcmUudmN4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29y
ZS52Y3hwcm9qCkBAIC0xODg2MCw3ICsxODg2MCw2IEBAIO+7vzw/eG1sIHZlcnNpb249IjEuMCIg
ZW5jb2Rpbmc9InV0Zi04Ij8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxGb3J3YXJkaW5n
SGVhZGVyc1xpbnNwZWN0b3JcSW5zcGVjdG9ySlNGcm9udGVuZERpc3BhdGNoZXJzLmgiIC8+CiAg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxGb3J3YXJkaW5nSGVhZGVyc1xpbnNwZWN0b3JcSW5z
cGVjdG9ySlNQcm90b2NvbFR5cGVzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxG
b3J3YXJkaW5nSGVhZGVyc1xpbnNwZWN0b3JcSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oIiAvPgot
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cRm9yd2FyZGluZ0hlYWRlcnNcaW5zcGVjdG9yXElu
c3BlY3RvclZhbHVlcy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cRm9yd2FyZGlu
Z0hlYWRlcnNcaW5zcGVjdG9yXFNjcmlwdEFyZ3VtZW50cy5oIiAvPgogICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cRm9yd2FyZGluZ0hlYWRlcnNcaW5zcGVjdG9yXFNjcmlwdEJyZWFrcG9pbnQu
aCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXEZvcndhcmRpbmdIZWFkZXJzXGluc3Bl
Y3RvclxTY3JpcHRDYWxsRnJhbWUuaCIgLz4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycyBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycwppbmRleCAxZTgxOTQ2MjlmYmE1
MjMyOGJlODFjNGQ1NzVjZGE5Yjg2MzUwYWZhLi5lYzczZjRjNzRiZjYxMWJmMmU0NTExNzI3MjZj
YWNlNThiNDMxZTJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ov
V2ViQ29yZS52Y3hwcm9qLmZpbHRlcnMKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hw
cm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzCkBAIC0xMjMxNSw5ICsxMjMxNSw2IEBAIO+7vzw/
eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+CiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxGb3J3YXJkaW5nSGVhZGVyc1xpbnNwZWN0b3JcSW5zcGVjdG9yUHJvdG9jb2xUeXBl
cy5oIj4KICAgICAgIDxGaWx0ZXI+Rm9yd2FyZGluZ0hlYWRlcnNcaW5zcGVjdG9yPC9GaWx0ZXI+
CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxGb3J3YXJkaW5n
SGVhZGVyc1xpbnNwZWN0b3JcSW5zcGVjdG9yVmFsdWVzLmgiPgotICAgICAgPEZpbHRlcj5Gb3J3
YXJkaW5nSGVhZGVyc1xpbnNwZWN0b3I8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXEZvcndhcmRpbmdIZWFkZXJzXGluc3BlY3RvclxTY3JpcHRB
cmd1bWVudHMuaCI+CiAgICAgICA8RmlsdGVyPkZvcndhcmRpbmdIZWFkZXJzXGluc3BlY3Rvcjwv
RmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgpAQCAtMTU0NDMsNCArMTU0NDAsNCBAQCDvu788P3ht
bCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgogICAgICAgPEZpbHRlcj5wbGF0Zm9y
bVx3aW48L0ZpbHRlcj4KICAgICA8L01BU00+CiAgIDwvSXRlbUdyb3VwPgotPC9Qcm9qZWN0Pgpc
IE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKzwvUHJvamVjdD4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ29tbWFuZExpbmVBUElIb3N0Q3VzdG9tLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ29tbWFuZExpbmVBUElIb3N0Q3VzdG9tLmNwcApp
bmRleCA3ZTg2ZGI2MTg2NzY1N2ZhZDI2OTg2NTU0ZGQ3MmZlMTYxZmUzNjY1Li5jZDEzNTY5OTBm
NDA1YzhjYzVhNzNiY2ZiNTIyNjQ2OTQ4NzY1MzAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0NvbW1hbmRMaW5lQVBJSG9zdEN1c3RvbS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNDb21tYW5kTGluZUFQSUhvc3RDdXN0b20uY3BwCkBAIC00
Myw3ICs0Myw3IEBACiAjaW5jbHVkZSAiSlNTdG9yYWdlLmgiCiAjaW5jbHVkZSAiU3RvcmFnZS5o
IgogI2luY2x1ZGUgPGJpbmRpbmdzL1NjcmlwdFZhbHVlLmg+Ci0jaW5jbHVkZSA8aW5zcGVjdG9y
L0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JQcm90b2Nv
bFR5cGVzLmg+CiAjaW5jbHVkZSA8cGFyc2VyL1NvdXJjZUNvZGUuaD4KICNpbmNsdWRlIDxydW50
aW1lL0lkZW50aWZpZXJJbmxpbmVzLmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU0FycmF5Lmg+CkBA
IC0xMzcsNyArMTM3LDcgQEAgSlNWYWx1ZSBKU0NvbW1hbmRMaW5lQVBJSG9zdDo6aW5zcGVjdChF
eGVjU3RhdGUqIGV4ZWMpCiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+PSAyKSB7CiAg
ICAgICAgIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIG9iamVjdChleGVjLT52bSgpLCBleGVjLT51
bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAgICAgICAgIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIGhp
bnRzKGV4ZWMtPnZtKCksIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsKLSAgICAgICAgaW1w
bCgpLmluc3BlY3RJbXBsKG9iamVjdC50b0luc3BlY3RvclZhbHVlKGV4ZWMpLCBoaW50cy50b0lu
c3BlY3RvclZhbHVlKGV4ZWMpKTsKKyAgICAgICAgaW1wbCgpLmluc3BlY3RJbXBsKG9iamVjdC50
b1VuY2hlY2tlZFZhbHVlKGV4ZWMpLCBoaW50cy50b1VuY2hlY2tlZFZhbHVlKGV4ZWMpKTsKICAg
ICB9CiAKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvcGFyc2VyL1hTU0F1ZGl0b3JEZWxlZ2F0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3BhcnNlci9YU1NBdWRpdG9yRGVsZWdhdGUuY3BwCmluZGV4IGEzMmZhMDg1Y2E4OTQ5Y2Fk
YjY5MzI3NDE1NDQyYmI1NmU3Y2UxODUuLmUwZTc4N2I0NmJkMTVkM2FmZmU5MTg1YmQyZjk0MTVi
NDdkYTdjY2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1hTU0F1ZGl0
b3JEZWxlZ2F0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvWFNTQXVkaXRv
ckRlbGVnYXRlLmNwcApAQCAtMzUsNyArMzUsNyBAQAogI2luY2x1ZGUgIkhUTUxQYXJzZXJJZGlv
bXMuaCIKICNpbmNsdWRlICJQaW5nTG9hZGVyLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4u
aCIKLSNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8aW5z
cGVjdG9yL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdCdWlsZGVyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCkBAIC04MiwxMSAr
ODIsMTEgQEAgUGFzc1JlZlB0cjxGb3JtRGF0YT4gWFNTQXVkaXRvckRlbGVnYXRlOjpnZW5lcmF0
ZVZpb2xhdGlvblJlcG9ydChjb25zdCBYU1NJbmZvJgogICAgICAgICAgICAgaHR0cEJvZHkgPSBm
b3JtRGF0YS0+ZmxhdHRlblRvU3RyaW5nKCk7CiAgICAgfQogCi0gICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gcmVwb3J0RGV0YWlscyA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gcmVwb3J0RGV0YWls
cyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdDo6Y3JlYXRlKCk7CiAgICAg
cmVwb3J0RGV0YWlscy0+c2V0U3RyaW5nKCJyZXF1ZXN0LXVybCIsIHhzc0luZm8ubV9vcmlnaW5h
bFVSTCk7CiAgICAgcmVwb3J0RGV0YWlscy0+c2V0U3RyaW5nKCJyZXF1ZXN0LWJvZHkiLCBodHRw
Qm9keSk7CiAKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXBvcnRPYmplY3QgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpV
bmNoZWNrZWRPYmplY3Q+IHJlcG9ydE9iamVjdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hl
Y2tlZE9iamVjdDo6Y3JlYXRlKCk7CiAgICAgcmVwb3J0T2JqZWN0LT5zZXRPYmplY3QoInhzcy1y
ZXBvcnQiLCByZXBvcnREZXRhaWxzLnJlbGVhc2UoKSk7CiAKICAgICByZXR1cm4gRm9ybURhdGE6
OmNyZWF0ZShyZXBvcnRPYmplY3QtPnRvSlNPTlN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvbW1hbmRMaW5lQVBJSG9zdC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29tbWFuZExpbmVBUElIb3N0LmNwcAppbmRleCA5
NDZhOTFmYWNmZjkxODVhZTFkMDg1ZDY4Y2EwMmM4MzgwY2I1MWJmLi42YzAxOWVjOTA0ZWE3ODUy
OTM3OWYwZjhhN2I3Y2RlY2QzYzBjZDU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvQ29tbWFuZExpbmVBUElIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvQ29tbWFuZExpbmVBUElIb3N0LmNwcApAQCAtNDYsNyArNDYsNyBAQAogI2luY2x1ZGUgIlN0
b3JhZ2UuaCIKICNpbmNsdWRlICJtYXJrdXAuaCIKICNpbmNsdWRlIDxiaW5kaW5ncy9TY3JpcHRW
YWx1ZS5oPgotI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRl
IDxpbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgogI2luY2x1ZGUgPGluc3BlY3Rv
ci9hZ2VudHMvSW5zcGVjdG9yQWdlbnQuaD4KICNpbmNsdWRlIDxpbnNwZWN0b3IvYWdlbnRzL0lu
c3BlY3RvckNvbnNvbGVBZ2VudC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KQEAgLTkyLDEy
ICs5MiwxMiBAQCB2b2lkIENvbW1hbmRMaW5lQVBJSG9zdDo6ZGlzY29ubmVjdCgpCiAjZW5kaWYK
IH0KIAotdm9pZCBDb21tYW5kTGluZUFQSUhvc3Q6Omluc3BlY3RJbXBsKFBhc3NSZWZQdHI8SW5z
cGVjdG9yVmFsdWU+IG9iamVjdCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gaGludHMpCit2
b2lkIENvbW1hbmRMaW5lQVBJSG9zdDo6aW5zcGVjdEltcGwoUGFzc1JlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpVbmNoZWNrZWRWYWx1ZT4gb2JqZWN0LCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlVuY2hlY2tlZFZhbHVlPiBoaW50cykKIHsKICAgICBpZiAoIW1faW5zcGVjdG9y
QWdlbnQpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGhp
bnRzT2JqZWN0OworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmpl
Y3Q+IGhpbnRzT2JqZWN0OwogICAgIGlmICghaGludHMtPmFzT2JqZWN0KGhpbnRzT2JqZWN0KSkK
ICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
Q29tbWFuZExpbmVBUElIb3N0LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29tbWFuZExp
bmVBUElIb3N0LmgKaW5kZXggYzQ5NGUzNjQzYjgwYjVlNjU4NGM3ZTIzYjI1MzVlZmY3NjkwYzM0
MS4uYjA1ZjIzZDUxNmQ0NTg3ZGFlZGY1YzI3YTZjNDg1ZjFlOTdjYzg0NCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvbW1hbmRMaW5lQVBJSG9zdC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9Db21tYW5kTGluZUFQSUhvc3QuaApAQCAtNDEsMTAgKzQxLDEy
IEBAIGNsYXNzIFNjcmlwdFZhbHVlOwogfQogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKK25hbWVz
cGFjZSBQcm90b2NvbCB7CitjbGFzcyBVbmNoZWNrZWRPYmplY3Q7CitjbGFzcyBVbmNoZWNrZWRW
YWx1ZTsKK30KIGNsYXNzIEluc3BlY3RvckFnZW50OwogY2xhc3MgSW5zcGVjdG9yQ29uc29sZUFn
ZW50OwotY2xhc3MgSW5zcGVjdG9yT2JqZWN0OwotY2xhc3MgSW5zcGVjdG9yVmFsdWU7CiB9CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTk1LDcgKzk3LDcgQEAgcHVibGljOgogICAgIHZvaWQg
YWRkSW5zcGVjdGVkT2JqZWN0KHN0ZDo6dW5pcXVlX3B0cjxJbnNwZWN0YWJsZU9iamVjdD4pOwog
ICAgIHZvaWQgY2xlYXJJbnNwZWN0ZWRPYmplY3RzKCk7CiAgICAgSW5zcGVjdGFibGVPYmplY3Qq
IGluc3BlY3RlZE9iamVjdCh1bnNpZ25lZCBpbmRleCk7Ci0gICAgdm9pZCBpbnNwZWN0SW1wbChQ
YXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IG9iamVjdFRvSW5zcGVjdCwgUGFz
c1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiBoaW50cyk7CisgICAgdm9pZCBpbnNw
ZWN0SW1wbChQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZFZhbHVlPiBv
YmplY3RUb0luc3BlY3QsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2Vk
VmFsdWU+IGhpbnRzKTsKIAogICAgIHZvaWQgZ2V0RXZlbnRMaXN0ZW5lcnNJbXBsKE5vZGUqLCBW
ZWN0b3I8RXZlbnRMaXN0ZW5lckluZm8+JiBsaXN0ZW5lcnNBcnJheSk7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVB
Z2VudC5jcHAKaW5kZXggZDc1NWVmY2EyZTM1ZjllNjJlZjQ3MzNlNDBlMWVlZWM5M2VlM2E0My4u
Mjk0NjYyMzU5ZjQwMTllMGZjMTIxYzBkODBjZmI2ZjQ3ZTAzMjhmYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVB
Z2VudC5jcHAKQEAgLTM5LDcgKzM5LDcgQEAKICNpbmNsdWRlICJOZXR3b3JrU3RhdGVOb3RpZmll
ci5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCi0j
aW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPGluc3BlY3Rv
ci9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVp
bGRlci5oPgogCiB1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5oIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5oCmlu
ZGV4IDdlYzc3MmM4NTVlY2Y4ZjIwMjk2YjdlNmEyNzI5ZjgyZGI0N2UzMWUuLjQ0NDliODBiM2Rj
YWI4OGQ5ZWRhOTg0OGU3ZDY5MDQwMmQ0MWM1NDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmgKQEAgLTM1
LDggKzM1LDggQEAKIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiBjbGFzcyBJbnNwZWN0b3JBcHBs
aWNhdGlvbkNhY2hlRnJvbnRlbmREaXNwYXRjaGVyOwotY2xhc3MgSW5zcGVjdG9yT2JqZWN0Owot
Y2xhc3MgSW5zcGVjdG9yVmFsdWU7CitjbGFzcyBVbmNoZWNrZWRPYmplY3Q7CitjbGFzcyBVbmNo
ZWNrZWRWYWx1ZTsKIH0KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKaW5kZXggYzUzZTdjNTY0MmM3MjZjMWIy
NmExZGM4NTAwZjVlMjczOTRiOGM4OS4uNzA3YTcwYmYxMzFiZGJjN2M3YzUwYzYxYTViZTBlODM4
ZDY2MTkxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNT
U0FnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdl
bnQuY3BwCkBAIC01Niw3ICs1Niw3IEBACiAjaW5jbHVkZSAiU3R5bGVSdWxlLmgiCiAjaW5jbHVk
ZSAiU3R5bGVTaGVldExpc3QuaCIKICNpbmNsdWRlICJXZWJLaXROYW1lZEZsb3cuaCIKLSNpbmNs
dWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8aW5zcGVjdG9yL0lu
c3BlY3RvclByb3RvY29sVHlwZXMuaD4KICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNp
bmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9SZWYuaD4KQEAgLTc2LDcgKzc2
LDcgQEAgZW51bSBGb3JjZVBzZXVkb0NsYXNzRmxhZ3MgewogICAgIFBzZXVkb0NsYXNzVmlzaXRl
ZCA9IDEgPDwgMwogfTsKIAotc3RhdGljIHVuc2lnbmVkIGNvbXB1dGVQc2V1ZG9DbGFzc01hc2so
SW5zcGVjdG9yQXJyYXkqIHBzZXVkb0NsYXNzQXJyYXkpCitzdGF0aWMgdW5zaWduZWQgY29tcHV0
ZVBzZXVkb0NsYXNzTWFzayhJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRBcnJheSogcHNl
dWRvQ2xhc3NBcnJheSkKIHsKICAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoU3Ry
aW5nLCBhY3RpdmUsIChBU0NJSUxpdGVyYWwoImFjdGl2ZSIpKSk7CiAgICAgREVQUkVDQVRFRF9E
RUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgaG92ZXIsIChBU0NJSUxpdGVyYWwoImhvdmVyIikp
KTsKQEAgLTg3LDcgKzg3LDcgQEAgc3RhdGljIHVuc2lnbmVkIGNvbXB1dGVQc2V1ZG9DbGFzc01h
c2soSW5zcGVjdG9yQXJyYXkqIHBzZXVkb0NsYXNzQXJyYXkpCiAKICAgICB1bnNpZ25lZCByZXN1
bHQgPSBQc2V1ZG9DbGFzc05vbmU7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwc2V1ZG9D
bGFzc0FycmF5LT5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1
ZT4gcHNldWRvQ2xhc3NWYWx1ZSA9IHBzZXVkb0NsYXNzQXJyYXktPmdldChpKTsKKyAgICAgICAg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZFZhbHVlPiBwc2V1ZG9DbGFzc1Zh
bHVlID0gcHNldWRvQ2xhc3NBcnJheS0+Z2V0KGkpOwogICAgICAgICBTdHJpbmcgcHNldWRvQ2xh
c3M7CiAgICAgICAgIGJvb2wgc3VjY2VzcyA9IHBzZXVkb0NsYXNzVmFsdWUtPmFzU3RyaW5nKHBz
ZXVkb0NsYXNzKTsKICAgICAgICAgaWYgKCFzdWNjZXNzKQpAQCAtNzE5LDcgKzcxOSw3IEBAIHZv
aWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnNldFN0eWxlU2hlZXRUZXh0KEVycm9yU3RyaW5nJiBlcnJv
clN0cmluZywgY29uc3QgU3RyaW5nCiAgICAgZXJyb3JTdHJpbmcgPSBJbnNwZWN0b3JET01BZ2Vu
dDo6dG9FcnJvclN0cmluZyhlYyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnNldFN0
eWxlVGV4dChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+JiBmdWxsU3R5bGVJZCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4mIHJlc3VsdCkKK3ZvaWQgSW5zcGVjdG9yQ1NTQWdl
bnQ6OnNldFN0eWxlVGV4dChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+JiBmdWxsU3R5bGVJZCwgY29uc3Qg
U3RyaW5nJiB0ZXh0LCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4m
IHJlc3VsdCkKIHsKICAgICBJbnNwZWN0b3JDU1NJZCBjb21wb3VuZElkKGZ1bGxTdHlsZUlkKTsK
ICAgICBBU1NFUlQoIWNvbXBvdW5kSWQuaXNFbXB0eSgpKTsKQEAgLTczNSw3ICs3MzUsNyBAQCB2
b2lkIEluc3BlY3RvckNTU0FnZW50OjpzZXRTdHlsZVRleHQoRXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW5nLCBjb25zdCBSZWZQdHI8SW5zcAogICAgIGVycm9yU3RyaW5nID0gSW5zcGVjdG9yRE9NQWdl
bnQ6OnRvRXJyb3JTdHJpbmcoZWMpOwogfQogCi12b2lkIEluc3BlY3RvckNTU0FnZW50OjpzZXRQ
cm9wZXJ0eVRleHQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiYgZnVsbFN0eWxlSWQsIGludCBwcm9wZXJ0eUluZGV4LCBjb25zdCBTdHJpbmcm
IHRleHQsIGJvb2wgb3ZlcndyaXRlLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpD
U1NTdHlsZT4mIHJlc3VsdCkKK3ZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnNldFByb3BlcnR5VGV4
dChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpVbmNoZWNrZWRPYmplY3Q+JiBmdWxsU3R5bGVJZCwgaW50IHByb3BlcnR5SW5kZXgsIGNv
bnN0IFN0cmluZyYgdGV4dCwgYm9vbCBvdmVyd3JpdGUsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpDU1M6OkNTU1N0eWxlPiYgcmVzdWx0KQogewogICAgIEluc3BlY3RvckNTU0lkIGNvbXBv
dW5kSWQoZnVsbFN0eWxlSWQpOwogICAgIEFTU0VSVCghY29tcG91bmRJZC5pc0VtcHR5KCkpOwpA
QCAtNzUxLDcgKzc1MSw3IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnNldFByb3BlcnR5VGV4
dChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJCiAgICAgZXJyb3JTdHJp
bmcgPSBJbnNwZWN0b3JET01BZ2VudDo6dG9FcnJvclN0cmluZyhlYyk7CiB9CiAKLXZvaWQgSW5z
cGVjdG9yQ1NTQWdlbnQ6OnRvZ2dsZVByb3BlcnR5KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
Y29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIGZ1bGxTdHlsZUlkLCBpbnQgcHJvcGVydHlJ
bmRleCwgYm9vbCBkaXNhYmxlLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NT
dHlsZT4mIHJlc3VsdCkKK3ZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnRvZ2dsZVByb3BlcnR5KEVy
cm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlVuY2hlY2tlZE9iamVjdD4mIGZ1bGxTdHlsZUlkLCBpbnQgcHJvcGVydHlJbmRleCwgYm9vbCBk
aXNhYmxlLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4mIHJlc3Vs
dCkKIHsKICAgICBJbnNwZWN0b3JDU1NJZCBjb21wb3VuZElkKGZ1bGxTdHlsZUlkKTsKICAgICBB
U1NFUlQoIWNvbXBvdW5kSWQuaXNFbXB0eSgpKTsKQEAgLTc2Nyw3ICs3NjcsNyBAQCB2b2lkIElu
c3BlY3RvckNTU0FnZW50Ojp0b2dnbGVQcm9wZXJ0eShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IGNvbnN0IFJlZlB0cjxJbgogICAgIGVycm9yU3RyaW5nID0gSW5zcGVjdG9yRE9NQWdlbnQ6OnRv
RXJyb3JTdHJpbmcoZWMpOwogfQogCi12b2lkIEluc3BlY3RvckNTU0FnZW50OjpzZXRSdWxlU2Vs
ZWN0b3IoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiYgZnVsbFJ1bGVJZCwgY29uc3QgU3RyaW5nJiBzZWxlY3RvciwgUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4mIHJlc3VsdCkKK3ZvaWQgSW5zcGVjdG9yQ1NTQWdl
bnQ6OnNldFJ1bGVTZWxlY3RvcihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+JiBmdWxsUnVsZUlkLCBjb25z
dCBTdHJpbmcmIHNlbGVjdG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NS
dWxlPiYgcmVzdWx0KQogewogICAgIEluc3BlY3RvckNTU0lkIGNvbXBvdW5kSWQoZnVsbFJ1bGVJ
ZCk7CiAgICAgQVNTRVJUKCFjb21wb3VuZElkLmlzRW1wdHkoKSk7CkBAIC04MzQsNyArODM0LDcg
QEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0U3VwcG9ydGVkQ1NTUHJvcGVydGllcyhFcnJv
clN0cmluZyYsIFJlZlB0cjxJbnNwZWN0b3IKICAgICBjc3NQcm9wZXJ0aWVzID0gcHJvcGVydGll
cy5yZWxlYXNlKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmZvcmNlUHNldWRvU3Rh
dGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBjb25zdCBSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+JiBmb3JjZWRQc2V1ZG9DbGFzc2VzKQordm9pZCBJbnNwZWN0b3JDU1NBZ2Vu
dDo6Zm9yY2VQc2V1ZG9TdGF0ZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQs
IGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRBcnJheT4mIGZvcmNl
ZFBzZXVkb0NsYXNzZXMpCiB7CiAgICAgRWxlbWVudCogZWxlbWVudCA9IG1fZG9tQWdlbnQtPmFz
c2VydEVsZW1lbnQoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFlbGVtZW50KQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmggYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuaAppbmRleCA4MmEzOGVk
MzlkNjZmOTAyMjkwOWNlMDJhZTNmNGMxODk1OTljNGI1Li5iYWQ0NzEzNDYzMGZmMzkxM2YzYmRh
OTY3ZjQ1NmRhM2UwZTVhNjg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQ1NTQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQ1NTQWdlbnQuaApAQCAtMzIsNyArMzIsNyBAQAogI2luY2x1ZGUgIkluc3BlY3RvcldlYkFn
ZW50QmFzZS5oIgogI2luY2x1ZGUgIkluc3BlY3RvcldlYkJhY2tlbmREaXNwYXRjaGVycy5oIgog
I2luY2x1ZGUgIlNlY3VyaXR5Q29udGV4dC5oIgotI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0
b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5o
PgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNp
bmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgpAQCAtMTE2LDEzICsxMTYsMTMgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgdm9pZCBnZXRTdHlsZVNoZWV0KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5n
JiBzdHlsZVNoZWV0SWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxl
U2hlZXRCb2R5PiYgcmVzdWx0KSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgZ2V0U3R5bGVT
aGVldFRleHQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHN0eWxlU2hlZXRJZCwgU3RyaW5n
KiByZXN1bHQpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBzZXRTdHlsZVNoZWV0VGV4dChF
cnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgc3R5bGVTaGVldElkLCBjb25zdCBTdHJpbmcmIHRl
eHQpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBzZXRTdHlsZVRleHQoRXJyb3JTdHJpbmcm
LCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiBzdHlsZUlkLCBjb25z
dCBTdHJpbmcmIHRleHQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxl
PiYgcmVzdWx0KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0UHJvcGVydHlUZXh0KEVy
cm9yU3RyaW5nJiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYgc3R5
bGVJZCwgaW50IHByb3BlcnR5SW5kZXgsIGNvbnN0IFN0cmluZyYgdGV4dCwgYm9vbCBvdmVyd3Jp
dGUsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiYgcmVzdWx0KSBv
dmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgdG9nZ2xlUHJvcGVydHkoRXJyb3JTdHJpbmcmLCBj
b25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiBzdHlsZUlkLCBpbnQgcHJv
cGVydHlJbmRleCwgYm9vbCBkaXNhYmxlLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NT
OjpDU1NTdHlsZT4mIHJlc3VsdCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHNldFJ1bGVT
ZWxlY3RvcihFcnJvclN0cmluZyYsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9i
amVjdD4mIHJ1bGVJZCwgY29uc3QgU3RyaW5nJiBzZWxlY3RvciwgUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4mIHJlc3VsdCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2
b2lkIHNldFN0eWxlVGV4dChFcnJvclN0cmluZyYsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+JiBzdHlsZUlkLCBjb25zdCBTdHJpbmcmIHRleHQsIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiYgcmVzdWx0KSBvdmVycmlk
ZTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UHJvcGVydHlUZXh0KEVycm9yU3RyaW5nJiwgY29uc3Qg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4mIHN0eWxlSWQsIGlu
dCBwcm9wZXJ0eUluZGV4LCBjb25zdCBTdHJpbmcmIHRleHQsIGJvb2wgb3ZlcndyaXRlLCBSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4mIHJlc3VsdCkgb3ZlcnJpZGU7
CisgICAgdmlydHVhbCB2b2lkIHRvZ2dsZVByb3BlcnR5KEVycm9yU3RyaW5nJiwgY29uc3QgUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4mIHN0eWxlSWQsIGludCBw
cm9wZXJ0eUluZGV4LCBib29sIGRpc2FibGUsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpD
U1M6OkNTU1N0eWxlPiYgcmVzdWx0KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UnVs
ZVNlbGVjdG9yKEVycm9yU3RyaW5nJiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlVuY2hlY2tlZE9iamVjdD4mIHJ1bGVJZCwgY29uc3QgU3RyaW5nJiBzZWxlY3RvciwgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4mIHJlc3VsdCkgb3ZlcnJpZGU7CiAg
ICAgdmlydHVhbCB2b2lkIGFkZFJ1bGUoRXJyb3JTdHJpbmcmLCBpbnQgY29udGV4dE5vZGVJZCwg
Y29uc3QgU3RyaW5nJiBzZWxlY3RvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6
Q1NTUnVsZT4mIHJlc3VsdCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGdldFN1cHBvcnRl
ZENTU1Byb3BlcnRpZXMoRXJyb3JTdHJpbmcmLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eUluZm8+PiYgcmVzdWx0
KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZm9yY2VQc2V1ZG9TdGF0ZShFcnJvclN0cmlu
ZyYsIGludCBub2RlSWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5PiYg
Zm9yY2VkUHNldWRvQ2xhc3Nlcykgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGZvcmNlUHNl
dWRvU3RhdGUoRXJyb3JTdHJpbmcmLCBpbnQgbm9kZUlkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6VW5jaGVja2VkQXJyYXk+JiBmb3JjZWRQc2V1ZG9DbGFzc2VzKSBvdmVycmlk
ZTsKICAgICB2aXJ0dWFsIHZvaWQgZ2V0TmFtZWRGbG93Q29sbGVjdGlvbihFcnJvclN0cmluZyYs
IGludCBkb2N1bWVudE5vZGVJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6TmFtZWRGbG93Pj4mIHJlc3VsdCkgb3ZlcnJpZGU7CiAK
IHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJv
bGxlci5jcHAKaW5kZXggODIwMDQ4MTgyMjgzNWFiYTFhYTJiNDVmYjMyMzQ1ZDBjNjdjNjYxMy4u
ZWZiNmE5NGQxZjk5NjgwYTNjMDIzMGNiNTliMjU5M2Q5MDAwZjAwMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcApAQCAtMzI5LDcgKzMy
OSw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6Z2V0SGlnaGxpZ2h0KEhpZ2hsaWdodCog
aGlnaGxpZ2h0LCBJbnNwZWN0b3JPdmVybGF5OjpDCiAgICAgbV9vdmVybGF5LT5nZXRIaWdobGln
aHQoaGlnaGxpZ2h0LCBjb29yZGluYXRlU3lzdGVtKTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IEluc3BlY3RvckNvbnRyb2xsZXI6OmJ1aWxkT2JqZWN0Rm9ySGlnaGxpZ2h0ZWRO
b2RlKCkgY29uc3QKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2Jq
ZWN0PiBJbnNwZWN0b3JDb250cm9sbGVyOjpidWlsZE9iamVjdEZvckhpZ2hsaWdodGVkTm9kZSgp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fb3ZlcmxheS0+YnVpbGRPYmplY3RGb3JIaWdobGlnaHRl
ZE5vZGUoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJv
bGxlci5oCmluZGV4IDk0NzViYzI1MDc4NjIyMTJlMTU5NDIxMGFlNmNjNDk4YmZlOTE4NTUuLjY2
ZTk5YTMyYzVkZGNkODBmN2UzOGQ1NmI4ZTAzM2I4NGZlOGQ0ODIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaApAQCAtNDcsNyArNDcsNyBAQCBu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKIGNsYXNzIEluc3BlY3RvckFnZW50OwogY2xhc3MgSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXI7CiBjbGFzcyBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7Ci1j
bGFzcyBJbnNwZWN0b3JPYmplY3Q7CitjbGFzcyBVbmNoZWNrZWRPYmplY3Q7CiB9CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKQEAgLTEwOSw3ICsxMDksNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNl
dEluZGljYXRpbmcoYm9vbCk7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBQYXNzUmVmUHRyPEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBidWlsZE9iamVjdEZvckhpZ2hsaWdodGVkTm9kZSgpIGNv
bnN0OworICAgIFdFQkNPUkVfRVhQT1JUIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
VW5jaGVja2VkT2JqZWN0PiBidWlsZE9iamVjdEZvckhpZ2hsaWdodGVkTm9kZSgpIGNvbnN0Owog
CiAgICAgYm9vbCBpc1VuZGVyVGVzdCgpIGNvbnN0IHsgcmV0dXJuIG1faXNVbmRlclRlc3Q7IH0K
ICAgICB2b2lkIHNldElzVW5kZXJUZXN0KGJvb2wgaXNVbmRlclRlc3QpIHsgbV9pc1VuZGVyVGVz
dCA9IGlzVW5kZXJUZXN0OyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRE9NQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckRPTUFnZW50LmNwcAppbmRleCA5YmIwODE4YTMxMmNiMWQzNzg1ZWYxMmFkMjU2OTMwM2ViMTZm
ZGFlLi5hMjdjNDlkYWIxZWY2MDUzOTg4M2NhMTU0ZDJlM2IxNDAzY2YyYmM3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKQEAgLTExMSw3ICsx
MTEsNyBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogc3RhdGljIGNvbnN0IHNpemVfdCBt
YXhUZXh0U2l6ZSA9IDEwMDAwOwogc3RhdGljIGNvbnN0IFVDaGFyIGVsbGlwc2lzVUNoYXJbXSA9
IHsgMHgyMDI2LCAwIH07CiAKLXN0YXRpYyBDb2xvciBwYXJzZUNvbG9yKGNvbnN0IFBhc3NSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBjb2xvck9iamVjdCkKK3N0YXRpYyBDb2xvciBwYXJzZUNvbG9y
KGNvbnN0IFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBj
b2xvck9iamVjdCkKIHsKICAgICBpZiAoIWNvbG9yT2JqZWN0KQogICAgICAgICByZXR1cm4gQ29s
b3I6OnRyYW5zcGFyZW50OwpAQCAtMTM1LDEzICsxMzUsMTMgQEAgc3RhdGljIENvbG9yIHBhcnNl
Q29sb3IoY29uc3QgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGNvbG9yT2JqZWN0KQogICAg
IHJldHVybiBDb2xvcihyLCBnLCBiLCBzdGF0aWNfY2FzdDxpbnQ+KGEgKiAyNTUpKTsKIH0KIAot
c3RhdGljIENvbG9yIHBhcnNlQ29uZmlnQ29sb3IoY29uc3QgU3RyaW5nJiBmaWVsZE5hbWUsIElu
c3BlY3Rvck9iamVjdCogY29uZmlnT2JqZWN0KQorc3RhdGljIENvbG9yIHBhcnNlQ29uZmlnQ29s
b3IoY29uc3QgU3RyaW5nJiBmaWVsZE5hbWUsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tl
ZE9iamVjdCogY29uZmlnT2JqZWN0KQogewotICAgIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IGNvbG9yT2JqZWN0ID0gY29uZmlnT2JqZWN0LT5nZXRPYmplY3QoZmllbGROYW1lKTsKKyAg
ICBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBjb2xv
ck9iamVjdCA9IGNvbmZpZ09iamVjdC0+Z2V0T2JqZWN0KGZpZWxkTmFtZSk7CiAgICAgcmV0dXJu
IHBhcnNlQ29sb3IoY29sb3JPYmplY3QpOwogfQogCi1zdGF0aWMgYm9vbCBwYXJzZVF1YWQoY29u
c3QgUmVmUHRyPEluc3BlY3RvckFycmF5PiYgcXVhZEFycmF5LCBGbG9hdFF1YWQqIHF1YWQpCitz
dGF0aWMgYm9vbCBwYXJzZVF1YWQoY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVu
Y2hlY2tlZEFycmF5PiYgcXVhZEFycmF5LCBGbG9hdFF1YWQqIHF1YWQpCiB7CiAgICAgaWYgKCFx
dWFkQXJyYXkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTg4MSwxNSArODgxLDE1IEBAIHZv
aWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldEFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzRm9yTm9kZShF
cnJvclN0cmluZyYgZXJyb3JTdHJpCiAgICAgYXhQcm9wZXJ0aWVzID0gYnVpbGRPYmplY3RGb3JB
Y2Nlc3NpYmlsaXR5UHJvcGVydGllcyhub2RlKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2Vu
dDo6cGVyZm9ybVNlYXJjaChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYg
d2hpdGVzcGFjZVRyaW1tZWRRdWVyeSwgY29uc3QgUmVmUHRyPEluc3BlY3RvckFycmF5Piogbm9k
ZUlkcywgU3RyaW5nKiBzZWFyY2hJZCwgaW50KiByZXN1bHRDb3VudCkKK3ZvaWQgSW5zcGVjdG9y
RE9NQWdlbnQ6OnBlcmZvcm1TZWFyY2goRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBT
dHJpbmcmIHdoaXRlc3BhY2VUcmltbWVkUXVlcnksIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpVbmNoZWNrZWRBcnJheT4qIG5vZGVJZHMsIFN0cmluZyogc2VhcmNoSWQsIGludCog
cmVzdWx0Q291bnQpCiB7CiAgICAgLy8gRklYTUU6IFNlYXJjaCB3b3JrcyB3aXRoIG5vZGUgZ3Jh
bnVsYXJpdHkgLSBudW1iZXIgb2YgbWF0Y2hlcyB3aXRoaW4gbm9kZSBpcyBub3QgY2FsY3VsYXRl
ZC4KICAgICBJbnNwZWN0b3JOb2RlRmluZGVyIGZpbmRlcih3aGl0ZXNwYWNlVHJpbW1lZFF1ZXJ5
KTsKIAogICAgIGlmIChub2RlSWRzKSB7Ci0gICAgICAgIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JB
cnJheT4mIG5vZGVJZHNSZWYgPSAqbm9kZUlkczsKKyAgICAgICAgY29uc3QgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZEFycmF5PiYgbm9kZUlkc1JlZiA9ICpub2RlSWRzOwog
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbm9kZUlkc1JlZi0+bGVuZ3RoKCk7ICsr
aSkgewotICAgICAgICAgICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiBub2RlVmFsdWUgPSBub2Rl
SWRzUmVmLT5nZXQoaSk7CisgICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
VW5jaGVja2VkVmFsdWU+IG5vZGVWYWx1ZSA9IG5vZGVJZHNSZWYtPmdldChpKTsKICAgICAgICAg
ICAgIGlmICghbm9kZVZhbHVlKSB7CiAgICAgICAgICAgICAgICAgZXJyb3JTdHJpbmcgPSBBU0NJ
SUxpdGVyYWwoIkludmFsaWQgbm9kZUlkcyBpdGVtLiIpOwogICAgICAgICAgICAgICAgIHJldHVy
bjsKQEAgLTEwMTcsMTMgKzEwMTcsMTMgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6bW91c2VE
aWRNb3ZlT3ZlckVsZW1lbnQoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCB1bnMKICAgICAg
ICAgbV9vdmVybGF5LT5oaWdobGlnaHROb2RlKG5vZGUsICptX2luc3BlY3RNb2RlSGlnaGxpZ2h0
Q29uZmlnKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0U2VhcmNoaW5nRm9yTm9k
ZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGJvb2wgZW5hYmxlZCwgSW5zcGVjdG9yT2JqZWN0
KiBoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QpCit2b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRT
ZWFyY2hpbmdGb3JOb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgYm9vbCBlbmFibGVkLCBJ
bnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3QqIGhpZ2hsaWdodFVuY2hlY2tlZE9i
amVjdCkKIHsKICAgICBpZiAobV9zZWFyY2hpbmdGb3JOb2RlID09IGVuYWJsZWQpCiAgICAgICAg
IHJldHVybjsKICAgICBtX3NlYXJjaGluZ0Zvck5vZGUgPSBlbmFibGVkOwogICAgIGlmIChlbmFi
bGVkKSB7Ci0gICAgICAgIG1faW5zcGVjdE1vZGVIaWdobGlnaHRDb25maWcgPSBoaWdobGlnaHRD
b25maWdGcm9tSW5zcGVjdG9yT2JqZWN0KGVycm9yU3RyaW5nLCBoaWdobGlnaHRJbnNwZWN0b3JP
YmplY3QpOworICAgICAgICBtX2luc3BlY3RNb2RlSGlnaGxpZ2h0Q29uZmlnID0gaGlnaGxpZ2h0
Q29uZmlnRnJvbVVuY2hlY2tlZE9iamVjdChlcnJvclN0cmluZywgaGlnaGxpZ2h0VW5jaGVja2Vk
T2JqZWN0KTsKICAgICAgICAgaWYgKCFtX2luc3BlY3RNb2RlSGlnaGxpZ2h0Q29uZmlnKQogICAg
ICAgICAgICAgcmV0dXJuOwogICAgIH0gZWxzZQpAQCAtMTAzMiwzNyArMTAzMiwzNyBAQCB2b2lk
IEluc3BlY3RvckRPTUFnZW50OjpzZXRTZWFyY2hpbmdGb3JOb2RlKEVycm9yU3RyaW5nJiBlcnJv
clN0cmluZywgYm9vbCBlbmFibAogICAgIG1fb3ZlcmxheS0+ZGlkU2V0U2VhcmNoaW5nRm9yTm9k
ZShtX3NlYXJjaGluZ0Zvck5vZGUpOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8SGlnaGxpZ2h0Q29u
ZmlnPiBJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0Q29uZmlnRnJvbUluc3BlY3Rvck9iamVj
dChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIEluc3BlY3Rvck9iamVjdCogaGlnaGxpZ2h0SW5z
cGVjdG9yT2JqZWN0KQorc3RkOjp1bmlxdWVfcHRyPEhpZ2hsaWdodENvbmZpZz4gSW5zcGVjdG9y
RE9NQWdlbnQ6OmhpZ2hsaWdodENvbmZpZ0Zyb21VbmNoZWNrZWRPYmplY3QoRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3QqIGhpZ2hs
aWdodFVuY2hlY2tlZE9iamVjdCkKIHsKLSAgICBpZiAoIWhpZ2hsaWdodEluc3BlY3Rvck9iamVj
dCkgeworICAgIGlmICghaGlnaGxpZ2h0VW5jaGVja2VkT2JqZWN0KSB7CiAgICAgICAgIGVycm9y
U3RyaW5nID0gQVNDSUlMaXRlcmFsKCJJbnRlcm5hbCBlcnJvcjogaGlnaGxpZ2h0IGNvbmZpZ3Vy
YXRpb24gcGFyYW1ldGVyIGlzIG1pc3NpbmciKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgfQogCiAgICAgYXV0byBoaWdobGlnaHRDb25maWcgPSBzdGQ6Om1ha2VfdW5pcXVlPEhpZ2hs
aWdodENvbmZpZz4oKTsKICAgICBib29sIHNob3dJbmZvID0gZmFsc2U7IC8vIERlZmF1bHQ6IGZh
bHNlIChkbyBub3Qgc2hvdyBhIHRvb2x0aXApLgotICAgIGhpZ2hsaWdodEluc3BlY3Rvck9iamVj
dC0+Z2V0Qm9vbGVhbigic2hvd0luZm8iLCBzaG93SW5mbyk7CisgICAgaGlnaGxpZ2h0VW5jaGVj
a2VkT2JqZWN0LT5nZXRCb29sZWFuKCJzaG93SW5mbyIsIHNob3dJbmZvKTsKICAgICBoaWdobGln
aHRDb25maWctPnNob3dJbmZvID0gc2hvd0luZm87Ci0gICAgaGlnaGxpZ2h0Q29uZmlnLT5jb250
ZW50ID0gcGFyc2VDb25maWdDb2xvcigiY29udGVudENvbG9yIiwgaGlnaGxpZ2h0SW5zcGVjdG9y
T2JqZWN0KTsKLSAgICBoaWdobGlnaHRDb25maWctPmNvbnRlbnRPdXRsaW5lID0gcGFyc2VDb25m
aWdDb2xvcigiY29udGVudE91dGxpbmVDb2xvciIsIGhpZ2hsaWdodEluc3BlY3Rvck9iamVjdCk7
Ci0gICAgaGlnaGxpZ2h0Q29uZmlnLT5wYWRkaW5nID0gcGFyc2VDb25maWdDb2xvcigicGFkZGlu
Z0NvbG9yIiwgaGlnaGxpZ2h0SW5zcGVjdG9yT2JqZWN0KTsKLSAgICBoaWdobGlnaHRDb25maWct
PmJvcmRlciA9IHBhcnNlQ29uZmlnQ29sb3IoImJvcmRlckNvbG9yIiwgaGlnaGxpZ2h0SW5zcGVj
dG9yT2JqZWN0KTsKLSAgICBoaWdobGlnaHRDb25maWctPm1hcmdpbiA9IHBhcnNlQ29uZmlnQ29s
b3IoIm1hcmdpbkNvbG9yIiwgaGlnaGxpZ2h0SW5zcGVjdG9yT2JqZWN0KTsKKyAgICBoaWdobGln
aHRDb25maWctPmNvbnRlbnQgPSBwYXJzZUNvbmZpZ0NvbG9yKCJjb250ZW50Q29sb3IiLCBoaWdo
bGlnaHRVbmNoZWNrZWRPYmplY3QpOworICAgIGhpZ2hsaWdodENvbmZpZy0+Y29udGVudE91dGxp
bmUgPSBwYXJzZUNvbmZpZ0NvbG9yKCJjb250ZW50T3V0bGluZUNvbG9yIiwgaGlnaGxpZ2h0VW5j
aGVja2VkT2JqZWN0KTsKKyAgICBoaWdobGlnaHRDb25maWctPnBhZGRpbmcgPSBwYXJzZUNvbmZp
Z0NvbG9yKCJwYWRkaW5nQ29sb3IiLCBoaWdobGlnaHRVbmNoZWNrZWRPYmplY3QpOworICAgIGhp
Z2hsaWdodENvbmZpZy0+Ym9yZGVyID0gcGFyc2VDb25maWdDb2xvcigiYm9yZGVyQ29sb3IiLCBo
aWdobGlnaHRVbmNoZWNrZWRPYmplY3QpOworICAgIGhpZ2hsaWdodENvbmZpZy0+bWFyZ2luID0g
cGFyc2VDb25maWdDb2xvcigibWFyZ2luQ29sb3IiLCBoaWdobGlnaHRVbmNoZWNrZWRPYmplY3Qp
OwogICAgIHJldHVybiBoaWdobGlnaHRDb25maWc7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdl
bnQ6OnNldEluc3BlY3RNb2RlRW5hYmxlZChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGJvb2wg
ZW5hYmxlZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIGhpZ2hsaWdodENvbmZpZykK
K3ZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldEluc3BlY3RNb2RlRW5hYmxlZChFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGJvb2wgZW5hYmxlZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlVuY2hlY2tlZE9iamVjdD4qIGhpZ2hsaWdodENvbmZpZykKIHsKICAgICBzZXRTZWFy
Y2hpbmdGb3JOb2RlKGVycm9yU3RyaW5nLCBlbmFibGVkLCBoaWdobGlnaHRDb25maWcgPyBoaWdo
bGlnaHRDb25maWctPmdldCgpIDogMCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6Omhp
Z2hsaWdodFJlY3QoRXJyb3JTdHJpbmcmLCBpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhl
aWdodCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIGNvbG9yLCBjb25zdCBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0Piogb3V0bGluZUNvbG9yLCBjb25zdCBib29sKiB1c2VQYWdlQ29vcmRp
bmF0ZXMpCit2b2lkIEluc3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHRSZWN0KEVycm9yU3RyaW5n
JiwgaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGNvbnN0IFJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+KiBjb2xvciwgY29uc3QgUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4qIG91dGxpbmVDb2xvciwgY29uc3Qg
Ym9vbCogdXNlUGFnZUNvb3JkaW5hdGVzKQogewogICAgIGF1dG8gcXVhZCA9IHN0ZDo6bWFrZV91
bmlxdWU8RmxvYXRRdWFkPihGbG9hdFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCkpOwogICAgIGlu
bmVySGlnaGxpZ2h0UXVhZChXVEY6Om1vdmUocXVhZCksIGNvbG9yLCBvdXRsaW5lQ29sb3IsIHVz
ZVBhZ2VDb29yZGluYXRlcyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdo
dFF1YWQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yQXJy
YXk+JiBxdWFkQXJyYXksIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiBjb2xvciwgY29u
c3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIG91dGxpbmVDb2xvciwgY29uc3QgYm9vbCogdXNl
UGFnZUNvb3JkaW5hdGVzKQordm9pZCBJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0UXVhZChF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpVbmNoZWNrZWRBcnJheT4mIHF1YWRBcnJheSwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlVuY2hlY2tlZE9iamVjdD4qIGNvbG9yLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6VW5jaGVja2VkT2JqZWN0Piogb3V0bGluZUNvbG9yLCBjb25zdCBib29sKiB1c2VQ
YWdlQ29vcmRpbmF0ZXMpCiB7CiAgICAgYXV0byBxdWFkID0gc3RkOjptYWtlX3VuaXF1ZTxGbG9h
dFF1YWQ+KCk7CiAgICAgaWYgKCFwYXJzZVF1YWQocXVhZEFycmF5LCBxdWFkLmdldCgpKSkgewpA
QCAtMTA3Miw3ICsxMDcyLDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0UXVh
ZChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJbnMKICAgICBpbm5lckhp
Z2hsaWdodFF1YWQoV1RGOjptb3ZlKHF1YWQpLCBjb2xvciwgb3V0bGluZUNvbG9yLCB1c2VQYWdl
Q29vcmRpbmF0ZXMpOwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50Ojppbm5lckhpZ2hsaWdo
dFF1YWQoc3RkOjp1bmlxdWVfcHRyPEZsb2F0UXVhZD4gcXVhZCwgY29uc3QgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4qIGNvbG9yLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0Piogb3V0bGlu
ZUNvbG9yLCBjb25zdCBib29sKiB1c2VQYWdlQ29vcmRpbmF0ZXMpCit2b2lkIEluc3BlY3RvckRP
TUFnZW50Ojppbm5lckhpZ2hsaWdodFF1YWQoc3RkOjp1bmlxdWVfcHRyPEZsb2F0UXVhZD4gcXVh
ZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4qIGNv
bG9yLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0Piog
b3V0bGluZUNvbG9yLCBjb25zdCBib29sKiB1c2VQYWdlQ29vcmRpbmF0ZXMpCiB7CiAgICAgYXV0
byBoaWdobGlnaHRDb25maWcgPSBzdGQ6Om1ha2VfdW5pcXVlPEhpZ2hsaWdodENvbmZpZz4oKTsK
ICAgICBoaWdobGlnaHRDb25maWctPmNvbnRlbnQgPSBwYXJzZUNvbG9yKCpjb2xvcik7CkBAIC0x
MDgxLDcgKzEwODEsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50Ojppbm5lckhpZ2hsaWdodFF1
YWQoc3RkOjp1bmlxdWVfcHRyPEZsb2F0UXVhZD4gcXVhZCwgY29ucwogICAgIG1fb3ZlcmxheS0+
aGlnaGxpZ2h0UXVhZChXVEY6Om1vdmUocXVhZCksICpoaWdobGlnaHRDb25maWcpOwogfQogCi12
b2lkIEluc3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHROb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIGhpZ2hsaWdodEluc3BlY3Rvck9i
amVjdCwgY29uc3QgaW50KiBub2RlSWQsIGNvbnN0IFN0cmluZyogb2JqZWN0SWQpCit2b2lkIElu
c3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHROb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
Y29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4mIGhpZ2hs
aWdodFVuY2hlY2tlZE9iamVjdCwgY29uc3QgaW50KiBub2RlSWQsIGNvbnN0IFN0cmluZyogb2Jq
ZWN0SWQpCiB7CiAgICAgTm9kZSogbm9kZSA9IDA7CiAgICAgaWYgKG5vZGVJZCkgewpAQCAtMTA5
NiwxNCArMTA5NiwxNCBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHROb2RlKEVy
cm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgUmVmUHRyPElucwogICAgIGlmICghbm9kZSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPEhpZ2hsaWdodENvbmZpZz4g
aGlnaGxpZ2h0Q29uZmlnID0gaGlnaGxpZ2h0Q29uZmlnRnJvbUluc3BlY3Rvck9iamVjdChlcnJv
clN0cmluZywgaGlnaGxpZ2h0SW5zcGVjdG9yT2JqZWN0LmdldCgpKTsKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8SGlnaGxpZ2h0Q29uZmlnPiBoaWdobGlnaHRDb25maWcgPSBoaWdobGlnaHRDb25maWdG
cm9tVW5jaGVja2VkT2JqZWN0KGVycm9yU3RyaW5nLCBoaWdobGlnaHRVbmNoZWNrZWRPYmplY3Qu
Z2V0KCkpOwogICAgIGlmICghaGlnaGxpZ2h0Q29uZmlnKQogICAgICAgICByZXR1cm47CiAKICAg
ICBtX292ZXJsYXktPmhpZ2hsaWdodE5vZGUobm9kZSwgKmhpZ2hsaWdodENvbmZpZyk7CiB9CiAK
LXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdodEZyYW1lKEVycm9yU3RyaW5nJiwgY29u
c3QgU3RyaW5nJiBmcmFtZUlkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiogY29sb3Is
IGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiBvdXRsaW5lQ29sb3IpCit2b2lkIEluc3Bl
Y3RvckRPTUFnZW50OjpoaWdobGlnaHRGcmFtZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYg
ZnJhbWVJZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVj
dD4qIGNvbG9yLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2Jq
ZWN0Piogb3V0bGluZUNvbG9yKQogewogICAgIEZyYW1lKiBmcmFtZSA9IG1fcGFnZUFnZW50LT5m
cmFtZUZvcklkKGZyYW1lSWQpOwogICAgIGlmIChmcmFtZSAmJiBmcmFtZS0+b3duZXJFbGVtZW50
KCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01B
Z2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmgKaW5k
ZXggMzFjOWNlNzJhMjhjZTQ2OWYxNTVmYWQ3YTZhZDRkMWM5MWU1NDkyYy4uNWU5M2JiZTQ1NDg2
NWQ2NWUxNDExMTM5OTZhYzQwYTA0NmY1MDQzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckRPTUFnZW50LmgKQEAgLTM3LDcgKzM3LDcgQEAKICNpbmNsdWRlICJJbnNw
ZWN0b3JXZWJGcm9udGVuZERpc3BhdGNoZXJzLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIK
ICNpbmNsdWRlICJUaW1lci5oIgotI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMu
aD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgogI2luY2x1
ZGUgPHd0Zi9EZXF1ZS5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3Rm
L0hhc2hTZXQuaD4KQEAgLTEzMiwyMSArMTMyLDIxIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZv
aWQgc2V0Tm9kZVZhbHVlKEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCwgY29uc3QgU3RyaW5nJiB2
YWx1ZSkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGdldEV2ZW50TGlzdGVuZXJzRm9yTm9k
ZShFcnJvclN0cmluZyYsIGludCBub2RlSWQsIGNvbnN0IFdURjo6U3RyaW5nKiBvYmplY3RHcm91
cCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRPTTo6RXZlbnRMaXN0ZW5lcj4+JiBsaXN0ZW5lcnNBcnJheSkgb3ZlcnJpZGU7CiAgICAgdmly
dHVhbCB2b2lkIGdldEFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzRm9yTm9kZShFcnJvclN0cmluZyYs
IGludCBub2RlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxp
dHlQcm9wZXJ0aWVzPiYgYXhQcm9wZXJ0aWVzKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQg
cGVyZm9ybVNlYXJjaChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgd2hpdGVzcGFjZVRyaW1t
ZWRRdWVyeSwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+KiBub2RlSWRz
LCBTdHJpbmcqIHNlYXJjaElkLCBpbnQqIHJlc3VsdENvdW50KSBvdmVycmlkZTsKKyAgICB2aXJ0
dWFsIHZvaWQgcGVyZm9ybVNlYXJjaChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgd2hpdGVz
cGFjZVRyaW1tZWRRdWVyeSwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hl
Y2tlZEFycmF5Piogbm9kZUlkcywgU3RyaW5nKiBzZWFyY2hJZCwgaW50KiByZXN1bHRDb3VudCkg
b3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGdldFNlYXJjaFJlc3VsdHMoRXJyb3JTdHJpbmcm
LCBjb25zdCBTdHJpbmcmIHNlYXJjaElkLCBpbnQgZnJvbUluZGV4LCBpbnQgdG9JbmRleCwgUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PGludD4+Jikgb3ZlcnJpZGU7CiAgICAgdmly
dHVhbCB2b2lkIGRpc2NhcmRTZWFyY2hSZXN1bHRzKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5n
JiBzZWFyY2hJZCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHJlc29sdmVOb2RlKEVycm9y
U3RyaW5nJiwgaW50IG5vZGVJZCwgY29uc3QgU3RyaW5nKiBvYmplY3RHcm91cCwgUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCkgb3ZlcnJp
ZGU7CiAgICAgdmlydHVhbCB2b2lkIGdldEF0dHJpYnV0ZXMoRXJyb3JTdHJpbmcmLCBpbnQgbm9k
ZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4mIHJlc3VsdCkg
b3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHNldEluc3BlY3RNb2RlRW5hYmxlZChFcnJvclN0
cmluZyYsIGJvb2wgZW5hYmxlZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2Jq
ZWN0PiogaGlnaGxpZ2h0Q29uZmlnKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0SW5z
cGVjdE1vZGVFbmFibGVkKEVycm9yU3RyaW5nJiwgYm9vbCBlbmFibGVkLCBjb25zdCBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiogaGlnaGxpZ2h0Q29uZmlnKSBv
dmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdE5vZGUoRXJyb3JTdHJpbmcmLCBjb25z
dCBTdHJpbmcmIG9iamVjdElkLCBpbnQqIG5vZGVJZCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2
b2lkIHB1c2hOb2RlQnlQYXRoVG9Gcm9udGVuZChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYg
cGF0aCwgaW50KiBub2RlSWQpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBwdXNoTm9kZUJ5
QmFja2VuZElkVG9Gcm9udGVuZChFcnJvclN0cmluZyYsIEJhY2tlbmROb2RlSWQsIGludCogbm9k
ZUlkKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZUJhY2tlbmROb2RlSWRzKEVy
cm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBub2RlR3JvdXApIG92ZXJyaWRlOwogICAgIHZpcnR1
YWwgdm9pZCBoaWRlSGlnaGxpZ2h0KEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdmlydHVh
bCB2b2lkIGhpZ2hsaWdodFJlY3QoRXJyb3JTdHJpbmcmLCBpbnQgeCwgaW50IHksIGludCB3aWR0
aCwgaW50IGhlaWdodCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0Piog
Y29sb3IsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4qIG91dGxpbmVD
b2xvciwgY29uc3QgYm9vbCogdXNlUGFnZUNvb3JkaW5hdGVzKSBvdmVycmlkZTsKLSAgICB2aXJ0
dWFsIHZvaWQgaGlnaGxpZ2h0UXVhZChFcnJvclN0cmluZyYsIGNvbnN0IFJlZlB0cjxJbnNwZWN0
b3I6Okluc3BlY3RvckFycmF5PiYgcXVhZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVj
dG9yT2JqZWN0PiogY29sb3IsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVj
dD4qIG91dGxpbmVDb2xvciwgY29uc3QgYm9vbCogdXNlUGFnZUNvb3JkaW5hdGVzKSBvdmVycmlk
ZTsKLSAgICB2aXJ0dWFsIHZvaWQgaGlnaGxpZ2h0Tm9kZShFcnJvclN0cmluZyYsIGNvbnN0IFJl
ZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mIGhpZ2hsaWdodENvbmZpZywgY29uc3Qg
aW50KiBub2RlSWQsIGNvbnN0IFN0cmluZyogb2JqZWN0SWQpIG92ZXJyaWRlOwotICAgIHZpcnR1
YWwgdm9pZCBoaWdobGlnaHRGcmFtZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgZnJhbWVJ
ZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiogY29sb3IsIGNvbnN0
IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4qIG91dGxpbmVDb2xvcikgb3ZlcnJp
ZGU7CisgICAgdmlydHVhbCB2b2lkIGhpZ2hsaWdodFJlY3QoRXJyb3JTdHJpbmcmLCBpbnQgeCwg
aW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlVuY2hlY2tlZE9iamVjdD4qIGNvbG9yLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6VW5jaGVja2VkT2JqZWN0Piogb3V0bGluZUNvbG9yLCBjb25zdCBib29sKiB1c2VQ
YWdlQ29vcmRpbmF0ZXMpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBoaWdobGlnaHRRdWFk
KEVycm9yU3RyaW5nJiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tl
ZEFycmF5PiYgcXVhZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tl
ZE9iamVjdD4qIGNvbG9yLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVj
a2VkT2JqZWN0Piogb3V0bGluZUNvbG9yLCBjb25zdCBib29sKiB1c2VQYWdlQ29vcmRpbmF0ZXMp
IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBoaWdobGlnaHROb2RlKEVycm9yU3RyaW5nJiwg
Y29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4mIGhpZ2hs
aWdodENvbmZpZywgY29uc3QgaW50KiBub2RlSWQsIGNvbnN0IFN0cmluZyogb2JqZWN0SWQpIG92
ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBoaWdobGlnaHRGcmFtZShFcnJvclN0cmluZyYsIGNv
bnN0IFN0cmluZyYgZnJhbWVJZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVu
Y2hlY2tlZE9iamVjdD4qIGNvbG9yLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
VW5jaGVja2VkT2JqZWN0Piogb3V0bGluZUNvbG9yKSBvdmVycmlkZTsKIAogICAgIHZpcnR1YWwg
dm9pZCBtb3ZlVG8oRXJyb3JTdHJpbmcmLCBpbnQgbm9kZUlkLCBpbnQgdGFyZ2V0Tm9kZUlkLCBj
b25zdCBpbnQqIGFuY2hvck5vZGVJZCwgaW50KiBuZXdOb2RlSWQpIG92ZXJyaWRlOwogICAgIHZp
cnR1YWwgdm9pZCB1bmRvKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7CkBAIC0yMTIsOCArMjEyLDgg
QEAgcHVibGljOgogICAgIEluc3BlY3RvclBhZ2VBZ2VudCogcGFnZUFnZW50KCkgeyByZXR1cm4g
bV9wYWdlQWdlbnQ7IH0KIAogcHJpdmF0ZToKLSAgICB2b2lkIHNldFNlYXJjaGluZ0Zvck5vZGUo
RXJyb3JTdHJpbmcmLCBib29sIGVuYWJsZWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0KiBo
aWdobGlnaHRDb25maWcpOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxIaWdobGlnaHRDb25maWc+IGhp
Z2hsaWdodENvbmZpZ0Zyb21JbnNwZWN0b3JPYmplY3QoRXJyb3JTdHJpbmcmLCBJbnNwZWN0b3I6
Okluc3BlY3Rvck9iamVjdCogaGlnaGxpZ2h0SW5zcGVjdG9yT2JqZWN0KTsKKyAgICB2b2lkIHNl
dFNlYXJjaGluZ0Zvck5vZGUoRXJyb3JTdHJpbmcmLCBib29sIGVuYWJsZWQsIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdCogaGlnaGxpZ2h0Q29uZmlnKTsKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8SGlnaGxpZ2h0Q29uZmlnPiBoaWdobGlnaHRDb25maWdGcm9tVW5jaGVja2VkT2Jq
ZWN0KEVycm9yU3RyaW5nJiwgSW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0KiBo
aWdobGlnaHRVbmNoZWNrZWRPYmplY3QpOwogCiAgICAgLy8gTm9kZS1yZWxhdGVkIG1ldGhvZHMu
CiAgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxOb2RlPiwgaW50PiBOb2RlVG9JZE1hcDsKQEAg
LTIyOCw3ICsyMjgsNyBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBoYXNCcmVha3BvaW50KE5vZGUq
LCBpbnQgdHlwZSk7CiAgICAgdm9pZCB1cGRhdGVTdWJ0cmVlQnJlYWtwb2ludHMoTm9kZSogcm9v
dCwgdWludDMyX3Qgcm9vdE1hc2ssIGJvb2wgdmFsdWUpOwotICAgIHZvaWQgZGVzY3JpcHRpb25G
b3JET01FdmVudChOb2RlKiB0YXJnZXQsIGludCBicmVha3BvaW50VHlwZSwgYm9vbCBpbnNlcnRp
b24sIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGRlc2NyaXB0aW9uKTsK
KyAgICB2b2lkIGRlc2NyaXB0aW9uRm9yRE9NRXZlbnQoTm9kZSogdGFyZ2V0LCBpbnQgYnJlYWtw
b2ludFR5cGUsIGJvb2wgaW5zZXJ0aW9uLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlVuY2hlY2tlZE9iamVjdD4gZGVzY3JpcHRpb24pOwogCiAgICAgUGFzc1JlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpET006Ok5vZGU+IGJ1aWxkT2JqZWN0Rm9yTm9kZShOb2RlKiwgaW50IGRl
cHRoLCBOb2RlVG9JZE1hcCopOwogICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
QXJyYXk8U3RyaW5nPj4gYnVpbGRBcnJheUZvckVsZW1lbnRBdHRyaWJ1dGVzKEVsZW1lbnQqKTsK
QEAgLTI0Miw3ICsyNDIsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBkaXNjYXJkQmluZGluZ3Mo
KTsKIAotICAgIHZvaWQgaW5uZXJIaWdobGlnaHRRdWFkKHN0ZDo6dW5pcXVlX3B0cjxGbG9hdFF1
YWQ+LCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+KiBjb2xvciwgY29u
c3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0Piogb3V0bGluZUNvbG9yLCBjb25z
dCBib29sKiB1c2VQYWdlQ29vcmRpbmF0ZXMpOworICAgIHZvaWQgaW5uZXJIaWdobGlnaHRRdWFk
KHN0ZDo6dW5pcXVlX3B0cjxGbG9hdFF1YWQ+LCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6VW5jaGVja2VkT2JqZWN0PiogY29sb3IsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+KiBvdXRsaW5lQ29sb3IsIGNvbnN0IGJvb2wqIHVzZVBh
Z2VDb29yZGluYXRlcyk7CiAKICAgICBJbnNwZWN0b3JQYWdlQWdlbnQqIG1fcGFnZUFnZW50Owog
ICAgIEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBtX2luamVjdGVkU2NyaXB0TWFu
YWdlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01E
ZWJ1Z2dlckFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01E
ZWJ1Z2dlckFnZW50LmNwcAppbmRleCAyZjJlNjY0NDJhODc1YTkwOTdmYWVkZTU0NDA1MzNhMzQ0
ZjE1NTVjLi5mNzJmZjIwMjJmOTUxMTEzZmNjMzA3MzM1ZTk4NmMzNjkwYjc4ZTRkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTURlYnVnZ2VyQWdl
bnQuY3BwCkBAIC0zOCw3ICszOCw3IEBACiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yV2ViRnJvbnRlbmREaXNwYXRjaGVycy5oIgogI2lu
Y2x1ZGUgIkluc3RydW1lbnRpbmdBZ2VudHMuaCIKLSNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVj
dG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclByb3RvY29sVHlwZXMu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIHsKQEAgLTE3
MSw3ICsxNzEsNyBAQCB2b2lkIEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OnJlbW92ZUJyZWFr
cG9pbnQoRXJyb3JTdHJpbmcmIGVycm9yLCBjb25zdCBTdHJpbgogdm9pZCBJbnNwZWN0b3JET01E
ZWJ1Z2dlckFnZW50OjpkaWRJbnZhbGlkYXRlU3R5bGVBdHRyKE5vZGUqIG5vZGUpCiB7CiAgICAg
aWYgKGhhc0JyZWFrcG9pbnQobm9kZSwgQXR0cmlidXRlTW9kaWZpZWQpKSB7Ci0gICAgICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGV2ZW50RGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+
IGV2ZW50RGF0YSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdDo6Y3JlYXRl
KCk7CiAgICAgICAgIGRlc2NyaXB0aW9uRm9yRE9NRXZlbnQobm9kZSwgQXR0cmlidXRlTW9kaWZp
ZWQsIGZhbHNlLCBldmVudERhdGEuZ2V0KCkpOwogICAgICAgICBtX2RlYnVnZ2VyQWdlbnQtPmJy
ZWFrUHJvZ3JhbShJbnNwZWN0b3JEZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVhc29uOjpE
T00sIGV2ZW50RGF0YS5yZWxlYXNlKCkpOwogICAgIH0KQEAgLTI3MSw3ICsyNzEsNyBAQCB2b2lk
IEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OnJlbW92ZURPTUJyZWFrcG9pbnQoRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBpbgogdm9pZCBJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50Ojp3aWxs
SW5zZXJ0RE9NTm9kZShOb2RlKiBwYXJlbnQpCiB7CiAgICAgaWYgKGhhc0JyZWFrcG9pbnQocGFy
ZW50LCBTdWJ0cmVlTW9kaWZpZWQpKSB7Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IGV2ZW50RGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIFJlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IGV2ZW50RGF0YSA9IEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgIGRlc2NyaXB0
aW9uRm9yRE9NRXZlbnQocGFyZW50LCBTdWJ0cmVlTW9kaWZpZWQsIHRydWUsIGV2ZW50RGF0YS5n
ZXQoKSk7CiAgICAgICAgIG1fZGVidWdnZXJBZ2VudC0+YnJlYWtQcm9ncmFtKEluc3BlY3RvckRl
YnVnZ2VyRnJvbnRlbmREaXNwYXRjaGVyOjpSZWFzb246OkRPTSwgZXZlbnREYXRhLnJlbGVhc2Uo
KSk7CiAgICAgfQpAQCAtMjgxLDExICsyODEsMTEgQEAgdm9pZCBJbnNwZWN0b3JET01EZWJ1Z2dl
ckFnZW50Ojp3aWxsUmVtb3ZlRE9NTm9kZShOb2RlKiBub2RlKQogewogICAgIE5vZGUqIHBhcmVu
dE5vZGUgPSBJbnNwZWN0b3JET01BZ2VudDo6aW5uZXJQYXJlbnROb2RlKG5vZGUpOwogICAgIGlm
IChoYXNCcmVha3BvaW50KG5vZGUsIE5vZGVSZW1vdmVkKSkgewotICAgICAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBldmVudERhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAg
ICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBldmVudERh
dGEgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q6OmNyZWF0ZSgpOwogICAg
ICAgICBkZXNjcmlwdGlvbkZvckRPTUV2ZW50KG5vZGUsIE5vZGVSZW1vdmVkLCBmYWxzZSwgZXZl
bnREYXRhLmdldCgpKTsKICAgICAgICAgbV9kZWJ1Z2dlckFnZW50LT5icmVha1Byb2dyYW0oSW5z
cGVjdG9yRGVidWdnZXJGcm9udGVuZERpc3BhdGNoZXI6OlJlYXNvbjo6RE9NLCBldmVudERhdGEu
cmVsZWFzZSgpKTsKICAgICB9IGVsc2UgaWYgKHBhcmVudE5vZGUgJiYgaGFzQnJlYWtwb2ludChw
YXJlbnROb2RlLCBTdWJ0cmVlTW9kaWZpZWQpKSB7Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IGV2ZW50RGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IGV2ZW50RGF0YSA9IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgIGRl
c2NyaXB0aW9uRm9yRE9NRXZlbnQobm9kZSwgU3VidHJlZU1vZGlmaWVkLCBmYWxzZSwgZXZlbnRE
YXRhLmdldCgpKTsKICAgICAgICAgbV9kZWJ1Z2dlckFnZW50LT5icmVha1Byb2dyYW0oSW5zcGVj
dG9yRGVidWdnZXJGcm9udGVuZERpc3BhdGNoZXI6OlJlYXNvbjo6RE9NLCBldmVudERhdGEucmVs
ZWFzZSgpKTsKICAgICB9CkBAIC0yOTQsMTMgKzI5NCwxMyBAQCB2b2lkIEluc3BlY3RvckRPTURl
YnVnZ2VyQWdlbnQ6OndpbGxSZW1vdmVET01Ob2RlKE5vZGUqIG5vZGUpCiB2b2lkIEluc3BlY3Rv
ckRPTURlYnVnZ2VyQWdlbnQ6OndpbGxNb2RpZnlET01BdHRyKEVsZW1lbnQqIGVsZW1lbnQpCiB7
CiAgICAgaWYgKGhhc0JyZWFrcG9pbnQoZWxlbWVudCwgQXR0cmlidXRlTW9kaWZpZWQpKSB7Ci0g
ICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGV2ZW50RGF0YSA9IEluc3BlY3Rvck9iamVj
dDo6Y3JlYXRlKCk7CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNr
ZWRPYmplY3Q+IGV2ZW50RGF0YSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVj
dDo6Y3JlYXRlKCk7CiAgICAgICAgIGRlc2NyaXB0aW9uRm9yRE9NRXZlbnQoZWxlbWVudCwgQXR0
cmlidXRlTW9kaWZpZWQsIGZhbHNlLCBldmVudERhdGEuZ2V0KCkpOwogICAgICAgICBtX2RlYnVn
Z2VyQWdlbnQtPmJyZWFrUHJvZ3JhbShJbnNwZWN0b3JEZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hl
cjo6UmVhc29uOjpET00sIGV2ZW50RGF0YS5yZWxlYXNlKCkpOwogICAgIH0KIH0KIAotdm9pZCBJ
bnNwZWN0b3JET01EZWJ1Z2dlckFnZW50OjpkZXNjcmlwdGlvbkZvckRPTUV2ZW50KE5vZGUqIHRh
cmdldCwgaW50IGJyZWFrcG9pbnRUeXBlLCBib29sIGluc2VydGlvbiwgSW5zcGVjdG9yT2JqZWN0
KiBkZXNjcmlwdGlvbikKK3ZvaWQgSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6ZGVzY3JpcHRp
b25Gb3JET01FdmVudChOb2RlKiB0YXJnZXQsIGludCBicmVha3BvaW50VHlwZSwgYm9vbCBpbnNl
cnRpb24sIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdCogZGVzY3JpcHRpb24p
CiB7CiAgICAgQVNTRVJUKGhhc0JyZWFrcG9pbnQodGFyZ2V0LCBicmVha3BvaW50VHlwZSkpOwog
CkBAIC0zNjcsNyArMzY3LDcgQEAgdm9pZCBJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50OjpwYXVz
ZU9uTmF0aXZlRXZlbnRJZk5lZWRlZChib29sIGlzRE9NRXZlbnQsIGNvbnMKICAgICAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBldmVudERhdGEg
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpVbmNoZWNrZWRPYmplY3Q+IGV2ZW50RGF0YSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVu
Y2hlY2tlZE9iamVjdDo6Y3JlYXRlKCk7CiAgICAgZXZlbnREYXRhLT5zZXRTdHJpbmcoImV2ZW50
TmFtZSIsIGZ1bGxFdmVudE5hbWUpOwogICAgIGlmIChzeW5jaHJvbm91cykKICAgICAgICAgbV9k
ZWJ1Z2dlckFnZW50LT5icmVha1Byb2dyYW0oSW5zcGVjdG9yRGVidWdnZXJGcm9udGVuZERpc3Bh
dGNoZXI6OlJlYXNvbjo6RXZlbnRMaXN0ZW5lciwgZXZlbnREYXRhLnJlbGVhc2UoKSk7CkBAIC00
MTIsNyArNDEyLDcgQEAgdm9pZCBJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50Ojp3aWxsU2VuZFhN
TEh0dHBSZXF1ZXN0KGNvbnN0IFN0cmluZyYgdXJsKQogICAgIGlmIChicmVha3BvaW50VVJMLmlz
TnVsbCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBl
dmVudERhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IGV2ZW50RGF0YSA9IEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlVuY2hlY2tlZE9iamVjdDo6Y3JlYXRlKCk7CiAgICAgZXZlbnREYXRhLT5zZXRTdHJp
bmcoImJyZWFrcG9pbnRVUkwiLCBicmVha3BvaW50VVJMKTsKICAgICBldmVudERhdGEtPnNldFN0
cmluZygidXJsIiwgdXJsKTsKICAgICBtX2RlYnVnZ2VyQWdlbnQtPmJyZWFrUHJvZ3JhbShJbnNw
ZWN0b3JEZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVhc29uOjpYSFIsIGV2ZW50RGF0YS5y
ZWxlYXNlKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckRPTURlYnVnZ2VyQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JE
T01EZWJ1Z2dlckFnZW50LmgKaW5kZXggNzlhODFiMTU5YzBiNjRmMDYxNjFkMzJlZDk4ZjhjZTU4
ZTI1YjhkMi4uZjA3YWNkYzBiYWJiZjE5ZWFjNzk3OGRjMzc4YzRlYTAxODc5ZDU4NyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2Vu
dC5oCkBAIC00MSw3ICs0MSw3IEBACiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAK
IG5hbWVzcGFjZSBJbnNwZWN0b3IgewotY2xhc3MgSW5zcGVjdG9yT2JqZWN0OworY2xhc3MgVW5j
aGVja2VkT2JqZWN0OwogfQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC05Miw3ICs5Miw3IEBA
IHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIGRpZFBhdXNlKCkgb3ZlcnJpZGU7CiAgICAgdm9p
ZCBkaXNhYmxlKCk7CiAKLSAgICB2b2lkIGRlc2NyaXB0aW9uRm9yRE9NRXZlbnQoTm9kZSogdGFy
Z2V0LCBpbnQgYnJlYWtwb2ludFR5cGUsIGJvb2wgaW5zZXJ0aW9uLCBJbnNwZWN0b3I6Okluc3Bl
Y3Rvck9iamVjdCogZGVzY3JpcHRpb24pOworICAgIHZvaWQgZGVzY3JpcHRpb25Gb3JET01FdmVu
dChOb2RlKiB0YXJnZXQsIGludCBicmVha3BvaW50VHlwZSwgYm9vbCBpbnNlcnRpb24sIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdCogZGVzY3JpcHRpb24pOwogICAgIHZvaWQg
dXBkYXRlU3VidHJlZUJyZWFrcG9pbnRzKE5vZGUqLCB1aW50MzJfdCByb290TWFzaywgYm9vbCBz
ZXQpOwogICAgIGJvb2wgaGFzQnJlYWtwb2ludChOb2RlKiwgaW50IHR5cGUpOwogICAgIHZvaWQg
ZGlzY2FyZEJpbmRpbmdzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JET01TdG9yYWdlQWdlbnQuY3BwCmluZGV4IGZmOTRlYzhkNzg3OTI2YzA4NjQxMTRj
NDQ3OWEyOTcyYmUwYWY3YmQuLmVjODgzYjQxMmEyZWQ2ZGM3MDBhOTJiODVmYTUxMTA4Mzc2YWVi
NGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01TdG9y
YWdlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01T
dG9yYWdlQWdlbnQuY3BwCkBAIC00OSw3ICs0OSw3IEBACiAjaW5jbHVkZSAiU3RvcmFnZUFyZWEu
aCIKICNpbmNsdWRlICJTdG9yYWdlTmFtZXNwYWNlLmgiCiAjaW5jbHVkZSAiVm9pZENhbGxiYWNr
LmgiCi0jaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPGlu
c3BlY3Rvci9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgogCiB1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwpAQCAtOTUsNyArOTUsNyBAQCB2b2lkIElu
c3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyYpCiAgICAgbV9lbmFi
bGVkID0gZmFsc2U7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpnZXRET01T
dG9yYWdlSXRlbXMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiYgc3RvcmFnZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4+JiBpdGVtcykKK3ZvaWQgSW5zcGVj
dG9yRE9NU3RvcmFnZUFnZW50OjpnZXRET01TdG9yYWdlSXRlbXMoRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0
PiYgc3RvcmFnZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9y
OjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4+JiBpdGVtcykKIHsKICAgICBGcmFtZSogZnJhbWU7
CiAgICAgUmVmUHRyPFN0b3JhZ2VBcmVhPiBzdG9yYWdlQXJlYSA9IGZpbmRTdG9yYWdlQXJlYShl
cnJvclN0cmluZywgc3RvcmFnZUlkLCBmcmFtZSk7CkBAIC0xMTksNyArMTE5LDcgQEAgdm9pZCBJ
bnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OmdldERPTVN0b3JhZ2VJdGVtcyhFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIGNvbnMKICAgICBpdGVtcyA9IHN0b3JhZ2VJdGVtcy5yZWxlYXNlKCk7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpzZXRET01TdG9yYWdlSXRlbShFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBzdG9y
YWdlSWQsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlKQordm9pZCBJbnNw
ZWN0b3JET01TdG9yYWdlQWdlbnQ6OnNldERPTVN0b3JhZ2VJdGVtKEVycm9yU3RyaW5nJiBlcnJv
clN0cmluZywgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVj
dD4mIHN0b3JhZ2VJZCwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7
CiAgICAgRnJhbWUqIGZyYW1lOwogICAgIFJlZlB0cjxTdG9yYWdlQXJlYT4gc3RvcmFnZUFyZWEg
PSBmaW5kU3RvcmFnZUFyZWEoZXJyb3JTdHJpbmcsIHN0b3JhZ2VJZCwgZnJhbWUpOwpAQCAtMTM0
LDcgKzEzNCw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpzZXRET01TdG9yYWdl
SXRlbShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0CiAgICAgICAgIGVycm9yU3RyaW5n
ID0gRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uKFFVT1RBX0VYQ0VFREVEX0VSUikubmFtZTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OnJlbW92ZURPTVN0b3JhZ2VJdGVtKEVy
cm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIHN0
b3JhZ2VJZCwgY29uc3QgU3RyaW5nJiBrZXkpCit2b2lkIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2Vu
dDo6cmVtb3ZlRE9NU3RvcmFnZUl0ZW0oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiYgc3RvcmFnZUlkLCBj
b25zdCBTdHJpbmcmIGtleSkKIHsKICAgICBGcmFtZSogZnJhbWU7CiAgICAgUmVmUHRyPFN0b3Jh
Z2VBcmVhPiBzdG9yYWdlQXJlYSA9IGZpbmRTdG9yYWdlQXJlYShlcnJvclN0cmluZywgc3RvcmFn
ZUlkLCBmcmFtZSk7CkBAIC0xODIsNyArMTgyLDcgQEAgdm9pZCBJbnNwZWN0b3JET01TdG9yYWdl
QWdlbnQ6OmRpZERpc3BhdGNoRE9NU3RvcmFnZUV2ZW50KGNvbnN0IFN0cmluZyYga2V5LCBjb24K
ICAgICAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmRvbVN0b3JhZ2VJdGVtVXBkYXRlZChpZCwg
a2V5LCBvbGRWYWx1ZSwgbmV3VmFsdWUpOwogfQogCi1QYXNzUmVmUHRyPFN0b3JhZ2VBcmVhPiBJ
bnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OmZpbmRTdG9yYWdlQXJlYShFcnJvclN0cmluZyYgZXJy
b3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBzdG9yYWdlSWQsIEZyYW1l
KiYgdGFyZ2V0RnJhbWUpCitQYXNzUmVmUHRyPFN0b3JhZ2VBcmVhPiBJbnNwZWN0b3JET01TdG9y
YWdlQWdlbnQ6OmZpbmRTdG9yYWdlQXJlYShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+JiBzdG9yYWdlSWQs
IEZyYW1lKiYgdGFyZ2V0RnJhbWUpCiB7CiAgICAgU3RyaW5nIHNlY3VyaXR5T3JpZ2luOwogICAg
IGJvb2wgaXNMb2NhbFN0b3JhZ2UgPSBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuaAppbmRleCBiZmZmYTIyMWRlNDQxNWZj
MTNlMDk3NzVhMTczODQwMWUwMTEzOWZjLi5jYTE1NTMwMGY5OWU1M2QxYmJmMWEyNDEzNDE1Mzk4
ZGNjZDljNTUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
RE9NU3RvcmFnZUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckRPTVN0b3JhZ2VBZ2VudC5oCkBAIC0zNiw3ICszNiw3IEBACiAjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewotY2xhc3MgSW5zcGVjdG9yQXJy
YXk7CitjbGFzcyBVbmNoZWNrZWRBcnJheTsKIGNsYXNzIEluc3BlY3RvckRPTVN0b3JhZ2VGcm9u
dGVuZERpc3BhdGNoZXI7CiB9CiAKQEAgLTYzLDkgKzYzLDkgQEAgcHVibGljOgogICAgIC8vIENh
bGxlZCBmcm9tIHRoZSBmcm9udC1lbmQuCiAgICAgdmlydHVhbCB2b2lkIGVuYWJsZShFcnJvclN0
cmluZyYpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBkaXNhYmxlKEVycm9yU3RyaW5nJikg
b3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGdldERPTVN0b3JhZ2VJdGVtcyhFcnJvclN0cmlu
ZyYsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mIHN0b3JhZ2VJZCwg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFy
cmF5PFN0cmluZz4+PiYgaXRlbXMpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBzZXRET01T
dG9yYWdlSXRlbShFcnJvclN0cmluZyYsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rv
ck9iamVjdD4mIHN0b3JhZ2VJZCwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFs
dWUpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVET01TdG9yYWdlSXRlbShFcnJv
clN0cmluZyYsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mIHN0b3Jh
Z2VJZCwgY29uc3QgU3RyaW5nJiBrZXkpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBnZXRE
T01TdG9yYWdlSXRlbXMoRXJyb3JTdHJpbmcmLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6VW5jaGVja2VkT2JqZWN0PiYgc3RvcmFnZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4+JiBpdGVtcykg
b3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHNldERPTVN0b3JhZ2VJdGVtKEVycm9yU3RyaW5n
JiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4mIHN0
b3JhZ2VJZCwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpIG92ZXJyaWRl
OworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVET01TdG9yYWdlSXRlbShFcnJvclN0cmluZyYsIGNv
bnN0IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+JiBzdG9yYWdl
SWQsIGNvbnN0IFN0cmluZyYga2V5KSBvdmVycmlkZTsKIAogICAgIC8vIENhbGxlZCBmcm9tIHRo
ZSBpbmplY3RlZCBzY3JpcHQuCiAgICAgU3RyaW5nIHN0b3JhZ2VJZChTdG9yYWdlKik7CkBAIC03
NSw3ICs3NSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGRpZERpc3BhdGNoRE9NU3RvcmFnZUV2ZW50
KGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBTdHJpbmcm
IG5ld1ZhbHVlLCBTdG9yYWdlVHlwZSwgU2VjdXJpdHlPcmlnaW4qLCBQYWdlKik7CiAKIHByaXZh
dGU6Ci0gICAgUGFzc1JlZlB0cjxTdG9yYWdlQXJlYT4gZmluZFN0b3JhZ2VBcmVhKEVycm9yU3Ry
aW5nJiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYsIEZyYW1lKiYp
OworICAgIFBhc3NSZWZQdHI8U3RvcmFnZUFyZWE+IGZpbmRTdG9yYWdlQXJlYShFcnJvclN0cmlu
ZyYsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+Jiwg
RnJhbWUqJik7CiAKICAgICBJbnNwZWN0b3JQYWdlQWdlbnQqIG1fcGFnZUFnZW50OwogICAgIHN0
ZDo6dW5pcXVlX3B0cjxJbnNwZWN0b3I6Okluc3BlY3RvckRPTVN0b3JhZ2VGcm9udGVuZERpc3Bh
dGNoZXI+IG1fZnJvbnRlbmREaXNwYXRjaGVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuY3BwCmluZGV4IDg4OTFlZmM1YTc3NDFkNTEx
YjY1NTViY2YxZGI3NmQ3ZmEyZjM1MWMuLjY4NDIwZTdlNTBmNTMyYWRiZGNhZGIxODliYTM0YmJh
Mzg1ZmU1Y2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JE
YXRhYmFzZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
RGF0YWJhc2VBZ2VudC5jcHAKQEAgLTQ4LDcgKzQ4LDcgQEAKICNpbmNsdWRlICJTUUxUcmFuc2Fj
dGlvbkVycm9yQ2FsbGJhY2suaCIKICNpbmNsdWRlICJTUUxWYWx1ZS5oIgogI2luY2x1ZGUgIlZv
aWRDYWxsYmFjay5oIgotI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNp
bmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgogI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KIAogdHlwZWRlZiBJbnNwZWN0b3I6Okluc3BlY3RvckRhdGFiYXNlQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQ2FsbGJhY2sgRXhlY3V0ZVNRTENhbGxiYWNr
OwpAQCAtODUsMTQgKzg1LDE0IEBAIHB1YmxpYzoKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBjb2x1bW5zLnNpemUoKTsgKytpKQogICAgICAgICAgICAgY29sdW1uTmFtZXMtPmFkZEl0
ZW0oY29sdW1uc1tpXSk7CiAKLSAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFy
cmF5PEluc3BlY3RvclZhbHVlPj4gdmFsdWVzID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8
SW5zcGVjdG9yVmFsdWU+OjpjcmVhdGUoKTsKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZFZhbHVlPj4gdmFsdWVz
ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVj
a2VkVmFsdWU+OjpjcmVhdGUoKTsKICAgICAgICAgY29uc3QgVmVjdG9yPFNRTFZhbHVlPiYgZGF0
YSA9IHJvd0xpc3QtPnZhbHVlcygpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGRh
dGEuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIGNvbnN0IFNRTFZhbHVlJiB2YWx1ZSA9IHJv
d0xpc3QtPnZhbHVlcygpW2ldOwogICAgICAgICAgICAgc3dpdGNoICh2YWx1ZS50eXBlKCkpIHsK
LSAgICAgICAgICAgIGNhc2UgU1FMVmFsdWU6OlN0cmluZ1ZhbHVlOiB2YWx1ZXMtPmFkZEl0ZW0o
SW5zcGVjdG9yU3RyaW5nOjpjcmVhdGUodmFsdWUuc3RyaW5nKCkpKTsgYnJlYWs7Ci0gICAgICAg
ICAgICBjYXNlIFNRTFZhbHVlOjpOdW1iZXJWYWx1ZTogdmFsdWVzLT5hZGRJdGVtKEluc3BlY3Rv
ckJhc2ljVmFsdWU6OmNyZWF0ZSh2YWx1ZS5udW1iZXIoKSkpOyBicmVhazsKLSAgICAgICAgICAg
IGNhc2UgU1FMVmFsdWU6Ok51bGxWYWx1ZTogdmFsdWVzLT5hZGRJdGVtKEluc3BlY3RvclZhbHVl
OjpudWxsKCkpOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgU1FMVmFsdWU6OlN0cmluZ1ZhbHVl
OiB2YWx1ZXMtPmFkZEl0ZW0oSW5zcGVjdG9yOjpQcm90b2NvbDo6U3RyaW5nVmFsdWU6OmNyZWF0
ZSh2YWx1ZS5zdHJpbmcoKSkpOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgU1FMVmFsdWU6Ok51
bWJlclZhbHVlOiB2YWx1ZXMtPmFkZEl0ZW0oSW5zcGVjdG9yOjpQcm90b2NvbDo6UHJpbWl0aXZl
VmFsdWU6OmNyZWF0ZSh2YWx1ZS5udW1iZXIoKSkpOyBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug
U1FMVmFsdWU6Ok51bGxWYWx1ZTogdmFsdWVzLT5hZGRJdGVtKEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlVuY2hlY2tlZFZhbHVlOjpudWxsKCkpOyBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogICAgICAgICBtX3JlcXVlc3RDYWxsYmFjay0+c2VuZFN1Y2Nlc3MoY29sdW1uTmFtZXMucmVs
ZWFzZSgpLCB2YWx1ZXMucmVsZWFzZSgpLCBudWxscHRyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZUFnZW50LmggYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5oCmluZGV4IGRiY2RkY2I4N2I3Mzg1
NGZmMGE5ZGU5ZmZhYTY4ZWU2ZmU0MTdmMTEuLjg2Nzg5NmUxZTFjYzUzM2FlOTk3MTM3YTc2YWE0
ZWIwYTg3YTUyY2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JEYXRhYmFzZUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckRhdGFiYXNlQWdlbnQuaApAQCAtMzgsNyArMzgsNyBAQAogI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKLWNsYXNzIEluc3BlY3RvckFycmF5
OworY2xhc3MgVW5jaGVja2VkQXJyYXk7CiB9CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZVJlc291cmNl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZVJlc291cmNl
LmNwcAppbmRleCBhYTQ5NmZjZTdiNWMyNmM3ZmU5NDg0NjMwNDgwYzE0YjFiNzlkZDFkLi5hMTNh
ZDk3ZmM5MjM0MDBlYWVhZjExMzY0YzU4ZGJhMTcwNWQ2OWU1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuY3BwCkBAIC0z
Niw3ICszNiw3IEBACiAKICNpbmNsdWRlICJEYXRhYmFzZS5oIgogI2luY2x1ZGUgIkluc3BlY3Rv
cldlYkZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKLSNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9y
VmFsdWVzLmg+CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4K
IAogdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckluZGV4ZWREQkFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5jcHAKaW5kZXggYzI3ODNmNzQ3ZTEx
Nzc4MjNkZDg4MjEyZjM3ZGI0MTQ2OTdmNmY1MC4uZTI3OGQ0NjVkYTI1MzI0MTVmZmI5MmE1YjVl
YWQ0NzM3YzE4YzZmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckluZGV4ZWREQkFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9ySW5kZXhlZERCQWdlbnQuY3BwCkBAIC02NCw3ICs2NCw3IEBACiAjaW5jbHVkZSAiU2Vj
dXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuaD4KICNp
bmNsdWRlIDxpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmg+Ci0jaW5jbHVkZSA8aW5z
cGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JQ
cm90b2NvbFR5cGVzLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC0zMjIsNyArMzIyLDcgQEAgcHJpdmF0ZToKICAgICBSZWZQ
dHI8UmVxdWVzdERhdGFiYXNlQ2FsbGJhY2s+IG1fcmVxdWVzdENhbGxiYWNrOwogfTsKIAotc3Rh
dGljIFBhc3NSZWZQdHI8SURCS2V5PiBpZGJLZXlGcm9tSW5zcGVjdG9yT2JqZWN0KEluc3BlY3Rv
ck9iamVjdCoga2V5KQorc3RhdGljIFBhc3NSZWZQdHI8SURCS2V5PiBpZGJLZXlGcm9tVW5jaGVj
a2VkT2JqZWN0KEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdCoga2V5KQogewog
ICAgIFJlZlB0cjxJREJLZXk+IGlkYktleTsKIApAQCAtMzUyLDEzICszNTIsMTMgQEAgc3RhdGlj
IFBhc3NSZWZQdHI8SURCS2V5PiBpZGJLZXlGcm9tSW5zcGVjdG9yT2JqZWN0KEluc3BlY3Rvck9i
amVjdCoga2V5KQogICAgICAgICBpZGJLZXkgPSBJREJLZXk6OmNyZWF0ZURhdGUoZGF0ZSk7CiAg
ICAgfSBlbHNlIGlmICh0eXBlID09IGFycmF5VHlwZSkgewogICAgICAgICBJREJLZXk6OktleUFy
cmF5IGtleUFycmF5OwotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFycmF5ID0ga2V5
LT5nZXRBcnJheSgiYXJyYXkiKTsKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlVuY2hlY2tlZEFycmF5PiBhcnJheSA9IGtleS0+Z2V0QXJyYXkoImFycmF5Iik7CiAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJyYXktPmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAg
ICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUgPSBhcnJheS0+Z2V0KGkpOwotICAgICAg
ICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb2JqZWN0OworICAgICAgICAgICAgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZFZhbHVlPiB2YWx1ZSA9IGFycmF5LT5nZXQo
aSk7CisgICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2Jq
ZWN0PiBvYmplY3Q7CiAgICAgICAgICAgICBpZiAoIXZhbHVlLT5hc09iamVjdChvYmplY3QpKQog
ICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICAgICAga2V5QXJyYXkuYXBw
ZW5kKGlkYktleUZyb21JbnNwZWN0b3JPYmplY3Qob2JqZWN0LmdldCgpKSk7CisgICAgICAgICAg
ICBrZXlBcnJheS5hcHBlbmQoaWRiS2V5RnJvbVVuY2hlY2tlZE9iamVjdChvYmplY3QuZ2V0KCkp
KTsKICAgICAgICAgfQogICAgICAgICBpZGJLZXkgPSBJREJLZXk6OmNyZWF0ZUFycmF5KGtleUFy
cmF5KTsKICAgICB9IGVsc2UKQEAgLTM2NywxNSArMzY3LDE1IEBAIHN0YXRpYyBQYXNzUmVmUHRy
PElEQktleT4gaWRiS2V5RnJvbUluc3BlY3Rvck9iamVjdChJbnNwZWN0b3JPYmplY3QqIGtleSkK
ICAgICByZXR1cm4gaWRiS2V5LnJlbGVhc2UoKTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8SURC
S2V5UmFuZ2U+IGlkYktleVJhbmdlRnJvbUtleVJhbmdlKEluc3BlY3Rvck9iamVjdCoga2V5UmFu
Z2UpCitzdGF0aWMgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gaWRiS2V5UmFuZ2VGcm9tS2V5UmFu
Z2UoSW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0KiBrZXlSYW5nZSkKIHsKLSAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBsb3dlciA9IGtleVJhbmdlLT5nZXRPYmplY3QoImxv
d2VyIik7Ci0gICAgUmVmUHRyPElEQktleT4gaWRiTG93ZXIgPSBsb3dlciA/IGlkYktleUZyb21J
bnNwZWN0b3JPYmplY3QobG93ZXIuZ2V0KCkpIDogbnVsbHB0cjsKKyAgICBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBsb3dlciA9IGtleVJhbmdlLT5nZXRPYmpl
Y3QoImxvd2VyIik7CisgICAgUmVmUHRyPElEQktleT4gaWRiTG93ZXIgPSBsb3dlciA/IGlkYktl
eUZyb21VbmNoZWNrZWRPYmplY3QobG93ZXIuZ2V0KCkpIDogbnVsbHB0cjsKICAgICBpZiAobG93
ZXIgJiYgIWlkYkxvd2VyKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHVwcGVyID0ga2V5UmFuZ2UtPmdldE9iamVjdCgidXBwZXIiKTsKLSAg
ICBSZWZQdHI8SURCS2V5PiBpZGJVcHBlciA9IHVwcGVyID8gaWRiS2V5RnJvbUluc3BlY3Rvck9i
amVjdCh1cHBlci5nZXQoKSkgOiBudWxscHRyOworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpVbmNoZWNrZWRPYmplY3Q+IHVwcGVyID0ga2V5UmFuZ2UtPmdldE9iamVjdCgidXBwZXIi
KTsKKyAgICBSZWZQdHI8SURCS2V5PiBpZGJVcHBlciA9IHVwcGVyID8gaWRiS2V5RnJvbVVuY2hl
Y2tlZE9iamVjdCh1cHBlci5nZXQoKSkgOiBudWxscHRyOwogICAgIGlmICh1cHBlciAmJiAhaWRi
VXBwZXIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBAIC02NDEsNyArNjQxLDcgQEAgdm9p
ZCBJbnNwZWN0b3JJbmRleGVkREJBZ2VudDo6cmVxdWVzdERhdGFiYXNlKEVycm9yU3RyaW5nJiBl
cnJvclN0cmluZywgY29uc3QgU3QKICAgICBkYXRhYmFzZUxvYWRlci0+c3RhcnQoaWRiRmFjdG9y
eSwgZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCksIGRhdGFiYXNlTmFtZSk7CiB9CiAKLXZvaWQg
SW5zcGVjdG9ySW5kZXhlZERCQWdlbnQ6OnJlcXVlc3REYXRhKEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgY29uc3QgU3RyaW5nJiBzZWN1cml0eU9yaWdpbiwgY29uc3QgU3RyaW5nJiBkYXRhYmFz
ZU5hbWUsIGNvbnN0IFN0cmluZyYgb2JqZWN0U3RvcmVOYW1lLCBjb25zdCBTdHJpbmcmIGluZGV4
TmFtZSwgaW50IHNraXBDb3VudCwgaW50IHBhZ2VTaXplLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0Pioga2V5UmFuZ2UsIFBhc3NSZWZQdHI8UmVxdWVzdERhdGFDYWxsYmFjaz4gcmVxdWVz
dENhbGxiYWNrKQordm9pZCBJbnNwZWN0b3JJbmRleGVkREJBZ2VudDo6cmVxdWVzdERhdGEoRXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHNlY3VyaXR5T3JpZ2luLCBjb25z
dCBTdHJpbmcmIGRhdGFiYXNlTmFtZSwgY29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5hbWUsIGNv
bnN0IFN0cmluZyYgaW5kZXhOYW1lLCBpbnQgc2tpcENvdW50LCBpbnQgcGFnZVNpemUsIGNvbnN0
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+KiBrZXlSYW5nZSwg
UGFzc1JlZlB0cjxSZXF1ZXN0RGF0YUNhbGxiYWNrPiByZXF1ZXN0Q2FsbGJhY2spCiB7CiAgICAg
RnJhbWUqIGZyYW1lID0gbV9wYWdlQWdlbnQtPmZpbmRGcmFtZVdpdGhTZWN1cml0eU9yaWdpbihz
ZWN1cml0eU9yaWdpbik7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gYXNzZXJ0RG9jdW1lbnQo
ZXJyb3JTdHJpbmcsIGZyYW1lKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckluZGV4ZWREQkFnZW50LmgKaW5kZXggNjc0YmMzNjZiYTkwNzgxZDRjZjE2N2Q1NTg3
NzI1ZDBkNDA4MTU4Yi4uYmQxMmFkNzVkZjI5NWZlYjM3MzFmMjU2ZWRlZWIwN2I4NWE1MGU4MSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckluZGV4ZWREQkFn
ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckluZGV4ZWREQkFn
ZW50LmgKQEAgLTYwLDcgKzYwLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkaXNhYmxl
KEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHJlcXVlc3REYXRhYmFz
ZU5hbWVzKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBzZWN1cml0eU9yaWdpbiwgUGFzc1Jl
ZlB0cjxSZXF1ZXN0RGF0YWJhc2VOYW1lc0NhbGxiYWNrPikgb3ZlcnJpZGU7CiAgICAgdmlydHVh
bCB2b2lkIHJlcXVlc3REYXRhYmFzZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgc2VjdXJp
dHlPcmlnaW4sIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1lLCBQYXNzUmVmUHRyPFJlcXVlc3RE
YXRhYmFzZUNhbGxiYWNrPikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHJlcXVlc3REYXRh
KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBzZWN1cml0eU9yaWdpbiwgY29uc3QgU3RyaW5n
JiBkYXRhYmFzZU5hbWUsIGNvbnN0IFN0cmluZyYgb2JqZWN0U3RvcmVOYW1lLCBjb25zdCBTdHJp
bmcmIGluZGV4TmFtZSwgaW50IHNraXBDb3VudCwgaW50IHBhZ2VTaXplLCBjb25zdCBSZWZQdHI8
SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+KiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxSZXF1ZXN0
RGF0YUNhbGxiYWNrPikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHJlcXVlc3REYXRhKEVy
cm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBzZWN1cml0eU9yaWdpbiwgY29uc3QgU3RyaW5nJiBk
YXRhYmFzZU5hbWUsIGNvbnN0IFN0cmluZyYgb2JqZWN0U3RvcmVOYW1lLCBjb25zdCBTdHJpbmcm
IGluZGV4TmFtZSwgaW50IHNraXBDb3VudCwgaW50IHBhZ2VTaXplLCBjb25zdCBSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0Pioga2V5UmFuZ2UsIFBhc3NSZWZQdHI8
UmVxdWVzdERhdGFDYWxsYmFjaz4pIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBjbGVhck9i
amVjdFN0b3JlKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBpbl9zZWN1cml0eU9yaWdpbiwg
Y29uc3QgU3RyaW5nJiBpbl9kYXRhYmFzZU5hbWUsIGNvbnN0IFN0cmluZyYgaW5fb2JqZWN0U3Rv
cmVOYW1lLCBQYXNzUmVmUHRyPENsZWFyT2JqZWN0U3RvcmVDYWxsYmFjaz4pIG92ZXJyaWRlOwog
CiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ck92ZXJsYXkuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXku
Y3BwCmluZGV4IDJkYjdmMWEzMWI2MWRiNjYxYjMxMTJiY2Y1YzcxNjAyMzc4MzM1MzkuLjU1ODVj
NGE2YjIxN2Q5MmNkYTQwZDMwNWI0MDljYzYwM2VlNDJjMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHAKQEAgLTU2LDcgKzU2LDcgQEAKICNpbmNs
dWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlN0eWxlZEVsZW1lbnQuaCIKICNpbmNsdWRlIDxi
aW5kaW5ncy9TY3JpcHRWYWx1ZS5oPgotI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1
ZXMuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIEluc3Bl
Y3RvcjsKQEAgLTMzMCwxNyArMzMwLDE3IEBAIHZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6dXBkYXRl
KCkKICAgICBmb3JjZVBhaW50KCk7CiB9CiAKLXN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gYnVpbGRPYmplY3RGb3JQb2ludChjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKK3N0YXRp
YyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gYnVpbGRP
YmplY3RGb3JQb2ludChjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKIHsKLSAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBvYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IG9iamVjdCA9IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdDo6Y3JlYXRlKCk7CiAgICAgb2JqZWN0LT5z
ZXREb3VibGUoQVNDSUlMaXRlcmFsKCJ4IiksIHBvaW50LngoKSk7CiAgICAgb2JqZWN0LT5zZXRE
b3VibGUoQVNDSUlMaXRlcmFsKCJ5IiksIHBvaW50LnkoKSk7CiAgICAgcmV0dXJuIG9iamVjdC5y
ZWxlYXNlKCk7CiB9CiAKLXN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVpbGRP
YmplY3RGb3JSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3N0YXRpYyBQYXNzUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gYnVpbGRPYmplY3RGb3JSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvYmpl
Y3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IG9iamVjdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVu
Y2hlY2tlZE9iamVjdDo6Y3JlYXRlKCk7CiAgICAgb2JqZWN0LT5zZXREb3VibGUoQVNDSUlMaXRl
cmFsKCJ4IiksIHJlY3QueCgpKTsKICAgICBvYmplY3QtPnNldERvdWJsZShBU0NJSUxpdGVyYWwo
InkiKSwgcmVjdC55KCkpOwogICAgIG9iamVjdC0+c2V0RG91YmxlKEFTQ0lJTGl0ZXJhbCgid2lk
dGgiKSwgcmVjdC53aWR0aCgpKTsKQEAgLTM0OCw5ICszNDgsOSBAQCBzdGF0aWMgUGFzc1JlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9yUmVjdChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpCiAgICAgcmV0dXJuIG9iamVjdC5yZWxlYXNlKCk7CiB9CiAKLXN0YXRpYyBQYXNzUmVmUHRy
PEluc3BlY3RvckFycmF5PiBidWlsZEFycmF5Rm9yUXVhZChjb25zdCBGbG9hdFF1YWQmIHF1YWQp
CitzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRBcnJheT4g
YnVpbGRBcnJheUZvclF1YWQoY29uc3QgRmxvYXRRdWFkJiBxdWFkKQogewotICAgIFJlZlB0cjxJ
bnNwZWN0b3JBcnJheT4gYXJyYXkgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZEFycmF5PiBhcnJheSA9IEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlVuY2hlY2tlZEFycmF5OjpjcmVhdGUoKTsKICAgICBhcnJheS0+cHVzaE9i
amVjdChidWlsZE9iamVjdEZvclBvaW50KHF1YWQucDEoKSkpOwogICAgIGFycmF5LT5wdXNoT2Jq
ZWN0KGJ1aWxkT2JqZWN0Rm9yUG9pbnQocXVhZC5wMigpKSk7CiAgICAgYXJyYXktPnB1c2hPYmpl
Y3QoYnVpbGRPYmplY3RGb3JQb2ludChxdWFkLnAzKCkpKTsKQEAgLTM1OCwxMCArMzU4LDEwIEBA
IHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBidWlsZEFycmF5Rm9yUXVhZChjb25z
dCBGbG9hdFF1YWQmIHF1YWQpCiAgICAgcmV0dXJuIGFycmF5LnJlbGVhc2UoKTsKIH0KIAotc3Rh
dGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBidWlsZE9iamVjdEZvckhpZ2hsaWdodChj
b25zdCBIaWdobGlnaHQmIGhpZ2hsaWdodCkKK3N0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gYnVpbGRPYmplY3RGb3JIaWdobGlnaHQoY29uc3Qg
SGlnaGxpZ2h0JiBoaWdobGlnaHQpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb2Jq
ZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yQXJy
YXk+IGFycmF5ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IG9iamVjdCA9IEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlVuY2hlY2tlZE9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlVuY2hlY2tlZEFycmF5PiBhcnJheSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hl
Y2tlZEFycmF5OjpjcmVhdGUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGhpZ2hsaWdo
dC5xdWFkcy5zaXplKCk7ICsraSkKICAgICAgICAgYXJyYXktPnB1c2hBcnJheShidWlsZEFycmF5
Rm9yUXVhZChoaWdobGlnaHQucXVhZHNbaV0pKTsKICAgICBvYmplY3QtPnNldEFycmF5KCJxdWFk
cyIsIGFycmF5LnJlbGVhc2UoKSk7CkBAIC0zNzMsNyArMzczLDcgQEAgc3RhdGljIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBidWlsZE9iamVjdEZvckhpZ2hsaWdodChjb25zdCBIaWdobGln
aHQmIGhpZ2gKICAgICByZXR1cm4gb2JqZWN0LnJlbGVhc2UoKTsKIH0KIAotc3RhdGljIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBidWlsZE9iamVjdEZvclJlZ2lvbkhpZ2hsaWdodChGcmFt
ZVZpZXcqIG1haW5WaWV3LCBSZW5kZXJSZWdpb24qIHJlZ2lvbikKK3N0YXRpYyBQYXNzUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gYnVpbGRPYmplY3RGb3JSZWdp
b25IaWdobGlnaHQoRnJhbWVWaWV3KiBtYWluVmlldywgUmVuZGVyUmVnaW9uKiByZWdpb24pCiB7
CiAgICAgRnJhbWVWaWV3KiBjb250YWluaW5nVmlldyA9IHJlZ2lvbi0+ZnJhbWUoKS52aWV3KCk7
CiAgICAgaWYgKCFjb250YWluaW5nVmlldykKQEAgLTQwNSw3ICs0MDUsNyBAQCBzdGF0aWMgUGFz
c1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9yUmVnaW9uSGlnaGxpZ2h0KEZy
YW1lVmlldyogbWFpbgogICAgIGNvbnRlbnRzUXVhZFRvUGFnZShtYWluVmlldywgY29udGFpbmlu
Z1ZpZXcsIGluY29taW5nUmVjdFF1YWQpOwogICAgIGNvbnRlbnRzUXVhZFRvUGFnZShtYWluVmll
dywgY29udGFpbmluZ1ZpZXcsIG91dGdvaW5nUmVjdFF1YWQpOwogCi0gICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gcmVnaW9uT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAg
ICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiByZWdpb25PYmpl
Y3QgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q6OmNyZWF0ZSgpOwogCiAg
ICAgcmVnaW9uT2JqZWN0LT5zZXRBcnJheSgiYm9yZGVyUXVhZCIsIGJ1aWxkQXJyYXlGb3JRdWFk
KGJvcmRlclJlY3RRdWFkKSk7CiAgICAgcmVnaW9uT2JqZWN0LT5zZXRBcnJheSgiaW5jb21pbmdR
dWFkIiwgYnVpbGRBcnJheUZvclF1YWQoaW5jb21pbmdSZWN0UXVhZCkpOwpAQCAtNDE0LDE3ICs0
MTQsMTcgQEAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBidWlsZE9iamVjdEZv
clJlZ2lvbkhpZ2hsaWdodChGcmFtZVZpZXcqIG1haW4KICAgICByZXR1cm4gcmVnaW9uT2JqZWN0
LnJlbGVhc2UoKTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGJ1aWxk
T2JqZWN0Rm9yQ1NTUmVnaW9uc0hpZ2hsaWdodChSZW5kZXJSZWdpb24qIHJlZ2lvbiwgUmVuZGVy
Rmxvd1RocmVhZCogZmxvd1RocmVhZCkKK3N0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlVuY2hlY2tlZEFycmF5PiBidWlsZE9iamVjdEZvckNTU1JlZ2lvbnNIaWdobGlnaHQo
UmVuZGVyUmVnaW9uKiByZWdpb24sIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQpCiB7CiAg
ICAgRnJhbWVWaWV3KiBtYWluRnJhbWVWaWV3ID0gcmVnaW9uLT5kb2N1bWVudCgpLnBhZ2UoKS0+
bWFpbkZyYW1lKCkudmlldygpOwogCi0gICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcnJheSA9
IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6VW5jaGVja2VkQXJyYXk+IGFycmF5ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2Vk
QXJyYXk6OmNyZWF0ZSgpOwogCiAgICAgY29uc3QgUmVuZGVyUmVnaW9uTGlzdCYgcmVnaW9uTGlz
dCA9IGZsb3dUaHJlYWQtPnJlbmRlclJlZ2lvbkxpc3QoKTsKICAgICBmb3IgKGF1dG8mIGl0ZXJS
ZWdpb24gOiByZWdpb25MaXN0KSB7CiAgICAgICAgIGlmICghaXRlclJlZ2lvbi0+aXNWYWxpZCgp
KQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHJlZ2lvbkhpZ2hsaWdodE9iamVjdCA9IGJ1aWxkT2JqZWN0Rm9yUmVnaW9uSGlnaGxpZ2h0KG1h
aW5GcmFtZVZpZXcsIGl0ZXJSZWdpb24pOworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6VW5jaGVja2VkT2JqZWN0PiByZWdpb25IaWdobGlnaHRPYmplY3QgPSBidWlsZE9iamVj
dEZvclJlZ2lvbkhpZ2hsaWdodChtYWluRnJhbWVWaWV3LCBpdGVyUmVnaW9uKTsKICAgICAgICAg
aWYgKCFyZWdpb25IaWdobGlnaHRPYmplY3QpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgaWYgKHJlZ2lvbiA9PSBpdGVyUmVnaW9uKSB7CkBAIC00MzcsMTUgKzQzNywxNSBAQCBzdGF0
aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gYnVpbGRPYmplY3RGb3JDU1NSZWdpb25zSGln
aGxpZ2h0KFJlbmRlclJlZ2lvbgogICAgIHJldHVybiBhcnJheS5yZWxlYXNlKCk7CiB9CiAKLXN0
YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmplY3RGb3JTaXplKGNvbnN0
IEludFNpemUmIHNpemUpCitzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpV
bmNoZWNrZWRPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9yU2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQog
ewotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVj
dD4gcmVzdWx0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0OjpjcmVhdGUo
KTsKICAgICByZXN1bHQtPnNldEludGVnZXIoIndpZHRoIiwgc2l6ZS53aWR0aCgpKTsKICAgICBy
ZXN1bHQtPnNldEludGVnZXIoImhlaWdodCIsIHNpemUuaGVpZ2h0KCkpOwogICAgIHJldHVybiBy
ZXN1bHQucmVsZWFzZSgpOwogfQogCi1zdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IGJ1aWxkT2JqZWN0Rm9yQ1NTUmVnaW9uQ29udGVudENsaXAoUmVuZGVyUmVnaW9uKiByZWdpb24p
CitzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+
IGJ1aWxkT2JqZWN0Rm9yQ1NTUmVnaW9uQ29udGVudENsaXAoUmVuZGVyUmVnaW9uKiByZWdpb24p
CiB7CiAgICAgRnJhbWUqIGNvbnRhaW5pbmdGcmFtZSA9IHJlZ2lvbi0+ZG9jdW1lbnQoKS5mcmFt
ZSgpOwogICAgIGlmICghY29udGFpbmluZ0ZyYW1lKQpAQCAtNDY1LDcgKzQ2NSw3IEBAIHN0YXRp
YyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmplY3RGb3JDU1NSZWdpb25Db250
ZW50Q2xpcChSZW5kZXJSZWdpCiAgICAgRmxvYXRRdWFkIGNsaXBRdWFkID0gcmVnaW9uLT5sb2Nh
bFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChmbGlwcGVkUmVnaW9uUmVjdCkpOwogICAgIGNvbnRl
bnRzUXVhZFRvUGFnZShtYWluVmlldywgY29udGFpbmluZ1ZpZXcsIGNsaXBRdWFkKTsKIAotICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlZ2lvbk9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVj
dD4gcmVnaW9uT2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0Ojpj
cmVhdGUoKTsKICAgICByZWdpb25PYmplY3QtPnNldEFycmF5KCJxdWFkIiwgYnVpbGRBcnJheUZv
clF1YWQoY2xpcFF1YWQpKTsKICAgICByZXR1cm4gcmVnaW9uT2JqZWN0LnJlbGVhc2UoKTsKIH0K
QEAgLTUyNSw3ICs1MjUsNyBAQCB2b2lkIEluc3BlY3Rvck92ZXJsYXk6OnVwZGF0ZVBhaW50UmVj
dHNUaW1lckZpcmVkKFRpbWVyPEluc3BlY3Rvck92ZXJsYXk+JikKIAogdm9pZCBJbnNwZWN0b3JP
dmVybGF5OjpkcmF3UGFpbnRSZWN0cygpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBm
cmFnbWVudHNBcnJheSA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkQXJyYXk+IGZyYWdtZW50c0FycmF5ID0gSW5zcGVj
dG9yOjpQcm90b2NvbDo6VW5jaGVja2VkQXJyYXk6OmNyZWF0ZSgpOwogICAgIGZvciAoY29uc3Qg
YXV0byYgcGFpciA6IG1fcGFpbnRSZWN0cykKICAgICAgICAgZnJhZ21lbnRzQXJyYXktPnB1c2hP
YmplY3QoYnVpbGRPYmplY3RGb3JSZWN0KHBhaXIuc2Vjb25kKSk7CiAKQEAgLTUzNyw5ICs1Mzcs
OSBAQCB2b2lkIEluc3BlY3Rvck92ZXJsYXk6OmRyYXdHdXR0ZXIoKQogICAgIGV2YWx1YXRlSW5P
dmVybGF5KEFTQ0lJTGl0ZXJhbCgiZHJhd0d1dHRlciIpKTsKIH0KIAotc3RhdGljIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+IGJ1aWxkT2JqZWN0Rm9yUmVuZGVyZXJGcmFnbWVudHMoUmVuZGVy
T2JqZWN0KiByZW5kZXJlciwgY29uc3QgSGlnaGxpZ2h0Q29uZmlnJiBjb25maWcpCitzdGF0aWMg
UGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRBcnJheT4gYnVpbGRPYmpl
Y3RGb3JSZW5kZXJlckZyYWdtZW50cyhSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBIaWdo
bGlnaHRDb25maWcmIGNvbmZpZykKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGZyYWdt
ZW50c0FycmF5ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpVbmNoZWNrZWRBcnJheT4gZnJhZ21lbnRzQXJyYXkgPSBJbnNwZWN0b3I6
OlByb3RvY29sOjpVbmNoZWNrZWRBcnJheTo6Y3JlYXRlKCk7CiAKICAgICBSZW5kZXJGbG93VGhy
ZWFkKiBjb250YWluaW5nRmxvd1RocmVhZCA9IHJlbmRlcmVyLT5mbG93VGhyZWFkQ29udGFpbmlu
Z0Jsb2NrKCk7CiAgICAgaWYgKCFjb250YWluaW5nRmxvd1RocmVhZCkgewpAQCAtNTYxLDcgKzU2
MSw3IEBAIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBidWlsZE9iamVjdEZvclJl
bmRlcmVyRnJhZ21lbnRzKFJlbmRlck9iamVjdCoKICAgICAgICAgICAgICAgICAvLyBDb21wdXRl
IHRoZSBoaWdobGlnaHQgb2YgdGhlIGZyYWdtZW50IGluc2lkZSB0aGUgY3VycmVudCByZWdpb24u
CiAgICAgICAgICAgICAgICAgSGlnaGxpZ2h0IGhpZ2hsaWdodDsKICAgICAgICAgICAgICAgICBi
dWlsZFJlbmRlcmVySGlnaGxpZ2h0KHJlbmRlcmVyLCByZWdpb24sIGNvbmZpZywgJmhpZ2hsaWdo
dCwgSW5zcGVjdG9yT3ZlcmxheTo6Q29vcmRpbmF0ZVN5c3RlbTo6Vmlldyk7Ci0gICAgICAgICAg
ICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZnJhZ21lbnRPYmplY3QgPSBidWlsZE9iamVj
dEZvckhpZ2hsaWdodChoaWdobGlnaHQpOworICAgICAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IGZyYWdtZW50T2JqZWN0ID0gYnVpbGRPYmpl
Y3RGb3JIaWdobGlnaHQoaGlnaGxpZ2h0KTsKIAogICAgICAgICAgICAgICAgIC8vIENvbXB1dGUg
dGhlIGNsaXBwaW5nIGFyZWEgb2YgdGhlIHJlZ2lvbi4KICAgICAgICAgICAgICAgICBmcmFnbWVu
dE9iamVjdC0+c2V0T2JqZWN0KCJyZWdpb24iLCBidWlsZE9iamVjdEZvckNTU1JlZ2lvbkNvbnRl
bnRDbGlwKHJlZ2lvbikpOwpAQCAtNTg3LDcgKzU4Nyw3IEBAIHN0YXRpYyBGbG9hdFBvaW50IGxv
Y2FsUG9pbnRUb1Jvb3QoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgRnJhbWVWaWV3KiBt
YWluCiBzdHJ1Y3QgUGF0aEFwcGx5SW5mbyB7CiAgICAgRnJhbWVWaWV3KiByb290VmlldzsKICAg
ICBGcmFtZVZpZXcqIHZpZXc7Ci0gICAgSW5zcGVjdG9yQXJyYXkqIGFycmF5OworICAgIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZEFycmF5KiBhcnJheTsKICAgICBSZW5kZXJPYmplY3Qq
IHJlbmRlcmVyOwogICAgIGNvbnN0IFNoYXBlT3V0c2lkZUluZm8qIHNoYXBlT3V0c2lkZUluZm87
CiB9OwpAQCAtNjMyLDEzICs2MzIsMTMgQEAgc3RhdGljIHZvaWQgYXBwZW5kUGF0aFNlZ21lbnQo
dm9pZCogaW5mbywgY29uc3QgUGF0aEVsZW1lbnQqIHBhdGhFbGVtZW50KQogICAgIH0KIH0KIAot
c3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBidWlsZE9iamVjdEZvclNoYXBlT3V0
c2lkZShGcmFtZSogY29udGFpbmluZ0ZyYW1lLCBSZW5kZXJCb3gqIHJlbmRlcmVyKQorc3RhdGlj
IFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBidWlsZE9i
amVjdEZvclNoYXBlT3V0c2lkZShGcmFtZSogY29udGFpbmluZ0ZyYW1lLCBSZW5kZXJCb3gqIHJl
bmRlcmVyKQogewogICAgIGNvbnN0IFNoYXBlT3V0c2lkZUluZm8qIHNoYXBlT3V0c2lkZUluZm8g
PSByZW5kZXJlci0+c2hhcGVPdXRzaWRlSW5mbygpOwogICAgIGlmICghc2hhcGVPdXRzaWRlSW5m
bykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBzaGFwZU9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gc2hhcGVPYmplY3QgPSBJbnNwZWN0
b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q6OmNyZWF0ZSgpOwogICAgIExheW91dFJlY3Qg
c2hhcGVCb3VuZHMgPSBzaGFwZU91dHNpZGVJbmZvLT5jb21wdXRlZFNoYXBlUGh5c2ljYWxCb3Vu
ZGluZ0JveCgpOwogICAgIEZsb2F0UXVhZCBzaGFwZVF1YWQgPSByZW5kZXJlci0+bG9jYWxUb0Fi
c29sdXRlUXVhZChGbG9hdFJlY3Qoc2hhcGVCb3VuZHMpKTsKICAgICBjb250ZW50c1F1YWRUb1Bh
Z2UoY29udGFpbmluZ0ZyYW1lLT5wYWdlKCktPm1haW5GcmFtZSgpLnZpZXcoKSwgY29udGFpbmlu
Z0ZyYW1lLT52aWV3KCksIHNoYXBlUXVhZCk7CkBAIC02NDgsNyArNjQ4LDcgQEAgc3RhdGljIFBh
c3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBidWlsZE9iamVjdEZvclNoYXBlT3V0c2lkZShGcmFt
ZSogY29udGFpbmluZ0YKICAgICBzaGFwZU91dHNpZGVJbmZvLT5jb21wdXRlZFNoYXBlKCkuYnVp
bGREaXNwbGF5UGF0aHMocGF0aHMpOwogCiAgICAgaWYgKHBhdGhzLnNoYXBlLmxlbmd0aCgpKSB7
Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gc2hhcGVQYXRoID0gSW5zcGVjdG9yQXJy
YXk6OmNyZWF0ZSgpOworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVj
a2VkQXJyYXk+IHNoYXBlUGF0aCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZEFycmF5
OjpjcmVhdGUoKTsKICAgICAgICAgUGF0aEFwcGx5SW5mbyBpbmZvOwogICAgICAgICBpbmZvLnJv
b3RWaWV3ID0gY29udGFpbmluZ0ZyYW1lLT5wYWdlKCktPm1haW5GcmFtZSgpLnZpZXcoKTsKICAg
ICAgICAgaW5mby52aWV3ID0gY29udGFpbmluZ0ZyYW1lLT52aWV3KCk7CkBAIC02NjEsNyArNjYx
LDcgQEAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBidWlsZE9iamVjdEZvclNo
YXBlT3V0c2lkZShGcmFtZSogY29udGFpbmluZ0YKICAgICAgICAgc2hhcGVPYmplY3QtPnNldEFy
cmF5KEFTQ0lJTGl0ZXJhbCgic2hhcGUiKSwgc2hhcGVQYXRoLnJlbGVhc2UoKSk7CiAKICAgICAg
ICAgaWYgKHBhdGhzLm1hcmdpblNoYXBlLmxlbmd0aCgpKSB7Ci0gICAgICAgICAgICBzaGFwZVBh
dGggPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgICAgICAgICBzaGFwZVBhdGggPSBJ
bnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRBcnJheTo6Y3JlYXRlKCk7CiAgICAgICAgICAg
ICBpbmZvLmFycmF5ID0gc2hhcGVQYXRoLmdldCgpOwogCiAgICAgICAgICAgICBwYXRocy5tYXJn
aW5TaGFwZS5hcHBseSgmaW5mbywgJmFwcGVuZFBhdGhTZWdtZW50KTsKQEAgLTY3NCwxMyArNjc0
LDEzIEBAIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmplY3RGb3JT
aGFwZU91dHNpZGUoRnJhbWUqIGNvbnRhaW5pbmdGCiB9CiAjZW5kaWYKIAotc3RhdGljIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBidWlsZE9iamVjdEZvckVsZW1lbnRJbmZvKE5vZGUqIG5v
ZGUpCitzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmpl
Y3Q+IGJ1aWxkT2JqZWN0Rm9yRWxlbWVudEluZm8oTm9kZSogbm9kZSkKIHsKICAgICBBU1NFUlQo
bm9kZSk7CiAgICAgaWYgKCFpczxFbGVtZW50Pigqbm9kZSkgfHwgIW5vZGUtPmRvY3VtZW50KCku
ZnJhbWUoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBlbGVtZW50SW5mbyA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gZWxlbWVudEluZm8gPSBJ
bnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q6OmNyZWF0ZSgpOwogCiAgICAgRWxl
bWVudCYgZWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKTsKICAgICBib29sIGlzWEhU
TUwgPSBlbGVtZW50LmRvY3VtZW50KCkuaXNYSFRNTERvY3VtZW50KCk7CkBAIC03MTQsNyArNzE0
LDcgQEAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBidWlsZE9iamVjdEZvckVs
ZW1lbnRJbmZvKE5vZGUqIG5vZGUpCiAgICAgICAgIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50JiBy
ZWdpb24gPSAqZG93bmNhc3Q8UmVuZGVyQmxvY2tGbG93PigqcmVuZGVyZXIpLnJlbmRlck5hbWVk
Rmxvd0ZyYWdtZW50KCk7CiAgICAgICAgIGlmIChyZWdpb24uaXNWYWxpZCgpKSB7CiAgICAgICAg
ICAgICBSZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkID0gcmVnaW9uLmZsb3dUaHJlYWQoKTsK
LSAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlZ2lvbkZsb3dJbmZvID0gSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IHJlZ2lvbkZsb3dJbmZvID0gSW5zcGVjdG9yOjpQcm90
b2NvbDo6VW5jaGVja2VkT2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgICAgIHJlZ2lvbkZsb3dJ
bmZvLT5zZXRTdHJpbmcoIm5hbWUiLCBkb3duY2FzdDxSZW5kZXJOYW1lZEZsb3dUaHJlYWQ+KCpm
bG93VGhyZWFkKS5mbG93VGhyZWFkTmFtZSgpKTsKICAgICAgICAgICAgIHJlZ2lvbkZsb3dJbmZv
LT5zZXRBcnJheSgicmVnaW9ucyIsIGJ1aWxkT2JqZWN0Rm9yQ1NTUmVnaW9uc0hpZ2hsaWdodCgm
cmVnaW9uLCBmbG93VGhyZWFkKSk7CiAgICAgICAgICAgICBlbGVtZW50SW5mby0+c2V0T2JqZWN0
KCJyZWdpb25GbG93SW5mbyIsIHJlZ2lvbkZsb3dJbmZvLnJlbGVhc2UoKSk7CkBAIC03MjMsNyAr
NzIzLDcgQEAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBidWlsZE9iamVjdEZv
ckVsZW1lbnRJbmZvKE5vZGUqIG5vZGUpCiAKICAgICBSZW5kZXJGbG93VGhyZWFkKiBjb250YWlu
aW5nRmxvd1RocmVhZCA9IHJlbmRlcmVyLT5mbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCk7CiAg
ICAgaWYgKGNvbnRhaW5pbmdGbG93VGhyZWFkICYmIGNvbnRhaW5pbmdGbG93VGhyZWFkLT5pc1Jl
bmRlck5hbWVkRmxvd1RocmVhZCgpKSB7Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IGNvbnRlbnRGbG93SW5mbyA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IGNvbnRlbnRGbG93SW5m
byA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdDo6Y3JlYXRlKCk7CiAgICAg
ICAgIGNvbnRlbnRGbG93SW5mby0+c2V0U3RyaW5nKCJuYW1lIiwgdG9SZW5kZXJOYW1lZEZsb3dU
aHJlYWQoY29udGFpbmluZ0Zsb3dUaHJlYWQpLT5mbG93VGhyZWFkTmFtZSgpKTsKICAgICAgICAg
ZWxlbWVudEluZm8tPnNldE9iamVjdCgiY29udGVudEZsb3dJbmZvIiwgY29udGVudEZsb3dJbmZv
LnJlbGVhc2UoKSk7CiAgICAgfQpAQCAtNzMxLDcgKzczMSw3IEBAIHN0YXRpYyBQYXNzUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmplY3RGb3JFbGVtZW50SW5mbyhOb2RlKiBub2RlKQog
I2lmIEVOQUJMRShDU1NfU0hBUEVTKQogICAgIGlmIChyZW5kZXJlci0+aXNCb3goKSkgewogICAg
ICAgICBSZW5kZXJCb3gqIHJlbmRlckJveCA9IHRvUmVuZGVyQm94KHJlbmRlcmVyKTsKLSAgICAg
ICAgaWYgKFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHNoYXBlT2JqZWN0ID0gYnVpbGRPYmplY3RG
b3JTaGFwZU91dHNpZGUoY29udGFpbmluZ0ZyYW1lLCByZW5kZXJCb3gpKQorICAgICAgICBpZiAo
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gc2hhcGVPYmplY3Qg
PSBidWlsZE9iamVjdEZvclNoYXBlT3V0c2lkZShjb250YWluaW5nRnJhbWUsIHJlbmRlckJveCkp
CiAgICAgICAgICAgICBlbGVtZW50SW5mby0+c2V0T2JqZWN0KCJzaGFwZU91dHNpZGVJbmZvIiwg
c2hhcGVPYmplY3QucmVsZWFzZSgpKTsKICAgICB9CiAjZW5kaWYKQEAgLTc0OCw3ICs3NDgsNyBA
QCBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9yRWxlbWVu
dEluZm8oTm9kZSogbm9kZSkKICAgICByZXR1cm4gZWxlbWVudEluZm8ucmVsZWFzZSgpOwogfQog
Ci1QYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gSW5zcGVjdG9yT3ZlcmxheTo6YnVpbGRPYmpl
Y3RGb3JIaWdobGlnaHRlZE5vZGUoKSBjb25zdAorUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpVbmNoZWNrZWRPYmplY3Q+IEluc3BlY3Rvck92ZXJsYXk6OmJ1aWxkT2JqZWN0Rm9ySGln
aGxpZ2h0ZWROb2RlKCkgY29uc3QKIHsKICAgICBpZiAoIW1faGlnaGxpZ2h0Tm9kZSkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CkBAIC03NTgsMTEgKzc1OCwxMSBAQCBQYXNzUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gSW5zcGVjdG9yT3ZlcmxheTo6YnVpbGRPYmplY3RGb3JIaWdobGlnaHRlZE5v
ZGUoKSBjbwogICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0g
ICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBoaWdobGlnaHRGcmFnbWVudHMgPSBidWlsZE9iamVj
dEZvclJlbmRlcmVyRnJhZ21lbnRzKHJlbmRlcmVyLCBtX25vZGVIaWdobGlnaHRDb25maWcpOwor
ICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRBcnJheT4gaGlnaGxpZ2h0
RnJhZ21lbnRzID0gYnVpbGRPYmplY3RGb3JSZW5kZXJlckZyYWdtZW50cyhyZW5kZXJlciwgbV9u
b2RlSGlnaGxpZ2h0Q29uZmlnKTsKICAgICBpZiAoIWhpZ2hsaWdodEZyYWdtZW50cykKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBoaWdobGln
aHRPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IGhpZ2hsaWdodE9iamVjdCA9IEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdDo6Y3JlYXRlKCk7CiAKICAgICAvLyBUaGUgbWFp
biB2aWV3J3Mgc2Nyb2xsIG9mZnNldCBpcyBzaGFyZWQgYWNyb3NzIGFsbCBxdWFkcy4KICAgICBG
cmFtZVZpZXcqIG1haW5WaWV3ID0gbV9wYWdlLm1haW5GcmFtZSgpLnZpZXcoKTsKQEAgLTc3MSw3
ICs3NzEsNyBAQCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gSW5zcGVjdG9yT3ZlcmxheTo6
YnVpbGRPYmplY3RGb3JIaWdobGlnaHRlZE5vZGUoKSBjbwogICAgIGhpZ2hsaWdodE9iamVjdC0+
c2V0QXJyYXkoImZyYWdtZW50cyIsIGhpZ2hsaWdodEZyYWdtZW50cy5yZWxlYXNlKCkpOwogCiAg
ICAgaWYgKG1fbm9kZUhpZ2hsaWdodENvbmZpZy5zaG93SW5mbykgewotICAgICAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBlbGVtZW50SW5mbyA9IGJ1aWxkT2JqZWN0Rm9yRWxlbWVudEluZm8o
bm9kZSk7CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmpl
Y3Q+IGVsZW1lbnRJbmZvID0gYnVpbGRPYmplY3RGb3JFbGVtZW50SW5mbyhub2RlKTsKICAgICAg
ICAgaWYgKGVsZW1lbnRJbmZvKQogICAgICAgICAgICAgaGlnaGxpZ2h0T2JqZWN0LT5zZXRPYmpl
Y3QoImVsZW1lbnRJbmZvIiwgZWxlbWVudEluZm8ucmVsZWFzZSgpKTsKICAgICB9CkBAIC03ODEs
NyArNzgxLDcgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3Rvck92ZXJsYXk6
OmJ1aWxkT2JqZWN0Rm9ySGlnaGxpZ2h0ZWROb2RlKCkgY28KIAogdm9pZCBJbnNwZWN0b3JPdmVy
bGF5OjpkcmF3Tm9kZUhpZ2hsaWdodCgpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
aGlnaGxpZ2h0T2JqZWN0ID0gYnVpbGRPYmplY3RGb3JIaWdobGlnaHRlZE5vZGUoKTsKKyAgICBS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBoaWdobGlnaHRPYmpl
Y3QgPSBidWlsZE9iamVjdEZvckhpZ2hsaWdodGVkTm9kZSgpOwogICAgIGlmICghaGlnaGxpZ2h0
T2JqZWN0KQogICAgICAgICByZXR1cm47CiAgICAgZXZhbHVhdGVJbk92ZXJsYXkoImRyYXdOb2Rl
SGlnaGxpZ2h0IiwgaGlnaGxpZ2h0T2JqZWN0KTsKQEAgLTg1OCw3ICs4NTgsNyBAQCB2b2lkIElu
c3BlY3Rvck92ZXJsYXk6OmZvcmNlUGFpbnQoKQogCiB2b2lkIEluc3BlY3Rvck92ZXJsYXk6OnJl
c2V0KGNvbnN0IEludFNpemUmIHZpZXdwb3J0U2l6ZSwgY29uc3QgSW50U2l6ZSYgZnJhbWVWaWV3
RnVsbFNpemUpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzZXREYXRhID0gSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
VW5jaGVja2VkT2JqZWN0PiByZXNldERhdGEgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNr
ZWRPYmplY3Q6OmNyZWF0ZSgpOwogICAgIHJlc2V0RGF0YS0+c2V0RG91YmxlKCJkZXZpY2VTY2Fs
ZUZhY3RvciIsIG1fcGFnZS5kZXZpY2VTY2FsZUZhY3RvcigpKTsKICAgICByZXNldERhdGEtPnNl
dE9iamVjdCgidmlld3BvcnRTaXplIiwgYnVpbGRPYmplY3RGb3JTaXplKHZpZXdwb3J0U2l6ZSkp
OwogICAgIHJlc2V0RGF0YS0+c2V0T2JqZWN0KCJmcmFtZVZpZXdGdWxsU2l6ZSIsIGJ1aWxkT2Jq
ZWN0Rm9yU2l6ZShmcmFtZVZpZXdGdWxsU2l6ZSkpOwpAQCAtODY3LDIyICs4NjcsMjIgQEAgdm9p
ZCBJbnNwZWN0b3JPdmVybGF5OjpyZXNldChjb25zdCBJbnRTaXplJiB2aWV3cG9ydFNpemUsIGNv
bnN0IEludFNpemUmIGZyYW1lVmkKIAogdm9pZCBJbnNwZWN0b3JPdmVybGF5OjpldmFsdWF0ZUlu
T3ZlcmxheShjb25zdCBTdHJpbmcmIG1ldGhvZCkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yQXJy
YXk+IGNvbW1hbmQgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZEFycmF5PiBjb21tYW5kID0gSW5zcGVjdG9yOjpQcm90
b2NvbDo6VW5jaGVja2VkQXJyYXk6OmNyZWF0ZSgpOwogICAgIGNvbW1hbmQtPnB1c2hTdHJpbmco
bWV0aG9kKTsKICAgICBvdmVybGF5UGFnZSgpLT5tYWluRnJhbWUoKS5zY3JpcHQoKS5ldmFsdWF0
ZShTY3JpcHRTb3VyY2VDb2RlKG1ha2VTdHJpbmcoImRpc3BhdGNoKCIsIGNvbW1hbmQtPnRvSlNP
TlN0cmluZygpLCAnKScpKSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6ZXZhbHVhdGVJ
bk92ZXJsYXkoY29uc3QgU3RyaW5nJiBtZXRob2QsIGNvbnN0IFN0cmluZyYgYXJndW1lbnQpCiB7
Ci0gICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBjb21tYW5kID0gSW5zcGVjdG9yQXJyYXk6OmNy
ZWF0ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRBcnJheT4g
Y29tbWFuZCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZEFycmF5OjpjcmVhdGUoKTsK
ICAgICBjb21tYW5kLT5wdXNoU3RyaW5nKG1ldGhvZCk7CiAgICAgY29tbWFuZC0+cHVzaFN0cmlu
Zyhhcmd1bWVudCk7CiAgICAgb3ZlcmxheVBhZ2UoKS0+bWFpbkZyYW1lKCkuc2NyaXB0KCkuZXZh
bHVhdGUoU2NyaXB0U291cmNlQ29kZShtYWtlU3RyaW5nKCJkaXNwYXRjaCgiLCBjb21tYW5kLT50
b0pTT05TdHJpbmcoKSwgJyknKSkpOwogfQogCi12b2lkIEluc3BlY3Rvck92ZXJsYXk6OmV2YWx1
YXRlSW5PdmVybGF5KGNvbnN0IFN0cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPEluc3BlY3RvclZh
bHVlPiBhcmd1bWVudCkKK3ZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6ZXZhbHVhdGVJbk92ZXJsYXko
Y29uc3QgU3RyaW5nJiBtZXRob2QsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5j
aGVja2VkVmFsdWU+IGFyZ3VtZW50KQogewotICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gY29t
bWFuZCA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6VW5jaGVja2VkQXJyYXk+IGNvbW1hbmQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpV
bmNoZWNrZWRBcnJheTo6Y3JlYXRlKCk7CiAgICAgY29tbWFuZC0+cHVzaFN0cmluZyhtZXRob2Qp
OwogICAgIGNvbW1hbmQtPnB1c2hWYWx1ZShhcmd1bWVudCk7CiAgICAgb3ZlcmxheVBhZ2UoKS0+
bWFpbkZyYW1lKCkuc2NyaXB0KCkuZXZhbHVhdGUoU2NyaXB0U291cmNlQ29kZShtYWtlU3RyaW5n
KCJkaXNwYXRjaCgiLCBjb21tYW5kLT50b0pTT05TdHJpbmcoKSwgJyknKSkpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuaCBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmgKaW5kZXggNGI4MTNmMzY5OGI2MmY2
Yjk2MGRlZjhiMmFiMzBkNzM3ZDVkYTc5YS4uMmExNzljZTIwZTVjOTBkYmE3NWY5OWRlYTdjOWE3
MmU5YTU3NzFkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ck92ZXJsYXkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3Zlcmxh
eS5oCkBAIC0zOSw4ICszOSwxMCBAQAogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgog
CiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKLWNsYXNzIEluc3BlY3Rvck9iamVjdDsKLWNsYXNzIElu
c3BlY3RvclZhbHVlOworbmFtZXNwYWNlIFByb3RvY29sIHsKK2NsYXNzIFVuY2hlY2tlZE9iamVj
dDsKK2NsYXNzIFVuY2hlY2tlZFZhbHVlOworfQogfQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBA
IC0xMjksNyArMTMxLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRJbmRpY2F0aW5nKGJvb2wg
aW5kaWNhdGluZyk7CiAKLSAgICBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0
PiBidWlsZE9iamVjdEZvckhpZ2hsaWdodGVkTm9kZSgpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBidWlsZE9iamVjdEZvckhpZ2hs
aWdodGVkTm9kZSgpIGNvbnN0OwogCiAgICAgdm9pZCBmcmVlUGFnZSgpOwogcHJpdmF0ZToKQEAg
LTE0Nyw3ICsxNDksNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVzZXQoY29uc3QgSW50U2l6ZSYg
dmlld3BvcnRTaXplLCBjb25zdCBJbnRTaXplJiBmcmFtZVZpZXdGdWxsU2l6ZSk7CiAgICAgdm9p
ZCBldmFsdWF0ZUluT3ZlcmxheShjb25zdCBTdHJpbmcmIG1ldGhvZCk7CiAgICAgdm9pZCBldmFs
dWF0ZUluT3ZlcmxheShjb25zdCBTdHJpbmcmIG1ldGhvZCwgY29uc3QgU3RyaW5nJiBhcmd1bWVu
dCk7Ci0gICAgdm9pZCBldmFsdWF0ZUluT3ZlcmxheShjb25zdCBTdHJpbmcmIG1ldGhvZCwgUGFz
c1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiBhcmd1bWVudCk7CisgICAgdm9pZCBl
dmFsdWF0ZUluT3ZlcmxheShjb25zdCBTdHJpbmcmIG1ldGhvZCwgUGFzc1JlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpVbmNoZWNrZWRWYWx1ZT4gYXJndW1lbnQpOwogCiAgICAgUGFnZSYgbV9w
YWdlOwogICAgIEluc3BlY3RvckNsaWVudCogbV9jbGllbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCmluZGV4IGZjM2JjMjdkMTk0NWYwYWI2
ODJlZGFlZGM5MzcwOWZiNDU1MWIxOTYuLmJiNWIwNGE4YWZmN2I5ZmU2OWM1NTAyNjY3M2Y2YjY5
NDdkZmUwODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQ
YWdlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdl
QWdlbnQuY3BwCkBAIC03Miw3ICs3Miw3IEBACiAjaW5jbHVkZSA8YmluZGluZ3MvU2NyaXB0VmFs
dWUuaD4KICNpbmNsdWRlIDxpbnNwZWN0b3IvQ29udGVudFNlYXJjaFV0aWxpdGllcy5oPgogI2lu
Y2x1ZGUgPGluc3BlY3Rvci9JZGVudGlmaWVyc0ZhY3RvcnkuaD4KLSNpbmNsdWRlIDxpbnNwZWN0
b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclByb3Rv
Y29sVHlwZXMuaD4KICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRlIDx3dGYv
TGlzdEhhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBAIC0zODgsNyArMzg4LDcg
QEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJpbmcmKQogdm9pZCBJ
bnNwZWN0b3JQYWdlQWdlbnQ6OmFkZFNjcmlwdFRvRXZhbHVhdGVPbkxvYWQoRXJyb3JTdHJpbmcm
LCBjb25zdCBTdHJpbmcmIHNvdXJjZSwgU3RyaW5nKiBpZGVudGlmaWVyKQogewogICAgIGlmICgh
bV9zY3JpcHRzVG9FdmFsdWF0ZU9uTG9hZCkKLSAgICAgICAgbV9zY3JpcHRzVG9FdmFsdWF0ZU9u
TG9hZCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIG1fc2NyaXB0c1RvRXZh
bHVhdGVPbkxvYWQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q6OmNyZWF0
ZSgpOwogCiAgICAgLy8gQXNzdXJlIHdlIGRvbid0IG92ZXJyaWRlIGV4aXN0aW5nIGlkcyAtLSBt
X2xhc3RTY3JpcHRJZGVudGlmaWVyIGNvdWxkIGdldCBvdXQgb2Ygc3luYyBXUlQgYWN0dWFsCiAg
ICAgLy8gc2NyaXB0cyBvbmNlIHdlIHJlc3RvcmVkIHRoZSBzY3JpcHRzIGZyb20gdGhlIGNvb2tp
ZSBkdXJpbmcgbmF2aWdhdGlvbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JQYWdlQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JQYWdlQWdlbnQuaAppbmRleCAxOGRjYzNmYTE5MGE3NWEyZDhjNTU1NWQzNDAzNWRmMThjMWI5
MjhkLi5jYWU1NDNlOWRhODE0ZWY3NTliY2ZlZmYzY2JmNTUxZDQ3OWY3ZjIzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5oCkBAIC00NCw4ICs0NCw4
IEBACiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0
b3IgewotY2xhc3MgSW5zcGVjdG9yQXJyYXk7Ci1jbGFzcyBJbnNwZWN0b3JPYmplY3Q7CitjbGFz
cyBVbmNoZWNrZWRBcnJheTsKK2NsYXNzIFVuY2hlY2tlZE9iamVjdDsKIH0KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewpAQCAtMTg5LDcgKzE4OSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2lnbm9y
ZVNjcmlwdHNFbmFibGVkTm90aWZpY2F0aW9uOwogICAgIGJvb2wgbV9zaG93UGFpbnRSZWN0czsK
ICAgICBTdHJpbmcgbV9lbXVsYXRlZE1lZGlhOwotICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3Bl
Y3Rvck9iamVjdD4gbV9zY3JpcHRzVG9FdmFsdWF0ZU9uTG9hZDsKKyAgICBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBtX3NjcmlwdHNUb0V2YWx1YXRlT25Mb2Fk
OwogfTsKIAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
UmVwbGF5QWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlcGxh
eUFnZW50LmNwcAppbmRleCA2MTliZjJkNDk3OTk4Y2M5MTYzZmRlYTAxZDIyZDAyNTU2YjcwNGVi
Li5hMzA0NDIzNjAwODc4ZmE1NmFlYzA0OTIzMjhlMDMyY2QwMDA4Zjk4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVwbGF5QWdlbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXBsYXlBZ2VudC5jcHAKQEAgLTQ2LDcg
KzQ2LDcgQEAKICNpbmNsdWRlICJSZXBsYXlTZXNzaW9uU2VnbWVudC5oIgogI2luY2x1ZGUgIlNl
cmlhbGl6YXRpb25NZXRob2RzLmgiCiAjaW5jbHVkZSAiV2ViUmVwbGF5SW5wdXRzLmgiIC8vIEZv
ciBFbmNvZGluZ1RyYWl0czxJbnB1dFF1ZXVlPi4KLSNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVj
dG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclByb3RvY29sVHlwZXMu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CiAKQEAgLTU0LDcgKzU0LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpSZXBsYXk6OlJlcGxheVBvc2l0aW9uPiBidWlsZEluc3BlY3Rvck9iamVjdEZvclBv
c2l0aW9uKGNvbnN0IFJlcGxheVBvc2l0aW9uJiBwb3NpdGlvbikKK3N0YXRpYyBQYXNzUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlcGxheTo6UmVwbGF5UG9zaXRpb24+IGJ1aWxkVW5jaGVj
a2VkT2JqZWN0Rm9yUG9zaXRpb24oY29uc3QgUmVwbGF5UG9zaXRpb24mIHBvc2l0aW9uKQogewog
ICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSZXBsYXk6OlJlcGxheVBvc2l0aW9uPiBw
b3NpdGlvbk9iamVjdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlcGxheTo6UmVwbGF5UG9zaXRp
b246OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRTZWdtZW50T2Zmc2V0KHBvc2l0aW9uLnNlZ21lbnRP
ZmZzZXQpCkBAIC02Myw3ICs2Myw3IEBAIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlJlcGxheTo6UmVwbGF5UG9zaXRpb24+IGJ1aWxkSW5zcGVjdG9yT2JqCiAgICAgcmV0
dXJuIHBvc2l0aW9uT2JqZWN0LnJlbGVhc2UoKTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6UmVwbGF5OjpSZXBsYXlJbnB1dD4gYnVpbGRJbnNwZWN0b3JPYmpl
Y3RGb3JJbnB1dChjb25zdCBOb25kZXRlcm1pbmlzdGljSW5wdXRCYXNlJiBpbnB1dCwgc2l6ZV90
IG9mZnNldCkKK3N0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlcGxheTo6
UmVwbGF5SW5wdXQ+IGJ1aWxkVW5jaGVja2VkT2JqZWN0Rm9ySW5wdXQoY29uc3QgTm9uZGV0ZXJt
aW5pc3RpY0lucHV0QmFzZSYgaW5wdXQsIHNpemVfdCBvZmZzZXQpCiB7CiAgICAgRW5jb2RlZFZh
bHVlIGVuY29kZWRJbnB1dCA9IEVuY29kaW5nVHJhaXRzPE5vbmRldGVybWluaXN0aWNJbnB1dEJh
c2U+OjplbmNvZGVWYWx1ZShpbnB1dCk7CiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlJlcGxheTo6UmVwbGF5SW5wdXQ+IGlucHV0T2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6
UmVwbGF5OjpSZXBsYXlJbnB1dDo6Y3JlYXRlKCkKQEAgLTc0LDcgKzc0LDcgQEAgc3RhdGljIFBh
c3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UmVwbGF5OjpSZXBsYXlJbnB1dD4gYnVpbGRJ
bnNwZWN0b3JPYmplY3QKICAgICByZXR1cm4gaW5wdXRPYmplY3QucmVsZWFzZSgpOwogfQogCi1z
dGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSZXBsYXk6OlJlcGxheVNlc3Np
b24+IGJ1aWxkSW5zcGVjdG9yT2JqZWN0Rm9yU2Vzc2lvbihQYXNzUmVmUHRyPFJlcGxheVNlc3Np
b24+IHBycFNlc3Npb24pCitzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpS
ZXBsYXk6OlJlcGxheVNlc3Npb24+IGJ1aWxkVW5jaGVja2VkT2JqZWN0Rm9yU2Vzc2lvbihQYXNz
UmVmUHRyPFJlcGxheVNlc3Npb24+IHBycFNlc3Npb24pCiB7CiAgICAgUmVmUHRyPFJlcGxheVNl
c3Npb24+IHNlc3Npb24gPSBwcnBTZXNzaW9uOwogICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBcnJheTxTZWdtZW50SWRlbnRpZmllcj4+IHNlZ21lbnRzID0gSW5zcGVjdG9yOjpQcm90
b2NvbDo6QXJyYXk8U2VnbWVudElkZW50aWZpZXI+OjpjcmVhdGUoKTsKQEAgLTkwLDcgKzkwLDcg
QEAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UmVwbGF5OjpSZXBsYXlT
ZXNzaW9uPiBidWlsZEluc3BlY3Rvck9iamUKICAgICByZXR1cm4gc2Vzc2lvbk9iamVjdC5yZWxl
YXNlKCk7CiB9CiAKLXN0YXRpYyBJbnNwZWN0b3I6OlByb3RvY29sOjpSZXBsYXk6OlNlc3Npb25T
dGF0ZSBidWlsZEluc3BlY3Rvck9iamVjdEZvclNlc3Npb25TdGF0ZShXZWJDb3JlOjpTZXNzaW9u
U3RhdGUgc2Vzc2lvblN0YXRlKQorc3RhdGljIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlcGxheTo6
U2Vzc2lvblN0YXRlIGJ1aWxkVW5jaGVja2VkT2JqZWN0Rm9yU2Vzc2lvblN0YXRlKFdlYkNvcmU6
OlNlc3Npb25TdGF0ZSBzZXNzaW9uU3RhdGUpCiB7CiAgICAgc3dpdGNoIChzZXNzaW9uU3RhdGUp
IHsKICAgICBjYXNlIFdlYkNvcmU6OlNlc3Npb25TdGF0ZTo6Q2FwdHVyaW5nOiByZXR1cm4gSW5z
cGVjdG9yOjpQcm90b2NvbDo6UmVwbGF5OjpTZXNzaW9uU3RhdGU6OkNhcHR1cmluZzsKQEAgLTk5
LDcgKzk5LDcgQEAgc3RhdGljIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlcGxheTo6U2Vzc2lvblN0
YXRlIGJ1aWxkSW5zcGVjdG9yT2JqZWN0Rm9yU2Vzc2lvblMKICAgICB9CiB9CiAKLXN0YXRpYyBJ
bnNwZWN0b3I6OlByb3RvY29sOjpSZXBsYXk6OlNlZ21lbnRTdGF0ZSBidWlsZEluc3BlY3Rvck9i
amVjdEZvclNlZ21lbnRTdGF0ZShXZWJDb3JlOjpTZWdtZW50U3RhdGUgc2VnbWVudFN0YXRlKQor
c3RhdGljIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlcGxheTo6U2VnbWVudFN0YXRlIGJ1aWxkVW5j
aGVja2VkT2JqZWN0Rm9yU2VnbWVudFN0YXRlKFdlYkNvcmU6OlNlZ21lbnRTdGF0ZSBzZWdtZW50
U3RhdGUpCiB7CiAgICAgc3dpdGNoIChzZWdtZW50U3RhdGUpIHsKICAgICBjYXNlIFdlYkNvcmU6
OlNlZ21lbnRTdGF0ZTo6QXBwZW5kaW5nOiByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6UmVw
bGF5OjpTZWdtZW50U3RhdGU6OkFwcGVuZGluZzsKQEAgLTEyMSw3ICsxMjEsNyBAQCBwdWJsaWM6
CiAgICAgewogICAgICAgICBMT0coV2ViUmVwbGF5LCAiJS0yNXMgV3JpdGluZyAlNXp1OiAlc1xu
IiwgIltTZXJpYWxpemVJbnB1dF0iLCBpbmRleCwgaW5wdXQtPnR5cGUoKS5hc2NpaSgpLmRhdGEo
KSk7CiAKLSAgICAgICAgaWYgKFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSZXBsYXk6OlJl
cGxheUlucHV0PiBzZXJpYWxpemVkSW5wdXQgPSBidWlsZEluc3BlY3Rvck9iamVjdEZvcklucHV0
KCppbnB1dCwgaW5kZXgpKQorICAgICAgICBpZiAoUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlJlcGxheTo6UmVwbGF5SW5wdXQ+IHNlcmlhbGl6ZWRJbnB1dCA9IGJ1aWxkVW5jaGVja2VkT2Jq
ZWN0Rm9ySW5wdXQoKmlucHV0LCBpbmRleCkpCiAgICAgICAgICAgICBtX2lucHV0cy0+YWRkSXRl
bShzZXJpYWxpemVkSW5wdXQucmVsZWFzZSgpKTsKICAgICB9CiAKQEAgLTEzMCw3ICsxMzAsNyBA
QCBwcml2YXRlOgogICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0
b3I6OlByb3RvY29sOjpSZXBsYXk6OlJlcGxheUlucHV0Pj4gbV9pbnB1dHM7CiB9OwogCi1zdGF0
aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSZXBsYXk6OlNlc3Npb25TZWdtZW50
PiBidWlsZEluc3BlY3Rvck9iamVjdEZvclNlZ21lbnQoUGFzc1JlZlB0cjxSZXBsYXlTZXNzaW9u
U2VnbWVudD4gcHJwU2VnbWVudCkKK3N0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlJlcGxheTo6U2Vzc2lvblNlZ21lbnQ+IGJ1aWxkVW5jaGVja2VkT2JqZWN0Rm9yU2VnbWVu
dChQYXNzUmVmUHRyPFJlcGxheVNlc3Npb25TZWdtZW50PiBwcnBTZWdtZW50KQogewogICAgIFJl
ZlB0cjxSZXBsYXlTZXNzaW9uU2VnbWVudD4gc2VnbWVudCA9IHBycFNlZ21lbnQ7CiAgICAgUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlcGxh
eTo6UmVwbGF5SW5wdXRRdWV1ZT4+IHF1ZXVlc09iamVjdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlcGxheTo6UmVwbGF5SW5wdXRRdWV1ZT46OmNy
ZWF0ZSgpOwpAQCAtMzAyLDEyICszMDIsMTIgQEAgdm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6
cGxheWJhY2tQYXVzZWQoY29uc3QgUmVwbGF5UG9zaXRpb24mIHBvc2l0aW9uKQogewogICAgIExP
RyhXZWJSZXBsYXksICItLS0tLVJFUExBWSBQQVVTRUQtLS0tLSIpOwogCi0gICAgbV9mcm9udGVu
ZERpc3BhdGNoZXItPnBsYXliYWNrUGF1c2VkKGJ1aWxkSW5zcGVjdG9yT2JqZWN0Rm9yUG9zaXRp
b24ocG9zaXRpb24pKTsKKyAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+cGxheWJhY2tQYXVzZWQo
YnVpbGRVbmNoZWNrZWRPYmplY3RGb3JQb3NpdGlvbihwb3NpdGlvbikpOwogfQogCiB2b2lkIElu
c3BlY3RvclJlcGxheUFnZW50OjpwbGF5YmFja0hpdFBvc2l0aW9uKGNvbnN0IFJlcGxheVBvc2l0
aW9uJiBwb3NpdGlvbikKIHsKLSAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+cGxheWJhY2tIaXRQ
b3NpdGlvbihidWlsZEluc3BlY3Rvck9iamVjdEZvclBvc2l0aW9uKHBvc2l0aW9uKSwgbW9ub3Rv
bmljYWxseUluY3JlYXNpbmdUaW1lKCkpOworICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5wbGF5
YmFja0hpdFBvc2l0aW9uKGJ1aWxkVW5jaGVja2VkT2JqZWN0Rm9yUG9zaXRpb24ocG9zaXRpb24p
LCBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yUmVw
bGF5QWdlbnQ6OnBsYXliYWNrRmluaXNoZWQoKQpAQCAtMzM3LDcgKzMzNyw3IEBAIHZvaWQgSW5z
cGVjdG9yUmVwbGF5QWdlbnQ6OnN0b3BDYXB0dXJpbmcoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
KQogICAgIG1fcGFnZS5yZXBsYXlDb250cm9sbGVyKCkuc3RvcENhcHR1cmluZygpOwogfQogCi12
b2lkIEluc3BlY3RvclJlcGxheUFnZW50OjpyZXBsYXlUb1Bvc2l0aW9uKEVycm9yU3RyaW5nJiBl
cnJvclN0cmluZywgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIHBvc2l0aW9uT2JqZWN0
LCBib29sIGZhc3RSZXBsYXkpCit2b2lkIEluc3BlY3RvclJlcGxheUFnZW50OjpyZXBsYXlUb1Bv
c2l0aW9uKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4mIHBvc2l0aW9uT2JqZWN0LCBib29sIGZhc3RSZXBs
YXkpCiB7CiAgICAgUmVwbGF5UG9zaXRpb24gcG9zaXRpb247CiAgICAgaWYgKCFwb3NpdGlvbk9i
amVjdC0+Z2V0SW50ZWdlcihBU0NJSUxpdGVyYWwoInNlZ21lbnRPZmZzZXQiKSwgcG9zaXRpb24u
c2VnbWVudE9mZnNldCkpIHsKQEAgLTQ4MiwxNCArNDgyLDE0IEBAIFBhc3NSZWZQdHI8UmVwbGF5
U2Vzc2lvblNlZ21lbnQ+IEluc3BlY3RvclJlcGxheUFnZW50OjpmaW5kU2VnbWVudChFcnJvclN0
cmluZyYKIAogdm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6Y3VycmVudFJlcGxheVN0YXRlKEVy
cm9yU3RyaW5nJiwgSW5zcGVjdG9yOjpQcm90b2NvbDo6UmVwbGF5OjpTZXNzaW9uSWRlbnRpZmll
ciogc2Vzc2lvbklkZW50aWZpZXIsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxJbnNw
ZWN0b3I6OlByb3RvY29sOjpSZXBsYXk6OlNlZ21lbnRJZGVudGlmaWVyPiogc2VnbWVudElkZW50
aWZpZXIsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlcGxheTo6U2Vzc2lvblN0YXRlKiBzZXNzaW9u
U3RhdGUsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlcGxheTo6U2VnbWVudFN0YXRlKiBzZWdtZW50
U3RhdGUsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSZXBsYXk6OlJlcGxheVBvc2l0aW9u
PiYgcmVwbGF5UG9zaXRpb24pCiB7Ci0gICAgKnNlc3Npb25TdGF0ZSA9IGJ1aWxkSW5zcGVjdG9y
T2JqZWN0Rm9yU2Vzc2lvblN0YXRlKG1fcGFnZS5yZXBsYXlDb250cm9sbGVyKCkuc2Vzc2lvblN0
YXRlKCkpOwotICAgICpzZWdtZW50U3RhdGUgPSBidWlsZEluc3BlY3Rvck9iamVjdEZvclNlZ21l
bnRTdGF0ZShtX3BhZ2UucmVwbGF5Q29udHJvbGxlcigpLnNlZ21lbnRTdGF0ZSgpKTsKKyAgICAq
c2Vzc2lvblN0YXRlID0gYnVpbGRVbmNoZWNrZWRPYmplY3RGb3JTZXNzaW9uU3RhdGUobV9wYWdl
LnJlcGxheUNvbnRyb2xsZXIoKS5zZXNzaW9uU3RhdGUoKSk7CisgICAgKnNlZ21lbnRTdGF0ZSA9
IGJ1aWxkVW5jaGVja2VkT2JqZWN0Rm9yU2VnbWVudFN0YXRlKG1fcGFnZS5yZXBsYXlDb250cm9s
bGVyKCkuc2VnbWVudFN0YXRlKCkpOwogCiAgICAgKnNlc3Npb25JZGVudGlmaWVyID0gbV9wYWdl
LnJlcGxheUNvbnRyb2xsZXIoKS5sb2FkZWRTZXNzaW9uKCktPmlkZW50aWZpZXIoKTsKICAgICBp
ZiAobV9wYWdlLnJlcGxheUNvbnRyb2xsZXIoKS5sb2FkZWRTZWdtZW50KCkpCiAgICAgICAgICpz
ZWdtZW50SWRlbnRpZmllciA9IG1fcGFnZS5yZXBsYXlDb250cm9sbGVyKCkubG9hZGVkU2VnbWVu
dCgpLT5pZGVudGlmaWVyKCk7CiAKLSAgICByZXBsYXlQb3NpdGlvbiA9IGJ1aWxkSW5zcGVjdG9y
T2JqZWN0Rm9yUG9zaXRpb24obV9wYWdlLnJlcGxheUNvbnRyb2xsZXIoKS5jdXJyZW50UG9zaXRp
b24oKSk7CisgICAgcmVwbGF5UG9zaXRpb24gPSBidWlsZFVuY2hlY2tlZE9iamVjdEZvclBvc2l0
aW9uKG1fcGFnZS5yZXBsYXlDb250cm9sbGVyKCkuY3VycmVudFBvc2l0aW9uKCkpOwogfQogCiB2
b2lkIEluc3BlY3RvclJlcGxheUFnZW50OjpnZXRBdmFpbGFibGVTZXNzaW9ucyhFcnJvclN0cmlu
ZyYsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTZXNzaW9uSWRlbnRpZmllcj4+
JiBzZXNzaW9uc0xpc3QpCkBAIC01MDcsNyArNTA3LDcgQEAgdm9pZCBJbnNwZWN0b3JSZXBsYXlB
Z2VudDo6Z2V0U2Vzc2lvbkRhdGEoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBJbnNwZWN0b3I6
OlAKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHNlcmlhbGl6ZWRPYmplY3QgPSBidWls
ZEluc3BlY3Rvck9iamVjdEZvclNlc3Npb24oc2Vzc2lvbik7CisgICAgc2VyaWFsaXplZE9iamVj
dCA9IGJ1aWxkVW5jaGVja2VkT2JqZWN0Rm9yU2Vzc2lvbihzZXNzaW9uKTsKIH0KIAogdm9pZCBJ
bnNwZWN0b3JSZXBsYXlBZ2VudDo6Z2V0U2VnbWVudERhdGEoRXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW5nLCBJbnNwZWN0b3I6OlByb3RvY29sOjpSZXBsYXk6OlNlZ21lbnRJZGVudGlmaWVyIGlkZW50
aWZpZXIsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSZXBsYXk6OlNlc3Npb25TZWdtZW50
PiYgc2VyaWFsaXplZE9iamVjdCkKQEAgLTUxOCw3ICs1MTgsNyBAQCB2b2lkIEluc3BlY3RvclJl
cGxheUFnZW50OjpnZXRTZWdtZW50RGF0YShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIEluc3Bl
Y3Rvcjo6UAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgc2VyaWFsaXplZE9iamVjdCA9
IGJ1aWxkSW5zcGVjdG9yT2JqZWN0Rm9yU2VnbWVudChzZWdtZW50KTsKKyAgICBzZXJpYWxpemVk
T2JqZWN0ID0gYnVpbGRVbmNoZWNrZWRPYmplY3RGb3JTZWdtZW50KHNlZ21lbnQpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yUmVwbGF5QWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JSZXBsYXlBZ2VudC5oCmluZGV4IDEyYzE4NDZiNzUxYWYwODcyYzU3NzRhYWQ0MGMxMDBh
ZTFhZTg1MWUuLjlkMjE4Y2ZkY2NjNjBkMDRiYjU3OGNmZmY5MjI4NzI5ZGJmZDk1Y2QgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXBsYXlBZ2VudC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXBsYXlBZ2VudC5oCkBAIC05
NSw3ICs5NSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc3RhcnRDYXB0dXJpbmcoRXJy
b3JTdHJpbmcmKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgc3RvcENhcHR1cmluZyhFcnJv
clN0cmluZyYpIG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCB2b2lkIHJlcGxheVRvUG9zaXRpb24o
RXJyb3JTdHJpbmcmLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+Jiwg
Ym9vbCBzaG91bGRGYXN0Rm9yd2FyZCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHJlcGxh
eVRvUG9zaXRpb24oRXJyb3JTdHJpbmcmLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6VW5jaGVja2VkT2JqZWN0PiYsIGJvb2wgc2hvdWxkRmFzdEZvcndhcmQpIG92ZXJyaWRlOwog
ICAgIHZpcnR1YWwgdm9pZCByZXBsYXlUb0NvbXBsZXRpb24oRXJyb3JTdHJpbmcmLCBib29sIHNo
b3VsZEZhc3RGb3J3YXJkKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgcGF1c2VQbGF5YmFj
ayhFcnJvclN0cmluZyYpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBjYW5jZWxQbGF5YmFj
ayhFcnJvclN0cmluZyYpIG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclJlc291cmNlQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvclJlc291cmNlQWdlbnQuY3BwCmluZGV4IDYxYmJkOGYxNDgxMjJkYThlNDMy
ZmU4YTFhYmZiZDU4M2IzY2Y4ZDguLjM4YzQxMWIzMzA2ZmQ2MzIwY2NmZmU2ZDVlMzJlNjZkZGUy
MGUxOWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNv
dXJjZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVz
b3VyY2VBZ2VudC5jcHAKQEAgLTY2LDcgKzY2LDcgQEAKICNpbmNsdWRlICJXZWJTb2NrZXRGcmFt
ZS5oIgogI2luY2x1ZGUgIlhNTEh0dHBSZXF1ZXN0LmgiCiAjaW5jbHVkZSA8aW5zcGVjdG9yL0lk
ZW50aWZpZXJzRmFjdG9yeS5oPgotI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMu
aD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgogI2luY2x1
ZGUgPGluc3BlY3Rvci9TY3JpcHRDYWxsU3RhY2suaD4KICNpbmNsdWRlIDxpbnNwZWN0b3IvU2Ny
aXB0Q2FsbFN0YWNrRmFjdG9yeS5oPgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgpAQCAt
MTkyLDkgKzE5Miw5IEBAIHZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6d2lsbERlc3Ryb3lG
cm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yRGlzY29ubmVjdFJlCiAgICAgZGlzYWJsZSh1bnVz
ZWQpOwogfQogCi1zdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0
Rm9ySGVhZGVycyhjb25zdCBIVFRQSGVhZGVyTWFwJiBoZWFkZXJzKQorc3RhdGljIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBidWlsZE9iamVjdEZvckhl
YWRlcnMoY29uc3QgSFRUUEhlYWRlck1hcCYgaGVhZGVycykKIHsKLSAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBoZWFkZXJzT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAg
ICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBoZWFkZXJzT2Jq
ZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0OjpjcmVhdGUoKTsKICAg
ICAKICAgICBmb3IgKGNvbnN0IGF1dG8mIGhlYWRlciA6IGhlYWRlcnMpCiAgICAgICAgIGhlYWRl
cnNPYmplY3QtPnNldFN0cmluZyhoZWFkZXIua2V5LCBoZWFkZXIudmFsdWUpOwpAQCAtMjMyLDcg
KzIzMiw3IEBAIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6
OlJlc3BvbnNlPiBidWlsZE9iamVjdEZvclJlc291cmNlCiAgICAgICAgIHJldHVybiBudWxscHRy
OwogCiAgICAgZG91YmxlIHN0YXR1cyA9IHJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCk7Ci0gICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gaGVhZGVycyA9IGJ1aWxkT2JqZWN0Rm9ySGVhZGVycyhy
ZXNwb25zZS5odHRwSGVhZGVyRmllbGRzKCkpOworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpVbmNoZWNrZWRPYmplY3Q+IGhlYWRlcnMgPSBidWlsZE9iamVjdEZvckhlYWRlcnMocmVz
cG9uc2UuaHR0cEhlYWRlckZpZWxkcygpKTsKIAogICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpOZXR3b3JrOjpSZXNwb25zZT4gcmVzcG9uc2VPYmplY3QgPSBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpOZXR3b3JrOjpSZXNwb25zZTo6Y3JlYXRlKCkKICAgICAgICAgLnNldFVybChyZXNwb25z
ZS51cmwoKS5zdHJpbmcoKSkKQEAgLTMwMCw4ICszMDAsOCBAQCB2b2lkIEluc3BlY3RvclJlc291
cmNlQWdlbnQ6OndpbGxTZW5kUmVxdWVzdCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIERvY3Vt
ZW50TAogICAgIG1fcmVzb3VyY2VzRGF0YS0+c2V0UmVzb3VyY2VUeXBlKHJlcXVlc3RJZCwgdHlw
ZSk7CiAKICAgICBpZiAobV9leHRyYVJlcXVlc3RIZWFkZXJzKSB7Ci0gICAgICAgIEluc3BlY3Rv
ck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9leHRyYVJlcXVlc3RIZWFkZXJzLT5lbmQo
KTsKLSAgICAgICAgZm9yIChJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9l
eHRyYVJlcXVlc3RIZWFkZXJzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAg
SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0Ojpjb25zdF9pdGVyYXRvciBlbmQg
PSBtX2V4dHJhUmVxdWVzdEhlYWRlcnMtPmVuZCgpOworICAgICAgICBmb3IgKEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2V4dHJhUmVx
dWVzdEhlYWRlcnMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICAgICAgU3Ry
aW5nIHZhbHVlOwogICAgICAgICAgICAgaWYgKGl0LT52YWx1ZS0+YXNTdHJpbmcodmFsdWUpKQog
ICAgICAgICAgICAgICAgIHJlcXVlc3Quc2V0SFRUUEhlYWRlckZpZWxkKGl0LT5rZXksIHZhbHVl
KTsKQEAgLTU1Niw3ICs1NTYsNyBAQCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5l
dHdvcms6OkluaXRpYXRvcj4gSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6YnVpbAogICAgIGlmIChz
dGFja1RyYWNlICYmIHN0YWNrVHJhY2UtPnNpemUoKSA+IDApIHsKICAgICAgICAgUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OkluaXRpYXRvcj4gaW5pdGlhdG9yT2JqZWN0ID0g
SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6SW5pdGlhdG9yOjpjcmVhdGUoKQogICAgICAg
ICAgICAgLnNldFR5cGUoSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6SW5pdGlhdG9yOjpU
eXBlOjpTY3JpcHQpOwotICAgICAgICBpbml0aWF0b3JPYmplY3QtPnNldFN0YWNrVHJhY2Uoc3Rh
Y2tUcmFjZS0+YnVpbGRJbnNwZWN0b3JBcnJheSgpKTsKKyAgICAgICAgaW5pdGlhdG9yT2JqZWN0
LT5zZXRTdGFja1RyYWNlKHN0YWNrVHJhY2UtPmJ1aWxkVW5jaGVja2VkQXJyYXkoKSk7CiAgICAg
ICAgIHJldHVybiBpbml0aWF0b3JPYmplY3Q7CiAgICAgfQogCkBAIC02NTAsNyArNjUwLDcgQEAg
dm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjpkaXNhYmxlKEVycm9yU3RyaW5nJikKICAgICBt
X2V4dHJhUmVxdWVzdEhlYWRlcnMuY2xlYXIoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSZXNvdXJj
ZUFnZW50OjpzZXRFeHRyYUhUVFBIZWFkZXJzKEVycm9yU3RyaW5nJiwgY29uc3QgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4mIGhlYWRlcnMpCit2b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OnNl
dEV4dHJhSFRUUEhlYWRlcnMoRXJyb3JTdHJpbmcmLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiYgaGVhZGVycykKIHsKICAgICBtX2V4dHJhUmVxdWVz
dEhlYWRlcnMgPSBoZWFkZXJzOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvclJlc291cmNlQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JSZXNvdXJjZUFnZW50LmgKaW5kZXggMjgzOTIwZGZlNTYzMDc5MjFkNDY3NDllNjEz
NDAzMDRjY2Y1YzZjMi4uYWRmMmI3OWJiYTlhZTYyNzM1ZWE2OGRhYTI4MTdiMDljNDIyYjZmNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlQWdl
bnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2Vu
dC5oCkBAIC00Miw4ICs0Miw4IEBACiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKIAogbmFtZXNwYWNl
IEluc3BlY3RvciB7Ci1jbGFzcyBJbnNwZWN0b3JBcnJheTsKLWNsYXNzIEluc3BlY3Rvck9iamVj
dDsKK2NsYXNzIFVuY2hlY2tlZEFycmF5OworY2xhc3MgVW5jaGVja2VkT2JqZWN0OwogfQogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0xMjUsNyArMTI1LDcgQEAgcHVibGljOgogICAgIC8vIENh
bGxlZCBmcm9tIGZyb250ZW5kLgogICAgIHZpcnR1YWwgdm9pZCBlbmFibGUoRXJyb3JTdHJpbmcm
KSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgZGlzYWJsZShFcnJvclN0cmluZyYpIG92ZXJy
aWRlOwotICAgIHZpcnR1YWwgdm9pZCBzZXRFeHRyYUhUVFBIZWFkZXJzKEVycm9yU3RyaW5nJiwg
Y29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYpIG92ZXJyaWRlOworICAg
IHZpcnR1YWwgdm9pZCBzZXRFeHRyYUhUVFBIZWFkZXJzKEVycm9yU3RyaW5nJiwgY29uc3QgUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4mKSBvdmVycmlkZTsKICAg
ICB2aXJ0dWFsIHZvaWQgZ2V0UmVzcG9uc2VCb2R5KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5n
JiByZXF1ZXN0SWQsIFN0cmluZyogY29udGVudCwgYm9vbCogYmFzZTY0RW5jb2RlZCkgb3ZlcnJp
ZGU7CiAgICAgdmlydHVhbCB2b2lkIHJlcGxheVhIUihFcnJvclN0cmluZyYsIGNvbnN0IFN0cmlu
ZyYgcmVxdWVzdElkKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgY2FuQ2xlYXJCcm93c2Vy
Q2FjaGUoRXJyb3JTdHJpbmcmLCBib29sKikgb3ZlcnJpZGU7CkBAIC0xNDYsNyArMTQ2LDcgQEAg
cHJpdmF0ZToKICAgICBib29sIG1fZW5hYmxlZDsKICAgICBib29sIG1fY2FjaGVEaXNhYmxlZDsK
ICAgICBib29sIG1fbG9hZGluZ1hIUlN5bmNocm9ub3VzbHk7Ci0gICAgUmVmUHRyPEluc3BlY3Rv
cjo6SW5zcGVjdG9yT2JqZWN0PiBtX2V4dHJhUmVxdWVzdEhlYWRlcnM7CisgICAgUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gbV9leHRyYVJlcXVlc3RIZWFkZXJz
OwogCiAgICAgSGFzaFNldDx1bnNpZ25lZCBsb25nPiBtX2hpZGRlblJlcXVlc3RJZGVudGlmaWVy
czsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxl
U2hlZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQu
Y3BwCmluZGV4IGU0M2M2Y2QyNGU5NTkzOTFmMzYyODBjNGUxMjEwYzlmMjc1OTg2YWQuLjZiMmVi
NWU4ZTk0NWI5MjZkMGMwOWIxYTA0YWM5YzJlZmM5ZTdmODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAKQEAgLTU4LDcgKzU4LDcgQEAK
ICNpbmNsdWRlICJTdHlsZVNoZWV0TGlzdC5oIgogI2luY2x1ZGUgIldlYktpdENTU0tleWZyYW1l
c1J1bGUuaCIKICNpbmNsdWRlIDxpbnNwZWN0b3IvQ29udGVudFNlYXJjaFV0aWxpdGllcy5oPgot
I2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDxpbnNwZWN0
b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAjaW5jbHVkZSA8eWFyci9SZWd1bGFy
RXhwcmVzc2lvbi5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvclN0eWxlU2hlZXQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHls
ZVNoZWV0LmgKaW5kZXggYzFmYWQwOTU2MjM0ZmI5YjkwNTM0NjJhZmMwZjQ0NmMyYjY5MDAwNC4u
YWEyMmYyNTdmODMyOGJlMDIzMmYxMTAzZWYyOWViNmRlYTgwYmY3YiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5oCkBAIC0zMCw3ICszMCw3IEBA
CiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkluc3BlY3RvclN0eWxlVGV4
dEVkaXRvci5oIgogI2luY2x1ZGUgIkluc3BlY3RvcldlYlByb3RvY29sVHlwZXMuaCIKLSNpbmNs
dWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8aW5zcGVjdG9yL0lu
c3BlY3RvclByb3RvY29sVHlwZXMuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1
ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KQEAgLTYzLDEy
ICs2MywxMiBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAotICAgIGV4cGxpY2l0IEluc3BlY3Rv
ckNTU0lkKFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gdmFsdWUpCisgICAgZXhw
bGljaXQgSW5zcGVjdG9yQ1NTSWQoUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNo
ZWNrZWRPYmplY3Q+IHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKCF2YWx1ZS0+Z2V0U3RyaW5n
KCJzdHlsZVNoZWV0SWQiLCBtX3N0eWxlU2hlZXRJZCkpCiAgICAgICAgICAgICByZXR1cm47CiAK
LSAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IG9yZGluYWxWYWx1ZSA9
IHZhbHVlLT5nZXQoIm9yZGluYWwiKTsKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlVuY2hlY2tlZFZhbHVlPiBvcmRpbmFsVmFsdWUgPSB2YWx1ZS0+Z2V0KCJvcmRpbmFsIik7
CiAgICAgICAgIGlmICghb3JkaW5hbFZhbHVlIHx8ICFvcmRpbmFsVmFsdWUtPmFzSW50ZWdlciht
X29yZGluYWwpKQogICAgICAgICAgICAgbV9zdHlsZVNoZWV0SWQgPSAiIjsKICAgICB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5jcHAK
aW5kZXggYTg2Y2E4OTkwNDc5ZDNlNjVkZjdmYjA1MjU0ZDBjZDI2YzYyY2I4ZC4uYTA5ODlkYWI1
YmM1YmFmZmYxMTE3MzlmZmZjNGM4Zjc2YzlhMGQwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JUaW1lbGluZUFnZW50LmNwcApAQCAtMjcxLDcgKzI3MSw3
IEBAIHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6ZGlkRGlzcGF0Y2hFdmVudCgpCiAKIHZv
aWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6ZGlkSW52YWxpZGF0ZUxheW91dChGcmFtZSogZnJh
bWUpCiB7Ci0gICAgYXBwZW5kUmVjb3JkKEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCksIFRpbWVs
aW5lUmVjb3JkVHlwZTo6SW52YWxpZGF0ZUxheW91dCwgdHJ1ZSwgZnJhbWUpOworICAgIGFwcGVu
ZFJlY29yZChJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q6OmNyZWF0ZSgpLCBU
aW1lbGluZVJlY29yZFR5cGU6OkludmFsaWRhdGVMYXlvdXQsIHRydWUsIGZyYW1lKTsKIH0KIAog
dm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50Ojp3aWxsTGF5b3V0KEZyYW1lKiBmcmFtZSkKQEAg
LTMwOSwxMiArMzA5LDEyIEBAIHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6ZGlkTGF5b3V0
KFJlbmRlck9iamVjdCogcm9vdCkKIAogdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpkaWRT
Y2hlZHVsZVN0eWxlUmVjYWxjdWxhdGlvbihGcmFtZSogZnJhbWUpCiB7Ci0gICAgYXBwZW5kUmVj
b3JkKEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCksIFRpbWVsaW5lUmVjb3JkVHlwZTo6U2NoZWR1
bGVTdHlsZVJlY2FsY3VsYXRpb24sIHRydWUsIGZyYW1lKTsKKyAgICBhcHBlbmRSZWNvcmQoSW5z
cGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0OjpjcmVhdGUoKSwgVGltZWxpbmVSZWNv
cmRUeXBlOjpTY2hlZHVsZVN0eWxlUmVjYWxjdWxhdGlvbiwgdHJ1ZSwgZnJhbWUpOwogfQogCiB2
b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OndpbGxSZWNhbGN1bGF0ZVN0eWxlKEZyYW1lKiBm
cmFtZSkKIHsKLSAgICBwdXNoQ3VycmVudFJlY29yZChJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
LCBUaW1lbGluZVJlY29yZFR5cGU6OlJlY2FsY3VsYXRlU3R5bGVzLCB0cnVlLCBmcmFtZSk7Cisg
ICAgcHVzaEN1cnJlbnRSZWNvcmQoSW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0
OjpjcmVhdGUoKSwgVGltZWxpbmVSZWNvcmRUeXBlOjpSZWNhbGN1bGF0ZVN0eWxlcywgdHJ1ZSwg
ZnJhbWUpOwogfQogCiB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmRpZFJlY2FsY3VsYXRl
U3R5bGUoKQpAQCAtMzI0LDcgKzMyNCw3IEBAIHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6
ZGlkUmVjYWxjdWxhdGVTdHlsZSgpCiAKIHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6d2ls
bFBhaW50KEZyYW1lKiBmcmFtZSkKIHsKLSAgICBwdXNoQ3VycmVudFJlY29yZChJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpLCBUaW1lbGluZVJlY29yZFR5cGU6OlBhaW50LCB0cnVlLCBmcmFtZSk7
CisgICAgcHVzaEN1cnJlbnRSZWNvcmQoSW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2Jq
ZWN0OjpjcmVhdGUoKSwgVGltZWxpbmVSZWNvcmRUeXBlOjpQYWludCwgdHJ1ZSwgZnJhbWUpOwog
fQogCiB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmRpZFBhaW50KFJlbmRlck9iamVjdCog
cmVuZGVyZXIsIGNvbnN0IExheW91dFJlY3QmIGNsaXBSZWN0KQpAQCAtMzM5LDcgKzMzOSw3IEBA
IHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6ZGlkUGFpbnQoUmVuZGVyT2JqZWN0KiByZW5k
ZXJlciwgY29uc3QgTGF5b3V0UmVjdCYKIAogdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50Ojp3
aWxsU2Nyb2xsKEZyYW1lKiBmcmFtZSkKIHsKLSAgICBwdXNoQ3VycmVudFJlY29yZChJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpLCBUaW1lbGluZVJlY29yZFR5cGU6OlNjcm9sbExheWVyLCBmYWxz
ZSwgZnJhbWUpOworICAgIHB1c2hDdXJyZW50UmVjb3JkKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVu
Y2hlY2tlZE9iamVjdDo6Y3JlYXRlKCksIFRpbWVsaW5lUmVjb3JkVHlwZTo6U2Nyb2xsTGF5ZXIs
IGZhbHNlLCBmcmFtZSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6ZGlkU2Ny
b2xsKCkKQEAgLTY0Miw3ICs2NDIsNyBAQCBzdGF0aWMgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGlt
ZWxpbmU6OkV2ZW50VHlwZSB0b1Byb3RvY29sKFRpbWVsaW5lUmVjb3JkVHlwZSB0eQogICAgIHJl
dHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpUaW1lU3RhbXA7
CiB9CiAKLXZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6YWRkUmVjb3JkVG9UaW1lbGluZShQ
YXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcHJwUmVjb3JkLCBUaW1lbGluZVJlY29yZFR5cGUg
dHlwZSkKK3ZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6YWRkUmVjb3JkVG9UaW1lbGluZShQ
YXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gcHJwUmVjb3Jk
LCBUaW1lbGluZVJlY29yZFR5cGUgdHlwZSkKIHsKICAgICBwcnBSZWNvcmQtPnNldFN0cmluZygi
dHlwZSIsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OmdldFdlYkVudW1Db25zdGFudFZhbHVlKHRvUHJv
dG9jb2wodHlwZSkpKTsKIApAQCAtNjU2LDcgKzY1Niw3IEBAIHZvaWQgSW5zcGVjdG9yVGltZWxp
bmVBZ2VudDo6YWRkUmVjb3JkVG9UaW1lbGluZShQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
cHJwCiAgICAgfQogfQogCi12b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnNldEZyYW1lSWRl
bnRpZmllcihJbnNwZWN0b3JPYmplY3QqIHJlY29yZCwgRnJhbWUqIGZyYW1lKQordm9pZCBJbnNw
ZWN0b3JUaW1lbGluZUFnZW50OjpzZXRGcmFtZUlkZW50aWZpZXIoSW5zcGVjdG9yOjpQcm90b2Nv
bDo6VW5jaGVja2VkT2JqZWN0KiByZWNvcmQsIEZyYW1lKiBmcmFtZSkKIHsKICAgICBpZiAoIWZy
YW1lIHx8ICFtX3BhZ2VBZ2VudCkKICAgICAgICAgcmV0dXJuOwpAQCAtNzAwLDE1ICs3MDAsMTUg
QEAgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6SW5zcGVjdG9yVGltZWxpbmVBZ2VudChJbnN0cnVt
ZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW4KIHsKIH0KIAotdm9pZCBJbnNwZWN0b3JUaW1lbGlu
ZUFnZW50OjphcHBlbmRSZWNvcmQoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEsIFRp
bWVsaW5lUmVjb3JkVHlwZSB0eXBlLCBib29sIGNhcHR1cmVDYWxsU3RhY2ssIEZyYW1lKiBmcmFt
ZSkKK3ZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6YXBwZW5kUmVjb3JkKFBhc3NSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBkYXRhLCBUaW1lbGluZVJlY29y
ZFR5cGUgdHlwZSwgYm9vbCBjYXB0dXJlQ2FsbFN0YWNrLCBGcmFtZSogZnJhbWUpCiB7Ci0gICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVjb3JkID0gVGltZWxpbmVSZWNvcmRGYWN0b3J5Ojpj
cmVhdGVHZW5lcmljUmVjb3JkKHRpbWVzdGFtcCgpLCBjYXB0dXJlQ2FsbFN0YWNrID8gbV9tYXhD
YWxsU3RhY2tEZXB0aCA6IDApOworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNo
ZWNrZWRPYmplY3Q+IHJlY29yZCA9IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlR2VuZXJp
Y1JlY29yZCh0aW1lc3RhbXAoKSwgY2FwdHVyZUNhbGxTdGFjayA/IG1fbWF4Q2FsbFN0YWNrRGVw
dGggOiAwKTsKICAgICByZWNvcmQtPnNldE9iamVjdCgiZGF0YSIsIGRhdGEpOwogICAgIHNldEZy
YW1lSWRlbnRpZmllcihyZWNvcmQuZ2V0KCksIGZyYW1lKTsKICAgICBhZGRSZWNvcmRUb1RpbWVs
aW5lKHJlY29yZC5yZWxlYXNlKCksIHR5cGUpOwogfQogCi12b2lkIEluc3BlY3RvclRpbWVsaW5l
QWdlbnQ6OnNlbmRFdmVudChQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZXZlbnQpCit2b2lk
IEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnNlbmRFdmVudChQYXNzUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gZXZlbnQpCiB7CiAgICAgaWYgKCFtX2Zyb250ZW5k
RGlzcGF0Y2hlcikKICAgICAgICAgcmV0dXJuOwpAQCAtNzE4LDE0ICs3MTgsMTQgQEAgdm9pZCBJ
bnNwZWN0b3JUaW1lbGluZUFnZW50OjpzZW5kRXZlbnQoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IGV2ZW50KQogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5ldmVudFJlY29yZGVkKHJlY29y
ZENoZWNrZWQucmVsZWFzZSgpKTsKIH0KIAotSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6VGltZWxp
bmVSZWNvcmRFbnRyeSBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpjcmVhdGVSZWNvcmRFbnRyeShQ
YXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGF0YSwgVGltZWxpbmVSZWNvcmRUeXBlIHR5cGUs
IGJvb2wgY2FwdHVyZUNhbGxTdGFjaywgRnJhbWUqIGZyYW1lKQorSW5zcGVjdG9yVGltZWxpbmVB
Z2VudDo6VGltZWxpbmVSZWNvcmRFbnRyeSBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpjcmVhdGVS
ZWNvcmRFbnRyeShQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVj
dD4gZGF0YSwgVGltZWxpbmVSZWNvcmRUeXBlIHR5cGUsIGJvb2wgY2FwdHVyZUNhbGxTdGFjaywg
RnJhbWUqIGZyYW1lKQogewotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlY29yZCA9IFRp
bWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlR2VuZXJpY1JlY29yZCh0aW1lc3RhbXAoKSwgY2Fw
dHVyZUNhbGxTdGFjayA/IG1fbWF4Q2FsbFN0YWNrRGVwdGggOiAwKTsKKyAgICBSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiByZWNvcmQgPSBUaW1lbGluZVJlY29y
ZEZhY3Rvcnk6OmNyZWF0ZUdlbmVyaWNSZWNvcmQodGltZXN0YW1wKCksIGNhcHR1cmVDYWxsU3Rh
Y2sgPyBtX21heENhbGxTdGFja0RlcHRoIDogMCk7CiAgICAgc2V0RnJhbWVJZGVudGlmaWVyKHJl
Y29yZC5nZXQoKSwgZnJhbWUpOwotICAgIHJldHVybiBUaW1lbGluZVJlY29yZEVudHJ5KHJlY29y
ZC5yZWxlYXNlKCksIGRhdGEsIEluc3BlY3RvckFycmF5OjpjcmVhdGUoKSwgdHlwZSk7CisgICAg
cmV0dXJuIFRpbWVsaW5lUmVjb3JkRW50cnkocmVjb3JkLnJlbGVhc2UoKSwgZGF0YSwgSW5zcGVj
dG9yOjpQcm90b2NvbDo6VW5jaGVja2VkQXJyYXk6OmNyZWF0ZSgpLCB0eXBlKTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpwdXNoQ3VycmVudFJlY29yZChQYXNzUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gZGF0YSwgVGltZWxpbmVSZWNvcmRUeXBlIHR5cGUsIGJvb2wgY2FwdHVy
ZUNhbGxTdGFjaywgRnJhbWUqIGZyYW1lKQordm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50Ojpw
dXNoQ3VycmVudFJlY29yZChQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tl
ZE9iamVjdD4gZGF0YSwgVGltZWxpbmVSZWNvcmRUeXBlIHR5cGUsIGJvb2wgY2FwdHVyZUNhbGxT
dGFjaywgRnJhbWUqIGZyYW1lKQogewogICAgIHB1c2hDdXJyZW50UmVjb3JkKGNyZWF0ZVJlY29y
ZEVudHJ5KGRhdGEsIHR5cGUsIGNhcHR1cmVDYWxsU3RhY2ssIGZyYW1lKSk7CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuaAppbmRleCBh
NGNiNGM0ZTJlZjIzZWNkMzdkMGVmMDRkYzE1M2E5ODZjNjVmNGJlLi4zOTJkYmMxZGQ3MGQ0MWZh
ODIxM2ExZWVmN2NkZTQzNTUyZWI2YjlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JUaW1lbGluZUFnZW50LmgKQEAgLTM4LDcgKzM4LDcgQEAKICNpbmNsdWRl
ICJJbnNwZWN0b3JXZWJCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JX
ZWJGcm9udGVuZERpc3BhdGNoZXJzLmgiCiAjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgotI2luY2x1
ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5z
cGVjdG9yUHJvdG9jb2xUeXBlcy5oPgogI2luY2x1ZGUgPGluc3BlY3Rvci9TY3JpcHREZWJ1Z0xp
c3RlbmVyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi9XZWFrUHRy
Lmg+CkBAIC0yMzQsMzMgKzIzNCwzMyBAQCBwcml2YXRlOgogICAgIHN0cnVjdCBUaW1lbGluZVJl
Y29yZEVudHJ5IHsKICAgICAgICAgVGltZWxpbmVSZWNvcmRFbnRyeSgpCiAgICAgICAgICAgICA6
IHR5cGUoVGltZWxpbmVSZWNvcmRUeXBlOjpFdmVudERpc3BhdGNoKSB7IH0KLSAgICAgICAgVGlt
ZWxpbmVSZWNvcmRFbnRyeShQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBy
ZWNvcmQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGRhdGEsIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4gY2hpbGRyZW4sIFRpbWVsaW5lUmVjb3Jk
VHlwZSB0eXBlKQorICAgICAgICBUaW1lbGluZVJlY29yZEVudHJ5KFBhc3NSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiByZWNvcmQsIFBhc3NSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBkYXRhLCBQYXNzUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlVuY2hlY2tlZEFycmF5PiBjaGlsZHJlbiwgVGltZWxpbmVSZWNvcmRUeXBl
IHR5cGUpCiAgICAgICAgICAgICA6IHJlY29yZChyZWNvcmQpLCBkYXRhKGRhdGEpLCBjaGlsZHJl
bihjaGlsZHJlbiksIHR5cGUodHlwZSkKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAg
UmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiByZWNvcmQ7Ci0gICAgICAgIFJlZlB0
cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gZGF0YTsKLSAgICAgICAgUmVmUHRyPEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yQXJyYXk+IGNoaWxkcmVuOworICAgICAgICBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiByZWNvcmQ7CisgICAgICAgIFJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IGRhdGE7CisgICAgICAgIFJlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRBcnJheT4gY2hpbGRyZW47CiAgICAgICAgIFRp
bWVsaW5lUmVjb3JkVHlwZSB0eXBlOwogICAgIH07CiAKICAgICB2b2lkIGludGVybmFsU3RhcnQo
Y29uc3QgaW50KiBtYXhDYWxsU3RhY2tEZXB0aCA9IG51bGxwdHIpOwogICAgIHZvaWQgaW50ZXJu
YWxTdG9wKCk7CiAKLSAgICB2b2lkIHNlbmRFdmVudChQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5z
cGVjdG9yT2JqZWN0Pik7Ci0gICAgdm9pZCBhcHBlbmRSZWNvcmQoUGFzc1JlZlB0cjxJbnNwZWN0
b3I6Okluc3BlY3Rvck9iamVjdD4gZGF0YSwgVGltZWxpbmVSZWNvcmRUeXBlLCBib29sIGNhcHR1
cmVDYWxsU3RhY2ssIEZyYW1lKik7Ci0gICAgdm9pZCBwdXNoQ3VycmVudFJlY29yZChQYXNzUmVm
UHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiwgVGltZWxpbmVSZWNvcmRUeXBlLCBib29s
IGNhcHR1cmVDYWxsU3RhY2ssIEZyYW1lKik7CisgICAgdm9pZCBzZW5kRXZlbnQoUGFzc1JlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+KTsKKyAgICB2b2lkIGFwcGVu
ZFJlY29yZChQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4g
ZGF0YSwgVGltZWxpbmVSZWNvcmRUeXBlLCBib29sIGNhcHR1cmVDYWxsU3RhY2ssIEZyYW1lKik7
CisgICAgdm9pZCBwdXNoQ3VycmVudFJlY29yZChQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlVuY2hlY2tlZE9iamVjdD4sIFRpbWVsaW5lUmVjb3JkVHlwZSwgYm9vbCBjYXB0dXJlQ2Fs
bFN0YWNrLCBGcmFtZSopOwogICAgIHZvaWQgcHVzaEN1cnJlbnRSZWNvcmQoY29uc3QgVGltZWxp
bmVSZWNvcmRFbnRyeSYgcmVjb3JkKSB7IG1fcmVjb3JkU3RhY2suYXBwZW5kKHJlY29yZCk7IH0K
IAotICAgIFRpbWVsaW5lUmVjb3JkRW50cnkgY3JlYXRlUmVjb3JkRW50cnkoUGFzc1JlZlB0cjxJ
bnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gZGF0YSwgVGltZWxpbmVSZWNvcmRUeXBlLCBib29s
IGNhcHR1cmVDYWxsU3RhY2ssIEZyYW1lKik7CisgICAgVGltZWxpbmVSZWNvcmRFbnRyeSBjcmVh
dGVSZWNvcmRFbnRyeShQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9i
amVjdD4gZGF0YSwgVGltZWxpbmVSZWNvcmRUeXBlLCBib29sIGNhcHR1cmVDYWxsU3RhY2ssIEZy
YW1lKik7CiAKLSAgICB2b2lkIHNldEZyYW1lSWRlbnRpZmllcihJbnNwZWN0b3I6Okluc3BlY3Rv
ck9iamVjdCogcmVjb3JkLCBGcmFtZSopOworICAgIHZvaWQgc2V0RnJhbWVJZGVudGlmaWVyKElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdCogcmVjb3JkLCBGcmFtZSopOwogCiAg
ICAgdm9pZCBkaWRDb21wbGV0ZVJlY29yZEVudHJ5KGNvbnN0IFRpbWVsaW5lUmVjb3JkRW50cnkm
KTsKICAgICB2b2lkIGRpZENvbXBsZXRlQ3VycmVudFJlY29yZChUaW1lbGluZVJlY29yZFR5cGUp
OwogCi0gICAgdm9pZCBhZGRSZWNvcmRUb1RpbWVsaW5lKFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJ
bnNwZWN0b3JPYmplY3Q+LCBUaW1lbGluZVJlY29yZFR5cGUpOworICAgIHZvaWQgYWRkUmVjb3Jk
VG9UaW1lbGluZShQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVj
dD4sIFRpbWVsaW5lUmVjb3JkVHlwZSk7CiAgICAgdm9pZCBjbGVhclJlY29yZFN0YWNrKCk7CiAK
ICAgICB2b2lkIGxvY2FsVG9QYWdlUXVhZChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBMYXlv
dXRSZWN0JiwgRmxvYXRRdWFkKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yV29ya2VyQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvcldvcmtlckFnZW50LmNwcAppbmRleCBlZTVhYmIzMjg0OThlODBmZDUxNWFmMWI0ZWJk
ZDNlMzE1NDE3MTIzLi4zZDNlYzE0MDkwNDdlY2RkODM2YmNiNDdjNzMyYzk5NDFmNmUwOWIyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yV29ya2VyQWdlbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JXb3JrZXJBZ2VudC5j
cHAKQEAgLTM5LDcgKzM5LDcgQEAKICNpbmNsdWRlICJJbnN0cnVtZW50aW5nQWdlbnRzLmgiCiAj
aW5jbHVkZSAiVVJMLmgiCiAjaW5jbHVkZSAiV29ya2VyR2xvYmFsU2NvcGVQcm94eS5oIgotI2lu
Y2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3Iv
SW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogdXNp
bmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKQEAgLTg0LDExICs4NCwxMSBAQCBwcml2YXRlOgogICAg
IC8vIFdvcmtlckdsb2JhbFNjb3BlUHJveHk6OlBhZ2VJbnNwZWN0b3IgaW1wbGVtZW50YXRpb24K
ICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hNZXNzYWdlRnJvbVdvcmtlcihjb25zdCBTdHJpbmcm
IG1lc3NhZ2VTdHJpbmcpIG92ZXJyaWRlCiAgICAgewotICAgICAgICBSZWZQdHI8SW5zcGVjdG9y
VmFsdWU+IHBhcnNlZE1lc3NhZ2U7Ci0gICAgICAgIGlmICghSW5zcGVjdG9yVmFsdWU6OnBhcnNl
SlNPTihtZXNzYWdlU3RyaW5nLCBwYXJzZWRNZXNzYWdlKSkKKyAgICAgICAgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZFZhbHVlPiBwYXJzZWRNZXNzYWdlOworICAgICAgICBp
ZiAoIUluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZFZhbHVlOjpwYXJzZUpTT04obWVzc2Fn
ZVN0cmluZywgcGFyc2VkTWVzc2FnZSkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbWVzc2FnZU9iamVjdDsKKyAgICAgICAgUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gbWVzc2FnZU9iamVjdDsKICAgICAg
ICAgaWYgKCFwYXJzZWRNZXNzYWdlLT5hc09iamVjdChtZXNzYWdlT2JqZWN0KSkKICAgICAgICAg
ICAgIHJldHVybjsKIApAQCAtMTc0LDcgKzE3NCw3IEBAIHZvaWQgSW5zcGVjdG9yV29ya2VyQWdl
bnQ6OmRpc2Nvbm5lY3RGcm9tV29ya2VyKEVycm9yU3RyaW5nJiBlcnJvciwgaW50IHdvcmtlcklk
CiAgICAgICAgIGVycm9yID0gQVNDSUlMaXRlcmFsKCJXb3JrZXIgaXMgZ29uZSIpOwogfQogCi12
b2lkIEluc3BlY3RvcldvcmtlckFnZW50OjpzZW5kTWVzc2FnZVRvV29ya2VyKEVycm9yU3RyaW5n
JiBlcnJvciwgaW50IHdvcmtlcklkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgbWVz
c2FnZSkKK3ZvaWQgSW5zcGVjdG9yV29ya2VyQWdlbnQ6OnNlbmRNZXNzYWdlVG9Xb3JrZXIoRXJy
b3JTdHJpbmcmIGVycm9yLCBpbnQgd29ya2VySWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+JiBtZXNzYWdlKQogewogICAgIFdvcmtlckZyb250ZW5k
Q2hhbm5lbCogY2hhbm5lbCA9IG1faWRUb0NoYW5uZWwuZ2V0KHdvcmtlcklkKTsKICAgICBpZiAo
Y2hhbm5lbCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JX
b3JrZXJBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvcldvcmtlckFn
ZW50LmgKaW5kZXggNTE4NGYxZTY0ZWNmOWZhM2UxNjZkZjRlMmViZjIyZWFjZjk4ZWYzMi4uYmZk
NjNiYWM0YTgxMWZhZmIxZjdiYTFjODA0MWM4MTVhMTBiMWJkMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvcldvcmtlckFnZW50LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvcldvcmtlckFnZW50LmgKQEAgLTM3LDcgKzM3LDcgQEAK
ICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKLWNsYXNz
IEluc3BlY3Rvck9iamVjdDsKK2NsYXNzIFVuY2hlY2tlZE9iamVjdDsKIGNsYXNzIEluc3BlY3Rv
cldvcmtlckZyb250ZW5kRGlzcGF0Y2hlcjsKIH0KIApAQCAtNjgsNyArNjgsNyBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCB2b2lkIGNhbkluc3BlY3RXb3JrZXJzKEVycm9yU3RyaW5nJiwgYm9vbCop
IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBjb25uZWN0VG9Xb3JrZXIoRXJyb3JTdHJpbmcm
LCBpbnQgd29ya2VySWQpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBkaXNjb25uZWN0RnJv
bVdvcmtlcihFcnJvclN0cmluZyYsIGludCB3b3JrZXJJZCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVh
bCB2b2lkIHNlbmRNZXNzYWdlVG9Xb3JrZXIoRXJyb3JTdHJpbmcmLCBpbnQgd29ya2VySWQsIGNv
bnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mIG1lc3NhZ2UpIG92ZXJyaWRl
OworICAgIHZpcnR1YWwgdm9pZCBzZW5kTWVzc2FnZVRvV29ya2VyKEVycm9yU3RyaW5nJiwgaW50
IHdvcmtlcklkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2Jq
ZWN0PiYgbWVzc2FnZSkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHNldEF1dG9jb25uZWN0
VG9Xb3JrZXJzKEVycm9yU3RyaW5nJiwgYm9vbCB2YWx1ZSkgb3ZlcnJpZGU7CiAKIHByaXZhdGU6
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvVGltZWxpbmVSZWNvcmRGYWN0
b3J5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9UaW1lbGluZVJlY29yZEZhY3Rvcnku
Y3BwCmluZGV4IDNmZWM0MDBhYjEyMjQyNThkNzg4ZDI5ZDNlNjViOTVjMTZiYzIzMGMuLmYzYzFl
NmUyODYzMTgxNmFiZmNjZmNmNGM4MGZjYmZhOTg1NzQ1MzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9UaW1lbGluZVJlY29yZEZhY3RvcnkuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9UaW1lbGluZVJlY29yZEZhY3RvcnkuY3BwCkBAIC01MywxMzggKzUz
LDEzOCBAQCB1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNy
ZWF0ZUdlbmVyaWNSZWNvcmQoZG91YmxlIHN0YXJ0VGltZSwgaW50IG1heENhbGxTdGFja0RlcHRo
KQorUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IFRpbWVs
aW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlR2VuZXJpY1JlY29yZChkb3VibGUgc3RhcnRUaW1lLCBp
bnQgbWF4Q2FsbFN0YWNrRGVwdGgpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVj
b3JkID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiByZWNvcmQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpV
bmNoZWNrZWRPYmplY3Q6OmNyZWF0ZSgpOwogICAgIHJlY29yZC0+c2V0RG91YmxlKCJzdGFydFRp
bWUiLCBzdGFydFRpbWUpOwogCiAgICAgaWYgKG1heENhbGxTdGFja0RlcHRoKSB7CiAgICAgICAg
IFJlZlB0cjxTY3JpcHRDYWxsU3RhY2s+IHN0YWNrVHJhY2UgPSBjcmVhdGVTY3JpcHRDYWxsU3Rh
Y2soSlNNYWluVGhyZWFkRXhlY1N0YXRlOjpjdXJyZW50U3RhdGUoKSwgbWF4Q2FsbFN0YWNrRGVw
dGgpOwogICAgICAgICBpZiAoc3RhY2tUcmFjZSAmJiBzdGFja1RyYWNlLT5zaXplKCkpCi0gICAg
ICAgICAgICByZWNvcmQtPnNldFZhbHVlKCJzdGFja1RyYWNlIiwgc3RhY2tUcmFjZS0+YnVpbGRJ
bnNwZWN0b3JBcnJheSgpKTsKKyAgICAgICAgICAgIHJlY29yZC0+c2V0VmFsdWUoInN0YWNrVHJh
Y2UiLCBzdGFja1RyYWNlLT5idWlsZFVuY2hlY2tlZEFycmF5KCkpOwogICAgIH0KICAgICByZXR1
cm4gcmVjb3JkLnJlbGVhc2UoKTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IFRp
bWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlQmFja2dyb3VuZFJlY29yZChkb3VibGUgc3RhcnRU
aW1lLCBjb25zdCBTdHJpbmcmIHRocmVhZE5hbWUpCitQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVCYWNr
Z3JvdW5kUmVjb3JkKGRvdWJsZSBzdGFydFRpbWUsIGNvbnN0IFN0cmluZyYgdGhyZWFkTmFtZSkK
IHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZWNvcmQgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmpl
Y3Q+IHJlY29yZCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdDo6Y3JlYXRl
KCk7CiAgICAgcmVjb3JkLT5zZXREb3VibGUoInN0YXJ0VGltZSIsIHN0YXJ0VGltZSk7CiAgICAg
cmVjb3JkLT5zZXRTdHJpbmcoInRocmVhZCIsIHRocmVhZE5hbWUpOwogICAgIHJldHVybiByZWNv
cmQucmVsZWFzZSgpOwogfQogCi1QYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gVGltZWxpbmVS
ZWNvcmRGYWN0b3J5OjpjcmVhdGVHQ0V2ZW50RGF0YShjb25zdCBzaXplX3QgdXNlZEhlYXBTaXpl
RGVsdGEpCitQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4g
VGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVHQ0V2ZW50RGF0YShjb25zdCBzaXplX3QgdXNl
ZEhlYXBTaXplRGVsdGEpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGF0YSA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlVuY2hlY2tlZE9iamVjdD4gZGF0YSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9i
amVjdDo6Y3JlYXRlKCk7CiAgICAgZGF0YS0+c2V0SW50ZWdlcigidXNlZEhlYXBTaXplRGVsdGEi
LCB1c2VkSGVhcFNpemVEZWx0YSk7CiAgICAgcmV0dXJuIGRhdGEucmVsZWFzZSgpOwogfQogCi1Q
YXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVG
dW5jdGlvbkNhbGxEYXRhKGNvbnN0IFN0cmluZyYgc2NyaXB0TmFtZSwgaW50IHNjcmlwdExpbmUp
CitQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gVGltZWxp
bmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVGdW5jdGlvbkNhbGxEYXRhKGNvbnN0IFN0cmluZyYgc2Ny
aXB0TmFtZSwgaW50IHNjcmlwdExpbmUpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
ZGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gZGF0YSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVu
Y2hlY2tlZE9iamVjdDo6Y3JlYXRlKCk7CiAgICAgZGF0YS0+c2V0U3RyaW5nKCJzY3JpcHROYW1l
Iiwgc2NyaXB0TmFtZSk7CiAgICAgZGF0YS0+c2V0SW50ZWdlcigic2NyaXB0TGluZSIsIHNjcmlw
dExpbmUpOwogICAgIHJldHVybiBkYXRhLnJlbGVhc2UoKTsKIH0KIAotUGFzc1JlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlQ29uc29sZVByb2ZpbGVE
YXRhKGNvbnN0IFN0cmluZyYgdGl0bGUpCitQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlVuY2hlY2tlZE9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVDb25zb2xlUHJv
ZmlsZURhdGEoY29uc3QgU3RyaW5nJiB0aXRsZSkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBkYXRhID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBkYXRhID0gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6VW5jaGVja2VkT2JqZWN0OjpjcmVhdGUoKTsKICAgICBkYXRhLT5zZXRTdHJpbmcoInRpdGxl
IiwgdGl0bGUpOwogICAgIHJldHVybiBkYXRhLnJlbGVhc2UoKTsKIH0KIAotUGFzc1JlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlUHJvYmVTYW1wbGVE
YXRhKGNvbnN0IFNjcmlwdEJyZWFrcG9pbnRBY3Rpb24mIGFjdGlvbiwgaW50IGhpdENvdW50KQor
UGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IFRpbWVsaW5l
UmVjb3JkRmFjdG9yeTo6Y3JlYXRlUHJvYmVTYW1wbGVEYXRhKGNvbnN0IFNjcmlwdEJyZWFrcG9p
bnRBY3Rpb24mIGFjdGlvbiwgaW50IGhpdENvdW50KQogewotICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IGRhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IGRhdGEgPSBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpVbmNoZWNrZWRPYmplY3Q6OmNyZWF0ZSgpOwogICAgIGRhdGEtPnNldEludGVnZXIoQVND
SUlMaXRlcmFsKCJwcm9iZUlkIiksIGFjdGlvbi5pZGVudGlmaWVyKTsKICAgICBkYXRhLT5zZXRJ
bnRlZ2VyKEFTQ0lJTGl0ZXJhbCgiaGl0Q291bnQiKSwgaGl0Q291bnQpOwogICAgIHJldHVybiBk
YXRhLnJlbGVhc2UoKTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IFRpbWVsaW5l
UmVjb3JkRmFjdG9yeTo6Y3JlYXRlRXZlbnREaXNwYXRjaERhdGEoY29uc3QgRXZlbnQmIGV2ZW50
KQorUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IFRpbWVs
aW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlRXZlbnREaXNwYXRjaERhdGEoY29uc3QgRXZlbnQmIGV2
ZW50KQogewotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRP
YmplY3Q+IGRhdGEgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q6OmNyZWF0
ZSgpOwogICAgIGRhdGEtPnNldFN0cmluZygidHlwZSIsIGV2ZW50LnR5cGUoKS5zdHJpbmcoKSk7
CiAgICAgcmV0dXJuIGRhdGEucmVsZWFzZSgpOwogfQogCi1QYXNzUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVHZW5lcmljVGltZXJEYXRhKGludCB0
aW1lcklkKQorUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+
IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlR2VuZXJpY1RpbWVyRGF0YShpbnQgdGltZXJJ
ZCkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkYXRhID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2Jq
ZWN0PiBkYXRhID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0OjpjcmVhdGUo
KTsKICAgICBkYXRhLT5zZXRJbnRlZ2VyKCJ0aW1lcklkIiwgdGltZXJJZCk7CiAgICAgcmV0dXJu
IGRhdGEucmVsZWFzZSgpOwogfQogCi1QYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gVGltZWxp
bmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVUaW1lckluc3RhbGxEYXRhKGludCB0aW1lcklkLCBpbnQg
dGltZW91dCwgYm9vbCBzaW5nbGVTaG90KQorUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpVbmNoZWNrZWRPYmplY3Q+IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlVGltZXJJbnN0
YWxsRGF0YShpbnQgdGltZXJJZCwgaW50IHRpbWVvdXQsIGJvb2wgc2luZ2xlU2hvdCkKIHsKLSAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkYXRhID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBkYXRh
ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0OjpjcmVhdGUoKTsKICAgICBk
YXRhLT5zZXRJbnRlZ2VyKCJ0aW1lcklkIiwgdGltZXJJZCk7CiAgICAgZGF0YS0+c2V0SW50ZWdl
cigidGltZW91dCIsIHRpbWVvdXQpOwogICAgIGRhdGEtPnNldEJvb2xlYW4oInNpbmdsZVNob3Qi
LCBzaW5nbGVTaG90KTsKICAgICByZXR1cm4gZGF0YS5yZWxlYXNlKCk7CiB9CiAKLVBhc3NSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZVhIUlJlYWR5
U3RhdGVDaGFuZ2VEYXRhKGNvbnN0IFN0cmluZyYgdXJsLCBpbnQgcmVhZHlTdGF0ZSkKK1Bhc3NS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBUaW1lbGluZVJlY29y
ZEZhY3Rvcnk6OmNyZWF0ZVhIUlJlYWR5U3RhdGVDaGFuZ2VEYXRhKGNvbnN0IFN0cmluZyYgdXJs
LCBpbnQgcmVhZHlTdGF0ZSkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkYXRhID0g
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6VW5jaGVja2VkT2JqZWN0PiBkYXRhID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2Vk
T2JqZWN0OjpjcmVhdGUoKTsKICAgICBkYXRhLT5zZXRTdHJpbmcoInVybCIsIHVybCk7CiAgICAg
ZGF0YS0+c2V0SW50ZWdlcigicmVhZHlTdGF0ZSIsIHJlYWR5U3RhdGUpOwogICAgIHJldHVybiBk
YXRhLnJlbGVhc2UoKTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IFRpbWVsaW5l
UmVjb3JkRmFjdG9yeTo6Y3JlYXRlWEhSTG9hZERhdGEoY29uc3QgU3RyaW5nJiB1cmwpCitQYXNz
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gVGltZWxpbmVSZWNv
cmRGYWN0b3J5OjpjcmVhdGVYSFJMb2FkRGF0YShjb25zdCBTdHJpbmcmIHVybCkKIHsKLSAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkYXRhID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
KyAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBkYXRhID0g
SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0OjpjcmVhdGUoKTsKICAgICBkYXRh
LT5zZXRTdHJpbmcoInVybCIsIHVybCk7CiAgICAgcmV0dXJuIGRhdGEucmVsZWFzZSgpOwogfQog
Ci1QYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVh
dGVFdmFsdWF0ZVNjcmlwdERhdGEoY29uc3QgU3RyaW5nJiB1cmwsIGRvdWJsZSBsaW5lTnVtYmVy
KQorUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IFRpbWVs
aW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlRXZhbHVhdGVTY3JpcHREYXRhKGNvbnN0IFN0cmluZyYg
dXJsLCBkb3VibGUgbGluZU51bWJlcikKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBk
YXRhID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBkYXRhID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6VW5j
aGVja2VkT2JqZWN0OjpjcmVhdGUoKTsKICAgICBkYXRhLT5zZXRTdHJpbmcoInVybCIsIHVybCk7
CiAgICAgZGF0YS0+c2V0SW50ZWdlcigibGluZU51bWJlciIsIGxpbmVOdW1iZXIpOwogICAgIHJl
dHVybiBkYXRhLnJlbGVhc2UoKTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IFRp
bWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlVGltZVN0YW1wRGF0YShjb25zdCBTdHJpbmcmIG1l
c3NhZ2UpCitQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4g
VGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVUaW1lU3RhbXBEYXRhKGNvbnN0IFN0cmluZyYg
bWVzc2FnZSkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkYXRhID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVj
a2VkT2JqZWN0PiBkYXRhID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0Ojpj
cmVhdGUoKTsKICAgICBkYXRhLT5zZXRTdHJpbmcoIm1lc3NhZ2UiLCBtZXNzYWdlKTsKICAgICBy
ZXR1cm4gZGF0YS5yZWxlYXNlKCk7CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBU
aW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZVNjaGVkdWxlUmVzb3VyY2VSZXF1ZXN0RGF0YShj
b25zdCBTdHJpbmcmIHVybCkKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVj
a2VkT2JqZWN0PiBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZVNjaGVkdWxlUmVzb3VyY2VS
ZXF1ZXN0RGF0YShjb25zdCBTdHJpbmcmIHVybCkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBkYXRhID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBkYXRhID0gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6VW5jaGVja2VkT2JqZWN0OjpjcmVhdGUoKTsKICAgICBkYXRhLT5zZXRTdHJpbmcoInVybCIs
IHVybCk7CiAgICAgcmV0dXJuIGRhdGEucmVsZWFzZSgpOwogfQogCi1QYXNzUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVSZXNvdXJjZVNlbmRSZXF1
ZXN0RGF0YShjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBy
ZXF1ZXN0KQorUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+
IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlUmVzb3VyY2VTZW5kUmVxdWVzdERhdGEoY29u
c3QgU3RyaW5nJiByZXF1ZXN0SWQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKIHsK
LSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkYXRhID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBk
YXRhID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0OjpjcmVhdGUoKTsKICAg
ICBkYXRhLT5zZXRTdHJpbmcoInJlcXVlc3RJZCIsIHJlcXVlc3RJZCk7CiAgICAgZGF0YS0+c2V0
U3RyaW5nKCJ1cmwiLCByZXF1ZXN0LnVybCgpLnN0cmluZygpKTsKICAgICBkYXRhLT5zZXRTdHJp
bmcoInJlcXVlc3RNZXRob2QiLCByZXF1ZXN0Lmh0dHBNZXRob2QoKSk7CiAgICAgcmV0dXJuIGRh
dGEucmVsZWFzZSgpOwogfQogCi1QYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gVGltZWxpbmVS
ZWNvcmRGYWN0b3J5OjpjcmVhdGVSZXNvdXJjZVJlY2VpdmVSZXNwb25zZURhdGEoY29uc3QgU3Ry
aW5nJiByZXF1ZXN0SWQsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQorUGFzc1Jl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IFRpbWVsaW5lUmVjb3Jk
RmFjdG9yeTo6Y3JlYXRlUmVzb3VyY2VSZWNlaXZlUmVzcG9uc2VEYXRhKGNvbnN0IFN0cmluZyYg
cmVxdWVzdElkLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKIHsKLSAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBkYXRhID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAg
ICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBkYXRhID0gSW5z
cGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0OjpjcmVhdGUoKTsKICAgICBkYXRhLT5z
ZXRTdHJpbmcoInJlcXVlc3RJZCIsIHJlcXVlc3RJZCk7CiAgICAgZGF0YS0+c2V0SW50ZWdlcigi
c3RhdHVzQ29kZSIsIHJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkpOwogICAgIGRhdGEtPnNldFN0
cmluZygibWltZVR5cGUiLCByZXNwb25zZS5taW1lVHlwZSgpKTsKICAgICByZXR1cm4gZGF0YS5y
ZWxlYXNlKCk7CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBUaW1lbGluZVJlY29y
ZEZhY3Rvcnk6OmNyZWF0ZVJlc291cmNlRmluaXNoRGF0YShjb25zdCBTdHJpbmcmIHJlcXVlc3RJ
ZCwgYm9vbCBkaWRGYWlsLCBkb3VibGUgZmluaXNoVGltZSkKK1Bhc3NSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0
ZVJlc291cmNlRmluaXNoRGF0YShjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgYm9vbCBkaWRGYWls
LCBkb3VibGUgZmluaXNoVGltZSkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkYXRh
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBkYXRhID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVj
a2VkT2JqZWN0OjpjcmVhdGUoKTsKICAgICBkYXRhLT5zZXRTdHJpbmcoInJlcXVlc3RJZCIsIHJl
cXVlc3RJZCk7CiAgICAgZGF0YS0+c2V0Qm9vbGVhbigiZGlkRmFpbCIsIGRpZEZhaWwpOwogICAg
IGlmIChmaW5pc2hUaW1lKQpAQCAtMTkyLDYxICsxOTIsNjEgQEAgUGFzc1JlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlUmVzb3VyY2VGaW5pc2hEYXRh
KGNvbnMKICAgICByZXR1cm4gZGF0YS5yZWxlYXNlKCk7CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZVJlY2VpdmVSZXNvdXJjZURh
dGEoY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGludCBsZW5ndGgpCitQYXNzUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5Ojpj
cmVhdGVSZWNlaXZlUmVzb3VyY2VEYXRhKGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBpbnQgbGVu
Z3RoKQogewotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRP
YmplY3Q+IGRhdGEgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q6OmNyZWF0
ZSgpOwogICAgIGRhdGEtPnNldFN0cmluZygicmVxdWVzdElkIiwgcmVxdWVzdElkKTsKICAgICBk
YXRhLT5zZXRJbnRlZ2VyKCJlbmNvZGVkRGF0YUxlbmd0aCIsIGxlbmd0aCk7CiAgICAgcmV0dXJu
IGRhdGEucmVsZWFzZSgpOwogfQogCi1QYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gVGltZWxp
bmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVMYXlvdXREYXRhKHVuc2lnbmVkIGRpcnR5T2JqZWN0cywg
dW5zaWduZWQgdG90YWxPYmplY3RzLCBib29sIHBhcnRpYWxMYXlvdXQpCitQYXNzUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5
OjpjcmVhdGVMYXlvdXREYXRhKHVuc2lnbmVkIGRpcnR5T2JqZWN0cywgdW5zaWduZWQgdG90YWxP
YmplY3RzLCBib29sIHBhcnRpYWxMYXlvdXQpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gZGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gZGF0YSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlVuY2hlY2tlZE9iamVjdDo6Y3JlYXRlKCk7CiAgICAgZGF0YS0+c2V0SW50ZWdlcigiZGlydHlP
YmplY3RzIiwgZGlydHlPYmplY3RzKTsKICAgICBkYXRhLT5zZXRJbnRlZ2VyKCJ0b3RhbE9iamVj
dHMiLCB0b3RhbE9iamVjdHMpOwogICAgIGRhdGEtPnNldEJvb2xlYW4oInBhcnRpYWxMYXlvdXQi
LCBwYXJ0aWFsTGF5b3V0KTsKICAgICByZXR1cm4gZGF0YS5yZWxlYXNlKCk7CiB9CiAgICAgCi1Q
YXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVE
ZWNvZGVJbWFnZURhdGEoY29uc3QgU3RyaW5nJiBpbWFnZVR5cGUpCitQYXNzUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5Ojpj
cmVhdGVEZWNvZGVJbWFnZURhdGEoY29uc3QgU3RyaW5nJiBpbWFnZVR5cGUpCiB7Ci0gICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gZGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Cisg
ICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gZGF0YSA9IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdDo6Y3JlYXRlKCk7CiAgICAgZGF0YS0+
c2V0U3RyaW5nKCJpbWFnZVR5cGUiLCBpbWFnZVR5cGUpOwogICAgIHJldHVybiBkYXRhLnJlbGVh
c2UoKTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IFRpbWVsaW5lUmVjb3JkRmFj
dG9yeTo6Y3JlYXRlUmVzaXplSW1hZ2VEYXRhKGJvb2wgc2hvdWxkQ2FjaGUpCitQYXNzUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0
b3J5OjpjcmVhdGVSZXNpemVJbWFnZURhdGEoYm9vbCBzaG91bGRDYWNoZSkKIHsKLSAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBkYXRhID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAg
ICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBkYXRhID0gSW5z
cGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0OjpjcmVhdGUoKTsKICAgICBkYXRhLT5z
ZXRCb29sZWFuKCJjYWNoZWQiLCBzaG91bGRDYWNoZSk7CiAgICAgcmV0dXJuIGRhdGEucmVsZWFz
ZSgpOwogfQogCi1QYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0
b3J5OjpjcmVhdGVNYXJrRGF0YShib29sIGlzTWFpbkZyYW1lKQorUGFzc1JlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3Jl
YXRlTWFya0RhdGEoYm9vbCBpc01haW5GcmFtZSkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBkYXRhID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBkYXRhID0gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6VW5jaGVja2VkT2JqZWN0OjpjcmVhdGUoKTsKICAgICBkYXRhLT5zZXRCb29sZWFuKCJpc01h
aW5GcmFtZSIsIGlzTWFpbkZyYW1lKTsKICAgICByZXR1cm4gZGF0YS5yZWxlYXNlKCk7CiB9CiAK
LVBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0
ZVBhcnNlSFRNTERhdGEodW5zaWduZWQgc3RhcnRMaW5lKQorUGFzc1JlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRl
UGFyc2VIVE1MRGF0YSh1bnNpZ25lZCBzdGFydExpbmUpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gZGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gZGF0YSA9IEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlVuY2hlY2tlZE9iamVjdDo6Y3JlYXRlKCk7CiAgICAgZGF0YS0+c2V0SW50ZWdlcigi
c3RhcnRMaW5lIiwgc3RhcnRMaW5lKTsKICAgICByZXR1cm4gZGF0YS5yZWxlYXNlKCk7CiB9CiAK
LVBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0
ZUFuaW1hdGlvbkZyYW1lRGF0YShpbnQgY2FsbGJhY2tJZCkKK1Bhc3NSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0
ZUFuaW1hdGlvbkZyYW1lRGF0YShpbnQgY2FsbGJhY2tJZCkKIHsKLSAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBkYXRhID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBkYXRhID0gSW5zcGVjdG9yOjpQ
cm90b2NvbDo6VW5jaGVja2VkT2JqZWN0OjpjcmVhdGUoKTsKICAgICBkYXRhLT5zZXRJbnRlZ2Vy
KCJpZCIsIGNhbGxiYWNrSWQpOwogICAgIHJldHVybiBkYXRhLnJlbGVhc2UoKTsKIH0KIAotc3Rh
dGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGNyZWF0ZVF1YWQoY29uc3QgRmxvYXRRdWFk
JiBxdWFkKQorc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2Vk
QXJyYXk+IGNyZWF0ZVF1YWQoY29uc3QgRmxvYXRRdWFkJiBxdWFkKQogewotICAgIFJlZlB0cjxJ
bnNwZWN0b3JBcnJheT4gYXJyYXkgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZEFycmF5PiBhcnJheSA9IEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlVuY2hlY2tlZEFycmF5OjpjcmVhdGUoKTsKICAgICBhcnJheS0+cHVzaERv
dWJsZShxdWFkLnAxKCkueCgpKTsKICAgICBhcnJheS0+cHVzaERvdWJsZShxdWFkLnAxKCkueSgp
KTsKICAgICBhcnJheS0+cHVzaERvdWJsZShxdWFkLnAyKCkueCgpKTsKQEAgLTI1OCwzMyArMjU4
LDMzIEBAIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBjcmVhdGVRdWFkKGNvbnN0
IEZsb2F0UXVhZCYgcXVhZCkKICAgICByZXR1cm4gYXJyYXkucmVsZWFzZSgpOwogfQogCi1QYXNz
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVQYWlu
dERhdGEoY29uc3QgRmxvYXRRdWFkJiBxdWFkKQorUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpVbmNoZWNrZWRPYmplY3Q+IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlUGFpbnRE
YXRhKGNvbnN0IEZsb2F0UXVhZCYgcXVhZCkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBkYXRhID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBkYXRhID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6
VW5jaGVja2VkT2JqZWN0OjpjcmVhdGUoKTsKICAgICBkYXRhLT5zZXRBcnJheSgiY2xpcCIsIGNy
ZWF0ZVF1YWQocXVhZCkpOwogICAgIHJldHVybiBkYXRhLnJlbGVhc2UoKTsKIH0KIAotdm9pZCBU
aW1lbGluZVJlY29yZEZhY3Rvcnk6OmFwcGVuZExheW91dFJvb3QoSW5zcGVjdG9yT2JqZWN0KiBk
YXRhLCBjb25zdCBGbG9hdFF1YWQmIHF1YWQpCit2b2lkIFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6
YXBwZW5kTGF5b3V0Um9vdChJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3QqIGRh
dGEsIGNvbnN0IEZsb2F0UXVhZCYgcXVhZCkKIHsKICAgICBkYXRhLT5zZXRBcnJheSgicm9vdCIs
IGNyZWF0ZVF1YWQocXVhZCkpOwogfQogCi1zdGF0aWMgUGFzc1JlZlB0cjxQcm90b2NvbDo6VGlt
ZWxpbmU6OkNQVVByb2ZpbGVOb2RlQ2FsbD4gYnVpbGRJbnNwZWN0b3JPYmplY3QoY29uc3QgSlND
OjpQcm9maWxlTm9kZTo6Q2FsbCYgY2FsbCkKK3N0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlRpbWVsaW5lOjpDUFVQcm9maWxlTm9kZUNhbGw+IGJ1aWxkVW5jaGVja2VkT2Jq
ZWN0KGNvbnN0IEpTQzo6UHJvZmlsZU5vZGU6OkNhbGwmIGNhbGwpCiB7Ci0gICAgUmVmUHRyPFBy
b3RvY29sOjpUaW1lbGluZTo6Q1BVUHJvZmlsZU5vZGVDYWxsPiByZXN1bHQgPSBQcm90b2NvbDo6
VGltZWxpbmU6OkNQVVByb2ZpbGVOb2RlQ2FsbDo6Y3JlYXRlKCkKKyAgICBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6VGltZWxpbmU6OkNQVVByb2ZpbGVOb2RlQ2FsbD4gcmVzdWx0ID0gUHJv
dG9jb2w6OlRpbWVsaW5lOjpDUFVQcm9maWxlTm9kZUNhbGw6OmNyZWF0ZSgpCiAgICAgICAgIC5z
ZXRTdGFydFRpbWUoY2FsbC5zdGFydFRpbWUoKSkKICAgICAgICAgLnNldFRvdGFsVGltZShjYWxs
LmVsYXBzZWRUaW1lKCkpOwogICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwogfQogCi1zdGF0
aWMgUGFzc1JlZlB0cjxQcm90b2NvbDo6VGltZWxpbmU6OkNQVVByb2ZpbGVOb2RlPiBidWlsZElu
c3BlY3Rvck9iamVjdChjb25zdCBKU0M6OlByb2ZpbGVOb2RlKiBub2RlKQorc3RhdGljIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGltZWxpbmU6OkNQVVByb2ZpbGVOb2RlPiBidWls
ZFVuY2hlY2tlZE9iamVjdChjb25zdCBKU0M6OlByb2ZpbGVOb2RlKiBub2RlKQogewotICAgIFJl
ZlB0cjxQcm90b2NvbDo6QXJyYXk8UHJvdG9jb2w6OlRpbWVsaW5lOjpDUFVQcm9maWxlTm9kZUNh
bGw+PiBjYWxscyA9IFByb3RvY29sOjpBcnJheTxQcm90b2NvbDo6VGltZWxpbmU6OkNQVVByb2Zp
bGVOb2RlQ2FsbD46OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpB
cnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpUaW1lbGluZTo6Q1BVUHJvZmlsZU5vZGVDYWxsPj4g
Y2FsbHMgPSBQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGltZWxpbmU6OkNQ
VVByb2ZpbGVOb2RlQ2FsbD46OmNyZWF0ZSgpOwogICAgIGZvciAoY29uc3QgSlNDOjpQcm9maWxl
Tm9kZTo6Q2FsbCYgY2FsbCA6IG5vZGUtPmNhbGxzKCkpCi0gICAgICAgIGNhbGxzLT5hZGRJdGVt
KGJ1aWxkSW5zcGVjdG9yT2JqZWN0KGNhbGwpKTsKKyAgICAgICAgY2FsbHMtPmFkZEl0ZW0oYnVp
bGRVbmNoZWNrZWRPYmplY3QoY2FsbCkpOwogCi0gICAgUmVmUHRyPFByb3RvY29sOjpUaW1lbGlu
ZTo6Q1BVUHJvZmlsZU5vZGU+IHJlc3VsdCA9IFByb3RvY29sOjpUaW1lbGluZTo6Q1BVUHJvZmls
ZU5vZGU6OmNyZWF0ZSgpCisgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRpbWVsaW5l
OjpDUFVQcm9maWxlTm9kZT4gcmVzdWx0ID0gUHJvdG9jb2w6OlRpbWVsaW5lOjpDUFVQcm9maWxl
Tm9kZTo6Y3JlYXRlKCkKICAgICAgICAgLnNldElkKG5vZGUtPmlkKCkpCiAgICAgICAgIC5zZXRD
YWxscyhjYWxscy5yZWxlYXNlKCkpOwogCkBAIC0yOTgsMzAgKzI5OCwzMCBAQCBzdGF0aWMgUGFz
c1JlZlB0cjxQcm90b2NvbDo6VGltZWxpbmU6OkNQVVByb2ZpbGVOb2RlPiBidWlsZEluc3BlY3Rv
ck9iamVjdChjb25zdAogICAgIH0KIAogICAgIGlmICghbm9kZS0+Y2hpbGRyZW4oKS5pc0VtcHR5
KCkpIHsKLSAgICAgICAgUmVmUHRyPFByb3RvY29sOjpBcnJheTxQcm90b2NvbDo6VGltZWxpbmU6
OkNQVVByb2ZpbGVOb2RlPj4gY2hpbGRyZW4gPSBQcm90b2NvbDo6QXJyYXk8UHJvdG9jb2w6OlRp
bWVsaW5lOjpDUFVQcm9maWxlTm9kZT46OmNyZWF0ZSgpOworICAgICAgICBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGltZWxpbmU6OkNQVVBy
b2ZpbGVOb2RlPj4gY2hpbGRyZW4gPSBQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6VGltZWxpbmU6OkNQVVByb2ZpbGVOb2RlPjo6Y3JlYXRlKCk7CiAgICAgICAgIGZvciAoUmVm
UHRyPEpTQzo6UHJvZmlsZU5vZGU+IHByb2ZpbGVOb2RlIDogbm9kZS0+Y2hpbGRyZW4oKSkKLSAg
ICAgICAgICAgIGNoaWxkcmVuLT5hZGRJdGVtKGJ1aWxkSW5zcGVjdG9yT2JqZWN0KHByb2ZpbGVO
b2RlLmdldCgpKSk7CisgICAgICAgICAgICBjaGlsZHJlbi0+YWRkSXRlbShidWlsZFVuY2hlY2tl
ZE9iamVjdChwcm9maWxlTm9kZS5nZXQoKSkpOwogICAgICAgICByZXN1bHQtPnNldENoaWxkcmVu
KGNoaWxkcmVuKTsKICAgICB9CiAKICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKIH0KIAot
c3RhdGljIFBhc3NSZWZQdHI8UHJvdG9jb2w6OlRpbWVsaW5lOjpDUFVQcm9maWxlPiBidWlsZFBy
b2ZpbGVJbnNwZWN0b3JPYmplY3QoY29uc3QgSlNDOjpQcm9maWxlKiBwcm9maWxlKQorc3RhdGlj
IFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGltZWxpbmU6OkNQVVByb2ZpbGU+IGJ1
aWxkUHJvZmlsZVVuY2hlY2tlZE9iamVjdChjb25zdCBKU0M6OlByb2ZpbGUqIHByb2ZpbGUpCiB7
Ci0gICAgUmVmUHRyPFByb3RvY29sOjpBcnJheTxQcm90b2NvbDo6VGltZWxpbmU6OkNQVVByb2Zp
bGVOb2RlPj4gcm9vdE5vZGVzID0gUHJvdG9jb2w6OkFycmF5PFByb3RvY29sOjpUaW1lbGluZTo6
Q1BVUHJvZmlsZU5vZGU+OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGltZWxpbmU6OkNQVVByb2ZpbGVOb2RlPj4g
cm9vdE5vZGVzID0gUHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRpbWVsaW5l
OjpDUFVQcm9maWxlTm9kZT46OmNyZWF0ZSgpOwogICAgIGZvciAoUmVmUHRyPEpTQzo6UHJvZmls
ZU5vZGU+IHByb2ZpbGVOb2RlIDogcHJvZmlsZS0+cm9vdE5vZGUoKS0+Y2hpbGRyZW4oKSkKLSAg
ICAgICAgcm9vdE5vZGVzLT5hZGRJdGVtKGJ1aWxkSW5zcGVjdG9yT2JqZWN0KHByb2ZpbGVOb2Rl
LmdldCgpKSk7CisgICAgICAgIHJvb3ROb2Rlcy0+YWRkSXRlbShidWlsZFVuY2hlY2tlZE9iamVj
dChwcm9maWxlTm9kZS5nZXQoKSkpOwogCi0gICAgUmVmUHRyPFByb3RvY29sOjpUaW1lbGluZTo6
Q1BVUHJvZmlsZT4gcmVzdWx0ID0gUHJvdG9jb2w6OlRpbWVsaW5lOjpDUFVQcm9maWxlOjpjcmVh
dGUoKQorICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpUaW1lbGluZTo6Q1BVUHJvZmls
ZT4gcmVzdWx0ID0gUHJvdG9jb2w6OlRpbWVsaW5lOjpDUFVQcm9maWxlOjpjcmVhdGUoKQogICAg
ICAgICAuc2V0Um9vdE5vZGVzKHJvb3ROb2Rlcyk7CiAKICAgICByZXR1cm4gcmVzdWx0LnJlbGVh
c2UoKTsKIH0KIAotdm9pZCBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmFwcGVuZFByb2ZpbGUoSW5z
cGVjdG9yT2JqZWN0KiBkYXRhLCBQYXNzUmVmUHRyPEpTQzo6UHJvZmlsZT4gcHJvZmlsZSkKK3Zv
aWQgVGltZWxpbmVSZWNvcmRGYWN0b3J5OjphcHBlbmRQcm9maWxlKEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlVuY2hlY2tlZE9iamVjdCogZGF0YSwgUGFzc1JlZlB0cjxKU0M6OlByb2ZpbGU+IHByb2Zp
bGUpCiB7Ci0gICAgZGF0YS0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJwcm9maWxlIiksIGJ1aWxk
UHJvZmlsZUluc3BlY3Rvck9iamVjdChwcm9maWxlLmdldCgpKSk7CisgICAgZGF0YS0+c2V0VmFs
dWUoQVNDSUlMaXRlcmFsKCJwcm9maWxlIiksIGJ1aWxkUHJvZmlsZVVuY2hlY2tlZE9iamVjdChw
cm9maWxlLmdldCgpKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9UaW1lbGluZVJlY29yZEZhY3RvcnkuaCBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9UaW1lbGluZVJlY29yZEZhY3RvcnkuaAppbmRleCA5ZjExMzEx
MGQ5NGU2MzdhNDViMGY2MGE0NTQ1M2QxNGU0NDE1OWQzLi5lZGJjMjllZjJlZWJhNGJjOTUxNjQ3
NDQxMzMxNDRiOTc1NDRkODMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
VGltZWxpbmVSZWNvcmRGYWN0b3J5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1Rp
bWVsaW5lUmVjb3JkRmFjdG9yeS5oCkBAIC0zMyw3ICszMyw3IEBACiAjZGVmaW5lIFRpbWVsaW5l
UmVjb3JkRmFjdG9yeV9oCiAKICNpbmNsdWRlICJVUkwuaCIKLSNpbmNsdWRlIDxpbnNwZWN0b3Iv
SW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclByb3RvY29s
VHlwZXMuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgogCkBAIC01NSw2MiArNTUsNjIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAg
ICAgY2xhc3MgVGltZWxpbmVSZWNvcmRGYWN0b3J5IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0
YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVHZW5lcmlj
UmVjb3JkKGRvdWJsZSBzdGFydFRpbWUsIGludCBtYXhDYWxsU3RhY2tEZXB0aCk7Ci0gICAgICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVCYWNr
Z3JvdW5kUmVjb3JkKGRvdWJsZSBzdGFydFRpbWUsIGNvbnN0IFN0cmluZyYgdGhyZWFkKTsKKyAg
ICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2Jq
ZWN0PiBjcmVhdGVHZW5lcmljUmVjb3JkKGRvdWJsZSBzdGFydFRpbWUsIGludCBtYXhDYWxsU3Rh
Y2tEZXB0aCk7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlVuY2hlY2tlZE9iamVjdD4gY3JlYXRlQmFja2dyb3VuZFJlY29yZChkb3VibGUgc3RhcnRUaW1l
LCBjb25zdCBTdHJpbmcmIHRocmVhZCk7CiAKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5z
cGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGNyZWF0ZUdDRXZlbnREYXRhKGNvbnN0IHNpemVfdCB1
c2VkSGVhcFNpemVEZWx0YSk7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gY3JlYXRlR0NFdmVudERhdGEoY29uc3Qgc2l6ZV90
IHVzZWRIZWFwU2l6ZURlbHRhKTsKIAotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0
b3I6Okluc3BlY3Rvck9iamVjdD4gY3JlYXRlRnVuY3Rpb25DYWxsRGF0YShjb25zdCBTdHJpbmcm
IHNjcmlwdE5hbWUsIGludCBzY3JpcHRMaW5lKTsKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8
SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGNyZWF0ZUNvbnNvbGVQcm9maWxlRGF0YShjb25z
dCBTdHJpbmcmIHRpdGxlKTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBjcmVhdGVGdW5jdGlvbkNhbGxEYXRhKGNvbnN0IFN0
cmluZyYgc2NyaXB0TmFtZSwgaW50IHNjcmlwdExpbmUpOworICAgICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IGNyZWF0ZUNvbnNvbGVQ
cm9maWxlRGF0YShjb25zdCBTdHJpbmcmIHRpdGxlKTsKIAotICAgICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gY3JlYXRlUHJvYmVTYW1wbGVEYXRhKGNv
bnN0IEluc3BlY3Rvcjo6U2NyaXB0QnJlYWtwb2ludEFjdGlvbiYsIGludCBoaXRDb3VudCk7Cisg
ICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9i
amVjdD4gY3JlYXRlUHJvYmVTYW1wbGVEYXRhKGNvbnN0IEluc3BlY3Rvcjo6U2NyaXB0QnJlYWtw
b2ludEFjdGlvbiYsIGludCBoaXRDb3VudCk7CiAKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8
SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGNyZWF0ZUV2ZW50RGlzcGF0Y2hEYXRhKGNvbnN0
IEV2ZW50Jik7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlVuY2hlY2tlZE9iamVjdD4gY3JlYXRlRXZlbnREaXNwYXRjaERhdGEoY29uc3QgRXZlbnQmKTsK
IAotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4g
Y3JlYXRlR2VuZXJpY1RpbWVyRGF0YShpbnQgdGltZXJJZCk7CisgICAgICAgIHN0YXRpYyBQYXNz
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gY3JlYXRlR2VuZXJp
Y1RpbWVyRGF0YShpbnQgdGltZXJJZCk7CiAKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5z
cGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGNyZWF0ZVRpbWVySW5zdGFsbERhdGEoaW50IHRpbWVy
SWQsIGludCB0aW1lb3V0LCBib29sIHNpbmdsZVNob3QpOworICAgICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IGNyZWF0ZVRpbWVySW5z
dGFsbERhdGEoaW50IHRpbWVySWQsIGludCB0aW1lb3V0LCBib29sIHNpbmdsZVNob3QpOwogCi0g
ICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBjcmVh
dGVYSFJSZWFkeVN0YXRlQ2hhbmdlRGF0YShjb25zdCBTdHJpbmcmIHVybCwgaW50IHJlYWR5U3Rh
dGUpOworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNo
ZWNrZWRPYmplY3Q+IGNyZWF0ZVhIUlJlYWR5U3RhdGVDaGFuZ2VEYXRhKGNvbnN0IFN0cmluZyYg
dXJsLCBpbnQgcmVhZHlTdGF0ZSk7CiAKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVj
dG9yOjpJbnNwZWN0b3JPYmplY3Q+IGNyZWF0ZVhIUkxvYWREYXRhKGNvbnN0IFN0cmluZyYgdXJs
KTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVj
a2VkT2JqZWN0PiBjcmVhdGVYSFJMb2FkRGF0YShjb25zdCBTdHJpbmcmIHVybCk7CiAKLSAgICAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGNyZWF0ZUV2
YWx1YXRlU2NyaXB0RGF0YShjb25zdCBTdHJpbmcmLCBkb3VibGUgbGluZU51bWJlcik7CisgICAg
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVj
dD4gY3JlYXRlRXZhbHVhdGVTY3JpcHREYXRhKGNvbnN0IFN0cmluZyYsIGRvdWJsZSBsaW5lTnVt
YmVyKTsKIAotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9i
amVjdD4gY3JlYXRlVGltZVN0YW1wRGF0YShjb25zdCBTdHJpbmcmKTsKKyAgICAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBjcmVhdGVU
aW1lU3RhbXBEYXRhKGNvbnN0IFN0cmluZyYpOwogCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRy
PEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVSZXNvdXJjZVNlbmRSZXF1ZXN0RGF0
YShjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jik7CisgICAg
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVj
dD4gY3JlYXRlUmVzb3VyY2VTZW5kUmVxdWVzdERhdGEoY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQs
IGNvbnN0IFJlc291cmNlUmVxdWVzdCYpOwogCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPElu
c3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVTY2hlZHVsZVJlc291cmNlUmVxdWVzdERh
dGEoY29uc3QgU3RyaW5nJik7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gY3JlYXRlU2NoZWR1bGVSZXNvdXJjZVJlcXVlc3RE
YXRhKGNvbnN0IFN0cmluZyYpOwogCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rv
cjo6SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVSZXNvdXJjZVJlY2VpdmVSZXNwb25zZURhdGEoY29u
c3QgU3RyaW5nJiByZXF1ZXN0SWQsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKKyAgICAgICAg
c3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBj
cmVhdGVSZXNvdXJjZVJlY2VpdmVSZXNwb25zZURhdGEoY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQs
IGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKIAotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJ
bnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gY3JlYXRlUmVjZWl2ZVJlc291cmNlRGF0YShjb25z
dCBTdHJpbmcmIHJlcXVlc3RJZCwgaW50IGxlbmd0aCk7CisgICAgICAgIHN0YXRpYyBQYXNzUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gY3JlYXRlUmVjZWl2ZVJl
c291cmNlRGF0YShjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgaW50IGxlbmd0aCk7CiAKLSAgICAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGNyZWF0ZVJl
c291cmNlRmluaXNoRGF0YShjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgYm9vbCBkaWRGYWlsLCBk
b3VibGUgZmluaXNoVGltZSk7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gY3JlYXRlUmVzb3VyY2VGaW5pc2hEYXRhKGNvbnN0
IFN0cmluZyYgcmVxdWVzdElkLCBib29sIGRpZEZhaWwsIGRvdWJsZSBmaW5pc2hUaW1lKTsKIAot
ICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gY3Jl
YXRlTGF5b3V0RGF0YSh1bnNpZ25lZCBkaXJ0eU9iamVjdHMsIHVuc2lnbmVkIHRvdGFsT2JqZWN0
cywgYm9vbCBwYXJ0aWFsTGF5b3V0KTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBjcmVhdGVMYXlvdXREYXRhKHVuc2lnbmVk
IGRpcnR5T2JqZWN0cywgdW5zaWduZWQgdG90YWxPYmplY3RzLCBib29sIHBhcnRpYWxMYXlvdXQp
OwogCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0
PiBjcmVhdGVEZWNvZGVJbWFnZURhdGEoY29uc3QgU3RyaW5nJiBpbWFnZVR5cGUpOworICAgICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+
IGNyZWF0ZURlY29kZUltYWdlRGF0YShjb25zdCBTdHJpbmcmIGltYWdlVHlwZSk7CiAKLSAgICAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGNyZWF0ZVJl
c2l6ZUltYWdlRGF0YShib29sIHNob3VsZENhY2hlKTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBjcmVhdGVSZXNpemVJbWFn
ZURhdGEoYm9vbCBzaG91bGRDYWNoZSk7CiAKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5z
cGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGNyZWF0ZU1hcmtEYXRhKGJvb2wgaXNNYWluRnJhbWUp
OworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNr
ZWRPYmplY3Q+IGNyZWF0ZU1hcmtEYXRhKGJvb2wgaXNNYWluRnJhbWUpOwogCi0gICAgICAgIHN0
YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVQYXJzZUhU
TUxEYXRhKHVuc2lnbmVkIHN0YXJ0TGluZSk7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gY3JlYXRlUGFyc2VIVE1MRGF0YSh1
bnNpZ25lZCBzdGFydExpbmUpOwogCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rv
cjo6SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVBbmltYXRpb25GcmFtZURhdGEoaW50IGNhbGxiYWNr
SWQpOworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpVbmNo
ZWNrZWRPYmplY3Q+IGNyZWF0ZUFuaW1hdGlvbkZyYW1lRGF0YShpbnQgY2FsbGJhY2tJZCk7CiAK
LSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGNy
ZWF0ZVBhaW50RGF0YShjb25zdCBGbG9hdFF1YWQmKTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0PiBjcmVhdGVQYWludERhdGEo
Y29uc3QgRmxvYXRRdWFkJik7CiAKLSAgICAgICAgc3RhdGljIHZvaWQgYXBwZW5kTGF5b3V0Um9v
dChJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCogZGF0YSwgY29uc3QgRmxvYXRRdWFkJik7Cisg
ICAgICAgIHN0YXRpYyB2b2lkIGFwcGVuZExheW91dFJvb3QoSW5zcGVjdG9yOjpQcm90b2NvbDo6
VW5jaGVja2VkT2JqZWN0KiBkYXRhLCBjb25zdCBGbG9hdFF1YWQmKTsKIAotICAgICAgICBzdGF0
aWMgdm9pZCBhcHBlbmRQcm9maWxlKEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0KiwgUGFzc1Jl
ZlB0cjxKU0M6OlByb2ZpbGU+KTsKKyAgICAgICAgc3RhdGljIHZvaWQgYXBwZW5kUHJvZmlsZShJ
bnNwZWN0b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3QqLCBQYXNzUmVmUHRyPEpTQzo6UHJv
ZmlsZT4pOwogCiAjaWYgRU5BQkxFKFdFQl9TT0NLRVRTKQotICAgICAgICBzdGF0aWMgaW5saW5l
IFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGNyZWF0ZVdlYlNvY2tldENy
ZWF0ZURhdGEodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBVUkwmIHVybCwgY29uc3Qg
U3RyaW5nJiBwcm90b2NvbCkKKyAgICAgICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gY3JlYXRlV2ViU29ja2V0Q3JlYXRlRGF0
YSh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcm
IHByb3RvY29sKQogICAgICAgICB7Ci0gICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNw
ZWN0b3JPYmplY3Q+IGRhdGEgPSBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
CisgICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0
PiBkYXRhID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6VW5jaGVja2VkT2JqZWN0OjpjcmVhdGUoKTsK
ICAgICAgICAgICAgIGRhdGEtPnNldEludGVnZXIoImlkZW50aWZpZXIiLCBpZGVudGlmaWVyKTsK
ICAgICAgICAgICAgIGRhdGEtPnNldFN0cmluZygidXJsIiwgdXJsLnN0cmluZygpKTsKICAgICAg
ICAgICAgIGlmICghcHJvdG9jb2wuaXNOdWxsKCkpCkBAIC0xMTgsOSArMTE4LDkgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICAgICAgcmV0dXJuIGRhdGEucmVsZWFzZSgpOwogICAgICAg
ICB9CiAKLSAgICAgICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVj
dG9yT2JqZWN0PiBjcmVhdGVHZW5lcmljV2ViU29ja2V0RGF0YSh1bnNpZ25lZCBsb25nIGlkZW50
aWZpZXIpCisgICAgICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpVbmNoZWNrZWRPYmplY3Q+IGNyZWF0ZUdlbmVyaWNXZWJTb2NrZXREYXRhKHVuc2lnbmVk
IGxvbmcgaWRlbnRpZmllcikKICAgICAgICAgewotICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rv
cjo6SW5zcGVjdG9yT2JqZWN0PiBkYXRhID0gSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpOworICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tl
ZE9iamVjdD4gZGF0YSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdDo6Y3Jl
YXRlKCk7CiAgICAgICAgICAgICBkYXRhLT5zZXRJbnRlZ2VyKCJpZGVudGlmaWVyIiwgaWRlbnRp
Zmllcik7CiAgICAgICAgICAgICByZXR1cm4gZGF0YS5yZWxlYXNlKCk7CiAgICAgICAgIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ29udGVudFNlY3VyaXR5UG9saWN5LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ29udGVudFNlY3VyaXR5UG9saWN5LmNwcAppbmRleCA0NGFm
ZjE2ZWY5MzcxNzk0MDM1MjY3NzNlOTA2MDZlNjkxYjA5N2NkLi43NGNkN2ExODE3Y2YzNmI3NDQ4
M2RhMTAzMjc4NzE3ZGI3ZTE0MjI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nv
bnRlbnRTZWN1cml0eVBvbGljeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Db250ZW50
U2VjdXJpdHlQb2xpY3kuY3BwCkBAIC00Miw3ICs0Miw3IEBACiAjaW5jbHVkZSAiU2VjdXJpdHlQ
b2xpY3lWaW9sYXRpb25FdmVudC5oIgogI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgogI2luY2x1
ZGUgIlVSTC5oIgotI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNs
dWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgogI2luY2x1ZGUgPGluc3Bl
Y3Rvci9TY3JpcHRDYWxsU3RhY2suaD4KICNpbmNsdWRlIDxpbnNwZWN0b3IvU2NyaXB0Q2FsbFN0
YWNrRmFjdG9yeS5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CkBAIC0xNjQzLDcgKzE2NDMs
NyBAQCB2b2lkIENvbnRlbnRTZWN1cml0eVBvbGljeTo6cmVwb3J0VmlvbGF0aW9uKGNvbnN0IFN0
cmluZyYgZGlyZWN0aXZlVGV4dCwgY29uc3QgUwogICAgIC8vIHNlbnQgZXhwbGljaXRseS4gQXMg
Zm9yIHdoaWNoIGRpcmVjdGl2ZSB3YXMgdmlvbGF0ZWQsIHRoYXQncyBwcmV0dHkKICAgICAvLyBo
YXJtbGVzcyBpbmZvcm1hdGlvbi4KIAotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGNzcFJl
cG9ydCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdD4gY3NwUmVwb3J0ID0gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6VW5jaGVja2VkT2JqZWN0OjpjcmVhdGUoKTsKICAgICBjc3BSZXBvcnQtPnNldFN0cmluZyhB
U0NJSUxpdGVyYWwoImRvY3VtZW50LXVyaSIpLCBkb2N1bWVudC51cmwoKS5zdHJpcHBlZEZvclVz
ZUFzUmVmZXJyZXIoKSk7CiAgICAgY3NwUmVwb3J0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJy
ZWZlcnJlciIpLCBkb2N1bWVudC5yZWZlcnJlcigpKTsKICAgICBjc3BSZXBvcnQtPnNldFN0cmlu
ZyhBU0NJSUxpdGVyYWwoInZpb2xhdGVkLWRpcmVjdGl2ZSIpLCBkaXJlY3RpdmVUZXh0KTsKQEAg
LTE2NjQsNyArMTY2NCw3IEBAIHZvaWQgQ29udGVudFNlY3VyaXR5UG9saWN5OjpyZXBvcnRWaW9s
YXRpb24oY29uc3QgU3RyaW5nJiBkaXJlY3RpdmVUZXh0LCBjb25zdCBTCiAgICAgICAgIGNzcFJl
cG9ydC0+c2V0SW50ZWdlcihBU0NJSUxpdGVyYWwoImxpbmUtbnVtYmVyIiksIGNhbGxGcmFtZS0+
bGluZU51bWJlcigpKTsKICAgICB9CiAKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXBv
cnRPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpVbmNoZWNrZWRPYmplY3Q+IHJlcG9ydE9iamVjdCA9IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlVuY2hlY2tlZE9iamVjdDo6Y3JlYXRlKCk7CiAgICAgcmVwb3J0T2JqZWN0LT5z
ZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJjc3AtcmVwb3J0IiksIGNzcFJlcG9ydC5yZWxlYXNlKCkp
OwogCiAgICAgUmVmUHRyPEZvcm1EYXRhPiByZXBvcnQgPSBGb3JtRGF0YTo6Y3JlYXRlKHJlcG9y
dE9iamVjdC0+dG9KU09OU3RyaW5nKCkudXRmOCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJu
YWxzLmNwcAppbmRleCAzZTNiYTMzZWNlNjU3ZGM2ZGVhOTJiMWE5NTEyNGRhYjU3ZjIwOWFiLi5l
MWJmOTUzMDc2MTI3ZmNjNjNlOGExZDRmMWNkYWYyZWFlMTdmNmYwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvdGVz
dGluZy9JbnRlcm5hbHMuY3BwCkBAIC0xMDMsNyArMTAzLDcgQEAKICNpbmNsdWRlICJXb3JrZXJU
aHJlYWQuaCIKICNpbmNsdWRlIDxieXRlY29kZS9Db2RlQmxvY2suaD4KICNpbmNsdWRlIDxpbnNw
ZWN0b3IvSW5zcGVjdG9yQWdlbnRCYXNlLmg+Ci0jaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3Rv
clZhbHVlcy5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+
CiAjaW5jbHVkZSA8cnVudGltZS9KU0NJbmxpbmVzLmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU0NK
U1ZhbHVlLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgpAQCAtNzUzLDcgKzc1Myw3
IEBAIFN0cmluZyBJbnRlcm5hbHM6Omluc3BlY3RvckhpZ2hsaWdodE9iamVjdChFeGNlcHRpb25D
b2RlJiBlYykKICAgICAgICAgZWMgPSBJTlZBTElEX0FDQ0VTU19FUlI7CiAgICAgICAgIHJldHVy
biBTdHJpbmcoKTsKICAgICB9Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb2JqZWN0ID0g
ZG9jdW1lbnQtPnBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLmJ1aWxkT2JqZWN0Rm9ySGln
aGxpZ2h0ZWROb2RlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlVuY2hlY2tl
ZE9iamVjdD4gb2JqZWN0ID0gZG9jdW1lbnQtPnBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigp
LmJ1aWxkT2JqZWN0Rm9ySGlnaGxpZ2h0ZWROb2RlKCk7CiAgICAgcmV0dXJuIG9iamVjdCA/IG9i
amVjdC0+dG9KU09OU3RyaW5nKCkgOiBTdHJpbmcoKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFN
KGVjKTsK
</data>
<flag name="review"
          id="264412"
          type_id="1"
          status="+"
          setter="joepeck"
    />
          </attachment>
      

    </bug>

</bugzilla>