<?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>239495</bug_id>
          
          <creation_ts>2022-04-19 07:10:53 -0700</creation_ts>
          <short_desc>IPC testing API should have the ability to test IPC::Connection send and receive through IPC::Connection</short_desc>
          <delta_ts>2022-04-28 00:19:30 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>Safari 15</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=239399</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=239643</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=239644</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>239494</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kimmo Kinnunen">kkinnunen</reporter>
          <assigned_to name="Kimmo Kinnunen">kkinnunen</assigned_to>
          <cc>annulen</cc>
    
    <cc>darin</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kkinnunen</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>1862536</commentid>
    <comment_count>0</comment_count>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2022-04-19 07:10:53 -0700</bug_when>
    <thetext>IPC testing API should have the ability to test IPC::Connection send and receive through IPC::Connection</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1863268</commentid>
    <comment_count>1</comment_count>
      <attachid>458055</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2022-04-21 06:05:45 -0700</bug_when>
    <thetext>Created attachment 458055
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1863404</commentid>
    <comment_count>2</comment_count>
      <attachid>458055</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-04-21 14:07:19 -0700</bug_when>
    <thetext>Comment on attachment 458055
Patch

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

&gt; Source/WebKit/Shared/IPCConnectionTester.cpp:48
&gt; +#if USE(UNIX_DOMAIN_SOCKETS)
&gt; +    IPC::Connection::Identifier connectionHandle { connectionIdentifier.release().release() };
&gt; +#elif OS(DARWIN)
&gt; +    IPC::Connection::Identifier connectionHandle { connectionIdentifier.port() };
&gt; +#elif OS(WINDOWS)
&gt; +    IPC::Connection::Identifier connectionHandle { connectionIdentifier.handle() };
&gt; +#else
&gt; +    notImplemented();
&gt; +    IPC::Connection::Identifier connectionHandle { };
&gt; +#endif
&gt; +    return connectionHandle;

Why the local variable? Why not just use &quot;return&quot; statements?

&gt; Source/WebKit/WebProcess/WebPage/IPCTestingAPI.cpp:414
&gt; +        JSGlobalContextRetain(JSContextGetGlobalContext(context));
&gt; +        JSValueProtect(context, resolve);
&gt; +        JSValueProtect(context, reject);

I strongly suggest we use smart pointers in cases like this rather than hand-written function call pairs. But maybe the need is not quite as strong for test code? And maybe we don’t already have the correct smart pointer classes already handy to use? I thought we did, but not sure.

&gt; Source/WebKit/WebProcess/WebPage/IPCTestingAPI.cpp:508
&gt; +        if (scope.exception()) {
&gt; +            *exception = toRef(globalObject, scope.exception());
&gt; +            scope.clearException();

Maybe we should consider a helper function that does this repeated pattern. The coding idioms here are repetitive enough that I am craving some helper functions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1863580</commentid>
    <comment_count>3</comment_count>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2022-04-22 01:55:29 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #2)
&gt; &gt; Source/WebKit/WebProcess/WebPage/IPCTestingAPI.cpp:414
&gt; &gt; +        JSGlobalContextRetain(JSContextGetGlobalContext(context));
&gt; &gt; +        JSValueProtect(context, resolve);
&gt; &gt; +        JSValueProtect(context, reject);
&gt; 
&gt; I strongly suggest we use smart pointers in cases like this rather than
&gt; hand-written function call pairs. But maybe the need is not quite as strong
&gt; for test code? And maybe we don’t already have the correct smart pointer
&gt; classes already handy to use? I thought we did, but not sure.

bug 239643 - Add a smart pointer to hold JSValueProtect() objects

&gt; 
&gt; &gt; Source/WebKit/WebProcess/WebPage/IPCTestingAPI.cpp:508
&gt; &gt; +        if (scope.exception()) {
&gt; &gt; +            *exception = toRef(globalObject, scope.exception());
&gt; &gt; +            scope.clearException();
&gt; 
&gt; Maybe we should consider a helper function that does this repeated pattern.
&gt; The coding idioms here are repetitive enough that I am craving some helper
&gt; functions.

I think this is due to the system using the public JS API instead of more normal way of doing JS-C++ integration in WebKit

Bug 239644 - IPC testing API should use the existing IDL bindings instead of manual binding with public JS API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1863581</commentid>
    <comment_count>4</comment_count>
      <attachid>458123</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2022-04-22 01:57:57 -0700</bug_when>
    <thetext>Created attachment 458123
For landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1863712</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-04-22 11:01:49 -0700</bug_when>
    <thetext>(In reply to Kimmo Kinnunen from comment #3)
&gt; &gt; Maybe we should consider a helper function that does this repeated pattern.
&gt; &gt; The coding idioms here are repetitive enough that I am craving some helper
&gt; &gt; functions.
&gt; 
&gt; I think this is due to the system using the public JS API instead of more
&gt; normal way of doing JS-C++ integration in WebKit

Sure but my separate point was that within this file a helper could make the code less repetitive and perhaps less error prone.

There may be reasons it’s not easy to use the IDL bindings here. In WebKitTestRunner we also have a lot of code using the JavaScript C API rather than our bindings system, but since it’s C++ code, I wrote lots of helper functions there for WebKitTestRunner to make the idioms simpler and less error prone.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1864429</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-04-26 07:11:13 -0700</bug_when>
    <thetext>&lt;rdar://problem/92331751&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1864791</commentid>
    <comment_count>7</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-04-27 07:31:29 -0700</bug_when>
    <thetext>Tools/Scripts/svn-apply failed to apply attachment 458123 to trunk.
Please resolve the conflicts and upload a new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1864792</commentid>
    <comment_count>8</comment_count>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2022-04-27 07:32:40 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #5)
&gt; (In reply to Kimmo Kinnunen from comment #3)
&gt; &gt; &gt; Maybe we should consider a helper function that does this repeated pattern.
&gt; &gt; &gt; The coding idioms here are repetitive enough that I am craving some helper
&gt; &gt; &gt; functions.
&gt; &gt; 
&gt; &gt; I think this is due to the system using the public JS API instead of more
&gt; &gt; normal way of doing JS-C++ integration in WebKit
&gt; 
&gt; Sure but my separate point was that within this file a helper could make the
&gt; code less repetitive and perhaps less error prone.
&gt; 
&gt; There may be reasons it’s not easy to use the IDL bindings here. In
&gt; WebKitTestRunner we also have a lot of code using the JavaScript C API
&gt; rather than our bindings system, but since it’s C++ code, I wrote lots of
&gt; helper functions there for WebKitTestRunner to make the idioms simpler and
&gt; less error prone.

I see what I can do to reduce the repetitiveness. The initial reaction is that the idl system should be the best option here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1864796</commentid>
    <comment_count>9</comment_count>
      <attachid>458445</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2022-04-27 07:42:19 -0700</bug_when>
    <thetext>Created attachment 458445
For landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1865062</commentid>
    <comment_count>10</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-04-27 22:40:06 -0700</bug_when>
    <thetext>ChangeLog entry in LayoutTests/ChangeLog contains OOPS!.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1865074</commentid>
    <comment_count>11</comment_count>
      <attachid>458496</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2022-04-28 00:14:55 -0700</bug_when>
    <thetext>Created attachment 458496
[fast-cq] For landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1865075</commentid>
    <comment_count>12</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-04-28 00:19:26 -0700</bug_when>
    <thetext>Committed r293567 (250081@main): &lt;https://commits.webkit.org/250081@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 458496.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>458055</attachid>
            <date>2022-04-21 06:05:45 -0700</date>
            <delta_ts>2022-04-22 01:57:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-239495-20220421160543.patch</filename>
            <type>text/plain</type>
            <size>80709</size>
            <attacher name="Kimmo Kinnunen">kkinnunen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkzMTYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDVhM2YwYzZjOGQwZTBlZTU4
NWQzYWY0ZmEwMjc1ODkzNmM2MjdkNGYuLjY4MjkxMmQxZmUyMjJmNGEyMWNhOWQ2YmUyOGIyMjE0
MjBjMzQwNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTAxIEBACisyMDIyLTA0LTE5ICBLaW1tbyBL
aW5udW5lbiAgPGtraW5udW5lbkBhcHBsZS5jb20+CisKKyAgICAgICAgSVBDIHRlc3RpbmcgQVBJ
IHNob3VsZCBoYXZlIHRoZSBhYmlsaXR5IHRvIHRlc3QgSVBDOjpDb25uZWN0aW9uIHNlbmQgYW5k
IHJlY2VpdmUgdGhyb3VnaCBJUEM6OkNvbm5lY3Rpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzOTQ5NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCB0aGUgdGVzdGluZyBpbnRlcmZhY2VzIHRvIGJl
IGFibGUgdG8gc2VuZCBJUEM6OkNvbm5lY3Rpb24gaW5zdGFuY2VzCisgICAgICAgIHRvIG90aGVy
IHByb2Nlc3Nlcy4KKyAgICAgICAgQWRkIHRoZSB0ZXN0aW5nIGludGVyZmFjZXMgdG8gYmUgYWJs
ZSB0byBzZW5kIG1lc3NhZ2VzIHRocm91Z2ggYXJiaXRyYXJ5CisgICAgICAgIElQQzo6Q29ubmVj
dGlvbiBpbnN0YW5jZXMuCisKKyAgICAgICAgVGVzdDogaXBjL2NyZWF0ZS1jb25uZWN0aW9uLWFu
ZC1zZW5kLWFzeW5jLmh0bWwKKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAq
IERlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3Q6CisgICAgICAgICogRGVyaXZlZFNvdXJj
ZXMtb3V0cHV0LnhjZmlsZWxpc3Q6CisgICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAg
ICAgICAgKiBQbGF0Zm9ybS9JUEMvQ29ubmVjdGlvbi5oOgorICAgICAgICAoSVBDOjpDb25uZWN0
aW9uOjp3YWl0Rm9yTWVzc2FnZUZvclRlc3RpbmcpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
L21lc3NhZ2VzLnB5OgorICAgICAgICAodHlwZXNfdGhhdF9jYW5ub3RfYmVfZm9yd2FyZF9kZWNs
YXJlZCk6CisgICAgICAgICogU2hhcmVkL0lQQ0Nvbm5lY3Rpb25UZXN0ZXIuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYktpdDo6YXNJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYktpdDo6SVBDQ29u
bmVjdGlvblRlc3Rlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6SVBDQ29ubmVjdGlvblRl
c3Rlcjo6SVBDQ29ubmVjdGlvblRlc3Rlcik6CisgICAgICAgIChXZWJLaXQ6OklQQ0Nvbm5lY3Rp
b25UZXN0ZXI6OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViS2l0OjpJUENDb25uZWN0aW9uVGVz
dGVyOjpzdG9wTGlzdGVuaW5nRm9ySVBDKToKKyAgICAgICAgKFdlYktpdDo6SVBDQ29ubmVjdGlv
blRlc3Rlcjo6c2VuZEFzeW5jTWVzc2FnZXMpOgorICAgICAgICAoV2ViS2l0OjpJUENDb25uZWN0
aW9uVGVzdGVyOjpkaWRDbG9zZSk6CisgICAgICAgIChXZWJLaXQ6OklQQ0Nvbm5lY3Rpb25UZXN0
ZXI6OmRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6OklQQ0Nvbm5l
Y3Rpb25UZXN0ZXI6OmFzeW5jTWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6OklQQ0Nvbm5lY3Rp
b25UZXN0ZXI6OnN5bmNNZXNzYWdlKToKKyAgICAgICAgKiBTaGFyZWQvSVBDQ29ubmVjdGlvblRl
c3Rlci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9JUENUZXN0ZXIuaC4KKyAg
ICAgICAgKiBTaGFyZWQvSVBDQ29ubmVjdGlvblRlc3Rlci5tZXNzYWdlcy5pbjogQ29waWVkIGZy
b20gU291cmNlL1dlYktpdC9TaGFyZWQvSVBDVGVzdGVyLm1lc3NhZ2VzLmluLgorICAgICAgICAq
IFNoYXJlZC9JUENDb25uZWN0aW9uVGVzdGVySWRlbnRpZmllci5oOiBBZGRlZC4KKyAgICAgICAg
KiBTaGFyZWQvSVBDVGVzdGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGVyOjpjcmVh
dGVDb25uZWN0aW9uVGVzdGVyKToKKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGVyOjpjcmVhdGVD
b25uZWN0aW9uVGVzdGVyQW5kU2VuZEFzeW5jTWVzc2FnZXMpOgorICAgICAgICAoV2ViS2l0OjpJ
UENUZXN0ZXI6OnJlbGVhc2VDb25uZWN0aW9uVGVzdGVyKToKKyAgICAgICAgKiBTaGFyZWQvSVBD
VGVzdGVyLmg6CisgICAgICAgICogU2hhcmVkL0lQQ1Rlc3Rlci5tZXNzYWdlcy5pbjoKKyAgICAg
ICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvSVBDVGVzdGluZ0FQSS5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBDQXR0YWNobWVudDo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6SlNJUENBdHRhY2htZW50OjplbmNvZGUg
Y29uc3QpOgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjpKU0lQQ0F0dGFjaG1lbnQ6
OkpTSVBDQXR0YWNobWVudCk6CisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBD
Q29ubmVjdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6SlNJ
UENDb25uZWN0aW9uOjpKU0lQQ0Nvbm5lY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0
aW5nQVBJOjpjcmVhdGVUeXBlRXJyb3IpOgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJ
Ojpjb252ZXJ0VG9VaW50NjQpOgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjpzZW5k
TWVzc2FnZVdpdGhKU0FyZ3VtZW50cyk6CisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6
OmV4dHJhY3RTeW5jSVBDTWVzc2FnZUluZm8pOgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5n
QVBJOjpzZW5kU3luY01lc3NhZ2VXaXRoSlNBcmd1bWVudHMpOgorICAgICAgICAoV2ViS2l0OjpJ
UENUZXN0aW5nQVBJOjp3YWl0Rm9yTWVzc2FnZVdpdGhKU0FyZ3VtZW50cyk6CisgICAgICAgIChX
ZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBDU2VtYXBob3JlOjpjcmVhdGVKU1dyYXBwZXIpOgor
ICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjpKU0lQQ1NlbWFwaG9yZTo6d3JhcHBlckNs
YXNzKToKKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6SlNJUENTZW1hcGhvcmU6OnVu
d3JhcCk6CisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBDU2VtYXBob3JlOjp0
b1dyYXBwZWQpOgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjpKU0lQQ1NlbWFwaG9y
ZTo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBDU2Vt
YXBob3JlOjpmaW5hbGl6ZSk6CisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBD
U2VtYXBob3JlOjpzdGF0aWNGdW5jdGlvbnMpOgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5n
QVBJOjpKU0lQQ0F0dGFjaG1lbnQ6OmNyZWF0ZUpTV3JhcHBlcik6CisgICAgICAgIChXZWJLaXQ6
OklQQ1Rlc3RpbmdBUEk6OkpTSVBDQXR0YWNobWVudDo6d3JhcHBlckNsYXNzKToKKyAgICAgICAg
KFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6SlNJUENBdHRhY2htZW50Ojp1bndyYXApOgorICAgICAg
ICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjpKU0lQQ0F0dGFjaG1lbnQ6OnRvV3JhcHBlZCk6Cisg
ICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBDQXR0YWNobWVudDo6aW5pdGlhbGl6
ZSk6CisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBDQXR0YWNobWVudDo6Zmlu
YWxpemUpOgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjpKU0lQQ0F0dGFjaG1lbnQ6
OnN0YXRpY0Z1bmN0aW9ucyk6CisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBD
Q29ubmVjdGlvbjo6Y3JlYXRlSlNXcmFwcGVyKToKKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGlu
Z0FQSTo6SlNJUENDb25uZWN0aW9uOjp3cmFwcGVyQ2xhc3MpOgorICAgICAgICAoV2ViS2l0OjpJ
UENUZXN0aW5nQVBJOjpKU0lQQ0Nvbm5lY3Rpb246OnVud3JhcCk6CisgICAgICAgIChXZWJLaXQ6
OklQQ1Rlc3RpbmdBUEk6OkpTSVBDQ29ubmVjdGlvbjo6dG9XcmFwcGVkKToKKyAgICAgICAgKFdl
YktpdDo6SVBDVGVzdGluZ0FQSTo6SlNJUENDb25uZWN0aW9uOjppbml0aWFsaXplKToKKyAgICAg
ICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6SlNJUENDb25uZWN0aW9uOjpmaW5hbGl6ZSk6Cisg
ICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBDQ29ubmVjdGlvbjo6ZGlkUmVjZWl2
ZU1lc3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjpKU0lQQ0Nvbm5lY3Rp
b246OmRpZFJlY2VpdmVTeW5jTWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdB
UEk6OkpTSVBDQ29ubmVjdGlvbjo6ZGlkQ2xvc2UpOgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0
aW5nQVBJOjpKU0lQQ0Nvbm5lY3Rpb246OmRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZSk6CisgICAg
ICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBDQ29ubmVjdGlvbjo6c3RhdGljRnVuY3Rp
b25zKToKKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6SlNJUENDb25uZWN0aW9uOjpv
cGVuKToKKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6SlNJUENDb25uZWN0aW9uOjpp
bnZhbGlkYXRlKToKKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6SlNJUENDb25uZWN0
aW9uOjpzZW5kTWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBD
Q29ubmVjdGlvbjo6c2VuZFN5bmNNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGlu
Z0FQSTo6SlNJUENDb25uZWN0aW9uOjp3YWl0Rm9yTWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6
OklQQ1Rlc3RpbmdBUEk6OkpTSVBDU3RyZWFtQ2xpZW50Q29ubmVjdGlvbjo6cHJlcGFyZVRvU2Vu
ZE91dE9mU3RyZWFtTWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpT
SVBDOjpzdGF0aWNGdW5jdGlvbnMpOgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjpl
bmNvZGVGcmFtZUluZm9EYXRhKToKKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6ZW5j
b2RlQXR0YWNobWVudCk6CisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OlZlY3RvckVu
Y29kZUhlbHBlcjo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQ
STo6ZW5jb2RlQXJyYXlBcmd1bWVudCk6CisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6
OmVuY29kZUFyZ3VtZW50KToKKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6SlNJUEM6
OnNlbmRNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6SlNJUEM6Ondh
aXRGb3JNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6SlNJUEM6OnNl
bmRTeW5jTWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBDOjpj
cmVhdGVDb25uZWN0aW9uUGFpcik6CisKIDIwMjItMDQtMjAgIFdlbnNvbiBIc2llaCAgPHdlbnNv
bl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgZml4IHRoZSBpT1MgMTUu
NCBidWlsZCBhZnRlciByMjkzMTE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NNYWtlTGlz
dHMudHh0IGIvU291cmNlL1dlYktpdC9DTWFrZUxpc3RzLnR4dAppbmRleCA2OWFjZDhkZWRkOWE5
MjEyZGZmOGNhZWQ3MDRjZDYzYmEyMzJmM2ZlLi5jNDRmMjlhNTQ2Y2IxZTlhZWYxMTNlNTNiMzlm
ZTQyNmM3YzNhZThhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NNYWtlTGlzdHMudHh0Cisr
KyBiL1NvdXJjZS9XZWJLaXQvQ01ha2VMaXN0cy50eHQKQEAgLTIxNSw2ICsyMTUsNyBAQCBzZXQo
V2ViS2l0X01FU1NBR0VTX0lOX0ZJTEVTCiAgICAgTmV0d29ya1Byb2Nlc3Mvd2VicnRjL1JUQ0Rh
dGFDaGFubmVsUmVtb3RlTWFuYWdlclByb3h5CiAKICAgICBTaGFyZWQvQXV4aWxpYXJ5UHJvY2Vz
cworICAgIFNoYXJlZC9JUENDb25uZWN0aW9uVGVzdGVyCiAgICAgU2hhcmVkL0lQQ1N0cmVhbVRl
c3RlcgogICAgIFNoYXJlZC9JUENTdHJlYW1UZXN0ZXJQcm94eQogICAgIFNoYXJlZC9JUENUZXN0
ZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxl
bGlzdCBiL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdAppbmRl
eCA5N2I0MWU5N2YyY2Y4NjIxMWFlY2JlOWNlYTMxYWEzZTY2MDM0ODA4Li5jZjQ4NTRlYWJlZmZh
YzM3ZDkzZGZiYmJiZWQwYWMxYzQ2MWI5M2FhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0Rl
cml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKKysrIGIvU291cmNlL1dlYktpdC9EZXJpdmVk
U291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0CkBAIC0xMjksNiArMTI5LDcgQEAgJChQUk9KRUNUX0RJ
UikvU2hhcmVkL0FwcGxlUGF5L1dlYlBheW1lbnRDb29yZGluYXRvclByb3h5Lm1lc3NhZ2VzLmlu
CiAkKFBST0pFQ1RfRElSKS9TaGFyZWQvQXV0aGVudGljYXRpb24vQXV0aGVudGljYXRpb25NYW5h
Z2VyLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9TaGFyZWQvQXV4aWxpYXJ5UHJvY2Vzcy5t
ZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvU2hhcmVkL0hUVFBTVXBncmFkZS9IVFRQU1VwZ3Jh
ZGVMaXN0LnR4dAorJChQUk9KRUNUX0RJUikvU2hhcmVkL0lQQ0Nvbm5lY3Rpb25UZXN0ZXIubWVz
c2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1NoYXJlZC9JUENTdHJlYW1UZXN0ZXIubWVzc2FnZXMu
aW4KICQoUFJPSkVDVF9ESVIpL1NoYXJlZC9JUENTdHJlYW1UZXN0ZXJQcm94eS5tZXNzYWdlcy5p
bgogJChQUk9KRUNUX0RJUikvU2hhcmVkL0lQQ1Rlc3Rlci5tZXNzYWdlcy5pbgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlzdCBiL1NvdXJj
ZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QKaW5kZXggMjgwNDg3MDk0
ZmMxZDY0NGVhYjgyNDc2YWIzNjUzZWVmODcyY2U2Ny4uMjVlMzUyMzM2ZWQ1ZTlmMmU4MGZjMzY4
YjhiM2NlZGM2MjQxYTBhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNl
cy1vdXRwdXQueGNmaWxlbGlzdAorKysgYi9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLW91
dHB1dC54Y2ZpbGVsaXN0CkBAIC00Niw2ICs0Niw5IEBAICQoQlVJTFRfUFJPRFVDVFNfRElSKS9E
ZXJpdmVkU291cmNlcy9XZWJLaXQvR1BVUHJvY2Vzc01lc3NhZ2VzUmVwbGllcy5oCiAkKEJVSUxU
X1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0L0dQVVByb2Nlc3NQcm94eU1lc3Nh
Z2VSZWNlaXZlci5jcHAKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJL
aXQvR1BVUHJvY2Vzc1Byb3h5TWVzc2FnZXMuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2
ZWRTb3VyY2VzL1dlYktpdC9HUFVQcm9jZXNzUHJveHlNZXNzYWdlc1JlcGxpZXMuaAorJChCVUlM
VF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdC9JUENDb25uZWN0aW9uVGVzdGVy
TWVzc2FnZVJlY2VpdmVyLmNwcAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2Vz
L1dlYktpdC9JUENDb25uZWN0aW9uVGVzdGVyTWVzc2FnZXMuaAorJChCVUlMVF9QUk9EVUNUU19E
SVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdC9JUENDb25uZWN0aW9uVGVzdGVyTWVzc2FnZXNSZXBs
aWVzLmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQvSVBDU3Ry
ZWFtVGVzdGVyTWVzc2FnZVJlY2VpdmVyLmNwcAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2
ZWRTb3VyY2VzL1dlYktpdC9JUENTdHJlYW1UZXN0ZXJNZXNzYWdlcy5oCiAkKEJVSUxUX1BST0RV
Q1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0L0lQQ1N0cmVhbVRlc3Rlck1lc3NhZ2VzUmVw
bGllcy5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLm1ha2UgYi9T
b3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLm1ha2UKaW5kZXggNzZmMDcyNmI1M2Y2ZDYwMmEw
NTQ4ZjUwMjJhNGEyMGQzOTU4ZjVlMS4uNDM2MjRkMGM5NzkzYjI3MTMwODIzNzFiOGQ1M2NlM2Q1
NDRjOGZjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy5tYWtlCisr
KyBiL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMubWFrZQpAQCAtMTQ3LDYgKzE0Nyw3IEBA
IE1FU1NBR0VfUkVDRUlWRVJTID0gXAogCVNoYXJlZC9BdXRoZW50aWNhdGlvbi9BdXRoZW50aWNh
dGlvbk1hbmFnZXIgXAogCVNoYXJlZC9Ob3RpZmljYXRpb25zL05vdGlmaWNhdGlvbk1hbmFnZXJN
ZXNzYWdlSGFuZGxlciBcCiAJU2hhcmVkL1dlYkNvbm5lY3Rpb24gXAorCVNoYXJlZC9JUENDb25u
ZWN0aW9uVGVzdGVyIFwKIAlTaGFyZWQvSVBDU3RyZWFtVGVzdGVyIFwKIAlTaGFyZWQvSVBDU3Ry
ZWFtVGVzdGVyUHJveHkgXAogCVNoYXJlZC9JUENUZXN0ZXIgXApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9QbGF0Zm9ybS9JUEMvQ29ubmVjdGlvbi5oIGIvU291cmNlL1dlYktpdC9QbGF0Zm9y
bS9JUEMvQ29ubmVjdGlvbi5oCmluZGV4IDJhM2EzMjA0OGI0YzY4MWE3NzdkYTEwMmMzMTgxMzUz
ZmQ0YmI4M2IuLmFjOTg1M2IwNDNkMzhmNGQ0Y2FjYThkODA0ODk5MjA3YjljMjUwOWMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0Nvbm5lY3Rpb24uaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Db25uZWN0aW9uLmgKQEAgLTU3LDExICs1Nyw2IEBACiAj
aW5jbHVkZSA8d3RmL2dsaWIvR1NvY2tldE1vbml0b3IuaD4KICNlbmRpZgogCi1uYW1lc3BhY2Ug
V2ViS2l0IHsKLW5hbWVzcGFjZSBJUENUZXN0aW5nQVBJIHsKLWNsYXNzIEpTSVBDOwotfQotfQog
CiBuYW1lc3BhY2UgSVBDIHsKIApAQCAtMzMzLDYgKzMyOCw3IEBAIHB1YmxpYzoKICAgICB2b2lk
IHNldElnbm9yZUludmFsaWRNZXNzYWdlRm9yVGVzdGluZygpIHsgbV9pZ25vcmVJbnZhbGlkTWVz
c2FnZUZvclRlc3RpbmcgPSB0cnVlOyB9CiAgICAgYm9vbCBpZ25vcmVJbnZhbGlkTWVzc2FnZUZv
clRlc3RpbmcoKSBjb25zdCB7IHJldHVybiBtX2lnbm9yZUludmFsaWRNZXNzYWdlRm9yVGVzdGlu
ZzsgfQogICAgIHZvaWQgZGlzcGF0Y2hJbmNvbWluZ01lc3NhZ2VGb3JUZXN0aW5nKHN0ZDo6dW5p
cXVlX3B0cjxEZWNvZGVyPiYmKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RGVjb2Rlcj4gd2FpdEZv
ck1lc3NhZ2VGb3JUZXN0aW5nKE1lc3NhZ2VOYW1lLCB1aW50NjRfdCBkZXN0aW5hdGlvbklELCBU
aW1lb3V0LCBPcHRpb25TZXQ8V2FpdEZvck9wdGlvbj4pOwogI2VuZGlmCiAKICAgICB2b2lkIGRp
c3BhdGNoTWVzc2FnZVJlY2VpdmVyTWVzc2FnZShNZXNzYWdlUmVjZWl2ZXImLCBzdGQ6OnVuaXF1
ZV9wdHI8RGVjb2Rlcj4mJik7CkBAIC01MjQsNyArNTIwLDYgQEAgcHJpdmF0ZToKICAgICBIQU5E
TEUgbV9jb25uZWN0aW9uUGlwZSB7IElOVkFMSURfSEFORExFX1ZBTFVFIH07CiAjZW5kaWYKICAg
ICBmcmllbmQgY2xhc3MgU3RyZWFtQ2xpZW50Q29ubmVjdGlvbjsKLSAgICBmcmllbmQgY2xhc3Mg
V2ViS2l0OjpJUENUZXN0aW5nQVBJOjpKU0lQQzsKIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
CkBAIC02NTcsNiArNjUyLDE0IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGJvb2wgQ29ubmVjdGlv
bjo6d2FpdEZvckFzeW5jQ2FsbGJhY2tBbmREaXNwYXRjaEltbWVkaWF0ZWx5CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKKyNpZiBFTkFCTEUoSVBDX1RFU1RJTkdfQVBJKQoraW5saW5lIHN0ZDo6dW5p
cXVlX3B0cjxEZWNvZGVyPiBDb25uZWN0aW9uOjp3YWl0Rm9yTWVzc2FnZUZvclRlc3RpbmcoTWVz
c2FnZU5hbWUgbWVzc2FnZU5hbWUsIHVpbnQ2NF90IGRlc3RpbmF0aW9uSUQsIFRpbWVvdXQgdGlt
ZW91dCwgT3B0aW9uU2V0PFdhaXRGb3JPcHRpb24+IG9wdGlvbnMpCit7CisgICAgcmV0dXJuIHdh
aXRGb3JNZXNzYWdlKG1lc3NhZ2VOYW1lLCBkZXN0aW5hdGlvbklELCB0aW1lb3V0LCBvcHRpb25z
KTsKK30KKyNlbmRpZgorCisKIGNsYXNzIFVuYm91bmRlZFN5bmNocm9ub3VzSVBDU2NvcGUgewog
cHVibGljOgogICAgIFVuYm91bmRlZFN5bmNocm9ub3VzSVBDU2NvcGUoKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weSBiL1NvdXJjZS9XZWJLaXQv
U2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkKaW5kZXggNjRmMTM2MDFjMjA5ZDhhNzlhNjY3M2Ri
YjA3ODg5OGZkOTM0ODVmMi4uZDQ5ZDZlZGM0Y2Y3ZjQ5YzQ3YWEwMGQ1YmY3NmNmYzgwZWM4MWU3
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weQor
KysgYi9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CkBAIC0zMjQsNiAr
MzI0LDcgQEAgZGVmIHR5cGVzX3RoYXRfY2Fubm90X2JlX2ZvcndhcmRfZGVjbGFyZWQoKToKICAg
ICAgICAgJ1dlYktpdDo6R2VvbG9jYXRpb25JZGVudGlmaWVyJywKICAgICAgICAgJ1dlYktpdDo6
R3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYktpdDo6SW1hZ2VCdWZm
ZXJCYWNrZW5kSGFuZGxlJywKKyAgICAgICAgJ1dlYktpdDo6SVBDQ29ubmVjdGlvblRlc3Rlcklk
ZW50aWZpZXInLAogICAgICAgICAnV2ViS2l0OjpJUENTdHJlYW1UZXN0ZXJJZGVudGlmaWVyJywK
ICAgICAgICAgJ1dlYktpdDo6TGF5ZXJIb3N0aW5nQ29udGV4dElEJywKICAgICAgICAgJ1dlYktp
dDo6TGVnYWN5Q3VzdG9tUHJvdG9jb2xJRCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1No
YXJlZC9JUENDb25uZWN0aW9uVGVzdGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0lQQ0Nv
bm5lY3Rpb25UZXN0ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg3YzVkNzM3ZGI0OWY1NjBlMTg2ZjgzZTI3
YzUwNmVhY2ZiYWQzOTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9J
UENDb25uZWN0aW9uVGVzdGVyLmNwcApAQCAtMCwwICsxLDEwOCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJUENDb25uZWN0aW9uVGVzdGVyLmgiCisKKyNp
ZiBFTkFCTEUoSVBDX1RFU1RJTkdfQVBJKQorI2luY2x1ZGUgIklQQ0Nvbm5lY3Rpb25UZXN0ZXJN
ZXNzYWdlcy5oIgorI2luY2x1ZGUgIklQQ1Rlc3Rlci5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsK
KworLy8gRklYTUUoaHR0cHM6Ly93ZWJraXQub3JnL2IvMjM5NDg3KTogVGhlc2UgaWZkZWZzIGFy
ZSBlcnJvciBwcm9uZSwgZHVwbGljYXRlZCBhbmQgdGhlIGxhY2sgb2YgbW92ZSBzZW1hbnRpY3Mg
Y2F1c2VzIGxlYWtzLgorc3RhdGljIElQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllciBhc0lkZW50
aWZpZXIoSVBDOjpBdHRhY2htZW50JiYgY29ubmVjdGlvbklkZW50aWZpZXIpCit7CisjaWYgVVNF
KFVOSVhfRE9NQUlOX1NPQ0tFVFMpCisgICAgSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVyIGNv
bm5lY3Rpb25IYW5kbGUgeyBjb25uZWN0aW9uSWRlbnRpZmllci5yZWxlYXNlKCkucmVsZWFzZSgp
IH07CisjZWxpZiBPUyhEQVJXSU4pCisgICAgSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVyIGNv
bm5lY3Rpb25IYW5kbGUgeyBjb25uZWN0aW9uSWRlbnRpZmllci5wb3J0KCkgfTsKKyNlbGlmIE9T
KFdJTkRPV1MpCisgICAgSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVyIGNvbm5lY3Rpb25IYW5k
bGUgeyBjb25uZWN0aW9uSWRlbnRpZmllci5oYW5kbGUoKSB9OworI2Vsc2UKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworICAgIElQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllciBjb25uZWN0aW9uSGFu
ZGxlIHsgfTsKKyNlbmRpZgorICAgIHJldHVybiBjb25uZWN0aW9uSGFuZGxlOworfQorCitSZWY8
SVBDQ29ubmVjdGlvblRlc3Rlcj4gSVBDQ29ubmVjdGlvblRlc3Rlcjo6Y3JlYXRlKElQQzo6Q29u
bmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDQ29ubmVjdGlvblRlc3RlcklkZW50aWZpZXIgaWRlbnRp
ZmllciwgSVBDOjpBdHRhY2htZW50JiYgdGVzdGVkQ29ubmVjdGlvbklkZW50aWZpZXIpCit7Cisg
ICAgYXV0byB0ZXN0ZXIgPSBhZG9wdFJlZigqbmV3IElQQ0Nvbm5lY3Rpb25UZXN0ZXIoY29ubmVj
dGlvbiwgaWRlbnRpZmllciwgV1RGTW92ZSh0ZXN0ZWRDb25uZWN0aW9uSWRlbnRpZmllcikpKTsK
KyAgICB0ZXN0ZXItPmluaXRpYWxpemUoKTsKKyAgICByZXR1cm4gdGVzdGVyOworfQorCitJUEND
b25uZWN0aW9uVGVzdGVyOjpJUENDb25uZWN0aW9uVGVzdGVyKFJlZjxJUEM6OkNvbm5lY3Rpb24+
JiYgY29ubmVjdGlvbiwgSVBDQ29ubmVjdGlvblRlc3RlcklkZW50aWZpZXIgaWRlbnRpZmllciwg
SVBDOjpBdHRhY2htZW50JiYgdGVzdGVkQ29ubmVjdGlvbklkZW50aWZpZXIpCisgICAgOiBtX2Nv
bm5lY3Rpb24oV1RGTW92ZShjb25uZWN0aW9uKSkKKyAgICAsIG1fdGVzdGVkQ29ubmVjdGlvbihJ
UEM6OkNvbm5lY3Rpb246OmNyZWF0ZUNsaWVudENvbm5lY3Rpb24oYXNJZGVudGlmaWVyKFdURk1v
dmUodGVzdGVkQ29ubmVjdGlvbklkZW50aWZpZXIpKSwgKnRoaXMpKQorICAgICwgbV9pZGVudGlm
aWVyKGlkZW50aWZpZXIpCit7Cit9CisKK0lQQ0Nvbm5lY3Rpb25UZXN0ZXI6On5JUENDb25uZWN0
aW9uVGVzdGVyKCkgPSBkZWZhdWx0OworCit2b2lkIElQQ0Nvbm5lY3Rpb25UZXN0ZXI6OmluaXRp
YWxpemUoKQoreworICAgIG1fdGVzdGVkQ29ubmVjdGlvbi0+b3BlbigpOworfQorCit2b2lkIElQ
Q0Nvbm5lY3Rpb25UZXN0ZXI6OnN0b3BMaXN0ZW5pbmdGb3JJUEMoUmVmPElQQ0Nvbm5lY3Rpb25U
ZXN0ZXI+JiYgcmVmRnJvbUNvbm5lY3Rpb24pCit7CisgICAgbV90ZXN0ZWRDb25uZWN0aW9uLT5p
bnZhbGlkYXRlKCk7Cit9CisKK3ZvaWQgSVBDQ29ubmVjdGlvblRlc3Rlcjo6c2VuZEFzeW5jTWVz
c2FnZXModWludDMyX3QgbWVzc2FnZUNvdW50KQoreworICAgIGZvciAodWludDMyX3QgaSA9IDA7
IGkgPCBtZXNzYWdlQ291bnQ7ICsraSkKKyAgICAgICAgbV90ZXN0ZWRDb25uZWN0aW9uLT5zZW5k
KE1lc3NhZ2VzOjpJUENDb25uZWN0aW9uVGVzdGVyOjpBc3luY01lc3NhZ2UoaSksIDApOworfQor
Cit2b2lkIElQQ0Nvbm5lY3Rpb25UZXN0ZXI6OmRpZENsb3NlKElQQzo6Q29ubmVjdGlvbiYpCit7
Cit9CisKK3ZvaWQgSVBDQ29ubmVjdGlvblRlc3Rlcjo6ZGlkUmVjZWl2ZUludmFsaWRNZXNzYWdl
KElQQzo6Q29ubmVjdGlvbiYsIElQQzo6TWVzc2FnZU5hbWUpCit7CisgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Cit9CisKK3ZvaWQgSVBDQ29ubmVjdGlvblRlc3Rlcjo6YXN5bmNNZXNzYWdlKHVp
bnQzMl90IHZhbHVlKQoreworICAgIGlmIChtX3ByZXZpb3VzQXN5bmNNZXNzYWdlVmFsdWUgIT0g
dmFsdWUgLSAxKSB7CisgICAgICAgIEFTU0VSVF9JU19URVNUSU5HX0lQQygpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIG1fcHJldmlvdXNBc3luY01lc3NhZ2VWYWx1ZSA9IHZhbHVlOwor
fQorCit2b2lkIElQQ0Nvbm5lY3Rpb25UZXN0ZXI6OnN5bmNNZXNzYWdlKHVpbnQzMl90IHZhbHVl
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHVpbnQzMl90KT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
K3sKKyAgICBjb21wbGV0aW9uSGFuZGxlcih2YWx1ZSArIG1fcHJldmlvdXNBc3luY01lc3NhZ2VW
YWx1ZSk7Cit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9JUENDb25uZWN0aW9uVGVzdGVyLmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9JUENDb25uZWN0
aW9uVGVzdGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjBkOTM4YmU0MzlkYWExMDk2MGViNDAxMTRjYzBiMTk5
ZTY4Y2I3NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0lQQ0Nvbm5l
Y3Rpb25UZXN0ZXIuaApAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIy
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpZiBFTkFCTEUoSVBDX1RFU1RJTkdfQVBJKQorCisjaW5jbHVkZSAiQ29ubmVjdGlvbi5o
IgorI2luY2x1ZGUgIklQQ0Nvbm5lY3Rpb25UZXN0ZXJJZGVudGlmaWVyLmgiCisjaW5jbHVkZSAi
TWVzc2FnZVJlY2VpdmVyLmgiCisjaW5jbHVkZSA8b3B0aW9uYWw+CisjaW5jbHVkZSA8d3RmL0hh
c2hNYXAuaD4KKworbmFtZXNwYWNlIElQQyB7CitjbGFzcyBDb25uZWN0aW9uOworfQorCituYW1l
c3BhY2UgV2ViS2l0IHsKKworLy8gSW50ZXJmYWNlIHRvIHRlc3QgdmFyaW91cyBJUEM6OkNvbm5l
Y3Rpb24gcmVsYXRlZCBhY3Rpdml0aWVzLgorY2xhc3MgSVBDQ29ubmVjdGlvblRlc3RlciBmaW5h
bCA6IHB1YmxpYyBSZWZDb3VudGVkPElQQ0Nvbm5lY3Rpb25UZXN0ZXI+LCBwcml2YXRlIElQQzo6
Q29ubmVjdGlvbjo6Q2xpZW50IHsKK3B1YmxpYzoKKyAgICB+SVBDQ29ubmVjdGlvblRlc3Rlcigp
OworICAgIHN0YXRpYyBSZWY8SVBDQ29ubmVjdGlvblRlc3Rlcj4gY3JlYXRlKElQQzo6Q29ubmVj
dGlvbiYsIElQQ0Nvbm5lY3Rpb25UZXN0ZXJJZGVudGlmaWVyLCBJUEM6OkF0dGFjaG1lbnQmJiB0
ZXN0ZWRDb25uZWN0aW9uSWRlbnRpZmllcik7CisgICAgdm9pZCBzdG9wTGlzdGVuaW5nRm9ySVBD
KFJlZjxJUENDb25uZWN0aW9uVGVzdGVyPiYmIHJlZkZyb21Db25uZWN0aW9uKTsKKworICAgIHZv
aWQgc2VuZEFzeW5jTWVzc2FnZXModWludDMyX3QgbWVzc2FnZUNvdW50KTsKK3ByaXZhdGU6Cisg
ICAgSVBDQ29ubmVjdGlvblRlc3RlcihSZWY8SVBDOjpDb25uZWN0aW9uPiYmLCBJUENDb25uZWN0
aW9uVGVzdGVySWRlbnRpZmllciwgSVBDOjpBdHRhY2htZW50JiYgdGVzdGVkQ29ubmVjdGlvbklk
ZW50aWZpZXIpOworICAgIHZvaWQgaW5pdGlhbGl6ZSgpOworCisgICAgLy8gSVBDOjpDb25uZWN0
aW9uOjpDbGllbnQgb3ZlcnJpZGVzLgorICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpD
b25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgZmluYWw7CisgICAgYm9vbCBkaWRSZWNlaXZlU3lu
Y01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJiwgVW5pcXVlUmVmPElQQzo6
RW5jb2Rlcj4mKSBmaW5hbDsKKyAgICB2b2lkIGRpZENsb3NlKElQQzo6Q29ubmVjdGlvbiYpIGZp
bmFsOworICAgIHZvaWQgZGlkUmVjZWl2ZUludmFsaWRNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYs
IElQQzo6TWVzc2FnZU5hbWUpIGZpbmFsOworCisgICAgLy8gTWVzc2FnZXMuCisgICAgdm9pZCBh
c3luY01lc3NhZ2UodWludDMyX3QgdmFsdWUpOworICAgIHZvaWQgc3luY01lc3NhZ2UodWludDMy
X3QgdmFsdWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQodWludDMyX3Qgc2FtZVZhbHVlKT4mJik7
CisKKyAgICBjb25zdCBSZWY8SVBDOjpDb25uZWN0aW9uPiBtX2Nvbm5lY3Rpb247CisgICAgY29u
c3QgUmVmPElQQzo6Q29ubmVjdGlvbj4gbV90ZXN0ZWRDb25uZWN0aW9uOworICAgIGNvbnN0IElQ
Q0Nvbm5lY3Rpb25UZXN0ZXJJZGVudGlmaWVyIG1faWRlbnRpZmllcjsKKyAgICB1aW50MzJfdCBt
X3ByZXZpb3VzQXN5bmNNZXNzYWdlVmFsdWUgeyAwIH07Cit9OworCit9CisKKyNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvSVBDQ29ubmVjdGlvblRlc3Rlci5tZXNzYWdl
cy5pbiBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0lQQ0Nvbm5lY3Rpb25UZXN0ZXIubWVzc2FnZXMu
aW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNGJhNTU2Zjc1MDM1MWNlMTczNWY3NTI2MzQzMGI4MjVjZTA0NjgzMAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0lQQ0Nvbm5lY3Rpb25UZXN0
ZXIubWVzc2FnZXMuaW4KQEAgLTAsMCArMSwzMCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMjIgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMg
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5E
CisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
IyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorCisjaWYgRU5BQkxFKElQQ19URVNUSU5HX0FQSSkKKworbWVzc2FnZXMg
LT4gSVBDQ29ubmVjdGlvblRlc3RlciBOb3RSZWZDb3VudGVkIHsKKyAgICBBc3luY01lc3NhZ2Uo
dWludDMyX3QgdmFsdWUpCisgICAgU3luY01lc3NhZ2UodWludDMyX3QgdmFsdWUpIC0+ICh1aW50
MzJfdCBzYW1lVmFsdWUpIFN5bmNocm9ub3VzCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9TaGFyZWQvSVBDQ29ubmVjdGlvblRlc3RlcklkZW50aWZpZXIuaCBiL1NvdXJj
ZS9XZWJLaXQvU2hhcmVkL0lQQ0Nvbm5lY3Rpb25UZXN0ZXJJZGVudGlmaWVyLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMzk0YWNkODlmMjFiMjE5OTA2ZTI1OTNjM2E5MzljYTdlYTNkODNjMgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0lQQ0Nvbm5lY3Rpb25UZXN0ZXJJZGVudGlmaWVy
LmgKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5B
QkxFKElQQ19URVNUSU5HX0FQSSkKKworI2luY2x1ZGUgPHd0Zi9PYmplY3RJZGVudGlmaWVyLmg+
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitlbnVtIElQQ0Nvbm5lY3Rpb25UZXN0ZXJJZGVudGlm
aWVyVHlwZSB7IH07Cit1c2luZyBJUENDb25uZWN0aW9uVGVzdGVySWRlbnRpZmllciA9IE9iamVj
dElkZW50aWZpZXI8SVBDQ29ubmVjdGlvblRlc3RlcklkZW50aWZpZXJUeXBlPjsKKworfQorCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0lQQ1Rlc3Rlci5jcHAgYi9T
b3VyY2UvV2ViS2l0L1NoYXJlZC9JUENUZXN0ZXIuY3BwCmluZGV4IDFiOGM0NzM5YjYwNjYwYWRj
N2FhNzc3ODAyYjJlMzQ2YTMxZWM3ZTUuLjBiNDUwMTY1ZTE2OTU2MTNlYWQ5MjNiMzA2ZDhiZDY3
ZTA1ZWQ2Y2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0lQQ1Rlc3Rlci5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvSVBDVGVzdGVyLmNwcApAQCAtMjksNiArMjksNyBA
QAogI2lmIEVOQUJMRShJUENfVEVTVElOR19BUEkpCiAjaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgog
I2luY2x1ZGUgIkRlY29kZXIuaCIKKyNpbmNsdWRlICJJUENDb25uZWN0aW9uVGVzdGVyLmgiCiAj
aW5jbHVkZSAiSVBDU3RyZWFtVGVzdGVyLmgiCiAKICNpbmNsdWRlIDxhdG9taWM+CkBAIC0xNDUs
NiArMTQ2LDMyIEBAIHZvaWQgSVBDVGVzdGVyOjpyZWxlYXNlU3RyZWFtVGVzdGVyKElQQ1N0cmVh
bVRlc3RlcklkZW50aWZpZXIgaWRlbnRpZmllciwgQ29tcGxlCiAgICAgY29tcGxldGlvbkhhbmRs
ZXIoKTsKIH0KIAordm9pZCBJUENUZXN0ZXI6OmNyZWF0ZUNvbm5lY3Rpb25UZXN0ZXIoSVBDOjpD
b25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUENDb25uZWN0aW9uVGVzdGVySWRlbnRpZmllciBpZGVu
dGlmaWVyLCBJUEM6OkF0dGFjaG1lbnQmJiB0ZXN0ZWRDb25uZWN0aW9uSWRlbnRpZmllcikKK3sK
KyAgICBhdXRvIGFkZFJlc3VsdCA9IG1fY29ubmVjdGlvblRlc3RlcnMuZW5zdXJlKGlkZW50aWZp
ZXIsIFsmXSB7CisgICAgICAgIHJldHVybiBJUEM6OlNjb3BlZEFjdGl2ZU1lc3NhZ2VSZWNlaXZl
UXVldWU8SVBDQ29ubmVjdGlvblRlc3Rlcj4geyBJUENDb25uZWN0aW9uVGVzdGVyOjpjcmVhdGUo
Y29ubmVjdGlvbiwgaWRlbnRpZmllciwgV1RGTW92ZSh0ZXN0ZWRDb25uZWN0aW9uSWRlbnRpZmll
cikpIH07CisgICAgfSk7CisgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5p
c05ld0VudHJ5IHx8IGlzVGVzdGluZ0lQQygpKTsKK30KKwordm9pZCBJUENUZXN0ZXI6OmNyZWF0
ZUNvbm5lY3Rpb25UZXN0ZXJBbmRTZW5kQXN5bmNNZXNzYWdlcyhJUEM6OkNvbm5lY3Rpb24mIGNv
bm5lY3Rpb24sIElQQ0Nvbm5lY3Rpb25UZXN0ZXJJZGVudGlmaWVyIGlkZW50aWZpZXIsIElQQzo6
QXR0YWNobWVudCYmIHRlc3RlZENvbm5lY3Rpb25JZGVudGlmaWVyLCB1aW50MzJfdCBtZXNzYWdl
Q291bnQpCit7CisgICAgYXV0byBhZGRSZXN1bHQgPSBtX2Nvbm5lY3Rpb25UZXN0ZXJzLmVuc3Vy
ZShpZGVudGlmaWVyLCBbJl0geworICAgICAgICByZXR1cm4gSVBDOjpTY29wZWRBY3RpdmVNZXNz
YWdlUmVjZWl2ZVF1ZXVlPElQQ0Nvbm5lY3Rpb25UZXN0ZXI+IHsgSVBDQ29ubmVjdGlvblRlc3Rl
cjo6Y3JlYXRlKGNvbm5lY3Rpb24sIGlkZW50aWZpZXIsIFdURk1vdmUodGVzdGVkQ29ubmVjdGlv
bklkZW50aWZpZXIpKSB9OworICAgIH0pOworICAgIGlmICghYWRkUmVzdWx0LmlzTmV3RW50cnkp
IHsKKyAgICAgICAgQVNTRVJUX0lTX1RFU1RJTkdfSVBDKCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+c2VuZEFzeW5jTWVzc2FnZXMobWVz
c2FnZUNvdW50KTsKK30KKwordm9pZCBJUENUZXN0ZXI6OnJlbGVhc2VDb25uZWN0aW9uVGVzdGVy
KElQQ0Nvbm5lY3Rpb25UZXN0ZXJJZGVudGlmaWVyIGlkZW50aWZpZXIsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBtX2Nvbm5lY3Rpb25UZXN0
ZXJzLnJlbW92ZShpZGVudGlmaWVyKTsKKyAgICBjb21wbGV0aW9uSGFuZGxlcigpOworfQorCiB2
b2lkIElQQ1Rlc3Rlcjo6c3RvcElmTmVlZGVkKCkKIHsKICAgICBpZiAobV90ZXN0UXVldWUpIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0lQQ1Rlc3Rlci5oIGIvU291cmNlL1dl
YktpdC9TaGFyZWQvSVBDVGVzdGVyLmgKaW5kZXggNzAwOTdiODA2YmUzM2ZkZDI1MTBjNDliNWVl
MzM4M2NkN2IxZWFlNS4uNmRiYjQ1NzI0YjRmNjVkNjcxN2VmODJjZTQ0NWU1NDY4NjJjZTgzNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvSVBDVGVzdGVyLmgKKysrIGIvU291cmNl
L1dlYktpdC9TaGFyZWQvSVBDVGVzdGVyLmgKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJM
RShJUENfVEVTVElOR19BUEkpCiAKKyNpbmNsdWRlICJJUENDb25uZWN0aW9uVGVzdGVySWRlbnRp
Zmllci5oIgogI2luY2x1ZGUgIklQQ1N0cmVhbVRlc3RlcklkZW50aWZpZXIuaCIKICNpbmNsdWRl
ICJNZXNzYWdlUmVjZWl2ZXIuaCIKICNpbmNsdWRlICJTY29wZWRBY3RpdmVNZXNzYWdlUmVjZWl2
ZVF1ZXVlLmgiCkBAIC01Miw2ICs1Myw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogLy8gYW5kIGV4
cG9zZXMgYnVncyB1bmRlcm5lYXRoLgogYm9vbCBpc1Rlc3RpbmdJUEMoKTsKIAorY2xhc3MgSVBD
Q29ubmVjdGlvblRlc3RlcjsKIGNsYXNzIElQQ1N0cmVhbVRlc3RlcjsKIAogLy8gTWFpbiB0ZXN0
IGludGVyZmFjZSBmb3IgaW5pdGlhdGluZyB2YXJpb3VzIElQQyB0ZXN0IGFjdGl2aXRpZXMuCkBA
IC02OSw3ICs3MSw5IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzdG9wTWVzc2FnZVRlc3RpbmcoQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPik7CiAgICAgdm9pZCBjcmVhdGVTdHJlYW1UZXN0ZXIoSVBD
OjpDb25uZWN0aW9uJiwgSVBDU3RyZWFtVGVzdGVySWRlbnRpZmllciwgSVBDOjpTdHJlYW1Db25u
ZWN0aW9uQnVmZmVyJiYpOwogICAgIHZvaWQgcmVsZWFzZVN0cmVhbVRlc3RlcihJUENTdHJlYW1U
ZXN0ZXJJZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwotCisgICAgdm9p
ZCBjcmVhdGVDb25uZWN0aW9uVGVzdGVyKElQQzo6Q29ubmVjdGlvbiYsIElQQ0Nvbm5lY3Rpb25U
ZXN0ZXJJZGVudGlmaWVyLCBJUEM6OkF0dGFjaG1lbnQmJik7CisgICAgdm9pZCBjcmVhdGVDb25u
ZWN0aW9uVGVzdGVyQW5kU2VuZEFzeW5jTWVzc2FnZXMoSVBDOjpDb25uZWN0aW9uJiwgSVBDQ29u
bmVjdGlvblRlc3RlcklkZW50aWZpZXIsIElQQzo6QXR0YWNobWVudCYmLCB1aW50MzJfdCBtZXNz
YWdlQ291bnQpOworICAgIHZvaWQgcmVsZWFzZUNvbm5lY3Rpb25UZXN0ZXIoSVBDQ29ubmVjdGlv
blRlc3RlcklkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAgICAgdm9p
ZCBzdG9wSWZOZWVkZWQoKTsKIAogICAgIFJlZlB0cjxXb3JrUXVldWU+IG1fdGVzdFF1ZXVlOwpA
QCAtNzcsNiArODEsOSBAQCBwcml2YXRlOgogCiAgICAgdXNpbmcgU3RyZWFtVGVzdGVyTWFwID0g
SGFzaE1hcDxJUENTdHJlYW1UZXN0ZXJJZGVudGlmaWVyLCBJUEM6OlNjb3BlZEFjdGl2ZU1lc3Nh
Z2VSZWNlaXZlUXVldWU8SVBDU3RyZWFtVGVzdGVyPj47CiAgICAgU3RyZWFtVGVzdGVyTWFwIG1f
c3RyZWFtVGVzdGVyczsKKworICAgIHVzaW5nIENvbm5lY3Rpb25UZXN0ZXJNYXAgPSBIYXNoTWFw
PElQQ0Nvbm5lY3Rpb25UZXN0ZXJJZGVudGlmaWVyLCBJUEM6OlNjb3BlZEFjdGl2ZU1lc3NhZ2VS
ZWNlaXZlUXVldWU8SVBDQ29ubmVjdGlvblRlc3Rlcj4+OworICAgIENvbm5lY3Rpb25UZXN0ZXJN
YXAgbV9jb25uZWN0aW9uVGVzdGVyczsKIH07CiAKICNlbHNlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1NoYXJlZC9JUENUZXN0ZXIubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9JUENUZXN0ZXIubWVzc2FnZXMuaW4KaW5kZXggY2QyNDRmYjBlMTY5MTQ0ODZmN2IwMDZiODY3
OGNmNzBkZTUyMzhiMC4uYTdlMTU4YTIxZjYyNzNhYmRhZTkwODI4NmM1MmVhM2MzMDNjYjMwMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvSVBDVGVzdGVyLm1lc3NhZ2VzLmluCisr
KyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0lQQ1Rlc3Rlci5tZXNzYWdlcy5pbgpAQCAtMjcsNiAr
MjcsOSBAQCBtZXNzYWdlcyAtPiBJUENUZXN0ZXIgTm90UmVmQ291bnRlZCB7CiAgICAgU3RvcE1l
c3NhZ2VUZXN0aW5nKCkgLT4gKCkgU3luY2hyb25vdXMKICAgICBDcmVhdGVTdHJlYW1UZXN0ZXIo
V2ViS2l0OjpJUENTdHJlYW1UZXN0ZXJJZGVudGlmaWVyIGlkZW50aWZpZXIsIElQQzo6U3RyZWFt
Q29ubmVjdGlvbkJ1ZmZlciBzdHJlYW0pIFdhbnRzQ29ubmVjdGlvbgogICAgIFJlbGVhc2VTdHJl
YW1UZXN0ZXIoV2ViS2l0OjpJUENTdHJlYW1UZXN0ZXJJZGVudGlmaWVyIGlkZW50aWZpZXIpIC0+
ICgpIFN5bmNocm9ub3VzCisgICAgQ3JlYXRlQ29ubmVjdGlvblRlc3RlcihXZWJLaXQ6OklQQ0Nv
bm5lY3Rpb25UZXN0ZXJJZGVudGlmaWVyIGlkZcWTbnRpZmllciwgSVBDOjpBdHRhY2htZW50IGNv
bm5lY3Rpb24pIFdhbnRzQ29ubmVjdGlvbgorICAgIENyZWF0ZUNvbm5lY3Rpb25UZXN0ZXJBbmRT
ZW5kQXN5bmNNZXNzYWdlcyhXZWJLaXQ6OklQQ0Nvbm5lY3Rpb25UZXN0ZXJJZGVudGlmaWVyIGlk
ZW50aWZpZXIsIElQQzo6QXR0YWNobWVudCBjb25uZWN0aW9uLCB1aW50MzJfdCBtZXNzYWdlQ291
bnQpIFdhbnRzQ29ubmVjdGlvbgorICAgIFJlbGVhc2VDb25uZWN0aW9uVGVzdGVyKFdlYktpdDo6
SVBDQ29ubmVjdGlvblRlc3RlcklkZW50aWZpZXIgaWRlbnRpZmllcikgLT4gKCkgU3luY2hyb25v
dXMKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0IGIv
U291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dAppbmRleCA2NzU3ZGI3Yjc5NGVjYmMwY2IyNDY5NTY5
NDRkMTExOGJhODFlZjUxLi4yMDg1ZTA4MDlhODNiYTk4YWQ0OGZiY2ZlNTQxMzQ2ZTM5ZWJjOTRi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJL
aXQvU291cmNlcy50eHQKQEAgLTIyNyw2ICsyMjcsNyBAQCBTaGFyZWQvRWRpdG9yU3RhdGUuY3Bw
CiBTaGFyZWQvRm9udEluZm8uY3BwCiBTaGFyZWQvRnJhbWVJbmZvRGF0YS5jcHAKIFNoYXJlZC9J
bnNwZWN0b3JFeHRlbnNpb25UeXBlcy5jcHAKK1NoYXJlZC9JUENDb25uZWN0aW9uVGVzdGVyLmNw
cAogU2hhcmVkL0lQQ1N0cmVhbVRlc3Rlci5jcHAKIFNoYXJlZC9JUENUZXN0ZXIuY3BwCiBTaGFy
ZWQvTGF5ZXJUcmVlQ29udGV4dC5jcHAKQEAgLTg2Miw2ICs4NjMsNyBAQCBXZWJQcm9jZXNzL1dl
YlN0b3JhZ2UvV2ViU3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyLmNwcAogCiBXZWJQcm9jZXNzL1hS
L1BsYXRmb3JtWFJTeXN0ZW1Qcm94eS5jcHAKIAorSVBDQ29ubmVjdGlvblRlc3Rlck1lc3NhZ2VS
ZWNlaXZlci5jcHAKIElQQ1N0cmVhbVRlc3Rlck1lc3NhZ2VSZWNlaXZlci5jcHAKIElQQ1N0cmVh
bVRlc3RlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcAogSVBDVGVzdGVyTWVzc2FnZVJlY2VpdmVy
LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
aW5kZXggOWEzZTE3ZTJiNTRiMDY4MTdhNWMwZDMyYmRmYzYwODkzZmI2NWIzYi4uNjkxNTRiNWM5
ZWY4NWIxYTNiMGYzMzMwZDUyYWY3YTVlNjY1YmZlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0L1dl
YktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMzMzLDYgKzEzMzMsOCBAQAogCQk3
QjczMTI0MTI1Q0M4NTI1MDAzQjI3OTYgLyogU3RyZWFtU2VydmVyQ29ubmVjdGlvbi5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0I3MzEyMzgyNUNDODUy
NDAwM0IyNzk2IC8qIFN0cmVhbVNlcnZlckNvbm5lY3Rpb24uaCAqLzsgfTsKIAkJN0I3MzEyNDIy
NUNDODUyNTAwM0IyNzk2IC8qIFN0cmVhbUNvbm5lY3Rpb25FbmNvZGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QjczMTIzOTI1Q0M4NTI1MDAzQjI3
OTYgLyogU3RyZWFtQ29ubmVjdGlvbkVuY29kZXIuaCAqLzsgfTsKIAkJN0JBQjExMTAyNUREMDJC
MzAwOEZDNDc5IC8qIFNjb3BlZEFjdGl2ZU1lc3NhZ2VSZWNlaXZlUXVldWUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCQUIxMTBGMjVERDAyQjIwMDhG
QzQ3OSAvKiBTY29wZWRBY3RpdmVNZXNzYWdlUmVjZWl2ZVF1ZXVlLmggKi87IH07CisJCTdCQkE2
M0RGMjgwRTkzRDIwMEIwNDgyMyAvKiBJUENDb25uZWN0aW9uVGVzdGVySWRlbnRpZmllci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0JCQTYzREMyODBF
OTNCNTAwQjA0ODIzIC8qIElQQ0Nvbm5lY3Rpb25UZXN0ZXJJZGVudGlmaWVyLmggKi87IH07CisJ
CTdCQkE2M0UwMjgwRTkzRDYwMEIwNDgyMyAvKiBJUENDb25uZWN0aW9uVGVzdGVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QkJBNjNERTI4MEU5M0I2
MDBCMDQ4MjMgLyogSVBDQ29ubmVjdGlvblRlc3Rlci5oICovOyB9OwogCQk3QkNGNzBERTI2MTVE
MDZFMDBFNEZCNzAgLyogU2NvcGVkUmVuZGVyaW5nUmVzb3VyY2VzUmVxdWVzdENvY29hLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0JDRjcwQ0IyNjE0
OTM1RTAwRTRGQjcwIC8qIFNjb3BlZFJlbmRlcmluZ1Jlc291cmNlc1JlcXVlc3RDb2NvYS5tbSAq
LzsgfTsKIAkJN0JEREEzMTkyNzQ3QzA0MDAwMzg2NTlFIC8qIChudWxsKSBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgfTsKIAkJN0JFMzdGOTMyN0M3Q0E1MTAwN0E2Q0QzIC8q
IElQQ1N0cmVhbVRlc3RlcklkZW50aWZpZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDdCRTM3RjkyMjdDN0M1MTgwMDdBNkNEMyAvKiBJUENTdHJlYW1U
ZXN0ZXJJZGVudGlmaWVyLmggKi87IH07CkBAIC01NDY5LDYgKzU0NzEsOSBAQAogCQk3QjkwNDE2
QTI1NEFGRUE3MDA2RUVCOEMgLyogUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJN0I5MDQxNkQyNTUwMTA4QzAwNkVFQjhDIC8qIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdM
RnVuY3Rpb25zR2VuZXJhdGVkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZUdyYXBoaWNzQ29udGV4
dEdMRnVuY3Rpb25zR2VuZXJhdGVkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdC
QUIxMTBGMjVERDAyQjIwMDhGQzQ3OSAvKiBTY29wZWRBY3RpdmVNZXNzYWdlUmVjZWl2ZVF1ZXVl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjb3BlZEFjdGl2ZU1lc3NhZ2VS
ZWNlaXZlUXVldWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0JCQTYzREMyODBF
OTNCNTAwQjA0ODIzIC8qIElQQ0Nvbm5lY3Rpb25UZXN0ZXJJZGVudGlmaWVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IElQQ0Nvbm5lY3Rpb25UZXN0ZXJJZGVudGlmaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTdCQkE2M0REMjgwRTkzQjYwMEIwNDgyMyAvKiBJUENDb25uZWN0aW9uVGVz
dGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElQQ0Nvbm5lY3Rpb25UZXN0ZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QkJBNjNERTI4MEU5M0I2MDBCMDQ4MjMgLyogSVBD
Q29ubmVjdGlvblRlc3Rlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJUENDb25uZWN0aW9uVGVzdGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdCQ0Y3MENBMjYxNDkzNUUwMEU0RkI3MCAv
KiBTY29wZWRSZW5kZXJpbmdSZXNvdXJjZXNSZXF1ZXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFNjb3BlZFJlbmRlcmluZ1Jlc291cmNlc1JlcXVlc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3QkNGNzBDQjI2MTQ5MzVFMDBFNEZCNzAgLyogU2NvcGVkUmVuZGVyaW5nUmVz
b3VyY2VzUmVxdWVzdENvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gU2NvcGVkUmVuZGVy
aW5nUmVzb3VyY2VzUmVxdWVzdENvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk3QkNGNzBDQzI2MTQ5MzVGMDBFNEZCNzAgLyogU2NvcGVkV2ViR0xSZW5kZXJpbmdSZXNvdXJj
ZXNSZXF1ZXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjb3BlZFdlYkdMUmVuZGVyaW5nUmVz
b3VyY2VzUmVxdWVzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03ODYzLDYg
Kzc4NjgsOSBAQAogCQkJCUJDQ0Y2QjIzMTJDOTNFN0EwMDhGOUMzNSAvKiBJbWFnZU9wdGlvbnMu
aCAqLywKIAkJCQk5OTlCN0VEODI1NTBFNEE4MDBGNDUwQTQgLyogSW5zcGVjdG9yRXh0ZW5zaW9u
VHlwZXMuY3BwICovLAogCQkJCTk5QkUzQjE2MjU0MzNCOTQwMEM2NTUxQyAvKiBJbnNwZWN0b3JF
eHRlbnNpb25UeXBlcy5oICovLAorCQkJCTdCQkE2M0REMjgwRTkzQjYwMEIwNDgyMyAvKiBJUEND
b25uZWN0aW9uVGVzdGVyLmNwcCAqLywKKwkJCQk3QkJBNjNERTI4MEU5M0I2MDBCMDQ4MjMgLyog
SVBDQ29ubmVjdGlvblRlc3Rlci5oICovLAorCQkJCTdCQkE2M0RDMjgwRTkzQjUwMEIwNDgyMyAv
KiBJUENDb25uZWN0aW9uVGVzdGVySWRlbnRpZmllci5oICovLAogCQkJCTdCRTM3Rjk1MjdDN0NE
OTAwMDdBNkNEMyAvKiBJUENTdHJlYW1UZXN0ZXIuY3BwICovLAogCQkJCTdCRTM3Rjk0MjdDN0NE
NTEwMDdBNkNEMyAvKiBJUENTdHJlYW1UZXN0ZXIuaCAqLywKIAkJCQk3QkUzN0Y5MjI3QzdDNTE4
MDA3QTZDRDMgLyogSVBDU3RyZWFtVGVzdGVySWRlbnRpZmllci5oICovLApAQCAtMTQxNzcsNiAr
MTQxODUsOCBAQAogCQkJCTUxRTkwNDlDMjdCQ0I5RDQwMDkyOUU3RSAvKiBJbnN0YWxsQ29vcmRp
bmF0aW9uU1BJLmggaW4gSGVhZGVycyAqLywKIAkJCQlDNUJDRTVERjFDNTA3NjZBMDBDREUzRkEg
LyogSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJ
CTJENEQyQzgxMURGNjBCRjMwMDJFQjEwQyAvKiBJbnRlcmFjdGlvbkluZm9ybWF0aW9uUmVxdWVz
dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJN0JCQTYzRTAyODBFOTNENjAwQjA0ODIzIC8qIElQQ0Nv
bm5lY3Rpb25UZXN0ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTdCQkE2M0RGMjgwRTkzRDIwMEIw
NDgyMyAvKiBJUENDb25uZWN0aW9uVGVzdGVySWRlbnRpZmllci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTMxRjYwQTQyNUNDN0RCOTAwQUYxNEY0IC8qIElQQ1NlbWFwaG9yZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJN0JFMzdGOTMyN0M3Q0E1MTAwN0E2Q0QzIC8qIElQQ1N0cmVhbVRlc3RlcklkZW50
aWZpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTlCNDc5MDhGMjUzMTUxQ0MwMEVDMTFBQiAvKiBK
U0lQQ0JpbmRpbmcuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvSVBDVGVzdGluZ0FQSS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9JUENUZXN0aW5nQVBJLmNwcAppbmRleCA3NWU1MzA0ZWMxNTQ5ZTY5YWQ1
ZmYzN2ExZGRmNTljMTFhNzYxZmVkLi45N2QxMDcyMWIyOTBkYjdiNmE0M2M0ZTdlMjdmMmExZDVh
YWUzZTZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9JUENU
ZXN0aW5nQVBJLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9JUENU
ZXN0aW5nQVBJLmNwcApAQCAtNjEsNiArNjEsOCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogbmFt
ZXNwYWNlIElQQ1Rlc3RpbmdBUEkgewogCitjbGFzcyBKU0lQQzsKKwogc3RhdGljIGNvbnN0ZXhw
ciBhdXRvIHByb2Nlc3NUYXJnZXROYW1lVUkgPSAiVUkiX3M7CiAjaWYgRU5BQkxFKEdQVV9QUk9D
RVNTKQogc3RhdGljIGNvbnN0ZXhwciBhdXRvIHByb2Nlc3NUYXJnZXROYW1lR1BVID0gIkdQVSJf
czsKQEAgLTcwLDcgKzcyLDcgQEAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIHByb2Nlc3NUYXJnZXRO
YW1lTmV0d29ya2luZyA9ICJOZXR3b3JraW5nIl9zOwogc3RhdGljIHN0ZDo6b3B0aW9uYWw8dWlu
dDY0X3Q+IGRlc3RpbmF0aW9uSURGcm9tQXJndW1lbnQoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpT
VmFsdWVSZWYsIEpTVmFsdWVSZWYqKTsKIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBt
ZXNzYWdlSURGcm9tQXJndW1lbnQoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTVmFsdWVSZWYsIEpT
VmFsdWVSZWYqKTsKIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBqc1Jlc3VsdEZyb21SZXBseURlY29k
ZXIoSlNDOjpKU0dsb2JhbE9iamVjdCosIElQQzo6TWVzc2FnZU5hbWUsIElQQzo6RGVjb2RlciYp
Owotc3RhdGljIGJvb2wgZW5jb2RlQXJndW1lbnQoSVBDOjpFbmNvZGVyJiwgSlNJUEMmLCBKU0Nv
bnRleHRSZWYsIEpTVmFsdWVSZWYsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CitzdGF0aWMgYm9v
bCBlbmNvZGVBcmd1bWVudChJUEM6OkVuY29kZXImLCBKU0NvbnRleHRSZWYsIEpTVmFsdWVSZWYs
IEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CiAKIGNsYXNzIEpTSVBDU2VtYXBob3JlIDogcHVibGlj
IFJlZkNvdW50ZWQ8SlNJUENTZW1hcGhvcmU+IHsKIHB1YmxpYzoKQEAgLTEwNiw2ICsxMDgsNzEg
QEAgcHJpdmF0ZToKICAgICBJUEM6OlNlbWFwaG9yZSBtX3NlbWFwaG9yZTsKIH07CiAKK2NsYXNz
IEpTSVBDQXR0YWNobWVudCA6IHB1YmxpYyBSZWZDb3VudGVkPEpTSVBDQXR0YWNobWVudD4gewor
cHVibGljOgorICAgIHN0YXRpYyBSZWY8SlNJUENBdHRhY2htZW50PiBjcmVhdGUoSVBDOjpBdHRh
Y2htZW50JiYgYXR0YWNobWVudCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IEpTSVBDQXR0YWNobWVudChXVEZNb3ZlKGF0dGFjaG1lbnQpKSk7CisgICAgfQorCisgICAgSlNP
YmplY3RSZWYgY3JlYXRlSlNXcmFwcGVyKEpTQ29udGV4dFJlZik7CisgICAgc3RhdGljIEpTSVBD
QXR0YWNobWVudCogdG9XcmFwcGVkKEpTQ29udGV4dFJlZiwgSlNWYWx1ZVJlZik7CisKKyAgICB2
b2lkIGVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0IHsgbV9hdHRhY2htZW50LmVu
Y29kZShlbmNvZGVyKTsgfQorCitwcml2YXRlOgorICAgIEpTSVBDQXR0YWNobWVudChJUEM6OkF0
dGFjaG1lbnQmJiBhdHRhY2htZW50KQorICAgICAgICA6IG1fYXR0YWNobWVudChXVEZNb3ZlKGF0
dGFjaG1lbnQpKQorICAgIHsgfQorCisgICAgc3RhdGljIEpTQ2xhc3NSZWYgd3JhcHBlckNsYXNz
KCk7CisgICAgc3RhdGljIEpTSVBDQXR0YWNobWVudCogdW53cmFwKEpTT2JqZWN0UmVmKTsKKyAg
ICBzdGF0aWMgdm9pZCBpbml0aWFsaXplKEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYpOworICAg
IHN0YXRpYyB2b2lkIGZpbmFsaXplKEpTT2JqZWN0UmVmKTsKKworICAgIHN0YXRpYyBjb25zdCBK
U1N0YXRpY0Z1bmN0aW9uKiBzdGF0aWNGdW5jdGlvbnMoKTsKKworICAgIElQQzo6QXR0YWNobWVu
dCBtX2F0dGFjaG1lbnQ7Cit9OworCitjbGFzcyBKU0lQQ0Nvbm5lY3Rpb24gOiBwdWJsaWMgUmVm
Q291bnRlZDxKU0lQQ0Nvbm5lY3Rpb24+LCBwcml2YXRlIElQQzo6Q29ubmVjdGlvbjo6Q2xpZW50
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPEpTSVBDQ29ubmVjdGlvbj4gY3JlYXRlKElQQzo6
Q29ubmVjdGlvbjo6SWRlbnRpZmllciYmIHRlc3RlZENvbm5lY3Rpb25JZGVudGlmaWVyKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSlNJUENDb25uZWN0aW9uKFdURk1vdmUo
dGVzdGVkQ29ubmVjdGlvbklkZW50aWZpZXIpKSk7CisgICAgfQorCisgICAgSlNPYmplY3RSZWYg
Y3JlYXRlSlNXcmFwcGVyKEpTQ29udGV4dFJlZik7CisgICAgc3RhdGljIEpTSVBDQ29ubmVjdGlv
biogdG9XcmFwcGVkKEpTQ29udGV4dFJlZiwgSlNWYWx1ZVJlZik7CisKK3ByaXZhdGU6CisgICAg
SlNJUENDb25uZWN0aW9uKElQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllciYmIHRlc3RlZENvbm5l
Y3Rpb25JZGVudGlmaWVyKQorICAgICAgICA6IG1fdGVzdGVkQ29ubmVjdGlvbiB7IElQQzo6Q29u
bmVjdGlvbjo6Y3JlYXRlU2VydmVyQ29ubmVjdGlvbih0ZXN0ZWRDb25uZWN0aW9uSWRlbnRpZmll
ciwgKnRoaXMpIH0KKyAgICB7CisgICAgfQorCisgICAgLy8gSVBDOjpDb25uZWN0aW9uOjpDbGll
bnQgb3ZlcnJpZGVzLgorICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9u
JiwgSVBDOjpEZWNvZGVyJikgZmluYWw7CisgICAgYm9vbCBkaWRSZWNlaXZlU3luY01lc3NhZ2Uo
SVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJiwgVW5pcXVlUmVmPElQQzo6RW5jb2Rlcj4m
KSBmaW5hbDsKKyAgICB2b2lkIGRpZENsb3NlKElQQzo6Q29ubmVjdGlvbiYpIGZpbmFsOworICAg
IHZvaWQgZGlkUmVjZWl2ZUludmFsaWRNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6TWVz
c2FnZU5hbWUpIGZpbmFsOworCisgICAgc3RhdGljIEpTQ2xhc3NSZWYgd3JhcHBlckNsYXNzKCk7
CisgICAgc3RhdGljIEpTSVBDQ29ubmVjdGlvbiogdW53cmFwKEpTT2JqZWN0UmVmKTsKKyAgICBz
dGF0aWMgdm9pZCBpbml0aWFsaXplKEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYpOworICAgIHN0
YXRpYyB2b2lkIGZpbmFsaXplKEpTT2JqZWN0UmVmKTsKKworCisgICAgc3RhdGljIGNvbnN0IEpT
U3RhdGljRnVuY3Rpb24qIHN0YXRpY0Z1bmN0aW9ucygpOworICAgIHN0YXRpYyBKU1ZhbHVlUmVm
IG9wZW4oSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwg
c2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFs
dWVSZWYqIGV4Y2VwdGlvbik7CisgICAgc3RhdGljIEpTVmFsdWVSZWYgaW52YWxpZGF0ZShKU0Nv
bnRleHRSZWYsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJn
dW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhj
ZXB0aW9uKTsKKyAgICBzdGF0aWMgSlNWYWx1ZVJlZiBzZW5kTWVzc2FnZShKU0NvbnRleHRSZWYs
IEpTT2JqZWN0UmVmLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3Vu
dCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKTsK
KyAgICBzdGF0aWMgSlNWYWx1ZVJlZiBzZW5kU3luY01lc3NhZ2UoSlNDb250ZXh0UmVmLCBKU09i
amVjdFJlZiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNv
bnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CisgICAg
c3RhdGljIEpTVmFsdWVSZWYgd2FpdEZvck1lc3NhZ2UoSlNDb250ZXh0UmVmLCBKU09iamVjdFJl
ZiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpT
VmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CisKKyAgICBSZWY8
SVBDOjpDb25uZWN0aW9uPiBtX3Rlc3RlZENvbm5lY3Rpb247Cit9OworCiBjbGFzcyBKU0lQQ1N0
cmVhbUNsaWVudENvbm5lY3Rpb24gOiBwdWJsaWMgUmVmQ291bnRlZDxKU0lQQ1N0cmVhbUNsaWVu
dENvbm5lY3Rpb24+LCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8SlNJUENTdHJlYW1DbGllbnRDb25u
ZWN0aW9uPiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxKU0lQQ1N0cmVhbUNsaWVudENvbm5l
Y3Rpb24+IGNyZWF0ZShKU0lQQyYganNJUEMsIElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwg
c2l6ZV90IGJ1ZmZlclNpemUpCkBAIC0yMjAsOCArMjg3LDYgQEAgcHJpdmF0ZToKICAgICBSZWY8
U2hhcmVkTWVtb3J5PiBtX3NoYXJlZE1lbW9yeTsKIH07CiAKLWNsYXNzIEpTSVBDOwotCiBjbGFz
cyBKU01lc3NhZ2VMaXN0ZW5lciBmaW5hbCA6IHB1YmxpYyBJUEM6OkNvbm5lY3Rpb246Ok1lc3Nh
Z2VPYnNlcnZlciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CkBAIC0y
NDYsNyArMzExLDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgSlNJUEMod2ViUGFnZSwgd2ViRnJhbWUpKTsKICAgICB9Ci0KKyAgICBzdGF0aWMgSlNJUEMq
IHRvV3JhcHBlZChKU0NvbnRleHRSZWYsIEpTVmFsdWVSZWYpOwogICAgIHN0YXRpYyBKU0NsYXNz
UmVmIHdyYXBwZXJDbGFzcygpOwogCiAgICAgV2ViRnJhbWUqIHdlYkZyYW1lKCkgeyByZXR1cm4g
bV93ZWJGcmFtZS5nZXQoKTsgfQpAQCAtMjU4LDcgKzMyMyw2IEBAIHByaXZhdGU6CiAgICAgeyB9
CiAKICAgICBzdGF0aWMgSlNJUEMqIHVud3JhcChKU09iamVjdFJlZik7Ci0gICAgc3RhdGljIEpT
SVBDKiB0b1dyYXBwZWQoSlNDb250ZXh0UmVmLCBKU1ZhbHVlUmVmKTsKICAgICBzdGF0aWMgdm9p
ZCBpbml0aWFsaXplKEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYpOwogICAgIHN0YXRpYyB2b2lk
IGZpbmFsaXplKEpTT2JqZWN0UmVmKTsKICAgICBzdGF0aWMgY29uc3QgSlNTdGF0aWNGdW5jdGlv
biogc3RhdGljRnVuY3Rpb25zKCk7CkBAIC0yNzIsNiArMzM2LDggQEAgcHJpdmF0ZToKICAgICBz
dGF0aWMgSlNWYWx1ZVJlZiBzZW5kU3luY01lc3NhZ2UoSlNDb250ZXh0UmVmLCBKU09iamVjdFJl
ZiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpT
VmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CiAgICAgc3RhdGlj
IEpTVmFsdWVSZWYgd2FpdEZvck1lc3NhZ2UoSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiwgSlNP
YmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVS
ZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CiAKKyAgICBzdGF0aWMgSlNW
YWx1ZVJlZiBjcmVhdGVDb25uZWN0aW9uUGFpcihKU0NvbnRleHRSZWYsIEpTT2JqZWN0UmVmLCBK
U09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1
ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKTsKKwogICAgIHN0YXRpYyBK
U1ZhbHVlUmVmIGNyZWF0ZVN0cmVhbUNsaWVudENvbm5lY3Rpb24oSlNDb250ZXh0UmVmLCBKU09i
amVjdFJlZiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNv
bnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CiAgICAg
c3RhdGljIEpTVmFsdWVSZWYgY3JlYXRlU2VtYXBob3JlKEpTQ29udGV4dFJlZiwgSlNPYmplY3RS
ZWYsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBK
U1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOwogICAgIHN0YXRp
YyBKU1ZhbHVlUmVmIGNyZWF0ZVNoYXJlZE1lbW9yeShKU0NvbnRleHRSZWYsIEpTT2JqZWN0UmVm
LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNW
YWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKTsKQEAgLTI5MiwyNiAr
MzU4LDMwMyBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxVbmlxdWVSZWY8SlNNZXNzYWdlTGlzdGVu
ZXI+PiBtX21lc3NhZ2VMaXN0ZW5lcnM7CiB9OwogCi1zdGF0aWMgSlNWYWx1ZVJlZiBjcmVhdGVU
eXBlRXJyb3IoSlNDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3N0
YXRpYyBKU1ZhbHVlUmVmIGNyZWF0ZVR5cGVFcnJvcihKU0NvbnRleHRSZWYgY29udGV4dCwgY29u
c3QgU3RyaW5nJiBtZXNzYWdlKQoreworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2sodG9KUyhj
b250ZXh0KS0+dm0oKSk7CisgICAgcmV0dXJuIHRvUmVmKEpTQzo6Y3JlYXRlVHlwZUVycm9yKHRv
SlMoY29udGV4dCksIG1lc3NhZ2UpKTsKK30KKworc3RhdGljIHN0ZDo6b3B0aW9uYWw8dWludDY0
X3Q+IGNvbnZlcnRUb1VpbnQ2NChKU0M6OkpTVmFsdWUganNWYWx1ZSkKK3sKKyAgICBpZiAoanNW
YWx1ZS5pc051bWJlcigpKSB7CisgICAgICAgIGRvdWJsZSB2YWx1ZSA9IGpzVmFsdWUuYXNOdW1i
ZXIoKTsKKyAgICAgICAgaWYgKHZhbHVlIDwgMCB8fCB0cnVuYyh2YWx1ZSkgIT0gdmFsdWUpCisg
ICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgICAgICByZXR1cm4gdmFsdWU7Cisg
ICAgfQorICAgIGlmIChqc1ZhbHVlLmlzQmlnSW50KCkpCisgICAgICAgIHJldHVybiBKU0M6OkpT
QmlnSW50Ojp0b0JpZ1VJbnQ2NChqc1ZhbHVlKTsKKyAgICByZXR1cm4gc3RkOjpudWxsb3B0Owor
fQorCisKK3N0YXRpYyBKU1ZhbHVlUmVmIHNlbmRNZXNzYWdlV2l0aEpTQXJndW1lbnRzKElQQzo6
Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSlNDb250ZXh0UmVmIGNvbnRleHQsIHNpemVfdCBhcmd1
bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNl
cHRpb24pCit7CisgICAgYXV0byogZ2xvYmFsT2JqZWN0ID0gdG9KUyhjb250ZXh0KTsKKyAgICBK
U0M6OkpTTG9ja0hvbGRlciBsb2NrKGdsb2JhbE9iamVjdC0+dm0oKSk7CisKKyAgICBhdXRvIGRl
c3RpbmF0aW9uSUQgPSBkZXN0aW5hdGlvbklERnJvbUFyZ3VtZW50KGdsb2JhbE9iamVjdCwgYXJn
dW1lbnRzWzBdLCBleGNlcHRpb24pOworICAgIGlmICghZGVzdGluYXRpb25JRCkKKyAgICAgICAg
cmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworCisgICAgYXV0byBtZXNzYWdl
SUQgPSBtZXNzYWdlSURGcm9tQXJndW1lbnQoZ2xvYmFsT2JqZWN0LCBhcmd1bWVudHNbMV0sIGV4
Y2VwdGlvbik7CisgICAgaWYgKCFtZXNzYWdlSUQpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFr
ZVVuZGVmaW5lZChjb250ZXh0KTsKKworICAgIGF1dG8gbWVzc2FnZU5hbWUgPSBzdGF0aWNfY2Fz
dDxJUEM6Ok1lc3NhZ2VOYW1lPigqbWVzc2FnZUlEKTsKKyAgICBhdXRvIGVuY29kZXIgPSBtYWtl
VW5pcXVlUmVmPElQQzo6RW5jb2Rlcj4obWVzc2FnZU5hbWUsICpkZXN0aW5hdGlvbklEKTsKKwor
ICAgIEpTVmFsdWVSZWYgcmV0dXJuVmFsdWUgPSBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0
KTsKKworICAgIGJvb2wgaGFzUmVwbHkgPSAhIW1lc3NhZ2VSZXBseUFyZ3VtZW50RGVzY3JpcHRp
b25zKG1lc3NhZ2VOYW1lKTsKKyAgICBpZiAoaGFzUmVwbHkpIHsKKyAgICAgICAgdWludDY0X3Qg
bGlzdGVuZXJJRCA9IElQQzo6bmV4dEFzeW5jUmVwbHlIYW5kbGVySUQoKTsKKyAgICAgICAgZW5j
b2Rlci5nZXQoKSA8PCBsaXN0ZW5lcklEOworCisgICAgICAgIEpTT2JqZWN0UmVmIHJlc29sdmU7
CisgICAgICAgIEpTT2JqZWN0UmVmIHJlamVjdDsKK0FMTE9XX05FV19BUElfV0lUSE9VVF9HVUFS
RFNfQkVHSU4KKyAgICAgICAgcmV0dXJuVmFsdWUgPSBKU09iamVjdE1ha2VEZWZlcnJlZFByb21p
c2UoY29udGV4dCwgJnJlc29sdmUsICZyZWplY3QsIGV4Y2VwdGlvbik7IC8vIE5PTElOVAorQUxM
T1dfTkVXX0FQSV9XSVRIT1VUX0dVQVJEU19FTkQKKyAgICAgICAgaWYgKCFyZXR1cm5WYWx1ZSkg
IC8vIE5PTElOVAorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRl
eHQpOworCisgICAgICAgIEpTR2xvYmFsQ29udGV4dFJldGFpbihKU0NvbnRleHRHZXRHbG9iYWxD
b250ZXh0KGNvbnRleHQpKTsKKyAgICAgICAgSlNWYWx1ZVByb3RlY3QoY29udGV4dCwgcmVzb2x2
ZSk7CisgICAgICAgIEpTVmFsdWVQcm90ZWN0KGNvbnRleHQsIHJlamVjdCk7CisgICAgICAgIElQ
Qzo6YWRkQXN5bmNSZXBseUhhbmRsZXIoY29ubmVjdGlvbiwgbGlzdGVuZXJJRCwgW21lc3NhZ2VO
YW1lLCBjb250ZXh0LCByZXNvbHZlLCByZWplY3RdKElQQzo6RGVjb2RlciogcmVwbHlEZWNvZGVy
KSB7CisgICAgICAgICAgICBhdXRvKiBnbG9iYWxPYmplY3QgPSB0b0pTKGNvbnRleHQpOworICAg
ICAgICAgICAgYXV0byYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgICAgICAgICBKU0M6
OkpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKworICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfQ0FUQ0hfU0NPUEUodm0pOworICAgICAgICAgICAgYXV0byoganNSZXN1bHQgPSBqc1Jlc3Vs
dEZyb21SZXBseURlY29kZXIoZ2xvYmFsT2JqZWN0LCBtZXNzYWdlTmFtZSwgKnJlcGx5RGVjb2Rl
cik7CisgICAgICAgICAgICBpZiAoYXV0byogZXhjZXB0aW9uID0gc2NvcGUuZXhjZXB0aW9uKCkp
IHsKKyAgICAgICAgICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICAgICAg
ICAgIEpTVmFsdWVSZWYgYXJndW1lbnRzW10gPSB7IHRvUmVmKGdsb2JhbE9iamVjdCwgZXhjZXB0
aW9uKSB9OworICAgICAgICAgICAgICAgIEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb24oY29udGV4dCwg
cmVqZWN0LCByZWplY3QsIDEsIGFyZ3VtZW50cywgbnVsbHB0cik7CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIEpTVmFsdWVSZWYgYXJndW1lbnRzW10gPSB7IHRvUmVmKGds
b2JhbE9iamVjdCwganNSZXN1bHQpIH07CisgICAgICAgICAgICAgICAgSlNPYmplY3RDYWxsQXNG
dW5jdGlvbihjb250ZXh0LCByZXNvbHZlLCByZXNvbHZlLCAxLCBhcmd1bWVudHMsIG51bGxwdHIp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBKU1ZhbHVlVW5wcm90ZWN0KGNvbnRleHQs
IHJlamVjdCk7CisgICAgICAgICAgICBKU1ZhbHVlVW5wcm90ZWN0KGNvbnRleHQsIHJlc29sdmUp
OworICAgICAgICAgICAgSlNHbG9iYWxDb250ZXh0UmVsZWFzZShKU0NvbnRleHRHZXRHbG9iYWxD
b250ZXh0KGNvbnRleHQpKTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgaWYgKGFyZ3VtZW50
Q291bnQgPiAyKSB7CisgICAgICAgIGlmICghZW5jb2RlQXJndW1lbnQoZW5jb2Rlci5nZXQoKSwg
Y29udGV4dCwgYXJndW1lbnRzWzJdLCBleGNlcHRpb24pKQorICAgICAgICAgICAgcmV0dXJuIEpT
VmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworICAgIH0KKworICAgIC8vIEZJWE1FOiBBZGQg
dGhlIHN1cHBvcnQgZm9yIHNwZWNpZnlpbmcgSVBDIG9wdGlvbnMuCisKKyAgICBjb25uZWN0aW9u
LnNlbmRNZXNzYWdlKFdURk1vdmUoZW5jb2RlciksIHsgfSk7CisgICAgcmV0dXJuIHJldHVyblZh
bHVlOworfQorCituYW1lc3BhY2UgeworCitzdHJ1Y3QgU3luY0lQQ01lc3NhZ2VJbmZvIHsKKyAg
ICB1aW50NjRfdCBkZXN0aW5hdGlvbklEOworICAgIElQQzo6TWVzc2FnZU5hbWUgbWVzc2FnZU5h
bWU7CisgICAgSVBDOjpUaW1lb3V0IHRpbWVvdXQ7Cit9OworCit9CisKK3N0YXRpYyBzdGQ6Om9w
dGlvbmFsPFN5bmNJUENNZXNzYWdlSW5mbz4gZXh0cmFjdFN5bmNJUENNZXNzYWdlSW5mbyhKU0Nv
bnRleHRSZWYgY29udGV4dCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYg
YXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBBU1NFUlQoYXJndW1l
bnRDb3VudCA+PSAyKTsKKyAgICBhdXRvKiBnbG9iYWxPYmplY3QgPSB0b0pTKGNvbnRleHQpOwor
ICAgIGF1dG8gZGVzdGluYXRpb25JRCA9IGRlc3RpbmF0aW9uSURGcm9tQXJndW1lbnQoZ2xvYmFs
T2JqZWN0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbik7CisgICAgaWYgKCFkZXN0aW5hdGlvbklE
KQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgYXV0byBtZXNzYWdlSUQgPSBt
ZXNzYWdlSURGcm9tQXJndW1lbnQoZ2xvYmFsT2JqZWN0LCBhcmd1bWVudHNbMV0sIGV4Y2VwdGlv
bik7CisgICAgaWYgKCFtZXNzYWdlSUQpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisK
KyAgICBTZWNvbmRzIHRpbWVvdXREdXJhdGlvbjsKKyAgICB7CisgICAgICAgIGF1dG8ganNWYWx1
ZSA9IHRvSlMoZ2xvYmFsT2JqZWN0LCBhcmd1bWVudHNbMl0pOworICAgICAgICBpZiAoIWpzVmFs
dWUuaXNOdW1iZXIoKSkgeworICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0ZVR5cGVFcnJv
cihjb250ZXh0LCAiVGltZW91dCBtdXN0IGJlIGEgbnVtYmVyIl9zKTsKKyAgICAgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgIH0KKyAgICAgICAgdGltZW91dER1cmF0aW9uID0g
U2Vjb25kcyB7IGpzVmFsdWUuYXNOdW1iZXIoKSB9OworICAgIH0KKworICAgIHJldHVybiB7IHsg
KmRlc3RpbmF0aW9uSUQsIHN0YXRpY19jYXN0PElQQzo6TWVzc2FnZU5hbWU+KCptZXNzYWdlSUQp
LCB7IHRpbWVvdXREdXJhdGlvbiB9IH0gfTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgc2VuZFN5
bmNNZXNzYWdlV2l0aEpTQXJndW1lbnRzKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSlND
b250ZXh0UmVmIGNvbnRleHQsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVm
IGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgYXV0byogZ2xvYmFs
T2JqZWN0ID0gdG9KUyhjb250ZXh0KTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKGdsb2Jh
bE9iamVjdC0+dm0oKSk7CisgICAgYXV0byBpbmZvID0gZXh0cmFjdFN5bmNJUENNZXNzYWdlSW5m
byhjb250ZXh0LCBhcmd1bWVudENvdW50LCBhcmd1bWVudHMsIGV4Y2VwdGlvbik7CisgICAgaWYg
KCFpbmZvKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisK
KyAgICBhdXRvIFtkZXN0aW5hdGlvbklELCBtZXNzYWdlTmFtZSwgdGltZW91dF0gPSAqaW5mbzsK
KworICAgIC8vIEZJWE1FOiBTdXBwb3J0IHRoZSBvcHRpb25zLgorCisgICAgSVBDOjpDb25uZWN0
aW9uOjpTeW5jUmVxdWVzdElEIHN5bmNSZXF1ZXN0SUQ7CisgICAgYXV0byBlbmNvZGVyID0gY29u
bmVjdGlvbi5jcmVhdGVTeW5jTWVzc2FnZUVuY29kZXIobWVzc2FnZU5hbWUsIGRlc3RpbmF0aW9u
SUQsIHN5bmNSZXF1ZXN0SUQpOworCisgICAgaWYgKGFyZ3VtZW50Q291bnQgPiAzKSB7CisgICAg
ICAgIGlmICghZW5jb2RlQXJndW1lbnQoZW5jb2Rlci5nZXQoKSwgY29udGV4dCwgYXJndW1lbnRz
WzNdLCBleGNlcHRpb24pKQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVk
KGNvbnRleHQpOworICAgIH0KKworICAgIGlmIChhdXRvIHJlcGx5RGVjb2RlciA9IGNvbm5lY3Rp
b24uc2VuZFN5bmNNZXNzYWdlKHN5bmNSZXF1ZXN0SUQsIFdURk1vdmUoZW5jb2RlciksIHRpbWVv
dXQsIHsgfSkpIHsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUoZ2xv
YmFsT2JqZWN0LT52bSgpKTsKKyAgICAgICAgYXV0byoganNSZXN1bHQgPSBqc1Jlc3VsdEZyb21S
ZXBseURlY29kZXIoZ2xvYmFsT2JqZWN0LCBtZXNzYWdlTmFtZSwgKnJlcGx5RGVjb2Rlcik7Cisg
ICAgICAgIGlmIChzY29wZS5leGNlcHRpb24oKSkgeworICAgICAgICAgICAgKmV4Y2VwdGlvbiA9
IHRvUmVmKGdsb2JhbE9iamVjdCwgc2NvcGUuZXhjZXB0aW9uKCkpOworICAgICAgICAgICAgc2Nv
cGUuY2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVm
aW5lZChjb250ZXh0KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdG9SZWYoZ2xvYmFsT2Jq
ZWN0LCBqc1Jlc3VsdCk7CisgICAgfQorCisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVk
KGNvbnRleHQpOworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiB3YWl0Rm9yTWVzc2FnZVdpdGhKU0Fy
Z3VtZW50cyhJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIEpTQ29udGV4dFJlZiBjb250ZXh0
LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNW
YWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIGF1dG8qIGdsb2JhbE9iamVjdCA9IHRvSlMoY29u
dGV4dCk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhnbG9iYWxPYmplY3QtPnZtKCkpOwor
CisgICAgYXV0byBpbmZvID0gZXh0cmFjdFN5bmNJUENNZXNzYWdlSW5mbyhjb250ZXh0LCBhcmd1
bWVudENvdW50LCBhcmd1bWVudHMsIGV4Y2VwdGlvbik7CisgICAgaWYgKCFpbmZvKQorICAgICAg
ICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisKKyAgICBhdXRvIFtkZXN0
aW5hdGlvbklELCBtZXNzYWdlTmFtZSwgdGltZW91dF0gPSAqaW5mbzsKKyAgICBpZiAoYXV0byBk
ZWNvZGVyID0gY29ubmVjdGlvbi53YWl0Rm9yTWVzc2FnZUZvclRlc3RpbmcobWVzc2FnZU5hbWUs
IGRlc3RpbmF0aW9uSUQsIHRpbWVvdXQsIHsgfSkpIHsKKyAgICAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfQ0FUQ0hfU0NPUEUoZ2xvYmFsT2JqZWN0LT52bSgpKTsKKyAgICAgICAgYXV0byBqc1Jl
c3VsdCA9IGpzVmFsdWVGb3JBcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBtZXNzYWdlTmFtZSwgKmRl
Y29kZXIpOworICAgICAgICBpZiAoc2NvcGUuZXhjZXB0aW9uKCkpIHsKKyAgICAgICAgICAgICpl
eGNlcHRpb24gPSB0b1JlZihnbG9iYWxPYmplY3QsIHNjb3BlLmV4Y2VwdGlvbigpKTsKKyAgICAg
ICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGpzUmVz
dWx0ID8gdG9SZWYoZ2xvYmFsT2JqZWN0LCAqanNSZXN1bHQpIDogSlNWYWx1ZU1ha2VVbmRlZmlu
ZWQoY29udGV4dCk7CisgICAgfQorICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250
ZXh0KTsKK30KKworSlNPYmplY3RSZWYgSlNJUENTZW1hcGhvcmU6OmNyZWF0ZUpTV3JhcHBlcihK
U0NvbnRleHRSZWYgY29udGV4dCkKK3sKKyAgICBhdXRvKiBnbG9iYWxPYmplY3QgPSB0b0pTKGNv
bnRleHQpOworICAgIGF1dG8mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIEpTQzo6SlNM
b2NrSG9sZGVyIGxvY2sodm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BF
KHZtKTsKKyAgICBKU09iamVjdFJlZiB3cmFwcGVyT2JqZWN0ID0gSlNPYmplY3RNYWtlKHRvR2xv
YmFsUmVmKGdsb2JhbE9iamVjdCksIHdyYXBwZXJDbGFzcygpLCB0aGlzKTsKKyAgICBzY29wZS5j
bGVhckV4Y2VwdGlvbigpOworICAgIHJldHVybiB3cmFwcGVyT2JqZWN0OworfQorCitKU0NsYXNz
UmVmIEpTSVBDU2VtYXBob3JlOjp3cmFwcGVyQ2xhc3MoKQoreworICAgIHN0YXRpYyBKU0NsYXNz
UmVmIGpzQ2xhc3M7CisgICAgaWYgKCFqc0NsYXNzKSB7CisgICAgICAgIEpTQ2xhc3NEZWZpbml0
aW9uIGRlZmluaXRpb24gPSBrSlNDbGFzc0RlZmluaXRpb25FbXB0eTsKKyAgICAgICAgZGVmaW5p
dGlvbi5jbGFzc05hbWUgPSAiU2VtYXBob3JlIjsKKyAgICAgICAgZGVmaW5pdGlvbi5wYXJlbnRD
bGFzcyA9IG51bGxwdHI7CisgICAgICAgIGRlZmluaXRpb24uc3RhdGljVmFsdWVzID0gbnVsbHB0
cjsKKyAgICAgICAgZGVmaW5pdGlvbi5zdGF0aWNGdW5jdGlvbnMgPSBzdGF0aWNGdW5jdGlvbnMo
KTsKKyAgICAgICAgZGVmaW5pdGlvbi5pbml0aWFsaXplID0gaW5pdGlhbGl6ZTsKKyAgICAgICAg
ZGVmaW5pdGlvbi5maW5hbGl6ZSA9IGZpbmFsaXplOworICAgICAgICBqc0NsYXNzID0gSlNDbGFz
c0NyZWF0ZSgmZGVmaW5pdGlvbik7CisgICAgfQorICAgIHJldHVybiBqc0NsYXNzOworfQorCitp
bmxpbmUgSlNJUENTZW1hcGhvcmUqIEpTSVBDU2VtYXBob3JlOjp1bndyYXAoSlNPYmplY3RSZWYg
b2JqZWN0KQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxKU0lQQ1NlbWFwaG9yZSo+KEpTT2Jq
ZWN0R2V0UHJpdmF0ZShvYmplY3QpKTsKK30KKworSlNJUENTZW1hcGhvcmUqIEpTSVBDU2VtYXBo
b3JlOjp0b1dyYXBwZWQoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgdmFsdWUpCit7
CisgICAgaWYgKCFjb250ZXh0IHx8ICF2YWx1ZSB8fCAhSlNWYWx1ZUlzT2JqZWN0T2ZDbGFzcyhj
b250ZXh0LCB2YWx1ZSwgd3JhcHBlckNsYXNzKCkpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICByZXR1cm4gdW53cmFwKEpTVmFsdWVUb09iamVjdChjb250ZXh0LCB2YWx1ZSwgbnVsbHB0
cikpOworfQorCit2b2lkIEpTSVBDU2VtYXBob3JlOjppbml0aWFsaXplKEpTQ29udGV4dFJlZiwg
SlNPYmplY3RSZWYgb2JqZWN0KQoreworICAgIHVud3JhcChvYmplY3QpLT5yZWYoKTsKK30KKwor
dm9pZCBKU0lQQ1NlbWFwaG9yZTo6ZmluYWxpemUoSlNPYmplY3RSZWYgb2JqZWN0KQoreworICAg
IHVud3JhcChvYmplY3QpLT5kZXJlZigpOworfQorCitjb25zdCBKU1N0YXRpY0Z1bmN0aW9uKiBK
U0lQQ1NlbWFwaG9yZTo6c3RhdGljRnVuY3Rpb25zKCkKK3sKKyAgICBzdGF0aWMgY29uc3QgSlNT
dGF0aWNGdW5jdGlvbiBmdW5jdGlvbnNbXSA9IHsKKyAgICAgICAgeyAic2lnbmFsIiwgc2lnbmFs
LCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJl
YWRPbmx5IH0sCisgICAgICAgIHsgIndhaXRGb3IiLCB3YWl0Rm9yLCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZURvbnREZWxldGUgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IH0sCisgICAgICAg
IHsgMCwgMCwgMCB9CisgICAgfTsKKyAgICByZXR1cm4gZnVuY3Rpb25zOworfQorCisKK0pTT2Jq
ZWN0UmVmIEpTSVBDQXR0YWNobWVudDo6Y3JlYXRlSlNXcmFwcGVyKEpTQ29udGV4dFJlZiBjb250
ZXh0KQoreworICAgIGF1dG8qIGdsb2JhbE9iamVjdCA9IHRvSlMoY29udGV4dCk7CisgICAgYXV0
byYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayh2
bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworICAgIEpTT2Jq
ZWN0UmVmIHdyYXBwZXJPYmplY3QgPSBKU09iamVjdE1ha2UodG9HbG9iYWxSZWYoZ2xvYmFsT2Jq
ZWN0KSwgd3JhcHBlckNsYXNzKCksIHRoaXMpOworICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7
CisgICAgcmV0dXJuIHdyYXBwZXJPYmplY3Q7Cit9CisKK0pTQ2xhc3NSZWYgSlNJUENBdHRhY2ht
ZW50Ojp3cmFwcGVyQ2xhc3MoKQoreworICAgIHN0YXRpYyBKU0NsYXNzUmVmIGpzQ2xhc3M7Cisg
ICAgaWYgKCFqc0NsYXNzKSB7CisgICAgICAgIEpTQ2xhc3NEZWZpbml0aW9uIGRlZmluaXRpb24g
PSBrSlNDbGFzc0RlZmluaXRpb25FbXB0eTsKKyAgICAgICAgZGVmaW5pdGlvbi5jbGFzc05hbWUg
PSAiQXR0YWNobWVudCI7CisgICAgICAgIGRlZmluaXRpb24ucGFyZW50Q2xhc3MgPSBudWxscHRy
OworICAgICAgICBkZWZpbml0aW9uLnN0YXRpY1ZhbHVlcyA9IG51bGxwdHI7CisgICAgICAgIGRl
ZmluaXRpb24uc3RhdGljRnVuY3Rpb25zID0gc3RhdGljRnVuY3Rpb25zKCk7CisgICAgICAgIGRl
ZmluaXRpb24uaW5pdGlhbGl6ZSA9IGluaXRpYWxpemU7CisgICAgICAgIGRlZmluaXRpb24uZmlu
YWxpemUgPSBmaW5hbGl6ZTsKKyAgICAgICAganNDbGFzcyA9IEpTQ2xhc3NDcmVhdGUoJmRlZmlu
aXRpb24pOworICAgIH0KKyAgICByZXR1cm4ganNDbGFzczsKK30KKworaW5saW5lIEpTSVBDQXR0
YWNobWVudCogSlNJUENBdHRhY2htZW50Ojp1bndyYXAoSlNPYmplY3RSZWYgb2JqZWN0KQorewor
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxKU0lQQ0F0dGFjaG1lbnQqPihKU09iamVjdEdldFByaXZh
dGUob2JqZWN0KSk7Cit9CisKK0pTSVBDQXR0YWNobWVudCogSlNJUENBdHRhY2htZW50Ojp0b1dy
YXBwZWQoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgdmFsdWUpCit7CisgICAgaWYg
KCFjb250ZXh0IHx8ICF2YWx1ZSB8fCAhSlNWYWx1ZUlzT2JqZWN0T2ZDbGFzcyhjb250ZXh0LCB2
YWx1ZSwgd3JhcHBlckNsYXNzKCkpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1
cm4gdW53cmFwKEpTVmFsdWVUb09iamVjdChjb250ZXh0LCB2YWx1ZSwgbnVsbHB0cikpOworfQor
Cit2b2lkIEpTSVBDQXR0YWNobWVudDo6aW5pdGlhbGl6ZShKU0NvbnRleHRSZWYsIEpTT2JqZWN0
UmVmIG9iamVjdCkKK3sKKyAgICB1bndyYXAob2JqZWN0KS0+cmVmKCk7Cit9CisKK3ZvaWQgSlNJ
UENBdHRhY2htZW50OjpmaW5hbGl6ZShKU09iamVjdFJlZiBvYmplY3QpCiB7Ci0gICAgSlNDOjpK
U0xvY2tIb2xkZXIgbG9jayh0b0pTKGNvbnRleHQpLT52bSgpKTsKLSAgICByZXR1cm4gdG9SZWYo
SlNDOjpjcmVhdGVUeXBlRXJyb3IodG9KUyhjb250ZXh0KSwgbWVzc2FnZSkpOworICAgIHVud3Jh
cChvYmplY3QpLT5kZXJlZigpOwogfQogCi1zdGF0aWMgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4g
Y29udmVydFRvVWludDY0KEpTQzo6SlNWYWx1ZSBqc1ZhbHVlKQorY29uc3QgSlNTdGF0aWNGdW5j
dGlvbiogSlNJUENBdHRhY2htZW50OjpzdGF0aWNGdW5jdGlvbnMoKQogewotICAgIGlmIChqc1Zh
bHVlLmlzTnVtYmVyKCkpIHsKLSAgICAgICAgZG91YmxlIHZhbHVlID0ganNWYWx1ZS5hc051bWJl
cigpOwotICAgICAgICBpZiAodmFsdWUgPCAwIHx8IHRydW5jKHZhbHVlKSAhPSB2YWx1ZSkKLSAg
ICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgICAgIHJldHVybiB2YWx1ZTsKLSAg
ICB9Ci0gICAgaWYgKGpzVmFsdWUuaXNCaWdJbnQoKSkKLSAgICAgICAgcmV0dXJuIEpTQzo6SlNC
aWdJbnQ6OnRvQmlnVUludDY0KGpzVmFsdWUpOwotICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Cisg
ICAgc3RhdGljIGNvbnN0IEpTU3RhdGljRnVuY3Rpb24gZnVuY3Rpb25zW10gPSB7CisgICAgICAg
IHsgMCwgMCwgMCB9CisgICAgfTsKKyAgICByZXR1cm4gZnVuY3Rpb25zOwogfQogCi1KU09iamVj
dFJlZiBKU0lQQ1NlbWFwaG9yZTo6Y3JlYXRlSlNXcmFwcGVyKEpTQ29udGV4dFJlZiBjb250ZXh0
KQorSlNPYmplY3RSZWYgSlNJUENDb25uZWN0aW9uOjpjcmVhdGVKU1dyYXBwZXIoSlNDb250ZXh0
UmVmIGNvbnRleHQpCiB7CiAgICAgYXV0byogZ2xvYmFsT2JqZWN0ID0gdG9KUyhjb250ZXh0KTsK
ICAgICBhdXRvJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKQEAgLTMyMiwxMiArNjY1LDEyIEBA
IEpTT2JqZWN0UmVmIEpTSVBDU2VtYXBob3JlOjpjcmVhdGVKU1dyYXBwZXIoSlNDb250ZXh0UmVm
IGNvbnRleHQpCiAgICAgcmV0dXJuIHdyYXBwZXJPYmplY3Q7CiB9CiAKLUpTQ2xhc3NSZWYgSlNJ
UENTZW1hcGhvcmU6OndyYXBwZXJDbGFzcygpCitKU0NsYXNzUmVmIEpTSVBDQ29ubmVjdGlvbjo6
d3JhcHBlckNsYXNzKCkKIHsKICAgICBzdGF0aWMgSlNDbGFzc1JlZiBqc0NsYXNzOwogICAgIGlm
ICghanNDbGFzcykgewogICAgICAgICBKU0NsYXNzRGVmaW5pdGlvbiBkZWZpbml0aW9uID0ga0pT
Q2xhc3NEZWZpbml0aW9uRW1wdHk7Ci0gICAgICAgIGRlZmluaXRpb24uY2xhc3NOYW1lID0gIlNl
bWFwaG9yZSI7CisgICAgICAgIGRlZmluaXRpb24uY2xhc3NOYW1lID0gIkNvbm5lY3Rpb24iOwog
ICAgICAgICBkZWZpbml0aW9uLnBhcmVudENsYXNzID0gbnVsbHB0cjsKICAgICAgICAgZGVmaW5p
dGlvbi5zdGF0aWNWYWx1ZXMgPSBudWxscHRyOwogICAgICAgICBkZWZpbml0aW9uLnN0YXRpY0Z1
bmN0aW9ucyA9IHN0YXRpY0Z1bmN0aW9ucygpOwpAQCAtMzM4LDM4ICs2ODEsMTI1IEBAIEpTQ2xh
c3NSZWYgSlNJUENTZW1hcGhvcmU6OndyYXBwZXJDbGFzcygpCiAgICAgcmV0dXJuIGpzQ2xhc3M7
CiB9CiAKLWlubGluZSBKU0lQQ1NlbWFwaG9yZSogSlNJUENTZW1hcGhvcmU6OnVud3JhcChKU09i
amVjdFJlZiBvYmplY3QpCitpbmxpbmUgSlNJUENDb25uZWN0aW9uKiBKU0lQQ0Nvbm5lY3Rpb246
OnVud3JhcChKU09iamVjdFJlZiBvYmplY3QpCiB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEpT
SVBDU2VtYXBob3JlKj4oSlNPYmplY3RHZXRQcml2YXRlKG9iamVjdCkpOworICAgIHJldHVybiBz
dGF0aWNfY2FzdDxKU0lQQ0Nvbm5lY3Rpb24qPihKU09iamVjdEdldFByaXZhdGUob2JqZWN0KSk7
CiB9CiAKLUpTSVBDU2VtYXBob3JlKiBKU0lQQ1NlbWFwaG9yZTo6dG9XcmFwcGVkKEpTQ29udGV4
dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIHZhbHVlKQorSlNJUENDb25uZWN0aW9uKiBKU0lQQ0Nv
bm5lY3Rpb246OnRvV3JhcHBlZChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiB2YWx1
ZSkKIHsKICAgICBpZiAoIWNvbnRleHQgfHwgIXZhbHVlIHx8ICFKU1ZhbHVlSXNPYmplY3RPZkNs
YXNzKGNvbnRleHQsIHZhbHVlLCB3cmFwcGVyQ2xhc3MoKSkpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIHJldHVybiB1bndyYXAoSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIHZhbHVlLCBu
dWxscHRyKSk7CiB9CiAKLXZvaWQgSlNJUENTZW1hcGhvcmU6OmluaXRpYWxpemUoSlNDb250ZXh0
UmVmLCBKU09iamVjdFJlZiBvYmplY3QpCit2b2lkIEpTSVBDQ29ubmVjdGlvbjo6aW5pdGlhbGl6
ZShKU0NvbnRleHRSZWYsIEpTT2JqZWN0UmVmIG9iamVjdCkKIHsKICAgICB1bndyYXAob2JqZWN0
KS0+cmVmKCk7CiB9CiAKLXZvaWQgSlNJUENTZW1hcGhvcmU6OmZpbmFsaXplKEpTT2JqZWN0UmVm
IG9iamVjdCkKK3ZvaWQgSlNJUENDb25uZWN0aW9uOjpmaW5hbGl6ZShKU09iamVjdFJlZiBvYmpl
Y3QpCiB7CiAgICAgdW53cmFwKG9iamVjdCktPmRlcmVmKCk7CiB9CiAKLWNvbnN0IEpTU3RhdGlj
RnVuY3Rpb24qIEpTSVBDU2VtYXBob3JlOjpzdGF0aWNGdW5jdGlvbnMoKQordm9pZCBKU0lQQ0Nv
bm5lY3Rpb246OmRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2Rl
ciYpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK2Jvb2wgSlNJUENDb25uZWN0
aW9uOjpkaWRSZWNlaXZlU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVy
JiwgVW5pcXVlUmVmPElQQzo6RW5jb2Rlcj4mKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworfQorCit2b2lkIEpTSVBDQ29ubmVjdGlvbjo6ZGlkQ2xvc2UoSVBDOjpDb25uZWN0aW9uJikK
K3sKK30KKwordm9pZCBKU0lQQ0Nvbm5lY3Rpb246OmRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShJ
UEM6OkNvbm5lY3Rpb24mLCBJUEM6Ok1lc3NhZ2VOYW1lKQoreworICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworfQorCisKK2NvbnN0IEpTU3RhdGljRnVuY3Rpb24qIEpTSVBDQ29ubmVjdGlvbjo6
c3RhdGljRnVuY3Rpb25zKCkKIHsKICAgICBzdGF0aWMgY29uc3QgSlNTdGF0aWNGdW5jdGlvbiBm
dW5jdGlvbnNbXSA9IHsKLSAgICAgICAgeyAic2lnbmFsIiwgc2lnbmFsLCBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZURvbnREZWxldGUgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IH0sCi0gICAg
ICAgIHsgIndhaXRGb3IiLCB3YWl0Rm9yLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUg
fCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IH0sCisgICAgICAgIHsgIm9wZW4iLCBvcGVu
LCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJl
YWRPbmx5IH0sCisgICAgICAgIHsgImludmFsaWRhdGUiLCBpbnZhbGlkYXRlLCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZURvbnREZWxldGUgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IH0sCisg
ICAgICAgIHsgInNlbmRNZXNzYWdlIiwgc2VuZE1lc3NhZ2UsIGtKU1Byb3BlcnR5QXR0cmlidXRl
RG9udERlbGV0ZSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfSwKKyAgICAgICAgeyAi
c2VuZFN5bmNNZXNzYWdlIiwgc2VuZFN5bmNNZXNzYWdlLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURv
bnREZWxldGUgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IH0sCisgICAgICAgIHsgIndh
aXRGb3JNZXNzYWdlIiwgd2FpdEZvck1lc3NhZ2UsIGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERl
bGV0ZSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfSwKICAgICAgICAgeyAwLCAwLCAw
IH0KICAgICB9OwogICAgIHJldHVybiBmdW5jdGlvbnM7CiB9CiAKK0pTVmFsdWVSZWYgSlNJUEND
b25uZWN0aW9uOjpvcGVuKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiwgSlNPYmpl
Y3RSZWYgdGhpc09iamVjdCwgc2l6ZV90LCBjb25zdCBKU1ZhbHVlUmVmW10sIEpTVmFsdWVSZWYq
IGV4Y2VwdGlvbikKK3sKKyAgICBSZWZQdHIgc2VsZiA9IHRvV3JhcHBlZChjb250ZXh0LCB0aGlz
T2JqZWN0KTsKKyAgICBpZiAoIXNlbGYpIHsKKyAgICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0ZVR5
cGVFcnJvcihjb250ZXh0LCAiV3JvbmcgdHlwZSJfcyk7CisgICAgICAgIHJldHVybiBKU1ZhbHVl
TWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKyAgICB9CisgICAgc2VsZi0+bV90ZXN0ZWRDb25uZWN0
aW9uLT5vcGVuKCk7CisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwor
fQorCitKU1ZhbHVlUmVmIEpTSVBDQ29ubmVjdGlvbjo6aW52YWxpZGF0ZShKU0NvbnRleHRSZWYg
Y29udGV4dCwgSlNPYmplY3RSZWYsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCwgY29u
c3QgSlNWYWx1ZVJlZltdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgUmVmUHRyIHNl
bGYgPSB0b1dyYXBwZWQoY29udGV4dCwgdGhpc09iamVjdCk7CisgICAgaWYgKCFzZWxmKSB7Cisg
ICAgICAgICpleGNlcHRpb24gPSBjcmVhdGVUeXBlRXJyb3IoY29udGV4dCwgIldyb25nIHR5cGUi
X3MpOworICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisgICAg
fQorICAgIHNlbGYtPm1fdGVzdGVkQ29ubmVjdGlvbi0+aW52YWxpZGF0ZSgpOworICAgIHJldHVy
biBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKworSlNWYWx1ZVJlZiBKU0lQQ0Nv
bm5lY3Rpb246OnNlbmRNZXNzYWdlKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiwg
SlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFs
dWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBSZWZQdHIg
c2VsZiA9IHRvV3JhcHBlZChjb250ZXh0LCB0aGlzT2JqZWN0KTsKKyAgICBpZiAoIXNlbGYpIHsK
KyAgICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0ZVR5cGVFcnJvcihjb250ZXh0LCAiV3JvbmcgdHlw
ZSJfcyk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKyAg
ICB9CisgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAyKSB7CisgICAgICAgICpleGNlcHRpb24gPSBj
cmVhdGVUeXBlRXJyb3IoY29udGV4dCwgIk11c3Qgc3BlY2lmeSB0aGUgZGVzdGluYXRpb24gSUQg
YW5kIG1lc3NhZ2UgSUQgYXMgdGhlIGZpcnN0IHR3byBhcmd1bWVudHMiX3MpOworICAgICAgICBy
ZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisgICAgfQorICAgIHJldHVybiBz
ZW5kTWVzc2FnZVdpdGhKU0FyZ3VtZW50cyhzZWxmLT5tX3Rlc3RlZENvbm5lY3Rpb24sIGNvbnRl
eHQsIGFyZ3VtZW50Q291bnQsIGFyZ3VtZW50cywgZXhjZXB0aW9uKTsKK30KKworSlNWYWx1ZVJl
ZiBKU0lQQ0Nvbm5lY3Rpb246OnNlbmRTeW5jTWVzc2FnZShKU0NvbnRleHRSZWYgY29udGV4dCwg
SlNPYmplY3RSZWYsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50
LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7
CisgICAgUmVmUHRyIHNlbGYgPSB0b1dyYXBwZWQoY29udGV4dCwgdGhpc09iamVjdCk7CisgICAg
aWYgKCFzZWxmKSB7CisgICAgICAgICpleGNlcHRpb24gPSBjcmVhdGVUeXBlRXJyb3IoY29udGV4
dCwgIldyb25nIHR5cGUiX3MpOworICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQo
Y29udGV4dCk7CisgICAgfQorICAgIGlmIChhcmd1bWVudENvdW50IDwgMikgeworICAgICAgICAq
ZXhjZXB0aW9uID0gY3JlYXRlVHlwZUVycm9yKGNvbnRleHQsICJNdXN0IHNwZWNpZnkgdGhlIGRl
c3RpbmF0aW9uIElEIGFuZCBtZXNzYWdlIElEIGFzIHRoZSBmaXJzdCB0d28gYXJndW1lbnRzIl9z
KTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworICAgIH0K
KyAgICByZXR1cm4gc2VuZFN5bmNNZXNzYWdlV2l0aEpTQXJndW1lbnRzKHNlbGYtPm1fdGVzdGVk
Q29ubmVjdGlvbiwgY29udGV4dCwgYXJndW1lbnRDb3VudCwgYXJndW1lbnRzLCBleGNlcHRpb24p
OworfQorCitKU1ZhbHVlUmVmIEpTSVBDQ29ubmVjdGlvbjo6d2FpdEZvck1lc3NhZ2UoSlNDb250
ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXpl
X3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJl
ZiogZXhjZXB0aW9uKQoreworICAgIFJlZlB0ciBzZWxmID0gdG9XcmFwcGVkKGNvbnRleHQsIHRo
aXNPYmplY3QpOworICAgIGlmICghc2VsZikgeworICAgICAgICAqZXhjZXB0aW9uID0gY3JlYXRl
VHlwZUVycm9yKGNvbnRleHQsICJXcm9uZyB0eXBlIl9zKTsKKyAgICAgICAgcmV0dXJuIEpTVmFs
dWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworICAgIH0KKyAgICBpZiAoYXJndW1lbnRDb3VudCA8
IDIpIHsKKyAgICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0ZVR5cGVFcnJvcihjb250ZXh0LCAiTXVz
dCBzcGVjaWZ5IHRoZSBkZXN0aW5hdGlvbiBJRCBhbmQgbWVzc2FnZSBJRCBhcyB0aGUgZmlyc3Qg
dHdvIGFyZ3VtZW50cyJfcyk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChj
b250ZXh0KTsKKyAgICB9CisgICAgcmV0dXJuIHdhaXRGb3JNZXNzYWdlV2l0aEpTQXJndW1lbnRz
KHNlbGYtPm1fdGVzdGVkQ29ubmVjdGlvbiwgY29udGV4dCwgYXJndW1lbnRDb3VudCwgYXJndW1l
bnRzLCBleGNlcHRpb24pOworfQorCiBKU09iamVjdFJlZiBKU0lQQ1N0cmVhbUNsaWVudENvbm5l
Y3Rpb246OmNyZWF0ZUpTV3JhcHBlcihKU0NvbnRleHRSZWYgY29udGV4dCkKIHsKICAgICBhdXRv
KiBnbG9iYWxPYmplY3QgPSB0b0pTKGNvbnRleHQpOwpAQCAtNTA4LDcgKzkzOCw3IEBAIGJvb2wg
SlNJUENTdHJlYW1DbGllbnRDb25uZWN0aW9uOjpwcmVwYXJlVG9TZW5kT3V0T2ZTdHJlYW1NZXNz
YWdlKEpTQ29udGV4dFJlZiBjCiB7CiAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBzZW5k
aW5nIGluLXN0cmVhbSBJUEMgbWVzc2FnZXMgd2hlbiBhcHByb3ByaWF0ZS4KICAgICBpZiAoYXJn
dW1lbnRDb3VudCA+IDMpIHsKLSAgICAgICAgaWYgKCFlbmNvZGVBcmd1bWVudChlbmNvZGVyLCBq
c0lQQywgY29udGV4dCwgYXJndW1lbnRzWzNdLCBleGNlcHRpb24pKQorICAgICAgICBpZiAoIWVu
Y29kZUFyZ3VtZW50KGVuY29kZXIsIGNvbnRleHQsIGFyZ3VtZW50c1szXSwgZXhjZXB0aW9uKSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTExMTgsNiArMTU0OCw3IEBA
IGNvbnN0IEpTU3RhdGljRnVuY3Rpb24qIEpTSVBDOjpzdGF0aWNGdW5jdGlvbnMoKQogICAgICAg
ICB7ICJzZW5kTWVzc2FnZSIsIHNlbmRNZXNzYWdlLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnRE
ZWxldGUgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IH0sCiAgICAgICAgIHsgInNlbmRT
eW5jTWVzc2FnZSIsIHNlbmRTeW5jTWVzc2FnZSwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVs
ZXRlIHwga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB9LAogICAgICAgICB7ICJ3YWl0Rm9y
TWVzc2FnZSIsIHdhaXRGb3JNZXNzYWdlLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUg
fCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IH0sCisgICAgICAgIHsgImNyZWF0ZUNvbm5l
Y3Rpb25QYWlyIiwgY3JlYXRlQ29ubmVjdGlvblBhaXIsIGtKU1Byb3BlcnR5QXR0cmlidXRlRG9u
dERlbGV0ZSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfSwKICAgICAgICAgeyAiY3Jl
YXRlU3RyZWFtQ2xpZW50Q29ubmVjdGlvbiIsIGNyZWF0ZVN0cmVhbUNsaWVudENvbm5lY3Rpb24s
IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlUmVh
ZE9ubHkgfSwKICAgICAgICAgeyAiY3JlYXRlU2VtYXBob3JlIiwgY3JlYXRlU2VtYXBob3JlLCBr
SlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRP
bmx5IH0sCiAgICAgICAgIHsgImNyZWF0ZVNoYXJlZE1lbW9yeSIsIGNyZWF0ZVNoYXJlZE1lbW9y
eSwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIHwga0pTUHJvcGVydHlBdHRyaWJ1dGVS
ZWFkT25seSB9LApAQCAtMTM1Niw2ICsxNzg3LDIxIEBAIHN0YXRpYyBib29sIGVuY29kZVNoYXJl
ZE1lbW9yeShJUEM6OkVuY29kZXImIGVuY29kZXIsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2Jh
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3N0YXRpYyBib29sIGVuY29kZUZyYW1lSW5mb0RhdGEo
SVBDOjpFbmNvZGVyJiBlbmNvZGVyLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTQzo6SlNPYmplY3QqIGpzT2JqZWN0LCBKU0M6OkNhdGNoU2NvcGUmIHNjb3BlKQoreworICAg
IGF1dG8ganNJUENWYWx1ZSA9IGpzT2JqZWN0LT5nZXQoZ2xvYmFsT2JqZWN0LCBKU0M6OklkZW50
aWZpZXI6OmZyb21TdHJpbmcoZ2xvYmFsT2JqZWN0LT52bSgpLCAidmFsdWUiX3MpKTsKKyAgICBp
ZiAoc2NvcGUuZXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBSZWZQdHIg
anNJUEMgPSBKU0lQQzo6dG9XcmFwcGVkKHRvUmVmKGdsb2JhbE9iamVjdCksIHRvUmVmKGpzSVBD
VmFsdWUpKTsKKyAgICBpZiAoIWpzSVBDKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgUmVm
UHRyIHdlYkZyYW1lID0ganNJUEMtPndlYkZyYW1lKCk7CisgICAgaWYgKCF3ZWJGcmFtZSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGVuY29kZXIgPDwgd2ViRnJhbWUtPmluZm8oKTsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwogc3RhdGljIGJvb2wgZW5jb2RlU3RyZWFtQ29ubmVjdGlvbkJ1
ZmZlcihJUEM6OkVuY29kZXImIGVuY29kZXIsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNDOjpKU1ZhbHVlIGpzVmFsdWUsIEpTQzo6Q2F0Y2hTY29wZSYgc2NvcGUpCiB7CiAg
ICAgUmVmUHRyIGpzSVBDU3RyZWFtQ29ubmVjdGlvbkJ1ZmZlciA9IEpTSVBDU3RyZWFtQ29ubmVj
dGlvbkJ1ZmZlcjo6dG9XcmFwcGVkKHRvUmVmKGdsb2JhbE9iamVjdCksIHRvUmVmKGpzVmFsdWUp
KTsKQEAgLTEzNzYsOCArMTgyMiwxNyBAQCBzdGF0aWMgYm9vbCBlbmNvZGVTZW1hcGhvcmUoSVBD
OjpFbmNvZGVyJiBlbmNvZGVyLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYgogICAgIHJl
dHVybiB0cnVlOwogfQogCitzdGF0aWMgYm9vbCBlbmNvZGVBdHRhY2htZW50KElQQzo6RW5jb2Rl
ciYgZW5jb2RlciwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFs
dWUganNWYWx1ZSwgSlNDOjpDYXRjaFNjb3BlJiBzY29wZSkKK3sKKyAgICBSZWZQdHIganNJUENB
dHRhY2htZW50ID0gSlNJUENBdHRhY2htZW50Ojp0b1dyYXBwZWQodG9SZWYoZ2xvYmFsT2JqZWN0
KSwgdG9SZWYoanNWYWx1ZSkpOworICAgIGlmICghanNJUENBdHRhY2htZW50KQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBqc0lQQ0F0dGFjaG1lbnQtPmVuY29kZShlbmNvZGVyKTsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwogc3RydWN0IFZlY3RvckVuY29kZUhlbHBlciB7Ci0gICAgUmVm
PEpTSVBDPiBqc0lQQzsKICAgICBKU0NvbnRleHRSZWYgY29udGV4dDsKICAgICBKU1ZhbHVlUmVm
IHZhbHVlUmVmOwogICAgIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbjsKQEAgLTEzODcsMTIgKzE4NDIs
MTIgQEAgc3RydWN0IFZlY3RvckVuY29kZUhlbHBlciB7CiAgICAgewogICAgICAgICBpZiAoIXN1
Y2Nlc3MpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHN1Y2Nlc3MgPSBlbmNvZGVBcmd1
bWVudChlbmNvZGVyLCBqc0lQQy5nZXQoKSwgY29udGV4dCwgdmFsdWVSZWYsIGV4Y2VwdGlvbik7
CisgICAgICAgIHN1Y2Nlc3MgPSBlbmNvZGVBcmd1bWVudChlbmNvZGVyLCBjb250ZXh0LCB2YWx1
ZVJlZiwgZXhjZXB0aW9uKTsKICAgICB9CiB9OwogCiBlbnVtIGNsYXNzIEFycmF5TW9kZSB7IFR1
cGxlLCBWZWN0b3IgfTsKLXN0YXRpYyBib29sIGVuY29kZUFycmF5QXJndW1lbnQoSVBDOjpFbmNv
ZGVyJiBlbmNvZGVyLCBKU0lQQyYganNJUEMsIEFycmF5TW9kZSBhcnJheU1vZGUsIEpTQ29udGV4
dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIHZhbHVlUmVmLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24p
CitzdGF0aWMgYm9vbCBlbmNvZGVBcnJheUFyZ3VtZW50KElQQzo6RW5jb2RlciYgZW5jb2Rlciwg
QXJyYXlNb2RlIGFycmF5TW9kZSwgSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgdmFs
dWVSZWYsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKICAgICBhdXRvIG9iamVjdFJlZiA9IEpT
VmFsdWVUb09iamVjdChjb250ZXh0LCB2YWx1ZVJlZiwgZXhjZXB0aW9uKTsKICAgICBBU1NFUlQo
b2JqZWN0UmVmKTsKQEAgLTE0MTgsNyArMTg3Myw3IEBAIHN0YXRpYyBib29sIGVuY29kZUFycmF5
QXJndW1lbnQoSVBDOjpFbmNvZGVyJiBlbmNvZGVyLCBKU0lQQyYganNJUEMsIEFycmF5TW9kZSBh
CiAgICAgICAgIGF1dG8gaXRlbVJlZiA9IEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRl
eHQsIG9iamVjdFJlZiwgaSwgZXhjZXB0aW9uKTsKICAgICAgICAgaWYgKCFpdGVtUmVmKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB2ZWN0b3IuYXBwZW5kKFZlY3RvckVuY29k
ZUhlbHBlciB7IGpzSVBDLCBjb250ZXh0LCBpdGVtUmVmLCBleGNlcHRpb24sIHN1Y2Nlc3MgfSk7
CisgICAgICAgIHZlY3Rvci5hcHBlbmQoVmVjdG9yRW5jb2RlSGVscGVyIHsgY29udGV4dCwgaXRl
bVJlZiwgZXhjZXB0aW9uLCBzdWNjZXNzIH0pOwogICAgIH0KICAgICBpZiAoYXJyYXlNb2RlID09
IEFycmF5TW9kZTo6VHVwbGUpIHsKICAgICAgICAgZm9yIChhdXRvJiBpdGVtIDogdmVjdG9yKQpA
QCAtMTQyOCw3ICsxODgzLDcgQEAgc3RhdGljIGJvb2wgZW5jb2RlQXJyYXlBcmd1bWVudChJUEM6
OkVuY29kZXImIGVuY29kZXIsIEpTSVBDJiBqc0lQQywgQXJyYXlNb2RlIGEKICAgICByZXR1cm4g
c3VjY2VzczsKIH0KIAotc3RhdGljIGJvb2wgZW5jb2RlQXJndW1lbnQoSVBDOjpFbmNvZGVyJiBl
bmNvZGVyLCBKU0lQQyYganNJUEMsIEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIHZh
bHVlUmVmLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCitzdGF0aWMgYm9vbCBlbmNvZGVBcmd1bWVu
dChJUEM6OkVuY29kZXImIGVuY29kZXIsIEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVm
IHZhbHVlUmVmLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7CiAgICAgYXV0byBvYmplY3RSZWYg
PSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgdmFsdWVSZWYsIGV4Y2VwdGlvbik7CiAgICAgaWYg
KCFvYmplY3RSZWYpCkBAIC0xNDM4LDcgKzE4OTMsNyBAQCBzdGF0aWMgYm9vbCBlbmNvZGVBcmd1
bWVudChJUEM6OkVuY29kZXImIGVuY29kZXIsIEpTSVBDJiBqc0lQQywgSlNDb250ZXh0UmVmIGNv
bgogICAgICAgICByZXR1cm4gZW5jb2RlVHlwZWRBcnJheShlbmNvZGVyLCBjb250ZXh0LCBvYmpl
Y3RSZWYsIHR5cGUsIGV4Y2VwdGlvbik7CiAKICAgICBpZiAoSlNWYWx1ZUlzQXJyYXkoY29udGV4
dCwgb2JqZWN0UmVmKSkKLSAgICAgICAgcmV0dXJuIGVuY29kZUFycmF5QXJndW1lbnQoZW5jb2Rl
ciwganNJUEMsIEFycmF5TW9kZTo6VHVwbGUsIGNvbnRleHQsIG9iamVjdFJlZiwgZXhjZXB0aW9u
KTsKKyAgICAgICAgcmV0dXJuIGVuY29kZUFycmF5QXJndW1lbnQoZW5jb2RlciwgQXJyYXlNb2Rl
OjpUdXBsZSwgY29udGV4dCwgb2JqZWN0UmVmLCBleGNlcHRpb24pOwogCiAgICAgYXV0byogZ2xv
YmFsT2JqZWN0ID0gdG9KUyhjb250ZXh0KTsKICAgICBhdXRvJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKQEAgLTE1MDUsMTIgKzE5NjAsMTAgQEAgc3RhdGljIGJvb2wgZW5jb2RlQXJndW1lbnQo
SVBDOjpFbmNvZGVyJiBlbmNvZGVyLCBKU0lQQyYganNJUEMsIEpTQ29udGV4dFJlZiBjb24KICAg
ICB9CiAKICAgICBpZiAodHlwZSA9PSAiRnJhbWVJbmZvRGF0YSIpIHsKLSAgICAgICAgUmVmUHRy
IHdlYkZyYW1lID0ganNJUEMud2ViRnJhbWUoKTsKLSAgICAgICAgaWYgKCF3ZWJGcmFtZSkgewor
ICAgICAgICBpZiAoIWVuY29kZUZyYW1lSW5mb0RhdGEoZW5jb2RlciwgZ2xvYmFsT2JqZWN0LCBq
c09iamVjdCwgc2NvcGUpKSB7CiAgICAgICAgICAgICAqZXhjZXB0aW9uID0gY3JlYXRlVHlwZUVy
cm9yKGNvbnRleHQsICJGYWlsZWQgdG8gZ2V0IHRoZSBmcmFtZSJfcyk7CiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgZW5jb2RlciA8PCB3ZWJGcmFtZS0+aW5m
bygpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTE1MzQsMTIgKzE5ODcsMjAg
QEAgc3RhdGljIGJvb2wgZW5jb2RlQXJndW1lbnQoSVBDOjpFbmNvZGVyJiBlbmNvZGVyLCBKU0lQ
QyYganNJUEMsIEpTQ29udGV4dFJlZiBjb24KICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQog
CisgICAgaWYgKHR5cGUgPT0gIkF0dGFjaG1lbnQiKSB7CisgICAgICAgIGlmICghZW5jb2RlQXR0
YWNobWVudChlbmNvZGVyLCBnbG9iYWxPYmplY3QsIGpzVmFsdWUsIHNjb3BlKSkgeworICAgICAg
ICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0ZVR5cGVFcnJvcihjb250ZXh0LCAiRmFpbGVkIHRvIGNv
bnZlcnQgQXR0YWNobWVudCJfcyk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCiAgICAgaWYgKHR5cGUgPT0gIlZlY3Rv
ciIpIHsKICAgICAgICAgaWYgKCFqc1ZhbHVlLmluaGVyaXRzPEpTQzo6SlNBcnJheT4oKSkgewog
ICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0ZVR5cGVFcnJvcihjb250ZXh0LCAiVmVjdG9y
IHZhbHVlIG11c3QgYmUgYW4gYXJyYXkiX3MpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICB9Ci0gICAgICAgIHJldHVybiBlbmNvZGVBcnJheUFyZ3VtZW50KGVuY29kZXIsIGpz
SVBDLCBBcnJheU1vZGU6OlZlY3RvciwgY29udGV4dCwgdG9SZWYoZ2xvYmFsT2JqZWN0LCBqc1Zh
bHVlKSwgZXhjZXB0aW9uKTsKKyAgICAgICAgcmV0dXJuIGVuY29kZUFycmF5QXJndW1lbnQoZW5j
b2RlciwgQXJyYXlNb2RlOjpWZWN0b3IsIGNvbnRleHQsIHRvUmVmKGdsb2JhbE9iamVjdCwganNW
YWx1ZSksIGV4Y2VwdGlvbik7CiAgICAgfQogCiAgICAgaWYgKHR5cGUgPT0gIlN0cmluZyIpIHsK
QEAgLTE2NzAsMTg1ICsyMTMxLDc4IEBAIEpTVmFsdWVSZWYgSlNJUEM6OnNlbmRNZXNzYWdlKEpT
Q29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiwgSlNPYmplY3RSZWYgdGhpCiAgICAgICAg
ICpleGNlcHRpb24gPSBjcmVhdGVUeXBlRXJyb3IoY29udGV4dCwgIldyb25nIHR5cGUiX3MpOwog
ICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiAgICAgfQotCiAg
ICAgaWYgKGFyZ3VtZW50Q291bnQgPCAzKSB7CiAgICAgICAgICpleGNlcHRpb24gPSBjcmVhdGVU
eXBlRXJyb3IoY29udGV4dCwgIk11c3Qgc3BlY2lmeSB0aGUgdGFyZ2V0IHByb2Nlc3MsIGRlc3Rp
bmF0aW9uIElELCBhbmQgbWVzc2FnZSBJRCBhcyB0aGUgZmlyc3QgdGhyZWUgYXJndW1lbnRzIl9z
KTsKICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogICAgIH0K
LQogICAgIGF1dG8gY29ubmVjdGlvbiA9IHByb2Nlc3NUYXJnZXRGcm9tQXJndW1lbnQoZ2xvYmFs
T2JqZWN0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbik7CiAgICAgaWYgKCFjb25uZWN0aW9uKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci0KLSAgICBhdXRv
IGRlc3RpbmF0aW9uSUQgPSBkZXN0aW5hdGlvbklERnJvbUFyZ3VtZW50KGdsb2JhbE9iamVjdCwg
YXJndW1lbnRzWzFdLCBleGNlcHRpb24pOwotICAgIGlmICghZGVzdGluYXRpb25JRCkKLSAgICAg
ICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotCi0gICAgYXV0byBtZXNz
YWdlSUQgPSBtZXNzYWdlSURGcm9tQXJndW1lbnQoZ2xvYmFsT2JqZWN0LCBhcmd1bWVudHNbMl0s
IGV4Y2VwdGlvbik7Ci0gICAgaWYgKCFtZXNzYWdlSUQpCi0gICAgICAgIHJldHVybiBKU1ZhbHVl
TWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLQotICAgIGF1dG8gbWVzc2FnZU5hbWUgPSBzdGF0aWNf
Y2FzdDxJUEM6Ok1lc3NhZ2VOYW1lPigqbWVzc2FnZUlEKTsKLSAgICBhdXRvIGVuY29kZXIgPSBt
YWtlVW5pcXVlUmVmPElQQzo6RW5jb2Rlcj4obWVzc2FnZU5hbWUsICpkZXN0aW5hdGlvbklEKTsK
LQotICAgIEpTVmFsdWVSZWYgcmV0dXJuVmFsdWUgPSBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250
ZXh0KTsKLQotICAgIGJvb2wgaGFzUmVwbHkgPSAhIW1lc3NhZ2VSZXBseUFyZ3VtZW50RGVzY3Jp
cHRpb25zKG1lc3NhZ2VOYW1lKTsKLSAgICBpZiAoaGFzUmVwbHkpIHsKLSAgICAgICAgdWludDY0
X3QgbGlzdGVuZXJJRCA9IElQQzo6bmV4dEFzeW5jUmVwbHlIYW5kbGVySUQoKTsKLSAgICAgICAg
ZW5jb2Rlci5nZXQoKSA8PCBsaXN0ZW5lcklEOwotCi0gICAgICAgIEpTT2JqZWN0UmVmIHJlc29s
dmU7Ci0gICAgICAgIEpTT2JqZWN0UmVmIHJlamVjdDsKLUFMTE9XX05FV19BUElfV0lUSE9VVF9H
VUFSRFNfQkVHSU4KLSAgICAgICAgcmV0dXJuVmFsdWUgPSBKU09iamVjdE1ha2VEZWZlcnJlZFBy
b21pc2UoY29udGV4dCwgJnJlc29sdmUsICZyZWplY3QsIGV4Y2VwdGlvbik7Ci1BTExPV19ORVdf
QVBJX1dJVEhPVVRfR1VBUkRTX0VORAotICAgICAgICBpZiAoIXJldHVyblZhbHVlKQotICAgICAg
ICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotCi0gICAgICAgIEpT
R2xvYmFsQ29udGV4dFJldGFpbihKU0NvbnRleHRHZXRHbG9iYWxDb250ZXh0KGNvbnRleHQpKTsK
LSAgICAgICAgSlNWYWx1ZVByb3RlY3QoY29udGV4dCwgcmVzb2x2ZSk7Ci0gICAgICAgIEpTVmFs
dWVQcm90ZWN0KGNvbnRleHQsIHJlamVjdCk7Ci0gICAgICAgIElQQzo6YWRkQXN5bmNSZXBseUhh
bmRsZXIoKmNvbm5lY3Rpb24sIGxpc3RlbmVySUQsIFttZXNzYWdlTmFtZSwgY29udGV4dCwgcmVz
b2x2ZSwgcmVqZWN0XShJUEM6OkRlY29kZXIqIHJlcGx5RGVjb2RlcikgewotICAgICAgICAgICAg
YXV0byogZ2xvYmFsT2JqZWN0ID0gdG9KUyhjb250ZXh0KTsKLSAgICAgICAgICAgIGF1dG8mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgICAgICAgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9j
ayh2bSk7Ci0KLSAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZt
KTsKLSAgICAgICAgICAgIGF1dG8qIGpzUmVzdWx0ID0ganNSZXN1bHRGcm9tUmVwbHlEZWNvZGVy
KGdsb2JhbE9iamVjdCwgbWVzc2FnZU5hbWUsICpyZXBseURlY29kZXIpOwotICAgICAgICAgICAg
aWYgKGF1dG8qIGV4Y2VwdGlvbiA9IHNjb3BlLmV4Y2VwdGlvbigpKSB7Ci0gICAgICAgICAgICAg
ICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlUmVmIGFy
Z3VtZW50c1tdID0geyB0b1JlZihnbG9iYWxPYmplY3QsIGV4Y2VwdGlvbikgfTsKLSAgICAgICAg
ICAgICAgICBKU09iamVjdENhbGxBc0Z1bmN0aW9uKGNvbnRleHQsIHJlamVjdCwgcmVqZWN0LCAx
LCBhcmd1bWVudHMsIG51bGxwdHIpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdID0geyB0b1JlZihnbG9iYWxPYmplY3QsIGpzUmVz
dWx0KSB9OwotICAgICAgICAgICAgICAgIEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb24oY29udGV4dCwg
cmVzb2x2ZSwgcmVzb2x2ZSwgMSwgYXJndW1lbnRzLCBudWxscHRyKTsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgSlNWYWx1ZVVucHJvdGVjdChjb250ZXh0LCByZWplY3QpOwotICAgICAg
ICAgICAgSlNWYWx1ZVVucHJvdGVjdChjb250ZXh0LCByZXNvbHZlKTsKLSAgICAgICAgICAgIEpT
R2xvYmFsQ29udGV4dFJlbGVhc2UoSlNDb250ZXh0R2V0R2xvYmFsQ29udGV4dChjb250ZXh0KSk7
Ci0gICAgICAgIH0pOwotICAgIH0KLQotICAgIGlmIChhcmd1bWVudENvdW50ID4gMykgewotICAg
ICAgICBpZiAoIWVuY29kZUFyZ3VtZW50KGVuY29kZXIuZ2V0KCksICpqc0lQQywgY29udGV4dCwg
YXJndW1lbnRzWzNdLCBleGNlcHRpb24pKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtl
VW5kZWZpbmVkKGNvbnRleHQpOwotICAgIH0KLQotICAgIC8vIEZJWE1FOiBBZGQgdGhlIHN1cHBv
cnQgZm9yIHNwZWNpZnlpbmcgSVBDIG9wdGlvbnMuCi0KLSAgICBjb25uZWN0aW9uLT5zZW5kTWVz
c2FnZShXVEZNb3ZlKGVuY29kZXIpLCB7IH0pOwotCi0gICAgcmV0dXJuIHJldHVyblZhbHVlOwor
ICAgIHJldHVybiBzZW5kTWVzc2FnZVdpdGhKU0FyZ3VtZW50cygqY29ubmVjdGlvbiwgY29udGV4
dCwgYXJndW1lbnRDb3VudCAtIDEsIGFyZ3VtZW50cyArIDEsIGV4Y2VwdGlvbik7CiB9CiAKLXN0
cnVjdCBTeW5jSVBDTWVzc2FnZUluZm8gewotICAgIFJlZjxJUEM6OkNvbm5lY3Rpb24+IGNvbm5l
Y3Rpb247Ci0gICAgdWludDY0X3QgZGVzdGluYXRpb25JRDsKLSAgICBJUEM6Ok1lc3NhZ2VOYW1l
IG1lc3NhZ2VOYW1lOwotICAgIElQQzo6VGltZW91dCB0aW1lb3V0OwotfTsKLQotc3RhdGljIHN0
ZDo6b3B0aW9uYWw8U3luY0lQQ01lc3NhZ2VJbmZvPiBleHRyYWN0U3luY0lQQ01lc3NhZ2VJbmZv
KEpTQ29udGV4dFJlZiBjb250ZXh0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1
ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQorSlNWYWx1ZVJlZiBKU0lQ
Qzo6d2FpdEZvck1lc3NhZ2UoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmLCBKU09i
amVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJl
ZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewotICAgIGlmIChhcmd1bWVu
dENvdW50IDwgNCkgeworICAgIFJlZlB0ciBqc0lQQyA9IHRvV3JhcHBlZChjb250ZXh0LCB0aGlz
T2JqZWN0KTsKKyAgICBpZiAoIWpzSVBDKSB7CisgICAgICAgICpleGNlcHRpb24gPSBjcmVhdGVU
eXBlRXJyb3IoY29udGV4dCwgIldyb25nIHR5cGUiX3MpOworICAgICAgICByZXR1cm4gSlNWYWx1
ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisgICAgfQorICAgIGlmIChhcmd1bWVudENvdW50IDwg
MykgewogICAgICAgICAqZXhjZXB0aW9uID0gY3JlYXRlVHlwZUVycm9yKGNvbnRleHQsICJNdXN0
IHNwZWNpZnkgdGhlIHRhcmdldCBwcm9jZXNzLCBkZXN0aW5hdGlvbiBJRCwgYW5kIG1lc3NhZ2Ug
SUQgYXMgdGhlIGZpcnN0IHRocmVlIGFyZ3VtZW50cyJfcyk7Ci0gICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsK
ICAgICB9Ci0KICAgICBhdXRvKiBnbG9iYWxPYmplY3QgPSB0b0pTKGNvbnRleHQpOworICAgIEpT
Qzo6SlNMb2NrSG9sZGVyIGxvY2soZ2xvYmFsT2JqZWN0LT52bSgpKTsKICAgICBhdXRvIGNvbm5l
Y3Rpb24gPSBwcm9jZXNzVGFyZ2V0RnJvbUFyZ3VtZW50KGdsb2JhbE9iamVjdCwgYXJndW1lbnRz
WzBdLCBleGNlcHRpb24pOwogICAgIGlmICghY29ubmVjdGlvbikKLSAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKLQotICAgIGF1dG8gZGVzdGluYXRpb25JRCA9IGRlc3RpbmF0aW9uSURGcm9t
QXJndW1lbnQoZ2xvYmFsT2JqZWN0LCBhcmd1bWVudHNbMV0sIGV4Y2VwdGlvbik7Ci0gICAgaWYg
KCFkZXN0aW5hdGlvbklEKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgYXV0
byBtZXNzYWdlSUQgPSBtZXNzYWdlSURGcm9tQXJndW1lbnQoZ2xvYmFsT2JqZWN0LCBhcmd1bWVu
dHNbMl0sIGV4Y2VwdGlvbik7Ci0gICAgaWYgKCFtZXNzYWdlSUQpCi0gICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7Ci0KLSAgICBTZWNvbmRzIHRpbWVvdXREdXJhdGlvbjsKLSAgICB7Ci0gICAg
ICAgIGF1dG8ganNWYWx1ZSA9IHRvSlMoZ2xvYmFsT2JqZWN0LCBhcmd1bWVudHNbM10pOwotICAg
ICAgICBpZiAoIWpzVmFsdWUuaXNOdW1iZXIoKSkgewotICAgICAgICAgICAgKmV4Y2VwdGlvbiA9
IGNyZWF0ZVR5cGVFcnJvcihjb250ZXh0LCAiVGltZW91dCBtdXN0IGJlIGEgbnVtYmVyIl9zKTsK
LSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgICAgIH0KLSAgICAgICAgdGlt
ZW91dER1cmF0aW9uID0gU2Vjb25kcyB7IGpzVmFsdWUuYXNOdW1iZXIoKSB9OwotICAgIH0KLQot
ICAgIHJldHVybiB7IHsgY29ubmVjdGlvbi5yZWxlYXNlTm9uTnVsbCgpLCAqZGVzdGluYXRpb25J
RCwgc3RhdGljX2Nhc3Q8SVBDOjpNZXNzYWdlTmFtZT4oKm1lc3NhZ2VJRCksIHsgdGltZW91dER1
cmF0aW9uIH0gfSB9OworICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4
dCk7CisgICAgcmV0dXJuIHdhaXRGb3JNZXNzYWdlV2l0aEpTQXJndW1lbnRzKCpjb25uZWN0aW9u
LCBjb250ZXh0LCBhcmd1bWVudENvdW50IC0gMSwgYXJndW1lbnRzICsgMSwgZXhjZXB0aW9uKTsK
IH0KIAotSlNWYWx1ZVJlZiBKU0lQQzo6d2FpdEZvck1lc3NhZ2UoSlNDb250ZXh0UmVmIGNvbnRl
eHQsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRD
b3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9u
KQorSlNWYWx1ZVJlZiBKU0lQQzo6c2VuZFN5bmNNZXNzYWdlKEpTQ29udGV4dFJlZiBjb250ZXh0
LCBKU09iamVjdFJlZiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291
bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikK
IHsKLSAgICBhdXRvKiBnbG9iYWxPYmplY3QgPSB0b0pTKGNvbnRleHQpOwotICAgIEpTQzo6SlNM
b2NrSG9sZGVyIGxvY2soZ2xvYmFsT2JqZWN0LT52bSgpKTsKICAgICBSZWZQdHIganNJUEMgPSB0
b1dyYXBwZWQoY29udGV4dCwgdGhpc09iamVjdCk7CiAgICAgaWYgKCFqc0lQQykgewogICAgICAg
ICAqZXhjZXB0aW9uID0gY3JlYXRlVHlwZUVycm9yKGNvbnRleHQsICJXcm9uZyB0eXBlIl9zKTsK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogICAgIH0KLQot
ICAgIGF1dG8gaW5mbyA9IGV4dHJhY3RTeW5jSVBDTWVzc2FnZUluZm8oY29udGV4dCwgYXJndW1l
bnRDb3VudCwgYXJndW1lbnRzLCBleGNlcHRpb24pOwotICAgIGlmICghaW5mbykKKyAgICBpZiAo
YXJndW1lbnRDb3VudCA8IDMpIHsKKyAgICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0ZVR5cGVFcnJv
cihjb250ZXh0LCAiTXVzdCBzcGVjaWZ5IHRoZSB0YXJnZXQgcHJvY2VzcywgZGVzdGluYXRpb24g
SUQsIGFuZCBtZXNzYWdlIElEIGFzIHRoZSBmaXJzdCB0aHJlZSBhcmd1bWVudHMiX3MpOwogICAg
ICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci0KLSAgICBhdXRvIFtj
b25uZWN0aW9uLCBkZXN0aW5hdGlvbklELCBtZXNzYWdlTmFtZSwgdGltZW91dF0gPSAqaW5mbzsK
LSAgICBpZiAoYXV0byBkZWNvZGVyID0gY29ubmVjdGlvbi0+d2FpdEZvck1lc3NhZ2UobWVzc2Fn
ZU5hbWUsIGRlc3RpbmF0aW9uSUQsIHRpbWVvdXQsIHsgfSkpIHsKLSAgICAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUoZ2xvYmFsT2JqZWN0LT52bSgpKTsKLSAgICAgICAgYXV0
byBqc1Jlc3VsdCA9IGpzVmFsdWVGb3JBcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBtZXNzYWdlTmFt
ZSwgKmRlY29kZXIpOwotICAgICAgICBpZiAoc2NvcGUuZXhjZXB0aW9uKCkpIHsKLSAgICAgICAg
ICAgICpleGNlcHRpb24gPSB0b1JlZihnbG9iYWxPYmplY3QsIHNjb3BlLmV4Y2VwdGlvbigpKTsK
LSAgICAgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAgICAgICAgICByZXR1cm4g
SlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJu
IGpzUmVzdWx0ID8gdG9SZWYoZ2xvYmFsT2JqZWN0LCAqanNSZXN1bHQpIDogSlNWYWx1ZU1ha2VV
bmRlZmluZWQoY29udGV4dCk7CiAgICAgfQotICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5l
ZChjb250ZXh0KTsKKyAgICBhdXRvKiBnbG9iYWxPYmplY3QgPSB0b0pTKGNvbnRleHQpOworICAg
IEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soZ2xvYmFsT2JqZWN0LT52bSgpKTsKKyAgICBhdXRvIGNv
bm5lY3Rpb24gPSBwcm9jZXNzVGFyZ2V0RnJvbUFyZ3VtZW50KGdsb2JhbE9iamVjdCwgYXJndW1l
bnRzWzBdLCBleGNlcHRpb24pOworICAgIGlmICghY29ubmVjdGlvbikKKyAgICAgICAgcmV0dXJu
IEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworICAgIHJldHVybiBzZW5kU3luY01lc3Nh
Z2VXaXRoSlNBcmd1bWVudHMoKmNvbm5lY3Rpb24sIGNvbnRleHQsIGFyZ3VtZW50Q291bnQgLSAx
LCBhcmd1bWVudHMgKyAxLCBleGNlcHRpb24pOwogfQogCi1KU1ZhbHVlUmVmIEpTSVBDOjpzZW5k
U3luY01lc3NhZ2UoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJl
ZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1
bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQorSlNWYWx1ZVJlZiBKU0lQQzo6Y3JlYXRl
Q29ubmVjdGlvblBhaXIoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmLCBKU09iamVj
dFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBh
cmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewotICAgIGF1dG8qIGdsb2JhbE9i
amVjdCA9IHRvSlMoY29udGV4dCk7Ci0gICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhnbG9iYWxP
YmplY3QtPnZtKCkpOwogICAgIFJlZlB0ciBqc0lQQyA9IHRvV3JhcHBlZChjb250ZXh0LCB0aGlz
T2JqZWN0KTsKICAgICBpZiAoIWpzSVBDKSB7CiAgICAgICAgICpleGNlcHRpb24gPSBjcmVhdGVU
eXBlRXJyb3IoY29udGV4dCwgIldyb25nIHR5cGUiX3MpOwogICAgICAgICByZXR1cm4gSlNWYWx1
ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiAgICAgfQotCi0gICAgYXV0byBpbmZvID0gZXh0cmFj
dFN5bmNJUENNZXNzYWdlSW5mbyhjb250ZXh0LCBhcmd1bWVudENvdW50LCBhcmd1bWVudHMsIGV4
Y2VwdGlvbik7Ci0gICAgaWYgKCFpbmZvKQorICAgIGF1dG8gY29ubmVjdGlvbklkZW50aWZpZXJz
ID0gSVBDOjpDb25uZWN0aW9uOjpjcmVhdGVDb25uZWN0aW9uSWRlbnRpZmllclBhaXIoKTsKKyAg
ICBpZiAoIWNvbm5lY3Rpb25JZGVudGlmaWVycykKICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtl
VW5kZWZpbmVkKGNvbnRleHQpOwotCi0gICAgYXV0byBbY29ubmVjdGlvbiwgZGVzdGluYXRpb25J
RCwgbWVzc2FnZU5hbWUsIHRpbWVvdXRdID0gKmluZm87Ci0KLSAgICAvLyBGSVhNRTogU3VwcG9y
dCB0aGUgb3B0aW9ucy4KLQotICAgIElQQzo6Q29ubmVjdGlvbjo6U3luY1JlcXVlc3RJRCBzeW5j
UmVxdWVzdElEOwotICAgIGF1dG8gZW5jb2RlciA9IGNvbm5lY3Rpb24tPmNyZWF0ZVN5bmNNZXNz
YWdlRW5jb2RlcihtZXNzYWdlTmFtZSwgZGVzdGluYXRpb25JRCwgc3luY1JlcXVlc3RJRCk7Ci0K
LSAgICBpZiAoYXJndW1lbnRDb3VudCA+IDQpIHsKLSAgICAgICAgaWYgKCFlbmNvZGVBcmd1bWVu
dChlbmNvZGVyLmdldCgpLCAqanNJUEMsIGNvbnRleHQsIGFyZ3VtZW50c1s0XSwgZXhjZXB0aW9u
KSkKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLSAg
ICB9Ci0KLSAgICBpZiAoYXV0byByZXBseURlY29kZXIgPSBjb25uZWN0aW9uLT5zZW5kU3luY01l
c3NhZ2Uoc3luY1JlcXVlc3RJRCwgV1RGTW92ZShlbmNvZGVyKSwgdGltZW91dCwgeyB9KSkgewot
ICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRShnbG9iYWxPYmplY3QtPnZt
KCkpOwotICAgICAgICBhdXRvKiBqc1Jlc3VsdCA9IGpzUmVzdWx0RnJvbVJlcGx5RGVjb2Rlcihn
bG9iYWxPYmplY3QsIG1lc3NhZ2VOYW1lLCAqcmVwbHlEZWNvZGVyKTsKLSAgICAgICAgaWYgKHNj
b3BlLmV4Y2VwdGlvbigpKSB7Ci0gICAgICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoZ2xvYmFs
T2JqZWN0LCBzY29wZS5leGNlcHRpb24oKSk7Ci0gICAgICAgICAgICBzY29wZS5jbGVhckV4Y2Vw
dGlvbigpOwotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQp
OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0b1JlZihnbG9iYWxPYmplY3QsIGpzUmVzdWx0
KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cisg
ICAgYXV0byogZ2xvYmFsT2JqZWN0ID0gdG9KUyhjb250ZXh0KTsKKyAgICBKU0M6OkpTTG9ja0hv
bGRlciBsb2NrKGdsb2JhbE9iamVjdC0+dm0oKSk7CisgICAgYXV0byYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworICAg
IEpTQzo6SlNPYmplY3QqIGNvbm5lY3Rpb25QYWlyT2JqZWN0ID0gSlNDOjpjb25zdHJ1Y3RFbXB0
eUFycmF5KGdsb2JhbE9iamVjdCwgbnVsbHB0cik7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCkpOworICAgIGludCBpbmRleCA9IDA7
CisgICAgYXV0byBqc1ZhbHVlID0gdG9KUyhnbG9iYWxPYmplY3QsIEpTSVBDQ29ubmVjdGlvbjo6
Y3JlYXRlKFdURk1vdmUoY29ubmVjdGlvbklkZW50aWZpZXJzLT5zZXJ2ZXIpKS0+Y3JlYXRlSlNX
cmFwcGVyKGNvbnRleHQpKTsKKyAgICBjb25uZWN0aW9uUGFpck9iamVjdC0+cHV0RGlyZWN0SW5k
ZXgoZ2xvYmFsT2JqZWN0LCBpbmRleCsrLCBqc1ZhbHVlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KSk7CisgICAganNWYWx1ZSA9
IHRvSlMoZ2xvYmFsT2JqZWN0LCBKU0lQQ0F0dGFjaG1lbnQ6OmNyZWF0ZShXVEZNb3ZlKGNvbm5l
Y3Rpb25JZGVudGlmaWVycy0+Y2xpZW50KSktPmNyZWF0ZUpTV3JhcHBlcihjb250ZXh0KSk7Cisg
ICAgY29ubmVjdGlvblBhaXJPYmplY3QtPnB1dERpcmVjdEluZGV4KGdsb2JhbE9iamVjdCwgaW5k
ZXgrKywganNWYWx1ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZU1h
a2VVbmRlZmluZWQoY29udGV4dCkpOworICAgIHJldHVybiB0b1JlZih2bSwgY29ubmVjdGlvblBh
aXJPYmplY3QpOwogfQogCiBKU1ZhbHVlUmVmIEpTSVBDOjpjcmVhdGVTdHJlYW1DbGllbnRDb25u
ZWN0aW9uKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiwgSlNPYmplY3RSZWYgdGhp
c09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRz
W10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCA1ZWJiYjFmNmUwOTBmODJlODBhOWNlOTMzM2FkMWI5OWRj
OWFjNTFhLi4xMzVmNmIxZmVlYjIxMjMzNGY3ZmJmZTBjZjZhZTVmMDk5NWM4NDY2IDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUg
QEAKKzIwMjItMDQtMTkgIEtpbW1vIEtpbm51bmVuICA8a2tpbm51bmVuQGFwcGxlLmNvbT4KKwor
ICAgICAgICBJUEMgdGVzdGluZyBBUEkgc2hvdWxkIGhhdmUgdGhlIGFiaWxpdHkgdG8gdGVzdCBJ
UEM6OkNvbm5lY3Rpb24gc2VuZCBhbmQgcmVjZWl2ZSB0aHJvdWdoIElQQzo6Q29ubmVjdGlvbgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM5NDk1CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lQQ1Rlc3RpbmdBUEkubW06CisgICAgICAgIChURVNU
KToKKyAgICAgICAgQ2hhbmdlIHR3byB0ZXN0cyB0byBwYXNzICJJUEMiIG9iamVjdCBhcyB0aGUg
dmFsdWUgb2YgRnJhbWVJbmZvRGF0YS4gVGhpcyB3YXkgdGhlIGFyZ3VtZW50IGVuY29kZSBmdW5j
dGlvbnMKKyAgICAgICAgZG8gbm90IG5lZWQgdG8gdGFrZSB0aGUgSlNJUEMgYXJndW1lbnQuCisK
IDIwMjItMDQtMjEgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgog
CiAgICAgICAgIFtHVEtdW1dQRV0gTWFrZSBtYWtlLWRpc3Qgc2NyaXB0IHB5dGhvbjMgb25seQpk
aWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JUENUZXN0
aW5nQVBJLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JUENUZXN0
aW5nQVBJLm1tCmluZGV4IGMzOTI1MGEyZDQ4YTE1MjllZTIwNmI1Mzk1MmUzMmJmNjY0NmE2OGEu
LjU3NWQ4ZDMzN2U5OTFkYjE1MGQ2NWRjNmJlMzExNzA5ZGFlMTZhMjIgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSVBDVGVzdGluZ0FQSS5tbQorKysg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lQQ1Rlc3RpbmdBUEkubW0K
QEAgLTE3Nyw3ICsxNzcsNyBAQCBURVNUKElQQ1Rlc3RpbmdBUEksIENhblNlbmRBbGVydCkKIAog
ICAgIGRvbmUgPSBmYWxzZTsKICAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZEhUTUxTdHJp
bmc6QCI8IURPQ1RZUEUgaHRtbD48c2NyaXB0PklQQy5zZW5kU3luY01lc3NhZ2UoJ1VJJywgSVBD
LndlYlBhZ2VQcm94eUlELCBJUEMubWVzc2FnZXMuV2ViUGFnZVByb3h5X1J1bkphdmFTY3JpcHRB
bGVydC5uYW1lLCAxMDAsIgotICAgICAgICAiW3t0eXBlOiAndWludDY0X3QnLCB2YWx1ZTogSVBD
LmZyYW1lSUR9LCB7dHlwZTogJ0ZyYW1lSW5mb0RhdGEnfSwgeyd0eXBlJzogJ1N0cmluZycsICd2
YWx1ZSc6ICdoaSd9XSk7PC9zY3JpcHQ+Il07CisgICAgICAgICJbe3R5cGU6ICd1aW50NjRfdCcs
IHZhbHVlOiBJUEMuZnJhbWVJRH0sIHt0eXBlOiAnRnJhbWVJbmZvRGF0YScsIHZhbHVlOiBJUEN9
LCB7J3R5cGUnOiAnU3RyaW5nJywgJ3ZhbHVlJzogJ2hpJ31dKTs8L3NjcmlwdD4iXTsKICAgICBU
ZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOwogCiAgICAgRVhQRUNUX1NUUkVRKFthbGVy
dE1lc3NhZ2UgVVRGOFN0cmluZ10sICJoaSIpOwpAQCAtNDE0LDcgKzQxNCw3IEBAIFRFU1QoSVBD
VGVzdGluZ0FQSSwgRGVjb2Rlc1JlcGx5QXJndW1lbnRzRm9yUHJvbXB0KQogICAgIGRvbmUgPSBm
YWxzZTsKICAgICBwcm9tcHRSZXN1bHQgPSBAImZvbyI7CiAgICAgW3dlYlZpZXcgc3luY2hyb25v
dXNseUxvYWRIVE1MU3RyaW5nOkAiPCFET0NUWVBFIGh0bWw+PHNjcmlwdD5yZXN1bHQgPSBJUEMu
c2VuZFN5bmNNZXNzYWdlKCdVSScsIElQQy53ZWJQYWdlUHJveHlJRCwgSVBDLm1lc3NhZ2VzLldl
YlBhZ2VQcm94eV9SdW5KYXZhU2NyaXB0UHJvbXB0Lm5hbWUsIDEwMCwiCi0gICAgICAgICJbe3R5
cGU6ICd1aW50NjRfdCcsIHZhbHVlOiBJUEMuZnJhbWVJRH0sIHt0eXBlOiAnRnJhbWVJbmZvRGF0
YSd9LCB7J3R5cGUnOiAnU3RyaW5nJywgJ3ZhbHVlJzogJ2hpJ30sIHsndHlwZSc6ICdTdHJpbmcn
LCAndmFsdWUnOiAnYmFyJ31dKTs8L3NjcmlwdD4iXTsKKyAgICAgICAgIlt7dHlwZTogJ3VpbnQ2
NF90JywgdmFsdWU6IElQQy5mcmFtZUlEfSwge3R5cGU6ICdGcmFtZUluZm9EYXRhJywgdmFsdWU6
IElQQ30sIHsndHlwZSc6ICdTdHJpbmcnLCAndmFsdWUnOiAnaGknfSwgeyd0eXBlJzogJ1N0cmlu
ZycsICd2YWx1ZSc6ICdiYXInfV0pOzwvc2NyaXB0PiJdOwogICAgIFRlc3RXZWJLaXRBUEk6OlV0
aWw6OnJ1bigmZG9uZSk7CiAKICAgICBFWFBFQ1RfU1RSRVEoW3Byb21wdERlZmF1bHQgVVRGOFN0
cmluZ10sICJiYXIiKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91
dFRlc3RzL0NoYW5nZUxvZwppbmRleCBmODIyMjNhMThjMjE0MDhmNGE0YmY0ZTQ1Y2JlYThhMDMz
OGI5ZjZlLi5mMmI4MjY4MmJiZDlmY2NiNGFkYWUzNDg5OWM5M2UzMTdlY2YxOGIzIDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTIgQEAKKzIwMjItMDQtMTkgIEtpbW1vIEtpbm51bmVuICA8a2tpbm51bmVuQGFw
cGxlLmNvbT4KKworICAgICAgICBJUEMgdGVzdGluZyBBUEkgc2hvdWxkIGhhdmUgdGhlIGFiaWxp
dHkgdG8gdGVzdCBJUEM6OkNvbm5lY3Rpb24gc2VuZCBhbmQgcmVjZWl2ZSB0aHJvdWdoIElQQzo6
Q29ubmVjdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjM5NDk1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBpcGMvY3JlYXRlLWNvbm5lY3Rpb24tYW5kLXNlbmQtYXN5bmMuaHRtbDogQWRkZWQuCisK
IDIwMjItMDQtMjEgIFRpbSBOZ3V5ZW4gIDxudGltQGFwcGxlLmNvbT4KIAogICAgICAgICBbaU9T
XSBSZWJhc2VsaW5lIGZhc3QvYXR0YWNobWVudC9hdHRhY2htZW50LWRpc2FibGVkLXJlbmRlcmlu
Zy5odG1sIGV4cGVjdGF0aW9ucwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaXBjL2NyZWF0ZS1j
b25uZWN0aW9uLWFuZC1zZW5kLWFzeW5jLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2lwYy9j
cmVhdGUtY29ubmVjdGlvbi1hbmQtc2VuZC1hc3luYy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NmFmZjc3ZGIzYjhhNmEwMjE0ZjY5MGRjNDU4ODg3NjVmM2NlN2IyNAotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2lwYy9jcmVhdGUtY29ubmVjdGlvbi1hbmQtc2VuZC1hc3luYy1leHBl
Y3RlZC50eHQKQEAgLTAsMCArMSw0IEBACisKK1BBU1MgU2VuZGluZyBhc3luYyBtZXNzYWdlcyBm
cm9tIHRoZSBzZXJ2ZXIgaW1tZWRpYXRlbHkgYWZ0ZXIgb3BlbmluZyBhIG5ldyBjb25uZWN0aW9u
IHdvcmtzLgorUEFTUyBTZW5kaW5nIGFzeW5jIG1lc3NhZ2VzIGZyb20gdGhlIGNsaWVudCBpbW1l
ZGlhdGVseSBhZnRlciBvcGVuaW5nIHRoZSBjb25uZWN0aW9uIHdvcmtzLgorCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9pcGMvY3JlYXRlLWNvbm5lY3Rpb24tYW5kLXNlbmQtYXN5bmMuaHRtbCBi
L0xheW91dFRlc3RzL2lwYy9jcmVhdGUtY29ubmVjdGlvbi1hbmQtc2VuZC1hc3luYy5odG1sCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjc5OGMyZmEyNjA4NzEyZjRhY2E0Nzc1MmRiZDU1ZmU5MWRiYzc1MzUKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pcGMvY3JlYXRlLWNvbm5lY3Rpb24tYW5kLXNlbmQt
YXN5bmMuaHRtbApAQCAtMCwwICsxLDcyIEBACis8IWRvY3R5cGUgaHRtbD48IS0tIHdlYmtpdC10
ZXN0LXJ1bm5lciBbIElQQ1Rlc3RpbmdBUElFbmFibGVkPXRydWUgXSAtLT4KKzx0aXRsZT5UZXN0
IHRoYXQgc2VuZGluZyBtZXNzYWdlcyBpbW1lZGlhdGVseSBhZnRlciBjcmVhdGluZyBhIG5ldyBj
b25uZWN0aW9uIHdvcmtzLjwvdGl0bGU+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3Ro
YXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5l
c3NyZXBvcnQuanMiPjwvc2NyaXB0PgorPGJvZHk+Cis8c2NyaXB0PgorY29uc3QgZGVmYXVsdFRp
bWVvdXQgPSAxMDAwOworCitwcm9taXNlX3Rlc3QoYXN5bmMgdCA9PiB7CisgICAgaWYgKCF3aW5k
b3cuSVBDKQorICAgICAgICByZXR1cm47CisgICAgY29uc3QgdGVzdGVySUQgPSA0NDc7CisgICAg
Zm9yIChjb25zdCBwcm9jZXNzVGFyZ2V0IG9mIElQQy5wcm9jZXNzVGFyZ2V0cykgeworICAgICAg
ICAvLyBUZXN0IHN0YXJ0cyBoZXJlLgorICAgICAgICBjb25zdCBbY29ubmVjdGlvbiwgY2xpZW50
Q29ubmVjdGlvbklkZW50aWZpZXJdID0gSVBDLmNyZWF0ZUNvbm5lY3Rpb25QYWlyKCk7CisgICAg
ICAgIGNvbm5lY3Rpb24ub3BlbigpOworICAgICAgICBjb25zdCBtc2dzID0gW107CisgICAgICAg
IGNvbnN0IG51bU1lc3NhZ2VzID0gMTAwMDA7CisgICAgICAgIGZvciAobGV0IHYgPSAwOyB2IDwg
bnVtTWVzc2FnZXM7IHYrKykKKyAgICAgICAgICAgIG1zZ3MucHVzaChbeyB0eXBlOiAndWludDMy
X3QnLCB2YWx1ZTogdiArIDF9XSk7CisgICAgICAgIGxldCBtc2dOYW1lID0gSVBDLm1lc3NhZ2Vz
LklQQ0Nvbm5lY3Rpb25UZXN0ZXJfQXN5bmNNZXNzYWdlLm5hbWU7CisKKyAgICAgICAgSVBDLnNl
bmRNZXNzYWdlKHByb2Nlc3NUYXJnZXQsIDAsIElQQy5tZXNzYWdlcy5JUENUZXN0ZXJfQ3JlYXRl
Q29ubmVjdGlvblRlc3Rlci5uYW1lLCBbCisgICAgICAgICAgICB7IHR5cGU6ICd1aW50NjRfdCcs
IHZhbHVlOiB0ZXN0ZXJJRCB9LAorICAgICAgICAgICAgeyB0eXBlOiAnQXR0YWNobWVudCcsIHZh
bHVlOiBjbGllbnRDb25uZWN0aW9uSWRlbnRpZmllciB9LAorICAgICAgICBdKTsKKyAgICAgICAg
dHJ5IHsKKyAgICAgICAgICAgIGZvciAobGV0IG1zZyBvZiBtc2dzKQorICAgICAgICAgICAgICAg
IGNvbm5lY3Rpb24uc2VuZE1lc3NhZ2UoMCwgbXNnTmFtZSwgbXNnKTsKKyAgICAgICAgICAgIGNv
bnN0IHJlcGx5ID0gY29ubmVjdGlvbi5zZW5kU3luY01lc3NhZ2UoMCwgSVBDLm1lc3NhZ2VzLklQ
Q0Nvbm5lY3Rpb25UZXN0ZXJfU3luY01lc3NhZ2UubmFtZSwgZGVmYXVsdFRpbWVvdXQsIFt7IHR5
cGU6ICd1aW50MzJfdCcsIHZhbHVlOiA1NSB9XSk7CisgICAgICAgICAgICBjb25zdCBmaXJzdFJl
c3VsdCA9IHJlcGx5LmFyZ3VtZW50c1swXTsKKyAgICAgICAgICAgIGFzc2VydF9lcXVhbHMoZmly
c3RSZXN1bHQudHlwZSwgInVpbnQzMl90IiwgYGZvciAkeyBwcm9jZXNzVGFyZ2V0IH1gKTsKKyAg
ICAgICAgICAgIGFzc2VydF9lcXVhbHMoZmlyc3RSZXN1bHQudmFsdWUsIDU1ICsgbnVtTWVzc2Fn
ZXMsIGBmb3IgJHsgcHJvY2Vzc1RhcmdldCB9YCk7CisgICAgICAgIH0gZmluYWxseSB7CisgICAg
ICAgICAgICBjb25uZWN0aW9uLmludmFsaWRhdGUoKTsKKyAgICAgICAgICAgIElQQy5zZW5kU3lu
Y01lc3NhZ2UocHJvY2Vzc1RhcmdldCwgMCwgSVBDLm1lc3NhZ2VzLklQQ1Rlc3Rlcl9SZWxlYXNl
Q29ubmVjdGlvblRlc3Rlci5uYW1lLCBkZWZhdWx0VGltZW91dCwgW3sgdHlwZTogJ3VpbnQ2NF90
JywgdmFsdWU6IHRlc3RlcklEIH1dKTsKKyAgICAgICAgfQorICAgIH0KK30sICJTZW5kaW5nIGFz
eW5jIG1lc3NhZ2VzIGZyb20gdGhlIHNlcnZlciBpbW1lZGlhdGVseSBhZnRlciBvcGVuaW5nIGEg
bmV3IGNvbm5lY3Rpb24gd29ya3MuIik7CisKK3Byb21pc2VfdGVzdChhc3luYyB0ID0+IHsKKyAg
ICBpZiAoIXdpbmRvdy5JUEMpCisgICAgICAgIHJldHVybjsKKyAgICBjb25zdCB0ZXN0ZXJJRCA9
IDQ0ODsKKyAgICBmb3IgKGNvbnN0IHByb2Nlc3NUYXJnZXQgb2YgSVBDLnByb2Nlc3NUYXJnZXRz
KSB7CisgICAgICAgIC8vIFRlc3Qgc3RhcnRzIGhlcmUuCisgICAgICAgIGNvbnN0IGNvbm5lY3Rp
b25Db3VudCA9IDU7IC8vIEZJWE1FOiBzaG91bGQgYmUgMTAwLCBidXQgd2FpdGluZyBmb3IgbWVz
c2FnZXMgaXMgc2xvdy4KKyAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb25uZWN0aW9uQ291
bnQ7ICsraSkgeworICAgICAgICAgICAgY29uc3QgW2Nvbm5lY3Rpb24sIGNsaWVudENvbm5lY3Rp
b25JZGVudGlmaWVyXSA9IElQQy5jcmVhdGVDb25uZWN0aW9uUGFpcigpOworICAgICAgICAgICAg
Y29ubmVjdGlvbi5vcGVuKCk7CisgICAgICAgICAgICBjb25zdCBtZXNzYWdlQ291bnQgPSAzOyAv
LyBGSVhNRTogc2hvdWxkIGJlIDEwMDAwLCBidXQgd2FpdGluZyBmb3IgbWVzc2FnZXMgaXMgc2xv
dy4KKyAgICAgICAgICAgIElQQy5zZW5kTWVzc2FnZShwcm9jZXNzVGFyZ2V0LCAwLCBJUEMubWVz
c2FnZXMuSVBDVGVzdGVyX0NyZWF0ZUNvbm5lY3Rpb25UZXN0ZXJBbmRTZW5kQXN5bmNNZXNzYWdl
cy5uYW1lLCBbCisgICAgICAgICAgICAgICAgeyB0eXBlOiAndWludDY0X3QnLCB2YWx1ZTogdGVz
dGVySUQgfSwKKyAgICAgICAgICAgICAgICB7IHR5cGU6ICdBdHRhY2htZW50JywgdmFsdWU6IGNs
aWVudENvbm5lY3Rpb25JZGVudGlmaWVyIH0sCisgICAgICAgICAgICAgICAgeyB0eXBlOiAndWlu
dDMyX3QnLCB2YWx1ZTogbWVzc2FnZUNvdW50IH0sCisgICAgICAgICAgICBdKTsKKyAgICAgICAg
ICAgIHRyeSB7CisgICAgICAgICAgICAgICAgZm9yIChsZXQgdiA9IDA7IHYgPCBtZXNzYWdlQ291
bnQ7IHYrKykgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBtc2cgPSBjb25uZWN0aW9uLndh
aXRGb3JNZXNzYWdlKDAsIElQQy5tZXNzYWdlcy5JUENDb25uZWN0aW9uVGVzdGVyX0FzeW5jTWVz
c2FnZS5uYW1lLCBkZWZhdWx0VGltZW91dCk7CisgICAgICAgICAgICAgICAgICAgIGFzc2VydF9l
cXVhbHMobXNnWzBdLnR5cGUsICJ1aW50MzJfdCIsIGBmb3IgJHsgcHJvY2Vzc1RhcmdldCB9YCk7
CisgICAgICAgICAgICAgICAgICAgIGFzc2VydF9lcXVhbHMobXNnWzBdLnZhbHVlLCB2LCBgZm9y
ICR7IHByb2Nlc3NUYXJnZXQgfWApOworCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fSBmaW5hbGx5IHsKKyAgICAgICAgICAgICAgICBjb25uZWN0aW9uLmludmFsaWRhdGUoKTsKKyAg
ICAgICAgICAgICAgICBJUEMuc2VuZFN5bmNNZXNzYWdlKHByb2Nlc3NUYXJnZXQsIDAsIElQQy5t
ZXNzYWdlcy5JUENUZXN0ZXJfUmVsZWFzZUNvbm5lY3Rpb25UZXN0ZXIubmFtZSwgZGVmYXVsdFRp
bWVvdXQsIFt7IHR5cGU6ICd1aW50NjRfdCcsIHZhbHVlOiB0ZXN0ZXJJRCB9XSk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9LCAiU2VuZGluZyBhc3luYyBtZXNzYWdlcyBmcm9t
IHRoZSBjbGllbnQgaW1tZWRpYXRlbHkgYWZ0ZXIgb3BlbmluZyB0aGUgY29ubmVjdGlvbiB3b3Jr
cy4iKTsKKzwvc2NyaXB0PgorPC9ib2R5PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>458123</attachid>
            <date>2022-04-22 01:57:57 -0700</date>
            <delta_ts>2022-04-27 07:42:13 -0700</delta_ts>
            <desc>For landing</desc>
            <filename>bug-239495-20220422115754.patch</filename>
            <type>text/plain</type>
            <size>80605</size>
            <attacher name="Kimmo Kinnunen">kkinnunen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkzMjEyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDEwNDQ1Mjk1ZGU3NTc5Njk3
MWRjYTQ0ZTNkNzM4OWZmMTUzMjgxNzIuLjhjOWQ5MDQ3MDNhNTc4NDg0NDg1NzBkNjhhOGI4MDUw
OWE0NjRlMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTAxIEBACisyMDIyLTA0LTE5ICBLaW1tbyBL
aW5udW5lbiAgPGtraW5udW5lbkBhcHBsZS5jb20+CisKKyAgICAgICAgSVBDIHRlc3RpbmcgQVBJ
IHNob3VsZCBoYXZlIHRoZSBhYmlsaXR5IHRvIHRlc3QgSVBDOjpDb25uZWN0aW9uIHNlbmQgYW5k
IHJlY2VpdmUgdGhyb3VnaCBJUEM6OkNvbm5lY3Rpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzOTQ5NQorCisgICAgICAgIFJldmlld2VkIGJ5IERh
cmluIEFkbGVyLgorCisgICAgICAgIEFkZCB0aGUgdGVzdGluZyBpbnRlcmZhY2VzIHRvIGJlIGFi
bGUgdG8gc2VuZCBJUEM6OkNvbm5lY3Rpb24gaW5zdGFuY2VzCisgICAgICAgIHRvIG90aGVyIHBy
b2Nlc3Nlcy4KKyAgICAgICAgQWRkIHRoZSB0ZXN0aW5nIGludGVyZmFjZXMgdG8gYmUgYWJsZSB0
byBzZW5kIG1lc3NhZ2VzIHRocm91Z2ggYXJiaXRyYXJ5CisgICAgICAgIElQQzo6Q29ubmVjdGlv
biBpbnN0YW5jZXMuCisKKyAgICAgICAgVGVzdDogaXBjL2NyZWF0ZS1jb25uZWN0aW9uLWFuZC1z
ZW5kLWFzeW5jLmh0bWwKKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIERl
cml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3Q6CisgICAgICAgICogRGVyaXZlZFNvdXJjZXMt
b3V0cHV0LnhjZmlsZWxpc3Q6CisgICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAgICAg
ICAgKiBQbGF0Zm9ybS9JUEMvQ29ubmVjdGlvbi5oOgorICAgICAgICAoSVBDOjpDb25uZWN0aW9u
Ojp3YWl0Rm9yTWVzc2FnZUZvclRlc3RpbmcpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0L21l
c3NhZ2VzLnB5OgorICAgICAgICAodHlwZXNfdGhhdF9jYW5ub3RfYmVfZm9yd2FyZF9kZWNsYXJl
ZCk6CisgICAgICAgICogU2hhcmVkL0lQQ0Nvbm5lY3Rpb25UZXN0ZXIuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYktpdDo6YXNJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYktpdDo6SVBDQ29ubmVj
dGlvblRlc3Rlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6SVBDQ29ubmVjdGlvblRlc3Rl
cjo6SVBDQ29ubmVjdGlvblRlc3Rlcik6CisgICAgICAgIChXZWJLaXQ6OklQQ0Nvbm5lY3Rpb25U
ZXN0ZXI6OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViS2l0OjpJUENDb25uZWN0aW9uVGVzdGVy
OjpzdG9wTGlzdGVuaW5nRm9ySVBDKToKKyAgICAgICAgKFdlYktpdDo6SVBDQ29ubmVjdGlvblRl
c3Rlcjo6c2VuZEFzeW5jTWVzc2FnZXMpOgorICAgICAgICAoV2ViS2l0OjpJUENDb25uZWN0aW9u
VGVzdGVyOjpkaWRDbG9zZSk6CisgICAgICAgIChXZWJLaXQ6OklQQ0Nvbm5lY3Rpb25UZXN0ZXI6
OmRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6OklQQ0Nvbm5lY3Rp
b25UZXN0ZXI6OmFzeW5jTWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6OklQQ0Nvbm5lY3Rpb25U
ZXN0ZXI6OnN5bmNNZXNzYWdlKToKKyAgICAgICAgKiBTaGFyZWQvSVBDQ29ubmVjdGlvblRlc3Rl
ci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9JUENUZXN0ZXIuaC4KKyAgICAg
ICAgKiBTaGFyZWQvSVBDQ29ubmVjdGlvblRlc3Rlci5tZXNzYWdlcy5pbjogQ29waWVkIGZyb20g
U291cmNlL1dlYktpdC9TaGFyZWQvSVBDVGVzdGVyLm1lc3NhZ2VzLmluLgorICAgICAgICAqIFNo
YXJlZC9JUENDb25uZWN0aW9uVGVzdGVySWRlbnRpZmllci5oOiBBZGRlZC4KKyAgICAgICAgKiBT
aGFyZWQvSVBDVGVzdGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGVyOjpjcmVhdGVD
b25uZWN0aW9uVGVzdGVyKToKKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGVyOjpjcmVhdGVDb25u
ZWN0aW9uVGVzdGVyQW5kU2VuZEFzeW5jTWVzc2FnZXMpOgorICAgICAgICAoV2ViS2l0OjpJUENU
ZXN0ZXI6OnJlbGVhc2VDb25uZWN0aW9uVGVzdGVyKToKKyAgICAgICAgKiBTaGFyZWQvSVBDVGVz
dGVyLmg6CisgICAgICAgICogU2hhcmVkL0lQQ1Rlc3Rlci5tZXNzYWdlcy5pbjoKKyAgICAgICAg
KiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ajoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvSVBDVGVzdGluZ0FQSS5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBDQXR0YWNobWVudDo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6SlNJUENBdHRhY2htZW50OjplbmNvZGUgY29u
c3QpOgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjpKU0lQQ0F0dGFjaG1lbnQ6OkpT
SVBDQXR0YWNobWVudCk6CisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBDQ29u
bmVjdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6SlNJUEND
b25uZWN0aW9uOjpKU0lQQ0Nvbm5lY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5n
QVBJOjpjcmVhdGVUeXBlRXJyb3IpOgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjpj
b252ZXJ0VG9VaW50NjQpOgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjpzZW5kTWVz
c2FnZVdpdGhKU0FyZ3VtZW50cyk6CisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OmV4
dHJhY3RTeW5jSVBDTWVzc2FnZUluZm8pOgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJ
OjpzZW5kU3luY01lc3NhZ2VXaXRoSlNBcmd1bWVudHMpOgorICAgICAgICAoV2ViS2l0OjpJUENU
ZXN0aW5nQVBJOjp3YWl0Rm9yTWVzc2FnZVdpdGhKU0FyZ3VtZW50cyk6CisgICAgICAgIChXZWJL
aXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBDU2VtYXBob3JlOjpjcmVhdGVKU1dyYXBwZXIpOgorICAg
ICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjpKU0lQQ1NlbWFwaG9yZTo6d3JhcHBlckNsYXNz
KToKKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6SlNJUENTZW1hcGhvcmU6OnVud3Jh
cCk6CisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBDU2VtYXBob3JlOjp0b1dy
YXBwZWQpOgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjpKU0lQQ1NlbWFwaG9yZTo6
aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBDU2VtYXBo
b3JlOjpmaW5hbGl6ZSk6CisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBDU2Vt
YXBob3JlOjpzdGF0aWNGdW5jdGlvbnMpOgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJ
OjpKU0lQQ0F0dGFjaG1lbnQ6OmNyZWF0ZUpTV3JhcHBlcik6CisgICAgICAgIChXZWJLaXQ6OklQ
Q1Rlc3RpbmdBUEk6OkpTSVBDQXR0YWNobWVudDo6d3JhcHBlckNsYXNzKToKKyAgICAgICAgKFdl
YktpdDo6SVBDVGVzdGluZ0FQSTo6SlNJUENBdHRhY2htZW50Ojp1bndyYXApOgorICAgICAgICAo
V2ViS2l0OjpJUENUZXN0aW5nQVBJOjpKU0lQQ0F0dGFjaG1lbnQ6OnRvV3JhcHBlZCk6CisgICAg
ICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBDQXR0YWNobWVudDo6aW5pdGlhbGl6ZSk6
CisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBDQXR0YWNobWVudDo6ZmluYWxp
emUpOgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjpKU0lQQ0F0dGFjaG1lbnQ6OnN0
YXRpY0Z1bmN0aW9ucyk6CisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBDQ29u
bmVjdGlvbjo6Y3JlYXRlSlNXcmFwcGVyKToKKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQ
STo6SlNJUENDb25uZWN0aW9uOjp3cmFwcGVyQ2xhc3MpOgorICAgICAgICAoV2ViS2l0OjpJUENU
ZXN0aW5nQVBJOjpKU0lQQ0Nvbm5lY3Rpb246OnVud3JhcCk6CisgICAgICAgIChXZWJLaXQ6OklQ
Q1Rlc3RpbmdBUEk6OkpTSVBDQ29ubmVjdGlvbjo6dG9XcmFwcGVkKToKKyAgICAgICAgKFdlYktp
dDo6SVBDVGVzdGluZ0FQSTo6SlNJUENDb25uZWN0aW9uOjppbml0aWFsaXplKToKKyAgICAgICAg
KFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6SlNJUENDb25uZWN0aW9uOjpmaW5hbGl6ZSk6CisgICAg
ICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBDQ29ubmVjdGlvbjo6ZGlkUmVjZWl2ZU1l
c3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjpKU0lQQ0Nvbm5lY3Rpb246
OmRpZFJlY2VpdmVTeW5jTWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6
OkpTSVBDQ29ubmVjdGlvbjo6ZGlkQ2xvc2UpOgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5n
QVBJOjpKU0lQQ0Nvbm5lY3Rpb246OmRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZSk6CisgICAgICAg
IChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBDQ29ubmVjdGlvbjo6c3RhdGljRnVuY3Rpb25z
KToKKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6SlNJUENDb25uZWN0aW9uOjpvcGVu
KToKKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6SlNJUENDb25uZWN0aW9uOjppbnZh
bGlkYXRlKToKKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6SlNJUENDb25uZWN0aW9u
OjpzZW5kTWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBDQ29u
bmVjdGlvbjo6c2VuZFN5bmNNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQ
STo6SlNJUENDb25uZWN0aW9uOjp3YWl0Rm9yTWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6OklQ
Q1Rlc3RpbmdBUEk6OkpTSVBDU3RyZWFtQ2xpZW50Q29ubmVjdGlvbjo6cHJlcGFyZVRvU2VuZE91
dE9mU3RyZWFtTWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBD
OjpzdGF0aWNGdW5jdGlvbnMpOgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjplbmNv
ZGVGcmFtZUluZm9EYXRhKToKKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6ZW5jb2Rl
QXR0YWNobWVudCk6CisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OlZlY3RvckVuY29k
ZUhlbHBlcjo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6
ZW5jb2RlQXJyYXlBcmd1bWVudCk6CisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OmVu
Y29kZUFyZ3VtZW50KToKKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6SlNJUEM6OnNl
bmRNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6SlNJUEM6OndhaXRG
b3JNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6SlNJUEM6OnNlbmRT
eW5jTWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBDOjpjcmVh
dGVDb25uZWN0aW9uUGFpcik6CisKIDIwMjItMDQtMjEgIEpvaG4gQ3VubmluZ2hhbSAgPGpvaG5j
dW5uaW5naGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBVc2UgR0NHTFNwYW5UdXBsZSB0byBwYXNz
IGJ1ZmZlciBwYXJhbWV0ZXJzIHRvIG11bHRpZHJhdyBjYWxscy4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViS2l0L0NNYWtlTGlzdHMudHh0Cmlu
ZGV4IDY5YWNkOGRlZGQ5YTkyMTJkZmY4Y2FlZDcwNGNkNjNiYTIzMmYzZmUuLmM0NGYyOWE1NDZj
YjFlOWFlZjExM2U1M2IzOWZlNDI2YzdjM2FlOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Q01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYktpdC9DTWFrZUxpc3RzLnR4dApAQCAtMjE1
LDYgKzIxNSw3IEBAIHNldChXZWJLaXRfTUVTU0FHRVNfSU5fRklMRVMKICAgICBOZXR3b3JrUHJv
Y2Vzcy93ZWJydGMvUlRDRGF0YUNoYW5uZWxSZW1vdGVNYW5hZ2VyUHJveHkKIAogICAgIFNoYXJl
ZC9BdXhpbGlhcnlQcm9jZXNzCisgICAgU2hhcmVkL0lQQ0Nvbm5lY3Rpb25UZXN0ZXIKICAgICBT
aGFyZWQvSVBDU3RyZWFtVGVzdGVyCiAgICAgU2hhcmVkL0lQQ1N0cmVhbVRlc3RlclByb3h5CiAg
ICAgU2hhcmVkL0lQQ1Rlc3RlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9EZXJpdmVkU291
cmNlcy1pbnB1dC54Y2ZpbGVsaXN0IGIvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1pbnB1
dC54Y2ZpbGVsaXN0CmluZGV4IDk3YjQxZTk3ZjJjZjg2MjExYWVjYmU5Y2VhMzFhYTNlNjYwMzQ4
MDguLmNmNDg1NGVhYmVmZmFjMzdkOTNkZmJiYmJlZDBhYzFjNDYxYjkzYWEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKQEAgLTEyOSw2ICsxMjks
NyBAQCAkKFBST0pFQ1RfRElSKS9TaGFyZWQvQXBwbGVQYXkvV2ViUGF5bWVudENvb3JkaW5hdG9y
UHJveHkubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1NoYXJlZC9BdXRoZW50aWNhdGlvbi9B
dXRoZW50aWNhdGlvbk1hbmFnZXIubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1NoYXJlZC9B
dXhpbGlhcnlQcm9jZXNzLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9TaGFyZWQvSFRUUFNV
cGdyYWRlL0hUVFBTVXBncmFkZUxpc3QudHh0CiskKFBST0pFQ1RfRElSKS9TaGFyZWQvSVBDQ29u
bmVjdGlvblRlc3Rlci5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvU2hhcmVkL0lQQ1N0cmVh
bVRlc3Rlci5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvU2hhcmVkL0lQQ1N0cmVhbVRlc3Rl
clByb3h5Lm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9TaGFyZWQvSVBDVGVzdGVyLm1lc3Nh
Z2VzLmluCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLW91dHB1dC54
Y2ZpbGVsaXN0IGIvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlz
dAppbmRleCAyODA0ODcwOTRmYzFkNjQ0ZWFiODI0NzZhYjM2NTNlZWY4NzJjZTY3Li4yNWUzNTIz
MzZlZDVlOWYyZTgwZmMzNjhiOGIzY2VkYzYyNDFhMGFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L0Rlcml2ZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0CisrKyBiL1NvdXJjZS9XZWJLaXQv
RGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QKQEAgLTQ2LDYgKzQ2LDkgQEAgJChCVUlM
VF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdC9HUFVQcm9jZXNzTWVzc2FnZXNS
ZXBsaWVzLmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQvR1BV
UHJvY2Vzc1Byb3h5TWVzc2FnZVJlY2VpdmVyLmNwcAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rl
cml2ZWRTb3VyY2VzL1dlYktpdC9HUFVQcm9jZXNzUHJveHlNZXNzYWdlcy5oCiAkKEJVSUxUX1BS
T0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0L0dQVVByb2Nlc3NQcm94eU1lc3NhZ2Vz
UmVwbGllcy5oCiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0L0lQ
Q0Nvbm5lY3Rpb25UZXN0ZXJNZXNzYWdlUmVjZWl2ZXIuY3BwCiskKEJVSUxUX1BST0RVQ1RTX0RJ
UikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0L0lQQ0Nvbm5lY3Rpb25UZXN0ZXJNZXNzYWdlcy5oCisk
KEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0L0lQQ0Nvbm5lY3Rpb25U
ZXN0ZXJNZXNzYWdlc1JlcGxpZXMuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3Vy
Y2VzL1dlYktpdC9JUENTdHJlYW1UZXN0ZXJNZXNzYWdlUmVjZWl2ZXIuY3BwCiAkKEJVSUxUX1BS
T0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0L0lQQ1N0cmVhbVRlc3Rlck1lc3NhZ2Vz
LmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQvSVBDU3RyZWFt
VGVzdGVyTWVzc2FnZXNSZXBsaWVzLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvRGVyaXZl
ZFNvdXJjZXMubWFrZSBiL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMubWFrZQppbmRleCA3
NmYwNzI2YjUzZjZkNjAyYTA1NDhmNTAyMmE0YTIwZDM5NThmNWUxLi40MzYyNGQwYzk3OTNiMjcx
MzA4MjM3MWI4ZDUzY2UzZDU0NGM4ZmM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0Rlcml2
ZWRTb3VyY2VzLm1ha2UKKysrIGIvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy5tYWtlCkBA
IC0xNDcsNiArMTQ3LDcgQEAgTUVTU0FHRV9SRUNFSVZFUlMgPSBcCiAJU2hhcmVkL0F1dGhlbnRp
Y2F0aW9uL0F1dGhlbnRpY2F0aW9uTWFuYWdlciBcCiAJU2hhcmVkL05vdGlmaWNhdGlvbnMvTm90
aWZpY2F0aW9uTWFuYWdlck1lc3NhZ2VIYW5kbGVyIFwKIAlTaGFyZWQvV2ViQ29ubmVjdGlvbiBc
CisJU2hhcmVkL0lQQ0Nvbm5lY3Rpb25UZXN0ZXIgXAogCVNoYXJlZC9JUENTdHJlYW1UZXN0ZXIg
XAogCVNoYXJlZC9JUENTdHJlYW1UZXN0ZXJQcm94eSBcCiAJU2hhcmVkL0lQQ1Rlc3RlciBcCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Db25uZWN0aW9uLmggYi9Tb3Vy
Y2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Db25uZWN0aW9uLmgKaW5kZXggMmEzYTMyMDQ4YjRjNjgx
YTc3N2RhMTAyYzMxODEzNTNmZDRiYjgzYi4uYWM5ODUzYjA0M2QzOGY0ZDRjYWNhOGQ4MDQ4OTky
MDdiOWMyNTA5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQ29ubmVj
dGlvbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0Nvbm5lY3Rpb24uaApAQCAt
NTcsMTEgKzU3LDYgQEAKICNpbmNsdWRlIDx3dGYvZ2xpYi9HU29ja2V0TW9uaXRvci5oPgogI2Vu
ZGlmCiAKLW5hbWVzcGFjZSBXZWJLaXQgewotbmFtZXNwYWNlIElQQ1Rlc3RpbmdBUEkgewotY2xh
c3MgSlNJUEM7Ci19Ci19CiAKIG5hbWVzcGFjZSBJUEMgewogCkBAIC0zMzMsNiArMzI4LDcgQEAg
cHVibGljOgogICAgIHZvaWQgc2V0SWdub3JlSW52YWxpZE1lc3NhZ2VGb3JUZXN0aW5nKCkgeyBt
X2lnbm9yZUludmFsaWRNZXNzYWdlRm9yVGVzdGluZyA9IHRydWU7IH0KICAgICBib29sIGlnbm9y
ZUludmFsaWRNZXNzYWdlRm9yVGVzdGluZygpIGNvbnN0IHsgcmV0dXJuIG1faWdub3JlSW52YWxp
ZE1lc3NhZ2VGb3JUZXN0aW5nOyB9CiAgICAgdm9pZCBkaXNwYXRjaEluY29taW5nTWVzc2FnZUZv
clRlc3Rpbmcoc3RkOjp1bmlxdWVfcHRyPERlY29kZXI+JiYpOworICAgIHN0ZDo6dW5pcXVlX3B0
cjxEZWNvZGVyPiB3YWl0Rm9yTWVzc2FnZUZvclRlc3RpbmcoTWVzc2FnZU5hbWUsIHVpbnQ2NF90
IGRlc3RpbmF0aW9uSUQsIFRpbWVvdXQsIE9wdGlvblNldDxXYWl0Rm9yT3B0aW9uPik7CiAjZW5k
aWYKIAogICAgIHZvaWQgZGlzcGF0Y2hNZXNzYWdlUmVjZWl2ZXJNZXNzYWdlKE1lc3NhZ2VSZWNl
aXZlciYsIHN0ZDo6dW5pcXVlX3B0cjxEZWNvZGVyPiYmKTsKQEAgLTUyNCw3ICs1MjAsNiBAQCBw
cml2YXRlOgogICAgIEhBTkRMRSBtX2Nvbm5lY3Rpb25QaXBlIHsgSU5WQUxJRF9IQU5ETEVfVkFM
VUUgfTsKICNlbmRpZgogICAgIGZyaWVuZCBjbGFzcyBTdHJlYW1DbGllbnRDb25uZWN0aW9uOwot
ICAgIGZyaWVuZCBjbGFzcyBXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBDOwogfTsKIAogdGVt
cGxhdGU8dHlwZW5hbWUgVD4KQEAgLTY1Nyw2ICs2NTIsMTQgQEAgdGVtcGxhdGU8dHlwZW5hbWUg
VD4gYm9vbCBDb25uZWN0aW9uOjp3YWl0Rm9yQXN5bmNDYWxsYmFja0FuZERpc3BhdGNoSW1tZWRp
YXRlbHkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorI2lmIEVOQUJMRShJUENfVEVTVElOR19BUEkp
CitpbmxpbmUgc3RkOjp1bmlxdWVfcHRyPERlY29kZXI+IENvbm5lY3Rpb246OndhaXRGb3JNZXNz
YWdlRm9yVGVzdGluZyhNZXNzYWdlTmFtZSBtZXNzYWdlTmFtZSwgdWludDY0X3QgZGVzdGluYXRp
b25JRCwgVGltZW91dCB0aW1lb3V0LCBPcHRpb25TZXQ8V2FpdEZvck9wdGlvbj4gb3B0aW9ucykK
K3sKKyAgICByZXR1cm4gd2FpdEZvck1lc3NhZ2UobWVzc2FnZU5hbWUsIGRlc3RpbmF0aW9uSUQs
IHRpbWVvdXQsIG9wdGlvbnMpOworfQorI2VuZGlmCisKKwogY2xhc3MgVW5ib3VuZGVkU3luY2hy
b25vdXNJUENTY29wZSB7CiBwdWJsaWM6CiAgICAgVW5ib3VuZGVkU3luY2hyb25vdXNJUENTY29w
ZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5
IGIvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weQppbmRleCBhMzE4YTUz
YjFlYzkyNTE3MTgwMDE5ZDVjYzRlYzk1MjAwMGYyNWE4Li5lNmE5OWY1MGMyOTMwYmJlNmY3YTUw
NDdmNWEzNGE1ZWQwZjllMjc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Vi
a2l0L21lc3NhZ2VzLnB5CisrKyBiL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2Fn
ZXMucHkKQEAgLTMyNCw2ICszMjQsNyBAQCBkZWYgdHlwZXNfdGhhdF9jYW5ub3RfYmVfZm9yd2Fy
ZF9kZWNsYXJlZCgpOgogICAgICAgICAnV2ViS2l0OjpHZW9sb2NhdGlvbklkZW50aWZpZXInLAog
ICAgICAgICAnV2ViS2l0OjpHcmFwaGljc0NvbnRleHRHTElkZW50aWZpZXInLAogICAgICAgICAn
V2ViS2l0OjpJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUnLAorICAgICAgICAnV2ViS2l0OjpJUEND
b25uZWN0aW9uVGVzdGVySWRlbnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6OklQQ1N0cmVhbVRl
c3RlcklkZW50aWZpZXInLAogICAgICAgICAnV2ViS2l0OjpMYXllckhvc3RpbmdDb250ZXh0SUQn
LAogICAgICAgICAnV2ViS2l0OjpMZWdhY3lDdXN0b21Qcm90b2NvbElEJywKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL0lQQ0Nvbm5lY3Rpb25UZXN0ZXIuY3BwIGIvU291cmNlL1dl
YktpdC9TaGFyZWQvSVBDQ29ubmVjdGlvblRlc3Rlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzA5ZWVkNGE1
YWRjZTQ3ZjBhOTA5MTYxN2VmZmMyZmNiNjBjZjM4MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvU2hhcmVkL0lQQ0Nvbm5lY3Rpb25UZXN0ZXIuY3BwCkBAIC0wLDAgKzEsMTA3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIklQQ0Nvbm5lY3Rp
b25UZXN0ZXIuaCIKKworI2lmIEVOQUJMRShJUENfVEVTVElOR19BUEkpCisjaW5jbHVkZSAiSVBD
Q29ubmVjdGlvblRlc3Rlck1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiSVBDVGVzdGVyLmgiCisKK25h
bWVzcGFjZSBXZWJLaXQgeworCisvLyBGSVhNRShodHRwczovL3dlYmtpdC5vcmcvYi8yMzk0ODcp
OiBUaGVzZSBpZmRlZnMgYXJlIGVycm9yIHByb25lLCBkdXBsaWNhdGVkIGFuZCB0aGUgbGFjayBv
ZiBtb3ZlIHNlbWFudGljcyBjYXVzZXMgbGVha3MuCitzdGF0aWMgSVBDOjpDb25uZWN0aW9uOjpJ
ZGVudGlmaWVyIGFzSWRlbnRpZmllcihJUEM6OkF0dGFjaG1lbnQmJiBjb25uZWN0aW9uSWRlbnRp
ZmllcikKK3sKKyNpZiBVU0UoVU5JWF9ET01BSU5fU09DS0VUUykKKyAgICByZXR1cm4geyBjb25u
ZWN0aW9uSWRlbnRpZmllci5yZWxlYXNlKCkucmVsZWFzZSgpIH07CisjZWxpZiBPUyhEQVJXSU4p
CisgICAgcmV0dXJuIHsgY29ubmVjdGlvbklkZW50aWZpZXIucG9ydCgpIH07CisjZWxpZiBPUyhX
SU5ET1dTKQorICAgIHJldHVybiB7IGNvbm5lY3Rpb25JZGVudGlmaWVyLmhhbmRsZSgpIH07Cisj
ZWxzZQorICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHsgfTsKKyNlbmRpZgorfQor
CitSZWY8SVBDQ29ubmVjdGlvblRlc3Rlcj4gSVBDQ29ubmVjdGlvblRlc3Rlcjo6Y3JlYXRlKElQ
Qzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDQ29ubmVjdGlvblRlc3RlcklkZW50aWZpZXIg
aWRlbnRpZmllciwgSVBDOjpBdHRhY2htZW50JiYgdGVzdGVkQ29ubmVjdGlvbklkZW50aWZpZXIp
Cit7CisgICAgYXV0byB0ZXN0ZXIgPSBhZG9wdFJlZigqbmV3IElQQ0Nvbm5lY3Rpb25UZXN0ZXIo
Y29ubmVjdGlvbiwgaWRlbnRpZmllciwgV1RGTW92ZSh0ZXN0ZWRDb25uZWN0aW9uSWRlbnRpZmll
cikpKTsKKyAgICB0ZXN0ZXItPmluaXRpYWxpemUoKTsKKyAgICByZXR1cm4gdGVzdGVyOworfQor
CitJUENDb25uZWN0aW9uVGVzdGVyOjpJUENDb25uZWN0aW9uVGVzdGVyKFJlZjxJUEM6OkNvbm5l
Y3Rpb24+JiYgY29ubmVjdGlvbiwgSVBDQ29ubmVjdGlvblRlc3RlcklkZW50aWZpZXIgaWRlbnRp
ZmllciwgSVBDOjpBdHRhY2htZW50JiYgdGVzdGVkQ29ubmVjdGlvbklkZW50aWZpZXIpCisgICAg
OiBtX2Nvbm5lY3Rpb24oV1RGTW92ZShjb25uZWN0aW9uKSkKKyAgICAsIG1fdGVzdGVkQ29ubmVj
dGlvbihJUEM6OkNvbm5lY3Rpb246OmNyZWF0ZUNsaWVudENvbm5lY3Rpb24oYXNJZGVudGlmaWVy
KFdURk1vdmUodGVzdGVkQ29ubmVjdGlvbklkZW50aWZpZXIpKSwgKnRoaXMpKQorICAgICwgbV9p
ZGVudGlmaWVyKGlkZW50aWZpZXIpCit7Cit9CisKK0lQQ0Nvbm5lY3Rpb25UZXN0ZXI6On5JUEND
b25uZWN0aW9uVGVzdGVyKCkgPSBkZWZhdWx0OworCit2b2lkIElQQ0Nvbm5lY3Rpb25UZXN0ZXI6
OmluaXRpYWxpemUoKQoreworICAgIG1fdGVzdGVkQ29ubmVjdGlvbi0+b3BlbigpOworfQorCit2
b2lkIElQQ0Nvbm5lY3Rpb25UZXN0ZXI6OnN0b3BMaXN0ZW5pbmdGb3JJUEMoUmVmPElQQ0Nvbm5l
Y3Rpb25UZXN0ZXI+JiYgcmVmRnJvbUNvbm5lY3Rpb24pCit7CisgICAgbV90ZXN0ZWRDb25uZWN0
aW9uLT5pbnZhbGlkYXRlKCk7Cit9CisKK3ZvaWQgSVBDQ29ubmVjdGlvblRlc3Rlcjo6c2VuZEFz
eW5jTWVzc2FnZXModWludDMyX3QgbWVzc2FnZUNvdW50KQoreworICAgIGZvciAodWludDMyX3Qg
aSA9IDA7IGkgPCBtZXNzYWdlQ291bnQ7ICsraSkKKyAgICAgICAgbV90ZXN0ZWRDb25uZWN0aW9u
LT5zZW5kKE1lc3NhZ2VzOjpJUENDb25uZWN0aW9uVGVzdGVyOjpBc3luY01lc3NhZ2UoaSksIDAp
OworfQorCit2b2lkIElQQ0Nvbm5lY3Rpb25UZXN0ZXI6OmRpZENsb3NlKElQQzo6Q29ubmVjdGlv
biYpCit7Cit9CisKK3ZvaWQgSVBDQ29ubmVjdGlvblRlc3Rlcjo6ZGlkUmVjZWl2ZUludmFsaWRN
ZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6TWVzc2FnZU5hbWUpCit7CisgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgSVBDQ29ubmVjdGlvblRlc3Rlcjo6YXN5bmNNZXNz
YWdlKHVpbnQzMl90IHZhbHVlKQoreworICAgIGlmIChtX3ByZXZpb3VzQXN5bmNNZXNzYWdlVmFs
dWUgIT0gdmFsdWUgLSAxKSB7CisgICAgICAgIEFTU0VSVF9JU19URVNUSU5HX0lQQygpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIG1fcHJldmlvdXNBc3luY01lc3NhZ2VWYWx1ZSA9IHZh
bHVlOworfQorCit2b2lkIElQQ0Nvbm5lY3Rpb25UZXN0ZXI6OnN5bmNNZXNzYWdlKHVpbnQzMl90
IHZhbHVlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHVpbnQzMl90KT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKK3sKKyAgICBjb21wbGV0aW9uSGFuZGxlcih2YWx1ZSArIG1fcHJldmlvdXNBc3luY01l
c3NhZ2VWYWx1ZSk7Cit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1NoYXJlZC9JUENDb25uZWN0aW9uVGVzdGVyLmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9JUEND
b25uZWN0aW9uVGVzdGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjBkOTM4YmU0MzlkYWExMDk2MGViNDAxMTRj
YzBiMTk5ZTY4Y2I3NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0lQ
Q0Nvbm5lY3Rpb25UZXN0ZXIuaApAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpZiBFTkFCTEUoSVBDX1RFU1RJTkdfQVBJKQorCisjaW5jbHVkZSAiQ29ubmVj
dGlvbi5oIgorI2luY2x1ZGUgIklQQ0Nvbm5lY3Rpb25UZXN0ZXJJZGVudGlmaWVyLmgiCisjaW5j
bHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCisjaW5jbHVkZSA8b3B0aW9uYWw+CisjaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIElQQyB7CitjbGFzcyBDb25uZWN0aW9uOworfQor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworLy8gSW50ZXJmYWNlIHRvIHRlc3QgdmFyaW91cyBJUEM6
OkNvbm5lY3Rpb24gcmVsYXRlZCBhY3Rpdml0aWVzLgorY2xhc3MgSVBDQ29ubmVjdGlvblRlc3Rl
ciBmaW5hbCA6IHB1YmxpYyBSZWZDb3VudGVkPElQQ0Nvbm5lY3Rpb25UZXN0ZXI+LCBwcml2YXRl
IElQQzo6Q29ubmVjdGlvbjo6Q2xpZW50IHsKK3B1YmxpYzoKKyAgICB+SVBDQ29ubmVjdGlvblRl
c3RlcigpOworICAgIHN0YXRpYyBSZWY8SVBDQ29ubmVjdGlvblRlc3Rlcj4gY3JlYXRlKElQQzo6
Q29ubmVjdGlvbiYsIElQQ0Nvbm5lY3Rpb25UZXN0ZXJJZGVudGlmaWVyLCBJUEM6OkF0dGFjaG1l
bnQmJiB0ZXN0ZWRDb25uZWN0aW9uSWRlbnRpZmllcik7CisgICAgdm9pZCBzdG9wTGlzdGVuaW5n
Rm9ySVBDKFJlZjxJUENDb25uZWN0aW9uVGVzdGVyPiYmIHJlZkZyb21Db25uZWN0aW9uKTsKKwor
ICAgIHZvaWQgc2VuZEFzeW5jTWVzc2FnZXModWludDMyX3QgbWVzc2FnZUNvdW50KTsKK3ByaXZh
dGU6CisgICAgSVBDQ29ubmVjdGlvblRlc3RlcihSZWY8SVBDOjpDb25uZWN0aW9uPiYmLCBJUEND
b25uZWN0aW9uVGVzdGVySWRlbnRpZmllciwgSVBDOjpBdHRhY2htZW50JiYgdGVzdGVkQ29ubmVj
dGlvbklkZW50aWZpZXIpOworICAgIHZvaWQgaW5pdGlhbGl6ZSgpOworCisgICAgLy8gSVBDOjpD
b25uZWN0aW9uOjpDbGllbnQgb3ZlcnJpZGVzLgorICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2Uo
SVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgZmluYWw7CisgICAgYm9vbCBkaWRSZWNl
aXZlU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJiwgVW5pcXVlUmVm
PElQQzo6RW5jb2Rlcj4mKSBmaW5hbDsKKyAgICB2b2lkIGRpZENsb3NlKElQQzo6Q29ubmVjdGlv
biYpIGZpbmFsOworICAgIHZvaWQgZGlkUmVjZWl2ZUludmFsaWRNZXNzYWdlKElQQzo6Q29ubmVj
dGlvbiYsIElQQzo6TWVzc2FnZU5hbWUpIGZpbmFsOworCisgICAgLy8gTWVzc2FnZXMuCisgICAg
dm9pZCBhc3luY01lc3NhZ2UodWludDMyX3QgdmFsdWUpOworICAgIHZvaWQgc3luY01lc3NhZ2Uo
dWludDMyX3QgdmFsdWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQodWludDMyX3Qgc2FtZVZhbHVl
KT4mJik7CisKKyAgICBjb25zdCBSZWY8SVBDOjpDb25uZWN0aW9uPiBtX2Nvbm5lY3Rpb247Cisg
ICAgY29uc3QgUmVmPElQQzo6Q29ubmVjdGlvbj4gbV90ZXN0ZWRDb25uZWN0aW9uOworICAgIGNv
bnN0IElQQ0Nvbm5lY3Rpb25UZXN0ZXJJZGVudGlmaWVyIG1faWRlbnRpZmllcjsKKyAgICB1aW50
MzJfdCBtX3ByZXZpb3VzQXN5bmNNZXNzYWdlVmFsdWUgeyAwIH07Cit9OworCit9CisKKyNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvSVBDQ29ubmVjdGlvblRlc3Rlci5t
ZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0lQQ0Nvbm5lY3Rpb25UZXN0ZXIubWVz
c2FnZXMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNGJhNTU2Zjc1MDM1MWNlMTczNWY3NTI2MzQzMGI4MjVjZTA0
NjgzMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0lQQ0Nvbm5lY3Rp
b25UZXN0ZXIubWVzc2FnZXMuaW4KQEAgLTAsMCArMSwzMCBAQAorIyBDb3B5cmlnaHQgKEMpIDIw
MjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorCisjaWYgRU5BQkxFKElQQ19URVNUSU5HX0FQSSkKKworbWVz
c2FnZXMgLT4gSVBDQ29ubmVjdGlvblRlc3RlciBOb3RSZWZDb3VudGVkIHsKKyAgICBBc3luY01l
c3NhZ2UodWludDMyX3QgdmFsdWUpCisgICAgU3luY01lc3NhZ2UodWludDMyX3QgdmFsdWUpIC0+
ICh1aW50MzJfdCBzYW1lVmFsdWUpIFN5bmNocm9ub3VzCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9TaGFyZWQvSVBDQ29ubmVjdGlvblRlc3RlcklkZW50aWZpZXIuaCBi
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL0lQQ0Nvbm5lY3Rpb25UZXN0ZXJJZGVudGlmaWVyLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMzk0YWNkODlmMjFiMjE5OTA2ZTI1OTNjM2E5MzljYTdlYTNkODNjMgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0lQQ0Nvbm5lY3Rpb25UZXN0ZXJJZGVu
dGlmaWVyLmgKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aWYgRU5BQkxFKElQQ19URVNUSU5HX0FQSSkKKworI2luY2x1ZGUgPHd0Zi9PYmplY3RJZGVudGlm
aWVyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitlbnVtIElQQ0Nvbm5lY3Rpb25UZXN0ZXJJ
ZGVudGlmaWVyVHlwZSB7IH07Cit1c2luZyBJUENDb25uZWN0aW9uVGVzdGVySWRlbnRpZmllciA9
IE9iamVjdElkZW50aWZpZXI8SVBDQ29ubmVjdGlvblRlc3RlcklkZW50aWZpZXJUeXBlPjsKKwor
fQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0lQQ1Rlc3Rlci5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9JUENUZXN0ZXIuY3BwCmluZGV4IDFiOGM0NzM5YjYw
NjYwYWRjN2FhNzc3ODAyYjJlMzQ2YTMxZWM3ZTUuLjBiNDUwMTY1ZTE2OTU2MTNlYWQ5MjNiMzA2
ZDhiZDY3ZTA1ZWQ2Y2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0lQQ1Rlc3Rl
ci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvSVBDVGVzdGVyLmNwcApAQCAtMjksNiAr
MjksNyBAQAogI2lmIEVOQUJMRShJUENfVEVTVElOR19BUEkpCiAjaW5jbHVkZSAiQ29ubmVjdGlv
bi5oIgogI2luY2x1ZGUgIkRlY29kZXIuaCIKKyNpbmNsdWRlICJJUENDb25uZWN0aW9uVGVzdGVy
LmgiCiAjaW5jbHVkZSAiSVBDU3RyZWFtVGVzdGVyLmgiCiAKICNpbmNsdWRlIDxhdG9taWM+CkBA
IC0xNDUsNiArMTQ2LDMyIEBAIHZvaWQgSVBDVGVzdGVyOjpyZWxlYXNlU3RyZWFtVGVzdGVyKElQ
Q1N0cmVhbVRlc3RlcklkZW50aWZpZXIgaWRlbnRpZmllciwgQ29tcGxlCiAgICAgY29tcGxldGlv
bkhhbmRsZXIoKTsKIH0KIAordm9pZCBJUENUZXN0ZXI6OmNyZWF0ZUNvbm5lY3Rpb25UZXN0ZXIo
SVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUENDb25uZWN0aW9uVGVzdGVySWRlbnRpZmll
ciBpZGVudGlmaWVyLCBJUEM6OkF0dGFjaG1lbnQmJiB0ZXN0ZWRDb25uZWN0aW9uSWRlbnRpZmll
cikKK3sKKyAgICBhdXRvIGFkZFJlc3VsdCA9IG1fY29ubmVjdGlvblRlc3RlcnMuZW5zdXJlKGlk
ZW50aWZpZXIsIFsmXSB7CisgICAgICAgIHJldHVybiBJUEM6OlNjb3BlZEFjdGl2ZU1lc3NhZ2VS
ZWNlaXZlUXVldWU8SVBDQ29ubmVjdGlvblRlc3Rlcj4geyBJUENDb25uZWN0aW9uVGVzdGVyOjpj
cmVhdGUoY29ubmVjdGlvbiwgaWRlbnRpZmllciwgV1RGTW92ZSh0ZXN0ZWRDb25uZWN0aW9uSWRl
bnRpZmllcikpIH07CisgICAgfSk7CisgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJl
c3VsdC5pc05ld0VudHJ5IHx8IGlzVGVzdGluZ0lQQygpKTsKK30KKwordm9pZCBJUENUZXN0ZXI6
OmNyZWF0ZUNvbm5lY3Rpb25UZXN0ZXJBbmRTZW5kQXN5bmNNZXNzYWdlcyhJUEM6OkNvbm5lY3Rp
b24mIGNvbm5lY3Rpb24sIElQQ0Nvbm5lY3Rpb25UZXN0ZXJJZGVudGlmaWVyIGlkZW50aWZpZXIs
IElQQzo6QXR0YWNobWVudCYmIHRlc3RlZENvbm5lY3Rpb25JZGVudGlmaWVyLCB1aW50MzJfdCBt
ZXNzYWdlQ291bnQpCit7CisgICAgYXV0byBhZGRSZXN1bHQgPSBtX2Nvbm5lY3Rpb25UZXN0ZXJz
LmVuc3VyZShpZGVudGlmaWVyLCBbJl0geworICAgICAgICByZXR1cm4gSVBDOjpTY29wZWRBY3Rp
dmVNZXNzYWdlUmVjZWl2ZVF1ZXVlPElQQ0Nvbm5lY3Rpb25UZXN0ZXI+IHsgSVBDQ29ubmVjdGlv
blRlc3Rlcjo6Y3JlYXRlKGNvbm5lY3Rpb24sIGlkZW50aWZpZXIsIFdURk1vdmUodGVzdGVkQ29u
bmVjdGlvbklkZW50aWZpZXIpKSB9OworICAgIH0pOworICAgIGlmICghYWRkUmVzdWx0LmlzTmV3
RW50cnkpIHsKKyAgICAgICAgQVNTRVJUX0lTX1RFU1RJTkdfSVBDKCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+c2VuZEFzeW5jTWVzc2Fn
ZXMobWVzc2FnZUNvdW50KTsKK30KKwordm9pZCBJUENUZXN0ZXI6OnJlbGVhc2VDb25uZWN0aW9u
VGVzdGVyKElQQ0Nvbm5lY3Rpb25UZXN0ZXJJZGVudGlmaWVyIGlkZW50aWZpZXIsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBtX2Nvbm5lY3Rp
b25UZXN0ZXJzLnJlbW92ZShpZGVudGlmaWVyKTsKKyAgICBjb21wbGV0aW9uSGFuZGxlcigpOwor
fQorCiB2b2lkIElQQ1Rlc3Rlcjo6c3RvcElmTmVlZGVkKCkKIHsKICAgICBpZiAobV90ZXN0UXVl
dWUpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0lQQ1Rlc3Rlci5oIGIvU291
cmNlL1dlYktpdC9TaGFyZWQvSVBDVGVzdGVyLmgKaW5kZXggNzAwOTdiODA2YmUzM2ZkZDI1MTBj
NDliNWVlMzM4M2NkN2IxZWFlNS4uNmRiYjQ1NzI0YjRmNjVkNjcxN2VmODJjZTQ0NWU1NDY4NjJj
ZTgzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvSVBDVGVzdGVyLmgKKysrIGIv
U291cmNlL1dlYktpdC9TaGFyZWQvSVBDVGVzdGVyLmgKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lm
IEVOQUJMRShJUENfVEVTVElOR19BUEkpCiAKKyNpbmNsdWRlICJJUENDb25uZWN0aW9uVGVzdGVy
SWRlbnRpZmllci5oIgogI2luY2x1ZGUgIklQQ1N0cmVhbVRlc3RlcklkZW50aWZpZXIuaCIKICNp
bmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIKICNpbmNsdWRlICJTY29wZWRBY3RpdmVNZXNzYWdl
UmVjZWl2ZVF1ZXVlLmgiCkBAIC01Miw2ICs1Myw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogLy8g
YW5kIGV4cG9zZXMgYnVncyB1bmRlcm5lYXRoLgogYm9vbCBpc1Rlc3RpbmdJUEMoKTsKIAorY2xh
c3MgSVBDQ29ubmVjdGlvblRlc3RlcjsKIGNsYXNzIElQQ1N0cmVhbVRlc3RlcjsKIAogLy8gTWFp
biB0ZXN0IGludGVyZmFjZSBmb3IgaW5pdGlhdGluZyB2YXJpb3VzIElQQyB0ZXN0IGFjdGl2aXRp
ZXMuCkBAIC02OSw3ICs3MSw5IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzdG9wTWVzc2FnZVRlc3Rp
bmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPik7CiAgICAgdm9pZCBjcmVhdGVTdHJlYW1UZXN0
ZXIoSVBDOjpDb25uZWN0aW9uJiwgSVBDU3RyZWFtVGVzdGVySWRlbnRpZmllciwgSVBDOjpTdHJl
YW1Db25uZWN0aW9uQnVmZmVyJiYpOwogICAgIHZvaWQgcmVsZWFzZVN0cmVhbVRlc3RlcihJUENT
dHJlYW1UZXN0ZXJJZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwotCisg
ICAgdm9pZCBjcmVhdGVDb25uZWN0aW9uVGVzdGVyKElQQzo6Q29ubmVjdGlvbiYsIElQQ0Nvbm5l
Y3Rpb25UZXN0ZXJJZGVudGlmaWVyLCBJUEM6OkF0dGFjaG1lbnQmJik7CisgICAgdm9pZCBjcmVh
dGVDb25uZWN0aW9uVGVzdGVyQW5kU2VuZEFzeW5jTWVzc2FnZXMoSVBDOjpDb25uZWN0aW9uJiwg
SVBDQ29ubmVjdGlvblRlc3RlcklkZW50aWZpZXIsIElQQzo6QXR0YWNobWVudCYmLCB1aW50MzJf
dCBtZXNzYWdlQ291bnQpOworICAgIHZvaWQgcmVsZWFzZUNvbm5lY3Rpb25UZXN0ZXIoSVBDQ29u
bmVjdGlvblRlc3RlcklkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAg
ICAgdm9pZCBzdG9wSWZOZWVkZWQoKTsKIAogICAgIFJlZlB0cjxXb3JrUXVldWU+IG1fdGVzdFF1
ZXVlOwpAQCAtNzcsNiArODEsOSBAQCBwcml2YXRlOgogCiAgICAgdXNpbmcgU3RyZWFtVGVzdGVy
TWFwID0gSGFzaE1hcDxJUENTdHJlYW1UZXN0ZXJJZGVudGlmaWVyLCBJUEM6OlNjb3BlZEFjdGl2
ZU1lc3NhZ2VSZWNlaXZlUXVldWU8SVBDU3RyZWFtVGVzdGVyPj47CiAgICAgU3RyZWFtVGVzdGVy
TWFwIG1fc3RyZWFtVGVzdGVyczsKKworICAgIHVzaW5nIENvbm5lY3Rpb25UZXN0ZXJNYXAgPSBI
YXNoTWFwPElQQ0Nvbm5lY3Rpb25UZXN0ZXJJZGVudGlmaWVyLCBJUEM6OlNjb3BlZEFjdGl2ZU1l
c3NhZ2VSZWNlaXZlUXVldWU8SVBDQ29ubmVjdGlvblRlc3Rlcj4+OworICAgIENvbm5lY3Rpb25U
ZXN0ZXJNYXAgbV9jb25uZWN0aW9uVGVzdGVyczsKIH07CiAKICNlbHNlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1NoYXJlZC9JUENUZXN0ZXIubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0
L1NoYXJlZC9JUENUZXN0ZXIubWVzc2FnZXMuaW4KaW5kZXggY2QyNDRmYjBlMTY5MTQ0ODZmN2Iw
MDZiODY3OGNmNzBkZTUyMzhiMC4uYTdlMTU4YTIxZjYyNzNhYmRhZTkwODI4NmM1MmVhM2MzMDNj
YjMwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvSVBDVGVzdGVyLm1lc3NhZ2Vz
LmluCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0lQQ1Rlc3Rlci5tZXNzYWdlcy5pbgpAQCAt
MjcsNiArMjcsOSBAQCBtZXNzYWdlcyAtPiBJUENUZXN0ZXIgTm90UmVmQ291bnRlZCB7CiAgICAg
U3RvcE1lc3NhZ2VUZXN0aW5nKCkgLT4gKCkgU3luY2hyb25vdXMKICAgICBDcmVhdGVTdHJlYW1U
ZXN0ZXIoV2ViS2l0OjpJUENTdHJlYW1UZXN0ZXJJZGVudGlmaWVyIGlkZW50aWZpZXIsIElQQzo6
U3RyZWFtQ29ubmVjdGlvbkJ1ZmZlciBzdHJlYW0pIFdhbnRzQ29ubmVjdGlvbgogICAgIFJlbGVh
c2VTdHJlYW1UZXN0ZXIoV2ViS2l0OjpJUENTdHJlYW1UZXN0ZXJJZGVudGlmaWVyIGlkZW50aWZp
ZXIpIC0+ICgpIFN5bmNocm9ub3VzCisgICAgQ3JlYXRlQ29ubmVjdGlvblRlc3RlcihXZWJLaXQ6
OklQQ0Nvbm5lY3Rpb25UZXN0ZXJJZGVudGlmaWVyIGlkZcWTbnRpZmllciwgSVBDOjpBdHRhY2ht
ZW50IGNvbm5lY3Rpb24pIFdhbnRzQ29ubmVjdGlvbgorICAgIENyZWF0ZUNvbm5lY3Rpb25UZXN0
ZXJBbmRTZW5kQXN5bmNNZXNzYWdlcyhXZWJLaXQ6OklQQ0Nvbm5lY3Rpb25UZXN0ZXJJZGVudGlm
aWVyIGlkZW50aWZpZXIsIElQQzo6QXR0YWNobWVudCBjb25uZWN0aW9uLCB1aW50MzJfdCBtZXNz
YWdlQ291bnQpIFdhbnRzQ29ubmVjdGlvbgorICAgIFJlbGVhc2VDb25uZWN0aW9uVGVzdGVyKFdl
YktpdDo6SVBDQ29ubmVjdGlvblRlc3RlcklkZW50aWZpZXIgaWRlbnRpZmllcikgLT4gKCkgU3lu
Y2hyb25vdXMKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMu
dHh0IGIvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dAppbmRleCA2NzU3ZGI3Yjc5NGVjYmMwY2Iy
NDY5NTY5NDRkMTExOGJhODFlZjUxLi4yMDg1ZTA4MDlhODNiYTk4YWQ0OGZiY2ZlNTQxMzQ2ZTM5
ZWJjOTRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0CisrKyBiL1NvdXJj
ZS9XZWJLaXQvU291cmNlcy50eHQKQEAgLTIyNyw2ICsyMjcsNyBAQCBTaGFyZWQvRWRpdG9yU3Rh
dGUuY3BwCiBTaGFyZWQvRm9udEluZm8uY3BwCiBTaGFyZWQvRnJhbWVJbmZvRGF0YS5jcHAKIFNo
YXJlZC9JbnNwZWN0b3JFeHRlbnNpb25UeXBlcy5jcHAKK1NoYXJlZC9JUENDb25uZWN0aW9uVGVz
dGVyLmNwcAogU2hhcmVkL0lQQ1N0cmVhbVRlc3Rlci5jcHAKIFNoYXJlZC9JUENUZXN0ZXIuY3Bw
CiBTaGFyZWQvTGF5ZXJUcmVlQ29udGV4dC5jcHAKQEAgLTg2Miw2ICs4NjMsNyBAQCBXZWJQcm9j
ZXNzL1dlYlN0b3JhZ2UvV2ViU3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyLmNwcAogCiBXZWJQcm9j
ZXNzL1hSL1BsYXRmb3JtWFJTeXN0ZW1Qcm94eS5jcHAKIAorSVBDQ29ubmVjdGlvblRlc3Rlck1l
c3NhZ2VSZWNlaXZlci5jcHAKIElQQ1N0cmVhbVRlc3Rlck1lc3NhZ2VSZWNlaXZlci5jcHAKIElQ
Q1N0cmVhbVRlc3RlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcAogSVBDVGVzdGVyTWVzc2FnZVJl
Y2VpdmVyLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKaW5kZXggNjg3MzI0ZjJhNGMyYjAwMDkyNjljMGExMGVlNDYzMTFmY2ZlMDEyNC4uOTkx
MmJmYjg4Y2YwNjhlYmY4ZDA1NDNmN2U5NmY5ZDBiZWIyYTRkYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2Vi
S2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMzM0LDYgKzEzMzQsOCBA
QAogCQk3QjczMTI0MTI1Q0M4NTI1MDAzQjI3OTYgLyogU3RyZWFtU2VydmVyQ29ubmVjdGlvbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0I3MzEyMzgy
NUNDODUyNDAwM0IyNzk2IC8qIFN0cmVhbVNlcnZlckNvbm5lY3Rpb24uaCAqLzsgfTsKIAkJN0I3
MzEyNDIyNUNDODUyNTAwM0IyNzk2IC8qIFN0cmVhbUNvbm5lY3Rpb25FbmNvZGVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QjczMTIzOTI1Q0M4NTI1
MDAzQjI3OTYgLyogU3RyZWFtQ29ubmVjdGlvbkVuY29kZXIuaCAqLzsgfTsKIAkJN0JBQjExMTAy
NUREMDJCMzAwOEZDNDc5IC8qIFNjb3BlZEFjdGl2ZU1lc3NhZ2VSZWNlaXZlUXVldWUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCQUIxMTBGMjVERDAy
QjIwMDhGQzQ3OSAvKiBTY29wZWRBY3RpdmVNZXNzYWdlUmVjZWl2ZVF1ZXVlLmggKi87IH07CisJ
CTdCQkE2M0RGMjgwRTkzRDIwMEIwNDgyMyAvKiBJUENDb25uZWN0aW9uVGVzdGVySWRlbnRpZmll
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0JCQTYz
REMyODBFOTNCNTAwQjA0ODIzIC8qIElQQ0Nvbm5lY3Rpb25UZXN0ZXJJZGVudGlmaWVyLmggKi87
IH07CisJCTdCQkE2M0UwMjgwRTkzRDYwMEIwNDgyMyAvKiBJUENDb25uZWN0aW9uVGVzdGVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QkJBNjNERTI4
MEU5M0I2MDBCMDQ4MjMgLyogSVBDQ29ubmVjdGlvblRlc3Rlci5oICovOyB9OwogCQk3QkNGNzBE
RTI2MTVEMDZFMDBFNEZCNzAgLyogU2NvcGVkUmVuZGVyaW5nUmVzb3VyY2VzUmVxdWVzdENvY29h
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0JDRjcw
Q0IyNjE0OTM1RTAwRTRGQjcwIC8qIFNjb3BlZFJlbmRlcmluZ1Jlc291cmNlc1JlcXVlc3RDb2Nv
YS5tbSAqLzsgfTsKIAkJN0JEREEzMTkyNzQ3QzA0MDAwMzg2NTlFIC8qIChudWxsKSBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgfTsKIAkJN0JFMzdGOTMyN0M3Q0E1MTAwN0E2
Q0QzIC8qIElQQ1N0cmVhbVRlc3RlcklkZW50aWZpZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCRTM3RjkyMjdDN0M1MTgwMDdBNkNEMyAvKiBJUENT
dHJlYW1UZXN0ZXJJZGVudGlmaWVyLmggKi87IH07CkBAIC01NDcxLDYgKzU0NzMsOSBAQAogCQk3
QjkwNDE2QTI1NEFGRUE3MDA2RUVCOEMgLyogUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJN0I5MDQxNkQyNTUwMTA4QzAwNkVFQjhDIC8qIFJlbW90ZUdyYXBoaWNzQ29u
dGV4dEdMRnVuY3Rpb25zR2VuZXJhdGVkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZUdyYXBoaWNz
Q29udGV4dEdMRnVuY3Rpb25zR2VuZXJhdGVkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTdCQUIxMTBGMjVERDAyQjIwMDhGQzQ3OSAvKiBTY29wZWRBY3RpdmVNZXNzYWdlUmVjZWl2
ZVF1ZXVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjb3BlZEFjdGl2ZU1l
c3NhZ2VSZWNlaXZlUXVldWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0JCQTYz
REMyODBFOTNCNTAwQjA0ODIzIC8qIElQQ0Nvbm5lY3Rpb25UZXN0ZXJJZGVudGlmaWVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IElQQ0Nvbm5lY3Rpb25UZXN0ZXJJZGVudGlmaWVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTdCQkE2M0REMjgwRTkzQjYwMEIwNDgyMyAvKiBJUENDb25uZWN0
aW9uVGVzdGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElQQ0Nvbm5lY3Rpb25UZXN0ZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QkJBNjNERTI4MEU5M0I2MDBCMDQ4MjMg
LyogSVBDQ29ubmVjdGlvblRlc3Rlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJUENDb25uZWN0aW9uVGVz
dGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdCQ0Y3MENBMjYxNDkzNUUwMEU0
RkI3MCAvKiBTY29wZWRSZW5kZXJpbmdSZXNvdXJjZXNSZXF1ZXN0LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFNjb3BlZFJlbmRlcmluZ1Jlc291cmNlc1JlcXVlc3QuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3QkNGNzBDQjI2MTQ5MzVFMDBFNEZCNzAgLyogU2NvcGVkUmVuZGVy
aW5nUmVzb3VyY2VzUmVxdWVzdENvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gU2NvcGVk
UmVuZGVyaW5nUmVzb3VyY2VzUmVxdWVzdENvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3QkNGNzBDQzI2MTQ5MzVGMDBFNEZCNzAgLyogU2NvcGVkV2ViR0xSZW5kZXJpbmdS
ZXNvdXJjZXNSZXF1ZXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjb3BlZFdlYkdMUmVuZGVy
aW5nUmVzb3VyY2VzUmVxdWVzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03
ODY1LDYgKzc4NzAsOSBAQAogCQkJCUJDQ0Y2QjIzMTJDOTNFN0EwMDhGOUMzNSAvKiBJbWFnZU9w
dGlvbnMuaCAqLywKIAkJCQk5OTlCN0VEODI1NTBFNEE4MDBGNDUwQTQgLyogSW5zcGVjdG9yRXh0
ZW5zaW9uVHlwZXMuY3BwICovLAogCQkJCTk5QkUzQjE2MjU0MzNCOTQwMEM2NTUxQyAvKiBJbnNw
ZWN0b3JFeHRlbnNpb25UeXBlcy5oICovLAorCQkJCTdCQkE2M0REMjgwRTkzQjYwMEIwNDgyMyAv
KiBJUENDb25uZWN0aW9uVGVzdGVyLmNwcCAqLywKKwkJCQk3QkJBNjNERTI4MEU5M0I2MDBCMDQ4
MjMgLyogSVBDQ29ubmVjdGlvblRlc3Rlci5oICovLAorCQkJCTdCQkE2M0RDMjgwRTkzQjUwMEIw
NDgyMyAvKiBJUENDb25uZWN0aW9uVGVzdGVySWRlbnRpZmllci5oICovLAogCQkJCTdCRTM3Rjk1
MjdDN0NEOTAwMDdBNkNEMyAvKiBJUENTdHJlYW1UZXN0ZXIuY3BwICovLAogCQkJCTdCRTM3Rjk0
MjdDN0NENTEwMDdBNkNEMyAvKiBJUENTdHJlYW1UZXN0ZXIuaCAqLywKIAkJCQk3QkUzN0Y5MjI3
QzdDNTE4MDA3QTZDRDMgLyogSVBDU3RyZWFtVGVzdGVySWRlbnRpZmllci5oICovLApAQCAtMTQx
ODEsNiArMTQxODksOCBAQAogCQkJCTUxRTkwNDlDMjdCQ0I5RDQwMDkyOUU3RSAvKiBJbnN0YWxs
Q29vcmRpbmF0aW9uU1BJLmggaW4gSGVhZGVycyAqLywKIAkJCQlDNUJDRTVERjFDNTA3NjZBMDBD
REUzRkEgLyogSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24uaCBpbiBIZWFkZXJzICov
LAogCQkJCTJENEQyQzgxMURGNjBCRjMwMDJFQjEwQyAvKiBJbnRlcmFjdGlvbkluZm9ybWF0aW9u
UmVxdWVzdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJN0JCQTYzRTAyODBFOTNENjAwQjA0ODIzIC8q
IElQQ0Nvbm5lY3Rpb25UZXN0ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTdCQkE2M0RGMjgwRTkz
RDIwMEIwNDgyMyAvKiBJUENDb25uZWN0aW9uVGVzdGVySWRlbnRpZmllci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTMxRjYwQTQyNUNDN0RCOTAwQUYxNEY0IC8qIElQQ1NlbWFwaG9yZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJN0JFMzdGOTMyN0M3Q0E1MTAwN0E2Q0QzIC8qIElQQ1N0cmVhbVRlc3Rl
cklkZW50aWZpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTlCNDc5MDhGMjUzMTUxQ0MwMEVDMTFB
QiAvKiBKU0lQQ0JpbmRpbmcuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvSVBDVGVzdGluZ0FQSS5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9JUENUZXN0aW5nQVBJLmNwcAppbmRleCA3NWU1MzA0ZWMxNTQ5
ZTY5YWQ1ZmYzN2ExZGRmNTljMTFhNzYxZmVkLi45N2QxMDcyMWIyOTBkYjdiNmE0M2M0ZTdlMjdm
MmExZDVhYWUzZTZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9JUENUZXN0aW5nQVBJLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9JUENUZXN0aW5nQVBJLmNwcApAQCAtNjEsNiArNjEsOCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsK
IAogbmFtZXNwYWNlIElQQ1Rlc3RpbmdBUEkgewogCitjbGFzcyBKU0lQQzsKKwogc3RhdGljIGNv
bnN0ZXhwciBhdXRvIHByb2Nlc3NUYXJnZXROYW1lVUkgPSAiVUkiX3M7CiAjaWYgRU5BQkxFKEdQ
VV9QUk9DRVNTKQogc3RhdGljIGNvbnN0ZXhwciBhdXRvIHByb2Nlc3NUYXJnZXROYW1lR1BVID0g
IkdQVSJfczsKQEAgLTcwLDcgKzcyLDcgQEAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIHByb2Nlc3NU
YXJnZXROYW1lTmV0d29ya2luZyA9ICJOZXR3b3JraW5nIl9zOwogc3RhdGljIHN0ZDo6b3B0aW9u
YWw8dWludDY0X3Q+IGRlc3RpbmF0aW9uSURGcm9tQXJndW1lbnQoSlNDOjpKU0dsb2JhbE9iamVj
dCosIEpTVmFsdWVSZWYsIEpTVmFsdWVSZWYqKTsKIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPHVpbnQ2
NF90PiBtZXNzYWdlSURGcm9tQXJndW1lbnQoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTVmFsdWVS
ZWYsIEpTVmFsdWVSZWYqKTsKIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBqc1Jlc3VsdEZyb21SZXBs
eURlY29kZXIoSlNDOjpKU0dsb2JhbE9iamVjdCosIElQQzo6TWVzc2FnZU5hbWUsIElQQzo6RGVj
b2RlciYpOwotc3RhdGljIGJvb2wgZW5jb2RlQXJndW1lbnQoSVBDOjpFbmNvZGVyJiwgSlNJUEMm
LCBKU0NvbnRleHRSZWYsIEpTVmFsdWVSZWYsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CitzdGF0
aWMgYm9vbCBlbmNvZGVBcmd1bWVudChJUEM6OkVuY29kZXImLCBKU0NvbnRleHRSZWYsIEpTVmFs
dWVSZWYsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CiAKIGNsYXNzIEpTSVBDU2VtYXBob3JlIDog
cHVibGljIFJlZkNvdW50ZWQ8SlNJUENTZW1hcGhvcmU+IHsKIHB1YmxpYzoKQEAgLTEwNiw2ICsx
MDgsNzEgQEAgcHJpdmF0ZToKICAgICBJUEM6OlNlbWFwaG9yZSBtX3NlbWFwaG9yZTsKIH07CiAK
K2NsYXNzIEpTSVBDQXR0YWNobWVudCA6IHB1YmxpYyBSZWZDb3VudGVkPEpTSVBDQXR0YWNobWVu
dD4geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8SlNJUENBdHRhY2htZW50PiBjcmVhdGUoSVBD
OjpBdHRhY2htZW50JiYgYXR0YWNobWVudCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IEpTSVBDQXR0YWNobWVudChXVEZNb3ZlKGF0dGFjaG1lbnQpKSk7CisgICAgfQorCisg
ICAgSlNPYmplY3RSZWYgY3JlYXRlSlNXcmFwcGVyKEpTQ29udGV4dFJlZik7CisgICAgc3RhdGlj
IEpTSVBDQXR0YWNobWVudCogdG9XcmFwcGVkKEpTQ29udGV4dFJlZiwgSlNWYWx1ZVJlZik7CisK
KyAgICB2b2lkIGVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0IHsgbV9hdHRhY2ht
ZW50LmVuY29kZShlbmNvZGVyKTsgfQorCitwcml2YXRlOgorICAgIEpTSVBDQXR0YWNobWVudChJ
UEM6OkF0dGFjaG1lbnQmJiBhdHRhY2htZW50KQorICAgICAgICA6IG1fYXR0YWNobWVudChXVEZN
b3ZlKGF0dGFjaG1lbnQpKQorICAgIHsgfQorCisgICAgc3RhdGljIEpTQ2xhc3NSZWYgd3JhcHBl
ckNsYXNzKCk7CisgICAgc3RhdGljIEpTSVBDQXR0YWNobWVudCogdW53cmFwKEpTT2JqZWN0UmVm
KTsKKyAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplKEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYp
OworICAgIHN0YXRpYyB2b2lkIGZpbmFsaXplKEpTT2JqZWN0UmVmKTsKKworICAgIHN0YXRpYyBj
b25zdCBKU1N0YXRpY0Z1bmN0aW9uKiBzdGF0aWNGdW5jdGlvbnMoKTsKKworICAgIElQQzo6QXR0
YWNobWVudCBtX2F0dGFjaG1lbnQ7Cit9OworCitjbGFzcyBKU0lQQ0Nvbm5lY3Rpb24gOiBwdWJs
aWMgUmVmQ291bnRlZDxKU0lQQ0Nvbm5lY3Rpb24+LCBwcml2YXRlIElQQzo6Q29ubmVjdGlvbjo6
Q2xpZW50IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPEpTSVBDQ29ubmVjdGlvbj4gY3JlYXRl
KElQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllciYmIHRlc3RlZENvbm5lY3Rpb25JZGVudGlmaWVy
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSlNJUENDb25uZWN0aW9uKFdU
Rk1vdmUodGVzdGVkQ29ubmVjdGlvbklkZW50aWZpZXIpKSk7CisgICAgfQorCisgICAgSlNPYmpl
Y3RSZWYgY3JlYXRlSlNXcmFwcGVyKEpTQ29udGV4dFJlZik7CisgICAgc3RhdGljIEpTSVBDQ29u
bmVjdGlvbiogdG9XcmFwcGVkKEpTQ29udGV4dFJlZiwgSlNWYWx1ZVJlZik7CisKK3ByaXZhdGU6
CisgICAgSlNJUENDb25uZWN0aW9uKElQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllciYmIHRlc3Rl
ZENvbm5lY3Rpb25JZGVudGlmaWVyKQorICAgICAgICA6IG1fdGVzdGVkQ29ubmVjdGlvbiB7IElQ
Qzo6Q29ubmVjdGlvbjo6Y3JlYXRlU2VydmVyQ29ubmVjdGlvbih0ZXN0ZWRDb25uZWN0aW9uSWRl
bnRpZmllciwgKnRoaXMpIH0KKyAgICB7CisgICAgfQorCisgICAgLy8gSVBDOjpDb25uZWN0aW9u
OjpDbGllbnQgb3ZlcnJpZGVzLgorICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25u
ZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgZmluYWw7CisgICAgYm9vbCBkaWRSZWNlaXZlU3luY01l
c3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJiwgVW5pcXVlUmVmPElQQzo6RW5j
b2Rlcj4mKSBmaW5hbDsKKyAgICB2b2lkIGRpZENsb3NlKElQQzo6Q29ubmVjdGlvbiYpIGZpbmFs
OworICAgIHZvaWQgZGlkUmVjZWl2ZUludmFsaWRNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQ
Qzo6TWVzc2FnZU5hbWUpIGZpbmFsOworCisgICAgc3RhdGljIEpTQ2xhc3NSZWYgd3JhcHBlckNs
YXNzKCk7CisgICAgc3RhdGljIEpTSVBDQ29ubmVjdGlvbiogdW53cmFwKEpTT2JqZWN0UmVmKTsK
KyAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplKEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYpOwor
ICAgIHN0YXRpYyB2b2lkIGZpbmFsaXplKEpTT2JqZWN0UmVmKTsKKworCisgICAgc3RhdGljIGNv
bnN0IEpTU3RhdGljRnVuY3Rpb24qIHN0YXRpY0Z1bmN0aW9ucygpOworICAgIHN0YXRpYyBKU1Zh
bHVlUmVmIG9wZW4oSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiwgSlNPYmplY3RSZWYgdGhpc09i
amVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10s
IEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CisgICAgc3RhdGljIEpTVmFsdWVSZWYgaW52YWxpZGF0
ZShKU0NvbnRleHRSZWYsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXpl
X3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJl
ZiogZXhjZXB0aW9uKTsKKyAgICBzdGF0aWMgSlNWYWx1ZVJlZiBzZW5kTWVzc2FnZShKU0NvbnRl
eHRSZWYsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1l
bnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0
aW9uKTsKKyAgICBzdGF0aWMgSlNWYWx1ZVJlZiBzZW5kU3luY01lc3NhZ2UoSlNDb250ZXh0UmVm
LCBKU09iamVjdFJlZiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291
bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7
CisgICAgc3RhdGljIEpTVmFsdWVSZWYgd2FpdEZvck1lc3NhZ2UoSlNDb250ZXh0UmVmLCBKU09i
amVjdFJlZiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNv
bnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CisKKyAg
ICBSZWY8SVBDOjpDb25uZWN0aW9uPiBtX3Rlc3RlZENvbm5lY3Rpb247Cit9OworCiBjbGFzcyBK
U0lQQ1N0cmVhbUNsaWVudENvbm5lY3Rpb24gOiBwdWJsaWMgUmVmQ291bnRlZDxKU0lQQ1N0cmVh
bUNsaWVudENvbm5lY3Rpb24+LCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8SlNJUENTdHJlYW1DbGll
bnRDb25uZWN0aW9uPiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxKU0lQQ1N0cmVhbUNsaWVu
dENvbm5lY3Rpb24+IGNyZWF0ZShKU0lQQyYganNJUEMsIElQQzo6Q29ubmVjdGlvbiYgY29ubmVj
dGlvbiwgc2l6ZV90IGJ1ZmZlclNpemUpCkBAIC0yMjAsOCArMjg3LDYgQEAgcHJpdmF0ZToKICAg
ICBSZWY8U2hhcmVkTWVtb3J5PiBtX3NoYXJlZE1lbW9yeTsKIH07CiAKLWNsYXNzIEpTSVBDOwot
CiBjbGFzcyBKU01lc3NhZ2VMaXN0ZW5lciBmaW5hbCA6IHB1YmxpYyBJUEM6OkNvbm5lY3Rpb246
Ok1lc3NhZ2VPYnNlcnZlciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6
CkBAIC0yNDYsNyArMzExLDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgSlNJUEMod2ViUGFnZSwgd2ViRnJhbWUpKTsKICAgICB9Ci0KKyAgICBzdGF0aWMg
SlNJUEMqIHRvV3JhcHBlZChKU0NvbnRleHRSZWYsIEpTVmFsdWVSZWYpOwogICAgIHN0YXRpYyBK
U0NsYXNzUmVmIHdyYXBwZXJDbGFzcygpOwogCiAgICAgV2ViRnJhbWUqIHdlYkZyYW1lKCkgeyBy
ZXR1cm4gbV93ZWJGcmFtZS5nZXQoKTsgfQpAQCAtMjU4LDcgKzMyMyw2IEBAIHByaXZhdGU6CiAg
ICAgeyB9CiAKICAgICBzdGF0aWMgSlNJUEMqIHVud3JhcChKU09iamVjdFJlZik7Ci0gICAgc3Rh
dGljIEpTSVBDKiB0b1dyYXBwZWQoSlNDb250ZXh0UmVmLCBKU1ZhbHVlUmVmKTsKICAgICBzdGF0
aWMgdm9pZCBpbml0aWFsaXplKEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYpOwogICAgIHN0YXRp
YyB2b2lkIGZpbmFsaXplKEpTT2JqZWN0UmVmKTsKICAgICBzdGF0aWMgY29uc3QgSlNTdGF0aWNG
dW5jdGlvbiogc3RhdGljRnVuY3Rpb25zKCk7CkBAIC0yNzIsNiArMzM2LDggQEAgcHJpdmF0ZToK
ICAgICBzdGF0aWMgSlNWYWx1ZVJlZiBzZW5kU3luY01lc3NhZ2UoSlNDb250ZXh0UmVmLCBKU09i
amVjdFJlZiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNv
bnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CiAgICAg
c3RhdGljIEpTVmFsdWVSZWYgd2FpdEZvck1lc3NhZ2UoSlNDb250ZXh0UmVmLCBKU09iamVjdFJl
ZiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpT
VmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CiAKKyAgICBzdGF0
aWMgSlNWYWx1ZVJlZiBjcmVhdGVDb25uZWN0aW9uUGFpcihKU0NvbnRleHRSZWYsIEpTT2JqZWN0
UmVmLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3Qg
SlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKTsKKwogICAgIHN0
YXRpYyBKU1ZhbHVlUmVmIGNyZWF0ZVN0cmVhbUNsaWVudENvbm5lY3Rpb24oSlNDb250ZXh0UmVm
LCBKU09iamVjdFJlZiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291
bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7
CiAgICAgc3RhdGljIEpTVmFsdWVSZWYgY3JlYXRlU2VtYXBob3JlKEpTQ29udGV4dFJlZiwgSlNP
YmplY3RSZWYsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBj
b25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOwogICAg
IHN0YXRpYyBKU1ZhbHVlUmVmIGNyZWF0ZVNoYXJlZE1lbW9yeShKU0NvbnRleHRSZWYsIEpTT2Jq
ZWN0UmVmLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29u
c3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKTsKQEAgLTI5
MiwyNiArMzU4LDMwMyBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxVbmlxdWVSZWY8SlNNZXNzYWdl
TGlzdGVuZXI+PiBtX21lc3NhZ2VMaXN0ZW5lcnM7CiB9OwogCi1zdGF0aWMgSlNWYWx1ZVJlZiBj
cmVhdGVUeXBlRXJyb3IoSlNDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbWVzc2Fn
ZSkKK3N0YXRpYyBKU1ZhbHVlUmVmIGNyZWF0ZVR5cGVFcnJvcihKU0NvbnRleHRSZWYgY29udGV4
dCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQoreworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2so
dG9KUyhjb250ZXh0KS0+dm0oKSk7CisgICAgcmV0dXJuIHRvUmVmKEpTQzo6Y3JlYXRlVHlwZUVy
cm9yKHRvSlMoY29udGV4dCksIG1lc3NhZ2UpKTsKK30KKworc3RhdGljIHN0ZDo6b3B0aW9uYWw8
dWludDY0X3Q+IGNvbnZlcnRUb1VpbnQ2NChKU0M6OkpTVmFsdWUganNWYWx1ZSkKK3sKKyAgICBp
ZiAoanNWYWx1ZS5pc051bWJlcigpKSB7CisgICAgICAgIGRvdWJsZSB2YWx1ZSA9IGpzVmFsdWUu
YXNOdW1iZXIoKTsKKyAgICAgICAgaWYgKHZhbHVlIDwgMCB8fCB0cnVuYyh2YWx1ZSkgIT0gdmFs
dWUpCisgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgICAgICByZXR1cm4gdmFs
dWU7CisgICAgfQorICAgIGlmIChqc1ZhbHVlLmlzQmlnSW50KCkpCisgICAgICAgIHJldHVybiBK
U0M6OkpTQmlnSW50Ojp0b0JpZ1VJbnQ2NChqc1ZhbHVlKTsKKyAgICByZXR1cm4gc3RkOjpudWxs
b3B0OworfQorCisKK3N0YXRpYyBKU1ZhbHVlUmVmIHNlbmRNZXNzYWdlV2l0aEpTQXJndW1lbnRz
KElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSlNDb250ZXh0UmVmIGNvbnRleHQsIHNpemVf
dCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVm
KiBleGNlcHRpb24pCit7CisgICAgYXV0byogZ2xvYmFsT2JqZWN0ID0gdG9KUyhjb250ZXh0KTsK
KyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKGdsb2JhbE9iamVjdC0+dm0oKSk7CisKKyAgICBh
dXRvIGRlc3RpbmF0aW9uSUQgPSBkZXN0aW5hdGlvbklERnJvbUFyZ3VtZW50KGdsb2JhbE9iamVj
dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pOworICAgIGlmICghZGVzdGluYXRpb25JRCkKKyAg
ICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworCisgICAgYXV0byBt
ZXNzYWdlSUQgPSBtZXNzYWdlSURGcm9tQXJndW1lbnQoZ2xvYmFsT2JqZWN0LCBhcmd1bWVudHNb
MV0sIGV4Y2VwdGlvbik7CisgICAgaWYgKCFtZXNzYWdlSUQpCisgICAgICAgIHJldHVybiBKU1Zh
bHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKworICAgIGF1dG8gbWVzc2FnZU5hbWUgPSBzdGF0
aWNfY2FzdDxJUEM6Ok1lc3NhZ2VOYW1lPigqbWVzc2FnZUlEKTsKKyAgICBhdXRvIGVuY29kZXIg
PSBtYWtlVW5pcXVlUmVmPElQQzo6RW5jb2Rlcj4obWVzc2FnZU5hbWUsICpkZXN0aW5hdGlvbklE
KTsKKworICAgIEpTVmFsdWVSZWYgcmV0dXJuVmFsdWUgPSBKU1ZhbHVlTWFrZVVuZGVmaW5lZChj
b250ZXh0KTsKKworICAgIGJvb2wgaGFzUmVwbHkgPSAhIW1lc3NhZ2VSZXBseUFyZ3VtZW50RGVz
Y3JpcHRpb25zKG1lc3NhZ2VOYW1lKTsKKyAgICBpZiAoaGFzUmVwbHkpIHsKKyAgICAgICAgdWlu
dDY0X3QgbGlzdGVuZXJJRCA9IElQQzo6bmV4dEFzeW5jUmVwbHlIYW5kbGVySUQoKTsKKyAgICAg
ICAgZW5jb2Rlci5nZXQoKSA8PCBsaXN0ZW5lcklEOworCisgICAgICAgIEpTT2JqZWN0UmVmIHJl
c29sdmU7CisgICAgICAgIEpTT2JqZWN0UmVmIHJlamVjdDsKK0FMTE9XX05FV19BUElfV0lUSE9V
VF9HVUFSRFNfQkVHSU4KKyAgICAgICAgcmV0dXJuVmFsdWUgPSBKU09iamVjdE1ha2VEZWZlcnJl
ZFByb21pc2UoY29udGV4dCwgJnJlc29sdmUsICZyZWplY3QsIGV4Y2VwdGlvbik7IC8vIE5PTElO
VAorQUxMT1dfTkVXX0FQSV9XSVRIT1VUX0dVQVJEU19FTkQKKyAgICAgICAgaWYgKCFyZXR1cm5W
YWx1ZSkgIC8vIE5PTElOVAorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVk
KGNvbnRleHQpOworCisgICAgICAgIEpTR2xvYmFsQ29udGV4dFJldGFpbihKU0NvbnRleHRHZXRH
bG9iYWxDb250ZXh0KGNvbnRleHQpKTsKKyAgICAgICAgSlNWYWx1ZVByb3RlY3QoY29udGV4dCwg
cmVzb2x2ZSk7CisgICAgICAgIEpTVmFsdWVQcm90ZWN0KGNvbnRleHQsIHJlamVjdCk7CisgICAg
ICAgIElQQzo6YWRkQXN5bmNSZXBseUhhbmRsZXIoY29ubmVjdGlvbiwgbGlzdGVuZXJJRCwgW21l
c3NhZ2VOYW1lLCBjb250ZXh0LCByZXNvbHZlLCByZWplY3RdKElQQzo6RGVjb2RlciogcmVwbHlE
ZWNvZGVyKSB7CisgICAgICAgICAgICBhdXRvKiBnbG9iYWxPYmplY3QgPSB0b0pTKGNvbnRleHQp
OworICAgICAgICAgICAgYXV0byYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgICAgICAg
ICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKworICAgICAgICAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworICAgICAgICAgICAgYXV0byoganNSZXN1bHQgPSBq
c1Jlc3VsdEZyb21SZXBseURlY29kZXIoZ2xvYmFsT2JqZWN0LCBtZXNzYWdlTmFtZSwgKnJlcGx5
RGVjb2Rlcik7CisgICAgICAgICAgICBpZiAoYXV0byogZXhjZXB0aW9uID0gc2NvcGUuZXhjZXB0
aW9uKCkpIHsKKyAgICAgICAgICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOworICAgICAg
ICAgICAgICAgIEpTVmFsdWVSZWYgYXJndW1lbnRzW10gPSB7IHRvUmVmKGdsb2JhbE9iamVjdCwg
ZXhjZXB0aW9uKSB9OworICAgICAgICAgICAgICAgIEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb24oY29u
dGV4dCwgcmVqZWN0LCByZWplY3QsIDEsIGFyZ3VtZW50cywgbnVsbHB0cik7CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEpTVmFsdWVSZWYgYXJndW1lbnRzW10gPSB7IHRv
UmVmKGdsb2JhbE9iamVjdCwganNSZXN1bHQpIH07CisgICAgICAgICAgICAgICAgSlNPYmplY3RD
YWxsQXNGdW5jdGlvbihjb250ZXh0LCByZXNvbHZlLCByZXNvbHZlLCAxLCBhcmd1bWVudHMsIG51
bGxwdHIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBKU1ZhbHVlVW5wcm90ZWN0KGNv
bnRleHQsIHJlamVjdCk7CisgICAgICAgICAgICBKU1ZhbHVlVW5wcm90ZWN0KGNvbnRleHQsIHJl
c29sdmUpOworICAgICAgICAgICAgSlNHbG9iYWxDb250ZXh0UmVsZWFzZShKU0NvbnRleHRHZXRH
bG9iYWxDb250ZXh0KGNvbnRleHQpKTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgaWYgKGFy
Z3VtZW50Q291bnQgPiAyKSB7CisgICAgICAgIGlmICghZW5jb2RlQXJndW1lbnQoZW5jb2Rlci5n
ZXQoKSwgY29udGV4dCwgYXJndW1lbnRzWzJdLCBleGNlcHRpb24pKQorICAgICAgICAgICAgcmV0
dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworICAgIH0KKworICAgIC8vIEZJWE1F
OiBBZGQgdGhlIHN1cHBvcnQgZm9yIHNwZWNpZnlpbmcgSVBDIG9wdGlvbnMuCisKKyAgICBjb25u
ZWN0aW9uLnNlbmRNZXNzYWdlKFdURk1vdmUoZW5jb2RlciksIHsgfSk7CisgICAgcmV0dXJuIHJl
dHVyblZhbHVlOworfQorCituYW1lc3BhY2UgeworCitzdHJ1Y3QgU3luY0lQQ01lc3NhZ2VJbmZv
IHsKKyAgICB1aW50NjRfdCBkZXN0aW5hdGlvbklEOworICAgIElQQzo6TWVzc2FnZU5hbWUgbWVz
c2FnZU5hbWU7CisgICAgSVBDOjpUaW1lb3V0IHRpbWVvdXQ7Cit9OworCit9CisKK3N0YXRpYyBz
dGQ6Om9wdGlvbmFsPFN5bmNJUENNZXNzYWdlSW5mbz4gZXh0cmFjdFN5bmNJUENNZXNzYWdlSW5m
byhKU0NvbnRleHRSZWYgY29udGV4dCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFs
dWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBBU1NFUlQo
YXJndW1lbnRDb3VudCA+PSAyKTsKKyAgICBhdXRvKiBnbG9iYWxPYmplY3QgPSB0b0pTKGNvbnRl
eHQpOworICAgIGF1dG8gZGVzdGluYXRpb25JRCA9IGRlc3RpbmF0aW9uSURGcm9tQXJndW1lbnQo
Z2xvYmFsT2JqZWN0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbik7CisgICAgaWYgKCFkZXN0aW5h
dGlvbklEKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgYXV0byBtZXNzYWdl
SUQgPSBtZXNzYWdlSURGcm9tQXJndW1lbnQoZ2xvYmFsT2JqZWN0LCBhcmd1bWVudHNbMV0sIGV4
Y2VwdGlvbik7CisgICAgaWYgKCFtZXNzYWdlSUQpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7CisKKyAgICBTZWNvbmRzIHRpbWVvdXREdXJhdGlvbjsKKyAgICB7CisgICAgICAgIGF1dG8g
anNWYWx1ZSA9IHRvSlMoZ2xvYmFsT2JqZWN0LCBhcmd1bWVudHNbMl0pOworICAgICAgICBpZiAo
IWpzVmFsdWUuaXNOdW1iZXIoKSkgeworICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0ZVR5
cGVFcnJvcihjb250ZXh0LCAiVGltZW91dCBtdXN0IGJlIGEgbnVtYmVyIl9zKTsKKyAgICAgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgIH0KKyAgICAgICAgdGltZW91dER1cmF0
aW9uID0gU2Vjb25kcyB7IGpzVmFsdWUuYXNOdW1iZXIoKSB9OworICAgIH0KKworICAgIHJldHVy
biB7IHsgKmRlc3RpbmF0aW9uSUQsIHN0YXRpY19jYXN0PElQQzo6TWVzc2FnZU5hbWU+KCptZXNz
YWdlSUQpLCB7IHRpbWVvdXREdXJhdGlvbiB9IH0gfTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYg
c2VuZFN5bmNNZXNzYWdlV2l0aEpTQXJndW1lbnRzKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlv
biwgSlNDb250ZXh0UmVmIGNvbnRleHQsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1Zh
bHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgYXV0byog
Z2xvYmFsT2JqZWN0ID0gdG9KUyhjb250ZXh0KTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2Nr
KGdsb2JhbE9iamVjdC0+dm0oKSk7CisgICAgYXV0byBpbmZvID0gZXh0cmFjdFN5bmNJUENNZXNz
YWdlSW5mbyhjb250ZXh0LCBhcmd1bWVudENvdW50LCBhcmd1bWVudHMsIGV4Y2VwdGlvbik7Cisg
ICAgaWYgKCFpbmZvKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4
dCk7CisKKyAgICBhdXRvIFtkZXN0aW5hdGlvbklELCBtZXNzYWdlTmFtZSwgdGltZW91dF0gPSAq
aW5mbzsKKworICAgIC8vIEZJWE1FOiBTdXBwb3J0IHRoZSBvcHRpb25zLgorCisgICAgSVBDOjpD
b25uZWN0aW9uOjpTeW5jUmVxdWVzdElEIHN5bmNSZXF1ZXN0SUQ7CisgICAgYXV0byBlbmNvZGVy
ID0gY29ubmVjdGlvbi5jcmVhdGVTeW5jTWVzc2FnZUVuY29kZXIobWVzc2FnZU5hbWUsIGRlc3Rp
bmF0aW9uSUQsIHN5bmNSZXF1ZXN0SUQpOworCisgICAgaWYgKGFyZ3VtZW50Q291bnQgPiAzKSB7
CisgICAgICAgIGlmICghZW5jb2RlQXJndW1lbnQoZW5jb2Rlci5nZXQoKSwgY29udGV4dCwgYXJn
dW1lbnRzWzNdLCBleGNlcHRpb24pKQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5k
ZWZpbmVkKGNvbnRleHQpOworICAgIH0KKworICAgIGlmIChhdXRvIHJlcGx5RGVjb2RlciA9IGNv
bm5lY3Rpb24uc2VuZFN5bmNNZXNzYWdlKHN5bmNSZXF1ZXN0SUQsIFdURk1vdmUoZW5jb2Rlciks
IHRpbWVvdXQsIHsgfSkpIHsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NP
UEUoZ2xvYmFsT2JqZWN0LT52bSgpKTsKKyAgICAgICAgYXV0byoganNSZXN1bHQgPSBqc1Jlc3Vs
dEZyb21SZXBseURlY29kZXIoZ2xvYmFsT2JqZWN0LCBtZXNzYWdlTmFtZSwgKnJlcGx5RGVjb2Rl
cik7CisgICAgICAgIGlmIChzY29wZS5leGNlcHRpb24oKSkgeworICAgICAgICAgICAgKmV4Y2Vw
dGlvbiA9IHRvUmVmKGdsb2JhbE9iamVjdCwgc2NvcGUuZXhjZXB0aW9uKCkpOworICAgICAgICAg
ICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFr
ZVVuZGVmaW5lZChjb250ZXh0KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdG9SZWYoZ2xv
YmFsT2JqZWN0LCBqc1Jlc3VsdCk7CisgICAgfQorCisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5k
ZWZpbmVkKGNvbnRleHQpOworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiB3YWl0Rm9yTWVzc2FnZVdp
dGhKU0FyZ3VtZW50cyhJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIEpTQ29udGV4dFJlZiBj
b250ZXh0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNb
XSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIGF1dG8qIGdsb2JhbE9iamVjdCA9IHRv
SlMoY29udGV4dCk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhnbG9iYWxPYmplY3QtPnZt
KCkpOworCisgICAgYXV0byBpbmZvID0gZXh0cmFjdFN5bmNJUENNZXNzYWdlSW5mbyhjb250ZXh0
LCBhcmd1bWVudENvdW50LCBhcmd1bWVudHMsIGV4Y2VwdGlvbik7CisgICAgaWYgKCFpbmZvKQor
ICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisKKyAgICBhdXRv
IFtkZXN0aW5hdGlvbklELCBtZXNzYWdlTmFtZSwgdGltZW91dF0gPSAqaW5mbzsKKyAgICBpZiAo
YXV0byBkZWNvZGVyID0gY29ubmVjdGlvbi53YWl0Rm9yTWVzc2FnZUZvclRlc3RpbmcobWVzc2Fn
ZU5hbWUsIGRlc3RpbmF0aW9uSUQsIHRpbWVvdXQsIHsgfSkpIHsKKyAgICAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUoZ2xvYmFsT2JqZWN0LT52bSgpKTsKKyAgICAgICAgYXV0
byBqc1Jlc3VsdCA9IGpzVmFsdWVGb3JBcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBtZXNzYWdlTmFt
ZSwgKmRlY29kZXIpOworICAgICAgICBpZiAoc2NvcGUuZXhjZXB0aW9uKCkpIHsKKyAgICAgICAg
ICAgICpleGNlcHRpb24gPSB0b1JlZihnbG9iYWxPYmplY3QsIHNjb3BlLmV4Y2VwdGlvbigpKTsK
KyAgICAgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgICAgICByZXR1cm4g
SlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IGpzUmVzdWx0ID8gdG9SZWYoZ2xvYmFsT2JqZWN0LCAqanNSZXN1bHQpIDogSlNWYWx1ZU1ha2VV
bmRlZmluZWQoY29udGV4dCk7CisgICAgfQorICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5l
ZChjb250ZXh0KTsKK30KKworSlNPYmplY3RSZWYgSlNJUENTZW1hcGhvcmU6OmNyZWF0ZUpTV3Jh
cHBlcihKU0NvbnRleHRSZWYgY29udGV4dCkKK3sKKyAgICBhdXRvKiBnbG9iYWxPYmplY3QgPSB0
b0pTKGNvbnRleHQpOworICAgIGF1dG8mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIEpT
Qzo6SlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENI
X1NDT1BFKHZtKTsKKyAgICBKU09iamVjdFJlZiB3cmFwcGVyT2JqZWN0ID0gSlNPYmplY3RNYWtl
KHRvR2xvYmFsUmVmKGdsb2JhbE9iamVjdCksIHdyYXBwZXJDbGFzcygpLCB0aGlzKTsKKyAgICBz
Y29wZS5jbGVhckV4Y2VwdGlvbigpOworICAgIHJldHVybiB3cmFwcGVyT2JqZWN0OworfQorCitK
U0NsYXNzUmVmIEpTSVBDU2VtYXBob3JlOjp3cmFwcGVyQ2xhc3MoKQoreworICAgIHN0YXRpYyBK
U0NsYXNzUmVmIGpzQ2xhc3M7CisgICAgaWYgKCFqc0NsYXNzKSB7CisgICAgICAgIEpTQ2xhc3NE
ZWZpbml0aW9uIGRlZmluaXRpb24gPSBrSlNDbGFzc0RlZmluaXRpb25FbXB0eTsKKyAgICAgICAg
ZGVmaW5pdGlvbi5jbGFzc05hbWUgPSAiU2VtYXBob3JlIjsKKyAgICAgICAgZGVmaW5pdGlvbi5w
YXJlbnRDbGFzcyA9IG51bGxwdHI7CisgICAgICAgIGRlZmluaXRpb24uc3RhdGljVmFsdWVzID0g
bnVsbHB0cjsKKyAgICAgICAgZGVmaW5pdGlvbi5zdGF0aWNGdW5jdGlvbnMgPSBzdGF0aWNGdW5j
dGlvbnMoKTsKKyAgICAgICAgZGVmaW5pdGlvbi5pbml0aWFsaXplID0gaW5pdGlhbGl6ZTsKKyAg
ICAgICAgZGVmaW5pdGlvbi5maW5hbGl6ZSA9IGZpbmFsaXplOworICAgICAgICBqc0NsYXNzID0g
SlNDbGFzc0NyZWF0ZSgmZGVmaW5pdGlvbik7CisgICAgfQorICAgIHJldHVybiBqc0NsYXNzOwor
fQorCitpbmxpbmUgSlNJUENTZW1hcGhvcmUqIEpTSVBDU2VtYXBob3JlOjp1bndyYXAoSlNPYmpl
Y3RSZWYgb2JqZWN0KQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxKU0lQQ1NlbWFwaG9yZSo+
KEpTT2JqZWN0R2V0UHJpdmF0ZShvYmplY3QpKTsKK30KKworSlNJUENTZW1hcGhvcmUqIEpTSVBD
U2VtYXBob3JlOjp0b1dyYXBwZWQoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgdmFs
dWUpCit7CisgICAgaWYgKCFjb250ZXh0IHx8ICF2YWx1ZSB8fCAhSlNWYWx1ZUlzT2JqZWN0T2ZD
bGFzcyhjb250ZXh0LCB2YWx1ZSwgd3JhcHBlckNsYXNzKCkpKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICByZXR1cm4gdW53cmFwKEpTVmFsdWVUb09iamVjdChjb250ZXh0LCB2YWx1ZSwg
bnVsbHB0cikpOworfQorCit2b2lkIEpTSVBDU2VtYXBob3JlOjppbml0aWFsaXplKEpTQ29udGV4
dFJlZiwgSlNPYmplY3RSZWYgb2JqZWN0KQoreworICAgIHVud3JhcChvYmplY3QpLT5yZWYoKTsK
K30KKwordm9pZCBKU0lQQ1NlbWFwaG9yZTo6ZmluYWxpemUoSlNPYmplY3RSZWYgb2JqZWN0KQor
eworICAgIHVud3JhcChvYmplY3QpLT5kZXJlZigpOworfQorCitjb25zdCBKU1N0YXRpY0Z1bmN0
aW9uKiBKU0lQQ1NlbWFwaG9yZTo6c3RhdGljRnVuY3Rpb25zKCkKK3sKKyAgICBzdGF0aWMgY29u
c3QgSlNTdGF0aWNGdW5jdGlvbiBmdW5jdGlvbnNbXSA9IHsKKyAgICAgICAgeyAic2lnbmFsIiwg
c2lnbmFsLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZVJlYWRPbmx5IH0sCisgICAgICAgIHsgIndhaXRGb3IiLCB3YWl0Rm9yLCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZURvbnREZWxldGUgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IH0sCisg
ICAgICAgIHsgMCwgMCwgMCB9CisgICAgfTsKKyAgICByZXR1cm4gZnVuY3Rpb25zOworfQorCisK
K0pTT2JqZWN0UmVmIEpTSVBDQXR0YWNobWVudDo6Y3JlYXRlSlNXcmFwcGVyKEpTQ29udGV4dFJl
ZiBjb250ZXh0KQoreworICAgIGF1dG8qIGdsb2JhbE9iamVjdCA9IHRvSlMoY29udGV4dCk7Cisg
ICAgYXV0byYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIg
bG9jayh2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworICAg
IEpTT2JqZWN0UmVmIHdyYXBwZXJPYmplY3QgPSBKU09iamVjdE1ha2UodG9HbG9iYWxSZWYoZ2xv
YmFsT2JqZWN0KSwgd3JhcHBlckNsYXNzKCksIHRoaXMpOworICAgIHNjb3BlLmNsZWFyRXhjZXB0
aW9uKCk7CisgICAgcmV0dXJuIHdyYXBwZXJPYmplY3Q7Cit9CisKK0pTQ2xhc3NSZWYgSlNJUENB
dHRhY2htZW50Ojp3cmFwcGVyQ2xhc3MoKQoreworICAgIHN0YXRpYyBKU0NsYXNzUmVmIGpzQ2xh
c3M7CisgICAgaWYgKCFqc0NsYXNzKSB7CisgICAgICAgIEpTQ2xhc3NEZWZpbml0aW9uIGRlZmlu
aXRpb24gPSBrSlNDbGFzc0RlZmluaXRpb25FbXB0eTsKKyAgICAgICAgZGVmaW5pdGlvbi5jbGFz
c05hbWUgPSAiQXR0YWNobWVudCI7CisgICAgICAgIGRlZmluaXRpb24ucGFyZW50Q2xhc3MgPSBu
dWxscHRyOworICAgICAgICBkZWZpbml0aW9uLnN0YXRpY1ZhbHVlcyA9IG51bGxwdHI7CisgICAg
ICAgIGRlZmluaXRpb24uc3RhdGljRnVuY3Rpb25zID0gc3RhdGljRnVuY3Rpb25zKCk7CisgICAg
ICAgIGRlZmluaXRpb24uaW5pdGlhbGl6ZSA9IGluaXRpYWxpemU7CisgICAgICAgIGRlZmluaXRp
b24uZmluYWxpemUgPSBmaW5hbGl6ZTsKKyAgICAgICAganNDbGFzcyA9IEpTQ2xhc3NDcmVhdGUo
JmRlZmluaXRpb24pOworICAgIH0KKyAgICByZXR1cm4ganNDbGFzczsKK30KKworaW5saW5lIEpT
SVBDQXR0YWNobWVudCogSlNJUENBdHRhY2htZW50Ojp1bndyYXAoSlNPYmplY3RSZWYgb2JqZWN0
KQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxKU0lQQ0F0dGFjaG1lbnQqPihKU09iamVjdEdl
dFByaXZhdGUob2JqZWN0KSk7Cit9CisKK0pTSVBDQXR0YWNobWVudCogSlNJUENBdHRhY2htZW50
Ojp0b1dyYXBwZWQoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgdmFsdWUpCit7Cisg
ICAgaWYgKCFjb250ZXh0IHx8ICF2YWx1ZSB8fCAhSlNWYWx1ZUlzT2JqZWN0T2ZDbGFzcyhjb250
ZXh0LCB2YWx1ZSwgd3JhcHBlckNsYXNzKCkpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICByZXR1cm4gdW53cmFwKEpTVmFsdWVUb09iamVjdChjb250ZXh0LCB2YWx1ZSwgbnVsbHB0cikp
OworfQorCit2b2lkIEpTSVBDQXR0YWNobWVudDo6aW5pdGlhbGl6ZShKU0NvbnRleHRSZWYsIEpT
T2JqZWN0UmVmIG9iamVjdCkKK3sKKyAgICB1bndyYXAob2JqZWN0KS0+cmVmKCk7Cit9CisKK3Zv
aWQgSlNJUENBdHRhY2htZW50OjpmaW5hbGl6ZShKU09iamVjdFJlZiBvYmplY3QpCiB7Ci0gICAg
SlNDOjpKU0xvY2tIb2xkZXIgbG9jayh0b0pTKGNvbnRleHQpLT52bSgpKTsKLSAgICByZXR1cm4g
dG9SZWYoSlNDOjpjcmVhdGVUeXBlRXJyb3IodG9KUyhjb250ZXh0KSwgbWVzc2FnZSkpOworICAg
IHVud3JhcChvYmplY3QpLT5kZXJlZigpOwogfQogCi1zdGF0aWMgc3RkOjpvcHRpb25hbDx1aW50
NjRfdD4gY29udmVydFRvVWludDY0KEpTQzo6SlNWYWx1ZSBqc1ZhbHVlKQorY29uc3QgSlNTdGF0
aWNGdW5jdGlvbiogSlNJUENBdHRhY2htZW50OjpzdGF0aWNGdW5jdGlvbnMoKQogewotICAgIGlm
IChqc1ZhbHVlLmlzTnVtYmVyKCkpIHsKLSAgICAgICAgZG91YmxlIHZhbHVlID0ganNWYWx1ZS5h
c051bWJlcigpOwotICAgICAgICBpZiAodmFsdWUgPCAwIHx8IHRydW5jKHZhbHVlKSAhPSB2YWx1
ZSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgICAgIHJldHVybiB2YWx1
ZTsKLSAgICB9Ci0gICAgaWYgKGpzVmFsdWUuaXNCaWdJbnQoKSkKLSAgICAgICAgcmV0dXJuIEpT
Qzo6SlNCaWdJbnQ6OnRvQmlnVUludDY0KGpzVmFsdWUpOwotICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7CisgICAgc3RhdGljIGNvbnN0IEpTU3RhdGljRnVuY3Rpb24gZnVuY3Rpb25zW10gPSB7Cisg
ICAgICAgIHsgMCwgMCwgMCB9CisgICAgfTsKKyAgICByZXR1cm4gZnVuY3Rpb25zOwogfQogCi1K
U09iamVjdFJlZiBKU0lQQ1NlbWFwaG9yZTo6Y3JlYXRlSlNXcmFwcGVyKEpTQ29udGV4dFJlZiBj
b250ZXh0KQorSlNPYmplY3RSZWYgSlNJUENDb25uZWN0aW9uOjpjcmVhdGVKU1dyYXBwZXIoSlND
b250ZXh0UmVmIGNvbnRleHQpCiB7CiAgICAgYXV0byogZ2xvYmFsT2JqZWN0ID0gdG9KUyhjb250
ZXh0KTsKICAgICBhdXRvJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKQEAgLTMyMiwxMiArNjY1
LDEyIEBAIEpTT2JqZWN0UmVmIEpTSVBDU2VtYXBob3JlOjpjcmVhdGVKU1dyYXBwZXIoSlNDb250
ZXh0UmVmIGNvbnRleHQpCiAgICAgcmV0dXJuIHdyYXBwZXJPYmplY3Q7CiB9CiAKLUpTQ2xhc3NS
ZWYgSlNJUENTZW1hcGhvcmU6OndyYXBwZXJDbGFzcygpCitKU0NsYXNzUmVmIEpTSVBDQ29ubmVj
dGlvbjo6d3JhcHBlckNsYXNzKCkKIHsKICAgICBzdGF0aWMgSlNDbGFzc1JlZiBqc0NsYXNzOwog
ICAgIGlmICghanNDbGFzcykgewogICAgICAgICBKU0NsYXNzRGVmaW5pdGlvbiBkZWZpbml0aW9u
ID0ga0pTQ2xhc3NEZWZpbml0aW9uRW1wdHk7Ci0gICAgICAgIGRlZmluaXRpb24uY2xhc3NOYW1l
ID0gIlNlbWFwaG9yZSI7CisgICAgICAgIGRlZmluaXRpb24uY2xhc3NOYW1lID0gIkNvbm5lY3Rp
b24iOwogICAgICAgICBkZWZpbml0aW9uLnBhcmVudENsYXNzID0gbnVsbHB0cjsKICAgICAgICAg
ZGVmaW5pdGlvbi5zdGF0aWNWYWx1ZXMgPSBudWxscHRyOwogICAgICAgICBkZWZpbml0aW9uLnN0
YXRpY0Z1bmN0aW9ucyA9IHN0YXRpY0Z1bmN0aW9ucygpOwpAQCAtMzM4LDM4ICs2ODEsMTI1IEBA
IEpTQ2xhc3NSZWYgSlNJUENTZW1hcGhvcmU6OndyYXBwZXJDbGFzcygpCiAgICAgcmV0dXJuIGpz
Q2xhc3M7CiB9CiAKLWlubGluZSBKU0lQQ1NlbWFwaG9yZSogSlNJUENTZW1hcGhvcmU6OnVud3Jh
cChKU09iamVjdFJlZiBvYmplY3QpCitpbmxpbmUgSlNJUENDb25uZWN0aW9uKiBKU0lQQ0Nvbm5l
Y3Rpb246OnVud3JhcChKU09iamVjdFJlZiBvYmplY3QpCiB7Ci0gICAgcmV0dXJuIHN0YXRpY19j
YXN0PEpTSVBDU2VtYXBob3JlKj4oSlNPYmplY3RHZXRQcml2YXRlKG9iamVjdCkpOworICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxKU0lQQ0Nvbm5lY3Rpb24qPihKU09iamVjdEdldFByaXZhdGUob2Jq
ZWN0KSk7CiB9CiAKLUpTSVBDU2VtYXBob3JlKiBKU0lQQ1NlbWFwaG9yZTo6dG9XcmFwcGVkKEpT
Q29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIHZhbHVlKQorSlNJUENDb25uZWN0aW9uKiBK
U0lQQ0Nvbm5lY3Rpb246OnRvV3JhcHBlZChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJl
ZiB2YWx1ZSkKIHsKICAgICBpZiAoIWNvbnRleHQgfHwgIXZhbHVlIHx8ICFKU1ZhbHVlSXNPYmpl
Y3RPZkNsYXNzKGNvbnRleHQsIHZhbHVlLCB3cmFwcGVyQ2xhc3MoKSkpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgIHJldHVybiB1bndyYXAoSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIHZh
bHVlLCBudWxscHRyKSk7CiB9CiAKLXZvaWQgSlNJUENTZW1hcGhvcmU6OmluaXRpYWxpemUoSlND
b250ZXh0UmVmLCBKU09iamVjdFJlZiBvYmplY3QpCit2b2lkIEpTSVBDQ29ubmVjdGlvbjo6aW5p
dGlhbGl6ZShKU0NvbnRleHRSZWYsIEpTT2JqZWN0UmVmIG9iamVjdCkKIHsKICAgICB1bndyYXAo
b2JqZWN0KS0+cmVmKCk7CiB9CiAKLXZvaWQgSlNJUENTZW1hcGhvcmU6OmZpbmFsaXplKEpTT2Jq
ZWN0UmVmIG9iamVjdCkKK3ZvaWQgSlNJUENDb25uZWN0aW9uOjpmaW5hbGl6ZShKU09iamVjdFJl
ZiBvYmplY3QpCiB7CiAgICAgdW53cmFwKG9iamVjdCktPmRlcmVmKCk7CiB9CiAKLWNvbnN0IEpT
U3RhdGljRnVuY3Rpb24qIEpTSVBDU2VtYXBob3JlOjpzdGF0aWNGdW5jdGlvbnMoKQordm9pZCBK
U0lQQ0Nvbm5lY3Rpb246OmRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6
RGVjb2RlciYpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK2Jvb2wgSlNJUEND
b25uZWN0aW9uOjpkaWRSZWNlaXZlU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpE
ZWNvZGVyJiwgVW5pcXVlUmVmPElQQzo6RW5jb2Rlcj4mKQoreworICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworfQorCit2b2lkIEpTSVBDQ29ubmVjdGlvbjo6ZGlkQ2xvc2UoSVBDOjpDb25uZWN0
aW9uJikKK3sKK30KKwordm9pZCBKU0lQQ0Nvbm5lY3Rpb246OmRpZFJlY2VpdmVJbnZhbGlkTWVz
c2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6Ok1lc3NhZ2VOYW1lKQoreworICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworfQorCisKK2NvbnN0IEpTU3RhdGljRnVuY3Rpb24qIEpTSVBDQ29ubmVj
dGlvbjo6c3RhdGljRnVuY3Rpb25zKCkKIHsKICAgICBzdGF0aWMgY29uc3QgSlNTdGF0aWNGdW5j
dGlvbiBmdW5jdGlvbnNbXSA9IHsKLSAgICAgICAgeyAic2lnbmFsIiwgc2lnbmFsLCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IH0s
Ci0gICAgICAgIHsgIndhaXRGb3IiLCB3YWl0Rm9yLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnRE
ZWxldGUgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IH0sCisgICAgICAgIHsgIm9wZW4i
LCBvcGVuLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZVJlYWRPbmx5IH0sCisgICAgICAgIHsgImludmFsaWRhdGUiLCBpbnZhbGlkYXRlLCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5
IH0sCisgICAgICAgIHsgInNlbmRNZXNzYWdlIiwgc2VuZE1lc3NhZ2UsIGtKU1Byb3BlcnR5QXR0
cmlidXRlRG9udERlbGV0ZSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfSwKKyAgICAg
ICAgeyAic2VuZFN5bmNNZXNzYWdlIiwgc2VuZFN5bmNNZXNzYWdlLCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZURvbnREZWxldGUgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IH0sCisgICAgICAg
IHsgIndhaXRGb3JNZXNzYWdlIiwgd2FpdEZvck1lc3NhZ2UsIGtKU1Byb3BlcnR5QXR0cmlidXRl
RG9udERlbGV0ZSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfSwKICAgICAgICAgeyAw
LCAwLCAwIH0KICAgICB9OwogICAgIHJldHVybiBmdW5jdGlvbnM7CiB9CiAKK0pTVmFsdWVSZWYg
SlNJUENDb25uZWN0aW9uOjpvcGVuKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiwg
SlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90LCBjb25zdCBKU1ZhbHVlUmVmW10sIEpTVmFs
dWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBSZWZQdHIgc2VsZiA9IHRvV3JhcHBlZChjb250ZXh0
LCB0aGlzT2JqZWN0KTsKKyAgICBpZiAoIXNlbGYpIHsKKyAgICAgICAgKmV4Y2VwdGlvbiA9IGNy
ZWF0ZVR5cGVFcnJvcihjb250ZXh0LCAiV3JvbmcgdHlwZSJfcyk7CisgICAgICAgIHJldHVybiBK
U1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKyAgICB9CisgICAgc2VsZi0+bV90ZXN0ZWRD
b25uZWN0aW9uLT5vcGVuKCk7CisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRl
eHQpOworfQorCitKU1ZhbHVlUmVmIEpTSVBDQ29ubmVjdGlvbjo6aW52YWxpZGF0ZShKU0NvbnRl
eHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVf
dCwgY29uc3QgSlNWYWx1ZVJlZltdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgUmVm
UHRyIHNlbGYgPSB0b1dyYXBwZWQoY29udGV4dCwgdGhpc09iamVjdCk7CisgICAgaWYgKCFzZWxm
KSB7CisgICAgICAgICpleGNlcHRpb24gPSBjcmVhdGVUeXBlRXJyb3IoY29udGV4dCwgIldyb25n
IHR5cGUiX3MpOworICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7
CisgICAgfQorICAgIHNlbGYtPm1fdGVzdGVkQ29ubmVjdGlvbi0+aW52YWxpZGF0ZSgpOworICAg
IHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKworSlNWYWx1ZVJlZiBK
U0lQQ0Nvbm5lY3Rpb246OnNlbmRNZXNzYWdlKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVj
dFJlZiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0
IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBS
ZWZQdHIgc2VsZiA9IHRvV3JhcHBlZChjb250ZXh0LCB0aGlzT2JqZWN0KTsKKyAgICBpZiAoIXNl
bGYpIHsKKyAgICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0ZVR5cGVFcnJvcihjb250ZXh0LCAiV3Jv
bmcgdHlwZSJfcyk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0
KTsKKyAgICB9CisgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAyKSB7CisgICAgICAgICpleGNlcHRp
b24gPSBjcmVhdGVUeXBlRXJyb3IoY29udGV4dCwgIk11c3Qgc3BlY2lmeSB0aGUgZGVzdGluYXRp
b24gSUQgYW5kIG1lc3NhZ2UgSUQgYXMgdGhlIGZpcnN0IHR3byBhcmd1bWVudHMiX3MpOworICAg
ICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisgICAgfQorICAgIHJl
dHVybiBzZW5kTWVzc2FnZVdpdGhKU0FyZ3VtZW50cyhzZWxmLT5tX3Rlc3RlZENvbm5lY3Rpb24s
IGNvbnRleHQsIGFyZ3VtZW50Q291bnQsIGFyZ3VtZW50cywgZXhjZXB0aW9uKTsKK30KKworSlNW
YWx1ZVJlZiBKU0lQQ0Nvbm5lY3Rpb246OnNlbmRTeW5jTWVzc2FnZShKU0NvbnRleHRSZWYgY29u
dGV4dCwgSlNPYmplY3RSZWYsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVu
dENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRp
b24pCit7CisgICAgUmVmUHRyIHNlbGYgPSB0b1dyYXBwZWQoY29udGV4dCwgdGhpc09iamVjdCk7
CisgICAgaWYgKCFzZWxmKSB7CisgICAgICAgICpleGNlcHRpb24gPSBjcmVhdGVUeXBlRXJyb3Io
Y29udGV4dCwgIldyb25nIHR5cGUiX3MpOworICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRl
ZmluZWQoY29udGV4dCk7CisgICAgfQorICAgIGlmIChhcmd1bWVudENvdW50IDwgMikgeworICAg
ICAgICAqZXhjZXB0aW9uID0gY3JlYXRlVHlwZUVycm9yKGNvbnRleHQsICJNdXN0IHNwZWNpZnkg
dGhlIGRlc3RpbmF0aW9uIElEIGFuZCBtZXNzYWdlIElEIGFzIHRoZSBmaXJzdCB0d28gYXJndW1l
bnRzIl9zKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwor
ICAgIH0KKyAgICByZXR1cm4gc2VuZFN5bmNNZXNzYWdlV2l0aEpTQXJndW1lbnRzKHNlbGYtPm1f
dGVzdGVkQ29ubmVjdGlvbiwgY29udGV4dCwgYXJndW1lbnRDb3VudCwgYXJndW1lbnRzLCBleGNl
cHRpb24pOworfQorCitKU1ZhbHVlUmVmIEpTSVBDQ29ubmVjdGlvbjo6d2FpdEZvck1lc3NhZ2Uo
SlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0
LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNW
YWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIFJlZlB0ciBzZWxmID0gdG9XcmFwcGVkKGNvbnRl
eHQsIHRoaXNPYmplY3QpOworICAgIGlmICghc2VsZikgeworICAgICAgICAqZXhjZXB0aW9uID0g
Y3JlYXRlVHlwZUVycm9yKGNvbnRleHQsICJXcm9uZyB0eXBlIl9zKTsKKyAgICAgICAgcmV0dXJu
IEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworICAgIH0KKyAgICBpZiAoYXJndW1lbnRD
b3VudCA8IDIpIHsKKyAgICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0ZVR5cGVFcnJvcihjb250ZXh0
LCAiTXVzdCBzcGVjaWZ5IHRoZSBkZXN0aW5hdGlvbiBJRCBhbmQgbWVzc2FnZSBJRCBhcyB0aGUg
Zmlyc3QgdHdvIGFyZ3VtZW50cyJfcyk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVm
aW5lZChjb250ZXh0KTsKKyAgICB9CisgICAgcmV0dXJuIHdhaXRGb3JNZXNzYWdlV2l0aEpTQXJn
dW1lbnRzKHNlbGYtPm1fdGVzdGVkQ29ubmVjdGlvbiwgY29udGV4dCwgYXJndW1lbnRDb3VudCwg
YXJndW1lbnRzLCBleGNlcHRpb24pOworfQorCiBKU09iamVjdFJlZiBKU0lQQ1N0cmVhbUNsaWVu
dENvbm5lY3Rpb246OmNyZWF0ZUpTV3JhcHBlcihKU0NvbnRleHRSZWYgY29udGV4dCkKIHsKICAg
ICBhdXRvKiBnbG9iYWxPYmplY3QgPSB0b0pTKGNvbnRleHQpOwpAQCAtNTA4LDcgKzkzOCw3IEBA
IGJvb2wgSlNJUENTdHJlYW1DbGllbnRDb25uZWN0aW9uOjpwcmVwYXJlVG9TZW5kT3V0T2ZTdHJl
YW1NZXNzYWdlKEpTQ29udGV4dFJlZiBjCiB7CiAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZv
ciBzZW5kaW5nIGluLXN0cmVhbSBJUEMgbWVzc2FnZXMgd2hlbiBhcHByb3ByaWF0ZS4KICAgICBp
ZiAoYXJndW1lbnRDb3VudCA+IDMpIHsKLSAgICAgICAgaWYgKCFlbmNvZGVBcmd1bWVudChlbmNv
ZGVyLCBqc0lQQywgY29udGV4dCwgYXJndW1lbnRzWzNdLCBleGNlcHRpb24pKQorICAgICAgICBp
ZiAoIWVuY29kZUFyZ3VtZW50KGVuY29kZXIsIGNvbnRleHQsIGFyZ3VtZW50c1szXSwgZXhjZXB0
aW9uKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTExMTgsNiArMTU0
OCw3IEBAIGNvbnN0IEpTU3RhdGljRnVuY3Rpb24qIEpTSVBDOjpzdGF0aWNGdW5jdGlvbnMoKQog
ICAgICAgICB7ICJzZW5kTWVzc2FnZSIsIHNlbmRNZXNzYWdlLCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZURvbnREZWxldGUgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IH0sCiAgICAgICAgIHsg
InNlbmRTeW5jTWVzc2FnZSIsIHNlbmRTeW5jTWVzc2FnZSwga0pTUHJvcGVydHlBdHRyaWJ1dGVE
b250RGVsZXRlIHwga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB9LAogICAgICAgICB7ICJ3
YWl0Rm9yTWVzc2FnZSIsIHdhaXRGb3JNZXNzYWdlLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnRE
ZWxldGUgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IH0sCisgICAgICAgIHsgImNyZWF0
ZUNvbm5lY3Rpb25QYWlyIiwgY3JlYXRlQ29ubmVjdGlvblBhaXIsIGtKU1Byb3BlcnR5QXR0cmli
dXRlRG9udERlbGV0ZSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfSwKICAgICAgICAg
eyAiY3JlYXRlU3RyZWFtQ2xpZW50Q29ubmVjdGlvbiIsIGNyZWF0ZVN0cmVhbUNsaWVudENvbm5l
Y3Rpb24sIGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB8IGtKU1Byb3BlcnR5QXR0cmli
dXRlUmVhZE9ubHkgfSwKICAgICAgICAgeyAiY3JlYXRlU2VtYXBob3JlIiwgY3JlYXRlU2VtYXBo
b3JlLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZVJlYWRPbmx5IH0sCiAgICAgICAgIHsgImNyZWF0ZVNoYXJlZE1lbW9yeSIsIGNyZWF0ZVNoYXJl
ZE1lbW9yeSwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIHwga0pTUHJvcGVydHlBdHRy
aWJ1dGVSZWFkT25seSB9LApAQCAtMTM1Niw2ICsxNzg3LDIxIEBAIHN0YXRpYyBib29sIGVuY29k
ZVNoYXJlZE1lbW9yeShJUEM6OkVuY29kZXImIGVuY29kZXIsIEpTQzo6SlNHbG9iYWxPYmplY3Qq
IGdsb2JhCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3N0YXRpYyBib29sIGVuY29kZUZyYW1lSW5m
b0RhdGEoSVBDOjpFbmNvZGVyJiBlbmNvZGVyLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTQzo6SlNPYmplY3QqIGpzT2JqZWN0LCBKU0M6OkNhdGNoU2NvcGUmIHNjb3BlKQor
eworICAgIGF1dG8ganNJUENWYWx1ZSA9IGpzT2JqZWN0LT5nZXQoZ2xvYmFsT2JqZWN0LCBKU0M6
OklkZW50aWZpZXI6OmZyb21TdHJpbmcoZ2xvYmFsT2JqZWN0LT52bSgpLCAidmFsdWUiX3MpKTsK
KyAgICBpZiAoc2NvcGUuZXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBS
ZWZQdHIganNJUEMgPSBKU0lQQzo6dG9XcmFwcGVkKHRvUmVmKGdsb2JhbE9iamVjdCksIHRvUmVm
KGpzSVBDVmFsdWUpKTsKKyAgICBpZiAoIWpzSVBDKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgUmVmUHRyIHdlYkZyYW1lID0ganNJUEMtPndlYkZyYW1lKCk7CisgICAgaWYgKCF3ZWJGcmFt
ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGVuY29kZXIgPDwgd2ViRnJhbWUtPmluZm8o
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogc3RhdGljIGJvb2wgZW5jb2RlU3RyZWFtQ29ubmVj
dGlvbkJ1ZmZlcihJUEM6OkVuY29kZXImIGVuY29kZXIsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIGpzVmFsdWUsIEpTQzo6Q2F0Y2hTY29wZSYgc2NvcGUp
CiB7CiAgICAgUmVmUHRyIGpzSVBDU3RyZWFtQ29ubmVjdGlvbkJ1ZmZlciA9IEpTSVBDU3RyZWFt
Q29ubmVjdGlvbkJ1ZmZlcjo6dG9XcmFwcGVkKHRvUmVmKGdsb2JhbE9iamVjdCksIHRvUmVmKGpz
VmFsdWUpKTsKQEAgLTEzNzYsOCArMTgyMiwxNyBAQCBzdGF0aWMgYm9vbCBlbmNvZGVTZW1hcGhv
cmUoSVBDOjpFbmNvZGVyJiBlbmNvZGVyLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYgog
ICAgIHJldHVybiB0cnVlOwogfQogCitzdGF0aWMgYm9vbCBlbmNvZGVBdHRhY2htZW50KElQQzo6
RW5jb2RlciYgZW5jb2RlciwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6
OkpTVmFsdWUganNWYWx1ZSwgSlNDOjpDYXRjaFNjb3BlJiBzY29wZSkKK3sKKyAgICBSZWZQdHIg
anNJUENBdHRhY2htZW50ID0gSlNJUENBdHRhY2htZW50Ojp0b1dyYXBwZWQodG9SZWYoZ2xvYmFs
T2JqZWN0KSwgdG9SZWYoanNWYWx1ZSkpOworICAgIGlmICghanNJUENBdHRhY2htZW50KQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBqc0lQQ0F0dGFjaG1lbnQtPmVuY29kZShlbmNvZGVy
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogc3RydWN0IFZlY3RvckVuY29kZUhlbHBlciB7Ci0g
ICAgUmVmPEpTSVBDPiBqc0lQQzsKICAgICBKU0NvbnRleHRSZWYgY29udGV4dDsKICAgICBKU1Zh
bHVlUmVmIHZhbHVlUmVmOwogICAgIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbjsKQEAgLTEzODcsMTIg
KzE4NDIsMTIgQEAgc3RydWN0IFZlY3RvckVuY29kZUhlbHBlciB7CiAgICAgewogICAgICAgICBp
ZiAoIXN1Y2Nlc3MpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHN1Y2Nlc3MgPSBlbmNv
ZGVBcmd1bWVudChlbmNvZGVyLCBqc0lQQy5nZXQoKSwgY29udGV4dCwgdmFsdWVSZWYsIGV4Y2Vw
dGlvbik7CisgICAgICAgIHN1Y2Nlc3MgPSBlbmNvZGVBcmd1bWVudChlbmNvZGVyLCBjb250ZXh0
LCB2YWx1ZVJlZiwgZXhjZXB0aW9uKTsKICAgICB9CiB9OwogCiBlbnVtIGNsYXNzIEFycmF5TW9k
ZSB7IFR1cGxlLCBWZWN0b3IgfTsKLXN0YXRpYyBib29sIGVuY29kZUFycmF5QXJndW1lbnQoSVBD
OjpFbmNvZGVyJiBlbmNvZGVyLCBKU0lQQyYganNJUEMsIEFycmF5TW9kZSBhcnJheU1vZGUsIEpT
Q29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIHZhbHVlUmVmLCBKU1ZhbHVlUmVmKiBleGNl
cHRpb24pCitzdGF0aWMgYm9vbCBlbmNvZGVBcnJheUFyZ3VtZW50KElQQzo6RW5jb2RlciYgZW5j
b2RlciwgQXJyYXlNb2RlIGFycmF5TW9kZSwgSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVS
ZWYgdmFsdWVSZWYsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKICAgICBhdXRvIG9iamVjdFJl
ZiA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCB2YWx1ZVJlZiwgZXhjZXB0aW9uKTsKICAgICBB
U1NFUlQob2JqZWN0UmVmKTsKQEAgLTE0MTgsNyArMTg3Myw3IEBAIHN0YXRpYyBib29sIGVuY29k
ZUFycmF5QXJndW1lbnQoSVBDOjpFbmNvZGVyJiBlbmNvZGVyLCBKU0lQQyYganNJUEMsIEFycmF5
TW9kZSBhCiAgICAgICAgIGF1dG8gaXRlbVJlZiA9IEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4
KGNvbnRleHQsIG9iamVjdFJlZiwgaSwgZXhjZXB0aW9uKTsKICAgICAgICAgaWYgKCFpdGVtUmVm
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB2ZWN0b3IuYXBwZW5kKFZlY3Rv
ckVuY29kZUhlbHBlciB7IGpzSVBDLCBjb250ZXh0LCBpdGVtUmVmLCBleGNlcHRpb24sIHN1Y2Nl
c3MgfSk7CisgICAgICAgIHZlY3Rvci5hcHBlbmQoVmVjdG9yRW5jb2RlSGVscGVyIHsgY29udGV4
dCwgaXRlbVJlZiwgZXhjZXB0aW9uLCBzdWNjZXNzIH0pOwogICAgIH0KICAgICBpZiAoYXJyYXlN
b2RlID09IEFycmF5TW9kZTo6VHVwbGUpIHsKICAgICAgICAgZm9yIChhdXRvJiBpdGVtIDogdmVj
dG9yKQpAQCAtMTQyOCw3ICsxODgzLDcgQEAgc3RhdGljIGJvb2wgZW5jb2RlQXJyYXlBcmd1bWVu
dChJUEM6OkVuY29kZXImIGVuY29kZXIsIEpTSVBDJiBqc0lQQywgQXJyYXlNb2RlIGEKICAgICBy
ZXR1cm4gc3VjY2VzczsKIH0KIAotc3RhdGljIGJvb2wgZW5jb2RlQXJndW1lbnQoSVBDOjpFbmNv
ZGVyJiBlbmNvZGVyLCBKU0lQQyYganNJUEMsIEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVl
UmVmIHZhbHVlUmVmLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCitzdGF0aWMgYm9vbCBlbmNvZGVB
cmd1bWVudChJUEM6OkVuY29kZXImIGVuY29kZXIsIEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1Zh
bHVlUmVmIHZhbHVlUmVmLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7CiAgICAgYXV0byBvYmpl
Y3RSZWYgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgdmFsdWVSZWYsIGV4Y2VwdGlvbik7CiAg
ICAgaWYgKCFvYmplY3RSZWYpCkBAIC0xNDM4LDcgKzE4OTMsNyBAQCBzdGF0aWMgYm9vbCBlbmNv
ZGVBcmd1bWVudChJUEM6OkVuY29kZXImIGVuY29kZXIsIEpTSVBDJiBqc0lQQywgSlNDb250ZXh0
UmVmIGNvbgogICAgICAgICByZXR1cm4gZW5jb2RlVHlwZWRBcnJheShlbmNvZGVyLCBjb250ZXh0
LCBvYmplY3RSZWYsIHR5cGUsIGV4Y2VwdGlvbik7CiAKICAgICBpZiAoSlNWYWx1ZUlzQXJyYXko
Y29udGV4dCwgb2JqZWN0UmVmKSkKLSAgICAgICAgcmV0dXJuIGVuY29kZUFycmF5QXJndW1lbnQo
ZW5jb2RlciwganNJUEMsIEFycmF5TW9kZTo6VHVwbGUsIGNvbnRleHQsIG9iamVjdFJlZiwgZXhj
ZXB0aW9uKTsKKyAgICAgICAgcmV0dXJuIGVuY29kZUFycmF5QXJndW1lbnQoZW5jb2RlciwgQXJy
YXlNb2RlOjpUdXBsZSwgY29udGV4dCwgb2JqZWN0UmVmLCBleGNlcHRpb24pOwogCiAgICAgYXV0
byogZ2xvYmFsT2JqZWN0ID0gdG9KUyhjb250ZXh0KTsKICAgICBhdXRvJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKQEAgLTE1MDUsMTIgKzE5NjAsMTAgQEAgc3RhdGljIGJvb2wgZW5jb2RlQXJn
dW1lbnQoSVBDOjpFbmNvZGVyJiBlbmNvZGVyLCBKU0lQQyYganNJUEMsIEpTQ29udGV4dFJlZiBj
b24KICAgICB9CiAKICAgICBpZiAodHlwZSA9PSAiRnJhbWVJbmZvRGF0YSIpIHsKLSAgICAgICAg
UmVmUHRyIHdlYkZyYW1lID0ganNJUEMud2ViRnJhbWUoKTsKLSAgICAgICAgaWYgKCF3ZWJGcmFt
ZSkgeworICAgICAgICBpZiAoIWVuY29kZUZyYW1lSW5mb0RhdGEoZW5jb2RlciwgZ2xvYmFsT2Jq
ZWN0LCBqc09iamVjdCwgc2NvcGUpKSB7CiAgICAgICAgICAgICAqZXhjZXB0aW9uID0gY3JlYXRl
VHlwZUVycm9yKGNvbnRleHQsICJGYWlsZWQgdG8gZ2V0IHRoZSBmcmFtZSJfcyk7CiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgZW5jb2RlciA8PCB3ZWJGcmFt
ZS0+aW5mbygpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTE1MzQsMTIgKzE5
ODcsMjAgQEAgc3RhdGljIGJvb2wgZW5jb2RlQXJndW1lbnQoSVBDOjpFbmNvZGVyJiBlbmNvZGVy
LCBKU0lQQyYganNJUEMsIEpTQ29udGV4dFJlZiBjb24KICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogCisgICAgaWYgKHR5cGUgPT0gIkF0dGFjaG1lbnQiKSB7CisgICAgICAgIGlmICghZW5j
b2RlQXR0YWNobWVudChlbmNvZGVyLCBnbG9iYWxPYmplY3QsIGpzVmFsdWUsIHNjb3BlKSkgewor
ICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0ZVR5cGVFcnJvcihjb250ZXh0LCAiRmFpbGVk
IHRvIGNvbnZlcnQgQXR0YWNobWVudCJfcyk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCiAgICAgaWYgKHR5cGUgPT0g
IlZlY3RvciIpIHsKICAgICAgICAgaWYgKCFqc1ZhbHVlLmluaGVyaXRzPEpTQzo6SlNBcnJheT4o
KSkgewogICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0ZVR5cGVFcnJvcihjb250ZXh0LCAi
VmVjdG9yIHZhbHVlIG11c3QgYmUgYW4gYXJyYXkiX3MpOwogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBlbmNvZGVBcnJheUFyZ3VtZW50KGVuY29k
ZXIsIGpzSVBDLCBBcnJheU1vZGU6OlZlY3RvciwgY29udGV4dCwgdG9SZWYoZ2xvYmFsT2JqZWN0
LCBqc1ZhbHVlKSwgZXhjZXB0aW9uKTsKKyAgICAgICAgcmV0dXJuIGVuY29kZUFycmF5QXJndW1l
bnQoZW5jb2RlciwgQXJyYXlNb2RlOjpWZWN0b3IsIGNvbnRleHQsIHRvUmVmKGdsb2JhbE9iamVj
dCwganNWYWx1ZSksIGV4Y2VwdGlvbik7CiAgICAgfQogCiAgICAgaWYgKHR5cGUgPT0gIlN0cmlu
ZyIpIHsKQEAgLTE2NzAsMTg1ICsyMTMxLDc4IEBAIEpTVmFsdWVSZWYgSlNJUEM6OnNlbmRNZXNz
YWdlKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiwgSlNPYmplY3RSZWYgdGhpCiAg
ICAgICAgICpleGNlcHRpb24gPSBjcmVhdGVUeXBlRXJyb3IoY29udGV4dCwgIldyb25nIHR5cGUi
X3MpOwogICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiAgICAg
fQotCiAgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAzKSB7CiAgICAgICAgICpleGNlcHRpb24gPSBj
cmVhdGVUeXBlRXJyb3IoY29udGV4dCwgIk11c3Qgc3BlY2lmeSB0aGUgdGFyZ2V0IHByb2Nlc3Ms
IGRlc3RpbmF0aW9uIElELCBhbmQgbWVzc2FnZSBJRCBhcyB0aGUgZmlyc3QgdGhyZWUgYXJndW1l
bnRzIl9zKTsKICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwog
ICAgIH0KLQogICAgIGF1dG8gY29ubmVjdGlvbiA9IHByb2Nlc3NUYXJnZXRGcm9tQXJndW1lbnQo
Z2xvYmFsT2JqZWN0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbik7CiAgICAgaWYgKCFjb25uZWN0
aW9uKQogICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci0KLSAg
ICBhdXRvIGRlc3RpbmF0aW9uSUQgPSBkZXN0aW5hdGlvbklERnJvbUFyZ3VtZW50KGdsb2JhbE9i
amVjdCwgYXJndW1lbnRzWzFdLCBleGNlcHRpb24pOwotICAgIGlmICghZGVzdGluYXRpb25JRCkK
LSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotCi0gICAgYXV0
byBtZXNzYWdlSUQgPSBtZXNzYWdlSURGcm9tQXJndW1lbnQoZ2xvYmFsT2JqZWN0LCBhcmd1bWVu
dHNbMl0sIGV4Y2VwdGlvbik7Ci0gICAgaWYgKCFtZXNzYWdlSUQpCi0gICAgICAgIHJldHVybiBK
U1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLQotICAgIGF1dG8gbWVzc2FnZU5hbWUgPSBz
dGF0aWNfY2FzdDxJUEM6Ok1lc3NhZ2VOYW1lPigqbWVzc2FnZUlEKTsKLSAgICBhdXRvIGVuY29k
ZXIgPSBtYWtlVW5pcXVlUmVmPElQQzo6RW5jb2Rlcj4obWVzc2FnZU5hbWUsICpkZXN0aW5hdGlv
bklEKTsKLQotICAgIEpTVmFsdWVSZWYgcmV0dXJuVmFsdWUgPSBKU1ZhbHVlTWFrZVVuZGVmaW5l
ZChjb250ZXh0KTsKLQotICAgIGJvb2wgaGFzUmVwbHkgPSAhIW1lc3NhZ2VSZXBseUFyZ3VtZW50
RGVzY3JpcHRpb25zKG1lc3NhZ2VOYW1lKTsKLSAgICBpZiAoaGFzUmVwbHkpIHsKLSAgICAgICAg
dWludDY0X3QgbGlzdGVuZXJJRCA9IElQQzo6bmV4dEFzeW5jUmVwbHlIYW5kbGVySUQoKTsKLSAg
ICAgICAgZW5jb2Rlci5nZXQoKSA8PCBsaXN0ZW5lcklEOwotCi0gICAgICAgIEpTT2JqZWN0UmVm
IHJlc29sdmU7Ci0gICAgICAgIEpTT2JqZWN0UmVmIHJlamVjdDsKLUFMTE9XX05FV19BUElfV0lU
SE9VVF9HVUFSRFNfQkVHSU4KLSAgICAgICAgcmV0dXJuVmFsdWUgPSBKU09iamVjdE1ha2VEZWZl
cnJlZFByb21pc2UoY29udGV4dCwgJnJlc29sdmUsICZyZWplY3QsIGV4Y2VwdGlvbik7Ci1BTExP
V19ORVdfQVBJX1dJVEhPVVRfR1VBUkRTX0VORAotICAgICAgICBpZiAoIXJldHVyblZhbHVlKQot
ICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotCi0gICAg
ICAgIEpTR2xvYmFsQ29udGV4dFJldGFpbihKU0NvbnRleHRHZXRHbG9iYWxDb250ZXh0KGNvbnRl
eHQpKTsKLSAgICAgICAgSlNWYWx1ZVByb3RlY3QoY29udGV4dCwgcmVzb2x2ZSk7Ci0gICAgICAg
IEpTVmFsdWVQcm90ZWN0KGNvbnRleHQsIHJlamVjdCk7Ci0gICAgICAgIElQQzo6YWRkQXN5bmNS
ZXBseUhhbmRsZXIoKmNvbm5lY3Rpb24sIGxpc3RlbmVySUQsIFttZXNzYWdlTmFtZSwgY29udGV4
dCwgcmVzb2x2ZSwgcmVqZWN0XShJUEM6OkRlY29kZXIqIHJlcGx5RGVjb2RlcikgewotICAgICAg
ICAgICAgYXV0byogZ2xvYmFsT2JqZWN0ID0gdG9KUyhjb250ZXh0KTsKLSAgICAgICAgICAgIGF1
dG8mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgICAgICAgICAgSlNDOjpKU0xvY2tIb2xk
ZXIgbG9jayh2bSk7Ci0KLSAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1ND
T1BFKHZtKTsKLSAgICAgICAgICAgIGF1dG8qIGpzUmVzdWx0ID0ganNSZXN1bHRGcm9tUmVwbHlE
ZWNvZGVyKGdsb2JhbE9iamVjdCwgbWVzc2FnZU5hbWUsICpyZXBseURlY29kZXIpOwotICAgICAg
ICAgICAgaWYgKGF1dG8qIGV4Y2VwdGlvbiA9IHNjb3BlLmV4Y2VwdGlvbigpKSB7Ci0gICAgICAg
ICAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKLSAgICAgICAgICAgICAgICBKU1ZhbHVl
UmVmIGFyZ3VtZW50c1tdID0geyB0b1JlZihnbG9iYWxPYmplY3QsIGV4Y2VwdGlvbikgfTsKLSAg
ICAgICAgICAgICAgICBKU09iamVjdENhbGxBc0Z1bmN0aW9uKGNvbnRleHQsIHJlamVjdCwgcmVq
ZWN0LCAxLCBhcmd1bWVudHMsIG51bGxwdHIpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdID0geyB0b1JlZihnbG9iYWxPYmplY3Qs
IGpzUmVzdWx0KSB9OwotICAgICAgICAgICAgICAgIEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb24oY29u
dGV4dCwgcmVzb2x2ZSwgcmVzb2x2ZSwgMSwgYXJndW1lbnRzLCBudWxscHRyKTsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgSlNWYWx1ZVVucHJvdGVjdChjb250ZXh0LCByZWplY3QpOwot
ICAgICAgICAgICAgSlNWYWx1ZVVucHJvdGVjdChjb250ZXh0LCByZXNvbHZlKTsKLSAgICAgICAg
ICAgIEpTR2xvYmFsQ29udGV4dFJlbGVhc2UoSlNDb250ZXh0R2V0R2xvYmFsQ29udGV4dChjb250
ZXh0KSk7Ci0gICAgICAgIH0pOwotICAgIH0KLQotICAgIGlmIChhcmd1bWVudENvdW50ID4gMykg
ewotICAgICAgICBpZiAoIWVuY29kZUFyZ3VtZW50KGVuY29kZXIuZ2V0KCksICpqc0lQQywgY29u
dGV4dCwgYXJndW1lbnRzWzNdLCBleGNlcHRpb24pKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFs
dWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotICAgIH0KLQotICAgIC8vIEZJWE1FOiBBZGQgdGhl
IHN1cHBvcnQgZm9yIHNwZWNpZnlpbmcgSVBDIG9wdGlvbnMuCi0KLSAgICBjb25uZWN0aW9uLT5z
ZW5kTWVzc2FnZShXVEZNb3ZlKGVuY29kZXIpLCB7IH0pOwotCi0gICAgcmV0dXJuIHJldHVyblZh
bHVlOworICAgIHJldHVybiBzZW5kTWVzc2FnZVdpdGhKU0FyZ3VtZW50cygqY29ubmVjdGlvbiwg
Y29udGV4dCwgYXJndW1lbnRDb3VudCAtIDEsIGFyZ3VtZW50cyArIDEsIGV4Y2VwdGlvbik7CiB9
CiAKLXN0cnVjdCBTeW5jSVBDTWVzc2FnZUluZm8gewotICAgIFJlZjxJUEM6OkNvbm5lY3Rpb24+
IGNvbm5lY3Rpb247Ci0gICAgdWludDY0X3QgZGVzdGluYXRpb25JRDsKLSAgICBJUEM6Ok1lc3Nh
Z2VOYW1lIG1lc3NhZ2VOYW1lOwotICAgIElQQzo6VGltZW91dCB0aW1lb3V0OwotfTsKLQotc3Rh
dGljIHN0ZDo6b3B0aW9uYWw8U3luY0lQQ01lc3NhZ2VJbmZvPiBleHRyYWN0U3luY0lQQ01lc3Nh
Z2VJbmZvKEpTQ29udGV4dFJlZiBjb250ZXh0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3Qg
SlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQorSlNWYWx1ZVJl
ZiBKU0lQQzo6d2FpdEZvck1lc3NhZ2UoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVm
LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNW
YWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewotICAgIGlmIChh
cmd1bWVudENvdW50IDwgNCkgeworICAgIFJlZlB0ciBqc0lQQyA9IHRvV3JhcHBlZChjb250ZXh0
LCB0aGlzT2JqZWN0KTsKKyAgICBpZiAoIWpzSVBDKSB7CisgICAgICAgICpleGNlcHRpb24gPSBj
cmVhdGVUeXBlRXJyb3IoY29udGV4dCwgIldyb25nIHR5cGUiX3MpOworICAgICAgICByZXR1cm4g
SlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisgICAgfQorICAgIGlmIChhcmd1bWVudENv
dW50IDwgMykgewogICAgICAgICAqZXhjZXB0aW9uID0gY3JlYXRlVHlwZUVycm9yKGNvbnRleHQs
ICJNdXN0IHNwZWNpZnkgdGhlIHRhcmdldCBwcm9jZXNzLCBkZXN0aW5hdGlvbiBJRCwgYW5kIG1l
c3NhZ2UgSUQgYXMgdGhlIGZpcnN0IHRocmVlIGFyZ3VtZW50cyJfcyk7Ci0gICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7CisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250
ZXh0KTsKICAgICB9Ci0KICAgICBhdXRvKiBnbG9iYWxPYmplY3QgPSB0b0pTKGNvbnRleHQpOwor
ICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soZ2xvYmFsT2JqZWN0LT52bSgpKTsKICAgICBhdXRv
IGNvbm5lY3Rpb24gPSBwcm9jZXNzVGFyZ2V0RnJvbUFyZ3VtZW50KGdsb2JhbE9iamVjdCwgYXJn
dW1lbnRzWzBdLCBleGNlcHRpb24pOwogICAgIGlmICghY29ubmVjdGlvbikKLSAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgIGF1dG8gZGVzdGluYXRpb25JRCA9IGRlc3RpbmF0aW9u
SURGcm9tQXJndW1lbnQoZ2xvYmFsT2JqZWN0LCBhcmd1bWVudHNbMV0sIGV4Y2VwdGlvbik7Ci0g
ICAgaWYgKCFkZXN0aW5hdGlvbklEKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0g
ICAgYXV0byBtZXNzYWdlSUQgPSBtZXNzYWdlSURGcm9tQXJndW1lbnQoZ2xvYmFsT2JqZWN0LCBh
cmd1bWVudHNbMl0sIGV4Y2VwdGlvbik7Ci0gICAgaWYgKCFtZXNzYWdlSUQpCi0gICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICBTZWNvbmRzIHRpbWVvdXREdXJhdGlvbjsKLSAgICB7
Ci0gICAgICAgIGF1dG8ganNWYWx1ZSA9IHRvSlMoZ2xvYmFsT2JqZWN0LCBhcmd1bWVudHNbM10p
OwotICAgICAgICBpZiAoIWpzVmFsdWUuaXNOdW1iZXIoKSkgewotICAgICAgICAgICAgKmV4Y2Vw
dGlvbiA9IGNyZWF0ZVR5cGVFcnJvcihjb250ZXh0LCAiVGltZW91dCBtdXN0IGJlIGEgbnVtYmVy
Il9zKTsKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgICAgIH0KLSAgICAg
ICAgdGltZW91dER1cmF0aW9uID0gU2Vjb25kcyB7IGpzVmFsdWUuYXNOdW1iZXIoKSB9OwotICAg
IH0KLQotICAgIHJldHVybiB7IHsgY29ubmVjdGlvbi5yZWxlYXNlTm9uTnVsbCgpLCAqZGVzdGlu
YXRpb25JRCwgc3RhdGljX2Nhc3Q8SVBDOjpNZXNzYWdlTmFtZT4oKm1lc3NhZ2VJRCksIHsgdGlt
ZW91dER1cmF0aW9uIH0gfSB9OworICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQo
Y29udGV4dCk7CisgICAgcmV0dXJuIHdhaXRGb3JNZXNzYWdlV2l0aEpTQXJndW1lbnRzKCpjb25u
ZWN0aW9uLCBjb250ZXh0LCBhcmd1bWVudENvdW50IC0gMSwgYXJndW1lbnRzICsgMSwgZXhjZXB0
aW9uKTsKIH0KIAotSlNWYWx1ZVJlZiBKU0lQQzo6d2FpdEZvck1lc3NhZ2UoSlNDb250ZXh0UmVm
IGNvbnRleHQsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJn
dW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhj
ZXB0aW9uKQorSlNWYWx1ZVJlZiBKU0lQQzo6c2VuZFN5bmNNZXNzYWdlKEpTQ29udGV4dFJlZiBj
b250ZXh0LCBKU09iamVjdFJlZiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3Vt
ZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2Vw
dGlvbikKIHsKLSAgICBhdXRvKiBnbG9iYWxPYmplY3QgPSB0b0pTKGNvbnRleHQpOwotICAgIEpT
Qzo6SlNMb2NrSG9sZGVyIGxvY2soZ2xvYmFsT2JqZWN0LT52bSgpKTsKICAgICBSZWZQdHIganNJ
UEMgPSB0b1dyYXBwZWQoY29udGV4dCwgdGhpc09iamVjdCk7CiAgICAgaWYgKCFqc0lQQykgewog
ICAgICAgICAqZXhjZXB0aW9uID0gY3JlYXRlVHlwZUVycm9yKGNvbnRleHQsICJXcm9uZyB0eXBl
Il9zKTsKICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogICAg
IH0KLQotICAgIGF1dG8gaW5mbyA9IGV4dHJhY3RTeW5jSVBDTWVzc2FnZUluZm8oY29udGV4dCwg
YXJndW1lbnRDb3VudCwgYXJndW1lbnRzLCBleGNlcHRpb24pOwotICAgIGlmICghaW5mbykKKyAg
ICBpZiAoYXJndW1lbnRDb3VudCA8IDMpIHsKKyAgICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0ZVR5
cGVFcnJvcihjb250ZXh0LCAiTXVzdCBzcGVjaWZ5IHRoZSB0YXJnZXQgcHJvY2VzcywgZGVzdGlu
YXRpb24gSUQsIGFuZCBtZXNzYWdlIElEIGFzIHRoZSBmaXJzdCB0aHJlZSBhcmd1bWVudHMiX3Mp
OwogICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci0KLSAgICBh
dXRvIFtjb25uZWN0aW9uLCBkZXN0aW5hdGlvbklELCBtZXNzYWdlTmFtZSwgdGltZW91dF0gPSAq
aW5mbzsKLSAgICBpZiAoYXV0byBkZWNvZGVyID0gY29ubmVjdGlvbi0+d2FpdEZvck1lc3NhZ2Uo
bWVzc2FnZU5hbWUsIGRlc3RpbmF0aW9uSUQsIHRpbWVvdXQsIHsgfSkpIHsKLSAgICAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUoZ2xvYmFsT2JqZWN0LT52bSgpKTsKLSAgICAg
ICAgYXV0byBqc1Jlc3VsdCA9IGpzVmFsdWVGb3JBcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBtZXNz
YWdlTmFtZSwgKmRlY29kZXIpOwotICAgICAgICBpZiAoc2NvcGUuZXhjZXB0aW9uKCkpIHsKLSAg
ICAgICAgICAgICpleGNlcHRpb24gPSB0b1JlZihnbG9iYWxPYmplY3QsIHNjb3BlLmV4Y2VwdGlv
bigpKTsKLSAgICAgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAgICAgICAgICBy
ZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci0gICAgICAgIH0KLSAgICAgICAg
cmV0dXJuIGpzUmVzdWx0ID8gdG9SZWYoZ2xvYmFsT2JqZWN0LCAqanNSZXN1bHQpIDogSlNWYWx1
ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiAgICAgfQotICAgIHJldHVybiBKU1ZhbHVlTWFrZVVu
ZGVmaW5lZChjb250ZXh0KTsKKyAgICBhdXRvKiBnbG9iYWxPYmplY3QgPSB0b0pTKGNvbnRleHQp
OworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soZ2xvYmFsT2JqZWN0LT52bSgpKTsKKyAgICBh
dXRvIGNvbm5lY3Rpb24gPSBwcm9jZXNzVGFyZ2V0RnJvbUFyZ3VtZW50KGdsb2JhbE9iamVjdCwg
YXJndW1lbnRzWzBdLCBleGNlcHRpb24pOworICAgIGlmICghY29ubmVjdGlvbikKKyAgICAgICAg
cmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworICAgIHJldHVybiBzZW5kU3lu
Y01lc3NhZ2VXaXRoSlNBcmd1bWVudHMoKmNvbm5lY3Rpb24sIGNvbnRleHQsIGFyZ3VtZW50Q291
bnQgLSAxLCBhcmd1bWVudHMgKyAxLCBleGNlcHRpb24pOwogfQogCi1KU1ZhbHVlUmVmIEpTSVBD
OjpzZW5kU3luY01lc3NhZ2UoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmLCBKU09i
amVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJl
ZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQorSlNWYWx1ZVJlZiBKU0lQQzo6
Y3JlYXRlQ29ubmVjdGlvblBhaXIoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmLCBK
U09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1
ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewotICAgIGF1dG8qIGds
b2JhbE9iamVjdCA9IHRvSlMoY29udGV4dCk7Ci0gICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhn
bG9iYWxPYmplY3QtPnZtKCkpOwogICAgIFJlZlB0ciBqc0lQQyA9IHRvV3JhcHBlZChjb250ZXh0
LCB0aGlzT2JqZWN0KTsKICAgICBpZiAoIWpzSVBDKSB7CiAgICAgICAgICpleGNlcHRpb24gPSBj
cmVhdGVUeXBlRXJyb3IoY29udGV4dCwgIldyb25nIHR5cGUiX3MpOwogICAgICAgICByZXR1cm4g
SlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiAgICAgfQotCi0gICAgYXV0byBpbmZvID0g
ZXh0cmFjdFN5bmNJUENNZXNzYWdlSW5mbyhjb250ZXh0LCBhcmd1bWVudENvdW50LCBhcmd1bWVu
dHMsIGV4Y2VwdGlvbik7Ci0gICAgaWYgKCFpbmZvKQorICAgIGF1dG8gY29ubmVjdGlvbklkZW50
aWZpZXJzID0gSVBDOjpDb25uZWN0aW9uOjpjcmVhdGVDb25uZWN0aW9uSWRlbnRpZmllclBhaXIo
KTsKKyAgICBpZiAoIWNvbm5lY3Rpb25JZGVudGlmaWVycykKICAgICAgICAgcmV0dXJuIEpTVmFs
dWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotCi0gICAgYXV0byBbY29ubmVjdGlvbiwgZGVzdGlu
YXRpb25JRCwgbWVzc2FnZU5hbWUsIHRpbWVvdXRdID0gKmluZm87Ci0KLSAgICAvLyBGSVhNRTog
U3VwcG9ydCB0aGUgb3B0aW9ucy4KLQotICAgIElQQzo6Q29ubmVjdGlvbjo6U3luY1JlcXVlc3RJ
RCBzeW5jUmVxdWVzdElEOwotICAgIGF1dG8gZW5jb2RlciA9IGNvbm5lY3Rpb24tPmNyZWF0ZVN5
bmNNZXNzYWdlRW5jb2RlcihtZXNzYWdlTmFtZSwgZGVzdGluYXRpb25JRCwgc3luY1JlcXVlc3RJ
RCk7Ci0KLSAgICBpZiAoYXJndW1lbnRDb3VudCA+IDQpIHsKLSAgICAgICAgaWYgKCFlbmNvZGVB
cmd1bWVudChlbmNvZGVyLmdldCgpLCAqanNJUEMsIGNvbnRleHQsIGFyZ3VtZW50c1s0XSwgZXhj
ZXB0aW9uKSkKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0
KTsKLSAgICB9Ci0KLSAgICBpZiAoYXV0byByZXBseURlY29kZXIgPSBjb25uZWN0aW9uLT5zZW5k
U3luY01lc3NhZ2Uoc3luY1JlcXVlc3RJRCwgV1RGTW92ZShlbmNvZGVyKSwgdGltZW91dCwgeyB9
KSkgewotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRShnbG9iYWxPYmpl
Y3QtPnZtKCkpOwotICAgICAgICBhdXRvKiBqc1Jlc3VsdCA9IGpzUmVzdWx0RnJvbVJlcGx5RGVj
b2RlcihnbG9iYWxPYmplY3QsIG1lc3NhZ2VOYW1lLCAqcmVwbHlEZWNvZGVyKTsKLSAgICAgICAg
aWYgKHNjb3BlLmV4Y2VwdGlvbigpKSB7Ci0gICAgICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYo
Z2xvYmFsT2JqZWN0LCBzY29wZS5leGNlcHRpb24oKSk7Ci0gICAgICAgICAgICBzY29wZS5jbGVh
ckV4Y2VwdGlvbigpOwotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNv
bnRleHQpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0b1JlZihnbG9iYWxPYmplY3QsIGpz
UmVzdWx0KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4
dCk7CisgICAgYXV0byogZ2xvYmFsT2JqZWN0ID0gdG9KUyhjb250ZXh0KTsKKyAgICBKU0M6OkpT
TG9ja0hvbGRlciBsb2NrKGdsb2JhbE9iamVjdC0+dm0oKSk7CisgICAgYXV0byYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0p
OworICAgIEpTQzo6SlNPYmplY3QqIGNvbm5lY3Rpb25QYWlyT2JqZWN0ID0gSlNDOjpjb25zdHJ1
Y3RFbXB0eUFycmF5KGdsb2JhbE9iamVjdCwgbnVsbHB0cik7CisgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCkpOworICAgIGludCBpbmRl
eCA9IDA7CisgICAgYXV0byBqc1ZhbHVlID0gdG9KUyhnbG9iYWxPYmplY3QsIEpTSVBDQ29ubmVj
dGlvbjo6Y3JlYXRlKFdURk1vdmUoY29ubmVjdGlvbklkZW50aWZpZXJzLT5zZXJ2ZXIpKS0+Y3Jl
YXRlSlNXcmFwcGVyKGNvbnRleHQpKTsKKyAgICBjb25uZWN0aW9uUGFpck9iamVjdC0+cHV0RGly
ZWN0SW5kZXgoZ2xvYmFsT2JqZWN0LCBpbmRleCsrLCBqc1ZhbHVlKTsKKyAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KSk7CisgICAganNW
YWx1ZSA9IHRvSlMoZ2xvYmFsT2JqZWN0LCBKU0lQQ0F0dGFjaG1lbnQ6OmNyZWF0ZShXVEZNb3Zl
KGNvbm5lY3Rpb25JZGVudGlmaWVycy0+Y2xpZW50KSktPmNyZWF0ZUpTV3JhcHBlcihjb250ZXh0
KSk7CisgICAgY29ubmVjdGlvblBhaXJPYmplY3QtPnB1dERpcmVjdEluZGV4KGdsb2JhbE9iamVj
dCwgaW5kZXgrKywganNWYWx1ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNW
YWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCkpOworICAgIHJldHVybiB0b1JlZih2bSwgY29ubmVj
dGlvblBhaXJPYmplY3QpOwogfQogCiBKU1ZhbHVlUmVmIEpTSVBDOjpjcmVhdGVTdHJlYW1DbGll
bnRDb25uZWN0aW9uKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiwgSlNPYmplY3RS
ZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJn
dW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5n
ZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBkZGZlNzk2MDQ4M2UwMTY4Zjg2MzJhZjE2MTRh
ZWZkMDE5ZmIwYzA5Li43MjBiZDZiNmIzNWY5NzRmZDQ1ODM0ZjVjM2Y1Zjc3Yzc4MGM0OTU0IDEw
MDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTUgQEAKKzIwMjItMDQtMTkgIEtpbW1vIEtpbm51bmVuICA8a2tpbm51bmVuQGFwcGxlLmNv
bT4KKworICAgICAgICBJUEMgdGVzdGluZyBBUEkgc2hvdWxkIGhhdmUgdGhlIGFiaWxpdHkgdG8g
dGVzdCBJUEM6OkNvbm5lY3Rpb24gc2VuZCBhbmQgcmVjZWl2ZSB0aHJvdWdoIElQQzo6Q29ubmVj
dGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM5
NDk1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgKiBUZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lQQ1Rlc3RpbmdBUEkubW06CisgICAgICAgIChU
RVNUKToKKyAgICAgICAgQ2hhbmdlIHR3byB0ZXN0cyB0byBwYXNzICJJUEMiIG9iamVjdCBhcyB0
aGUgdmFsdWUgb2YgRnJhbWVJbmZvRGF0YS4gVGhpcyB3YXkgdGhlIGFyZ3VtZW50IGVuY29kZSBm
dW5jdGlvbnMKKyAgICAgICAgZG8gbm90IG5lZWQgdG8gdGFrZSB0aGUgSlNJUEMgYXJndW1lbnQu
CisKIDIwMjItMDQtMjEgIEpvaG4gQ3VubmluZ2hhbSAgPGpvaG5jdW5uaW5naGFtQGFwcGxlLmNv
bT4KIAogICAgICAgICBVc2UgR0NHTFNwYW5UdXBsZSB0byBwYXNzIGJ1ZmZlciBwYXJhbWV0ZXJz
IHRvIG11bHRpZHJhdyBjYWxscy4KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvSVBDVGVzdGluZ0FQSS5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvSVBDVGVzdGluZ0FQSS5tbQppbmRleCBjMzkyNTBhMmQ0OGExNTI5ZWUy
MDZiNTM5NTJlMzJiZjY2NDZhNjhhLi41NzVkOGQzMzdlOTkxZGIxNTBkNjVkYzZiZTMxMTcwOWRh
ZTE2YTIyIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L0lQQ1Rlc3RpbmdBUEkubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9JUENUZXN0aW5nQVBJLm1tCkBAIC0xNzcsNyArMTc3LDcgQEAgVEVTVChJUENUZXN0aW5n
QVBJLCBDYW5TZW5kQWxlcnQpCiAKICAgICBkb25lID0gZmFsc2U7CiAgICAgW3dlYlZpZXcgc3lu
Y2hyb25vdXNseUxvYWRIVE1MU3RyaW5nOkAiPCFET0NUWVBFIGh0bWw+PHNjcmlwdD5JUEMuc2Vu
ZFN5bmNNZXNzYWdlKCdVSScsIElQQy53ZWJQYWdlUHJveHlJRCwgSVBDLm1lc3NhZ2VzLldlYlBh
Z2VQcm94eV9SdW5KYXZhU2NyaXB0QWxlcnQubmFtZSwgMTAwLCIKLSAgICAgICAgIlt7dHlwZTog
J3VpbnQ2NF90JywgdmFsdWU6IElQQy5mcmFtZUlEfSwge3R5cGU6ICdGcmFtZUluZm9EYXRhJ30s
IHsndHlwZSc6ICdTdHJpbmcnLCAndmFsdWUnOiAnaGknfV0pOzwvc2NyaXB0PiJdOworICAgICAg
ICAiW3t0eXBlOiAndWludDY0X3QnLCB2YWx1ZTogSVBDLmZyYW1lSUR9LCB7dHlwZTogJ0ZyYW1l
SW5mb0RhdGEnLCB2YWx1ZTogSVBDfSwgeyd0eXBlJzogJ1N0cmluZycsICd2YWx1ZSc6ICdoaSd9
XSk7PC9zY3JpcHQ+Il07CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKIAog
ICAgIEVYUEVDVF9TVFJFUShbYWxlcnRNZXNzYWdlIFVURjhTdHJpbmddLCAiaGkiKTsKQEAgLTQx
NCw3ICs0MTQsNyBAQCBURVNUKElQQ1Rlc3RpbmdBUEksIERlY29kZXNSZXBseUFyZ3VtZW50c0Zv
clByb21wdCkKICAgICBkb25lID0gZmFsc2U7CiAgICAgcHJvbXB0UmVzdWx0ID0gQCJmb28iOwog
ICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZzpAIjwhRE9DVFlQRSBodG1s
PjxzY3JpcHQ+cmVzdWx0ID0gSVBDLnNlbmRTeW5jTWVzc2FnZSgnVUknLCBJUEMud2ViUGFnZVBy
b3h5SUQsIElQQy5tZXNzYWdlcy5XZWJQYWdlUHJveHlfUnVuSmF2YVNjcmlwdFByb21wdC5uYW1l
LCAxMDAsIgotICAgICAgICAiW3t0eXBlOiAndWludDY0X3QnLCB2YWx1ZTogSVBDLmZyYW1lSUR9
LCB7dHlwZTogJ0ZyYW1lSW5mb0RhdGEnfSwgeyd0eXBlJzogJ1N0cmluZycsICd2YWx1ZSc6ICdo
aSd9LCB7J3R5cGUnOiAnU3RyaW5nJywgJ3ZhbHVlJzogJ2Jhcid9XSk7PC9zY3JpcHQ+Il07Cisg
ICAgICAgICJbe3R5cGU6ICd1aW50NjRfdCcsIHZhbHVlOiBJUEMuZnJhbWVJRH0sIHt0eXBlOiAn
RnJhbWVJbmZvRGF0YScsIHZhbHVlOiBJUEN9LCB7J3R5cGUnOiAnU3RyaW5nJywgJ3ZhbHVlJzog
J2hpJ30sIHsndHlwZSc6ICdTdHJpbmcnLCAndmFsdWUnOiAnYmFyJ31dKTs8L3NjcmlwdD4iXTsK
ICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOwogCiAgICAgRVhQRUNUX1NUUkVR
KFtwcm9tcHREZWZhdWx0IFVURjhTdHJpbmddLCAiYmFyIik7CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMjJjYjAxZGUxM2E0
YTk2ZjRiZTAzMjY0ZmE1MDllMGJiZDUwMWZlYy4uY2I0YmNjMzM1OGMxODM1OGQ1NTFiZWU5MTkw
ZmM4NzBiOGI5NWFkYyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xh
eW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDIyLTA0LTE5ICBLaW1tbyBL
aW5udW5lbiAgPGtraW5udW5lbkBhcHBsZS5jb20+CisKKyAgICAgICAgSVBDIHRlc3RpbmcgQVBJ
IHNob3VsZCBoYXZlIHRoZSBhYmlsaXR5IHRvIHRlc3QgSVBDOjpDb25uZWN0aW9uIHNlbmQgYW5k
IHJlY2VpdmUgdGhyb3VnaCBJUEM6OkNvbm5lY3Rpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzOTQ5NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogaXBjL2NyZWF0ZS1jb25uZWN0aW9uLWFuZC1zZW5k
LWFzeW5jLmh0bWw6IEFkZGVkLgorCiAyMDIyLTA0LTIyICBUeWxlciBXaWxjb2NrICA8dHlsZXJf
d0BhcHBsZS5jb20+CiAKICAgICAgICAgQVg6IFRoZSBpc29sYXRlZCB0cmVlIGlzIG5vdCB1cGRh
dGVkIGFmdGVyIHJvbGUgY2hhbmdlcyBpbiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojp1cGRh
dGVSb2xlQWZ0ZXJDaGlsZHJlbkNyZWF0aW9uKCkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2lw
Yy9jcmVhdGUtY29ubmVjdGlvbi1hbmQtc2VuZC1hc3luYy1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy9pcGMvY3JlYXRlLWNvbm5lY3Rpb24tYW5kLXNlbmQtYXN5bmMtZXhwZWN0ZWQudHh0Cm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjZhZmY3N2RiM2I4YTZhMDIxNGY2OTBkYzQ1ODg4NzY1ZjNjZTdiMjQKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pcGMvY3JlYXRlLWNvbm5lY3Rpb24tYW5kLXNlbmQt
YXN5bmMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNCBAQAorCitQQVNTIFNlbmRpbmcgYXN5bmMg
bWVzc2FnZXMgZnJvbSB0aGUgc2VydmVyIGltbWVkaWF0ZWx5IGFmdGVyIG9wZW5pbmcgYSBuZXcg
Y29ubmVjdGlvbiB3b3Jrcy4KK1BBU1MgU2VuZGluZyBhc3luYyBtZXNzYWdlcyBmcm9tIHRoZSBj
bGllbnQgaW1tZWRpYXRlbHkgYWZ0ZXIgb3BlbmluZyB0aGUgY29ubmVjdGlvbiB3b3Jrcy4KKwpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaXBjL2NyZWF0ZS1jb25uZWN0aW9uLWFuZC1zZW5kLWFz
eW5jLmh0bWwgYi9MYXlvdXRUZXN0cy9pcGMvY3JlYXRlLWNvbm5lY3Rpb24tYW5kLXNlbmQtYXN5
bmMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi43OThjMmZhMjYwODcxMmY0YWNhNDc3NTJkYmQ1NWZlOTFkYmM3
NTM1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaXBjL2NyZWF0ZS1jb25uZWN0aW9u
LWFuZC1zZW5kLWFzeW5jLmh0bWwKQEAgLTAsMCArMSw3MiBAQAorPCFkb2N0eXBlIGh0bWw+PCEt
LSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBJUENUZXN0aW5nQVBJRW5hYmxlZD10cnVlIF0gLS0+Cis8
dGl0bGU+VGVzdCB0aGF0IHNlbmRpbmcgbWVzc2FnZXMgaW1tZWRpYXRlbHkgYWZ0ZXIgY3JlYXRp
bmcgYSBuZXcgY29ubmVjdGlvbiB3b3Jrcy48L3RpdGxlPgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291
cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2Vz
L3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzxib2R5PgorPHNjcmlwdD4KK2NvbnN0
IGRlZmF1bHRUaW1lb3V0ID0gMTAwMDsKKworcHJvbWlzZV90ZXN0KGFzeW5jIHQgPT4geworICAg
IGlmICghd2luZG93LklQQykKKyAgICAgICAgcmV0dXJuOworICAgIGNvbnN0IHRlc3RlcklEID0g
NDQ3OworICAgIGZvciAoY29uc3QgcHJvY2Vzc1RhcmdldCBvZiBJUEMucHJvY2Vzc1RhcmdldHMp
IHsKKyAgICAgICAgLy8gVGVzdCBzdGFydHMgaGVyZS4KKyAgICAgICAgY29uc3QgW2Nvbm5lY3Rp
b24sIGNsaWVudENvbm5lY3Rpb25JZGVudGlmaWVyXSA9IElQQy5jcmVhdGVDb25uZWN0aW9uUGFp
cigpOworICAgICAgICBjb25uZWN0aW9uLm9wZW4oKTsKKyAgICAgICAgY29uc3QgbXNncyA9IFtd
OworICAgICAgICBjb25zdCBudW1NZXNzYWdlcyA9IDEwMDAwOworICAgICAgICBmb3IgKGxldCB2
ID0gMDsgdiA8IG51bU1lc3NhZ2VzOyB2KyspCisgICAgICAgICAgICBtc2dzLnB1c2goW3sgdHlw
ZTogJ3VpbnQzMl90JywgdmFsdWU6IHYgKyAxfV0pOworICAgICAgICBsZXQgbXNnTmFtZSA9IElQ
Qy5tZXNzYWdlcy5JUENDb25uZWN0aW9uVGVzdGVyX0FzeW5jTWVzc2FnZS5uYW1lOworCisgICAg
ICAgIElQQy5zZW5kTWVzc2FnZShwcm9jZXNzVGFyZ2V0LCAwLCBJUEMubWVzc2FnZXMuSVBDVGVz
dGVyX0NyZWF0ZUNvbm5lY3Rpb25UZXN0ZXIubmFtZSwgWworICAgICAgICAgICAgeyB0eXBlOiAn
dWludDY0X3QnLCB2YWx1ZTogdGVzdGVySUQgfSwKKyAgICAgICAgICAgIHsgdHlwZTogJ0F0dGFj
aG1lbnQnLCB2YWx1ZTogY2xpZW50Q29ubmVjdGlvbklkZW50aWZpZXIgfSwKKyAgICAgICAgXSk7
CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBmb3IgKGxldCBtc2cgb2YgbXNncykKKyAgICAg
ICAgICAgICAgICBjb25uZWN0aW9uLnNlbmRNZXNzYWdlKDAsIG1zZ05hbWUsIG1zZyk7CisgICAg
ICAgICAgICBjb25zdCByZXBseSA9IGNvbm5lY3Rpb24uc2VuZFN5bmNNZXNzYWdlKDAsIElQQy5t
ZXNzYWdlcy5JUENDb25uZWN0aW9uVGVzdGVyX1N5bmNNZXNzYWdlLm5hbWUsIGRlZmF1bHRUaW1l
b3V0LCBbeyB0eXBlOiAndWludDMyX3QnLCB2YWx1ZTogNTUgfV0pOworICAgICAgICAgICAgY29u
c3QgZmlyc3RSZXN1bHQgPSByZXBseS5hcmd1bWVudHNbMF07CisgICAgICAgICAgICBhc3NlcnRf
ZXF1YWxzKGZpcnN0UmVzdWx0LnR5cGUsICJ1aW50MzJfdCIsIGBmb3IgJHsgcHJvY2Vzc1Rhcmdl
dCB9YCk7CisgICAgICAgICAgICBhc3NlcnRfZXF1YWxzKGZpcnN0UmVzdWx0LnZhbHVlLCA1NSAr
IG51bU1lc3NhZ2VzLCBgZm9yICR7IHByb2Nlc3NUYXJnZXQgfWApOworICAgICAgICB9IGZpbmFs
bHkgeworICAgICAgICAgICAgY29ubmVjdGlvbi5pbnZhbGlkYXRlKCk7CisgICAgICAgICAgICBJ
UEMuc2VuZFN5bmNNZXNzYWdlKHByb2Nlc3NUYXJnZXQsIDAsIElQQy5tZXNzYWdlcy5JUENUZXN0
ZXJfUmVsZWFzZUNvbm5lY3Rpb25UZXN0ZXIubmFtZSwgZGVmYXVsdFRpbWVvdXQsIFt7IHR5cGU6
ICd1aW50NjRfdCcsIHZhbHVlOiB0ZXN0ZXJJRCB9XSk7CisgICAgICAgIH0KKyAgICB9Cit9LCAi
U2VuZGluZyBhc3luYyBtZXNzYWdlcyBmcm9tIHRoZSBzZXJ2ZXIgaW1tZWRpYXRlbHkgYWZ0ZXIg
b3BlbmluZyBhIG5ldyBjb25uZWN0aW9uIHdvcmtzLiIpOworCitwcm9taXNlX3Rlc3QoYXN5bmMg
dCA9PiB7CisgICAgaWYgKCF3aW5kb3cuSVBDKQorICAgICAgICByZXR1cm47CisgICAgY29uc3Qg
dGVzdGVySUQgPSA0NDg7CisgICAgZm9yIChjb25zdCBwcm9jZXNzVGFyZ2V0IG9mIElQQy5wcm9j
ZXNzVGFyZ2V0cykgeworICAgICAgICAvLyBUZXN0IHN0YXJ0cyBoZXJlLgorICAgICAgICBjb25z
dCBjb25uZWN0aW9uQ291bnQgPSA1OyAvLyBGSVhNRTogc2hvdWxkIGJlIDEwMCwgYnV0IHdhaXRp
bmcgZm9yIG1lc3NhZ2VzIGlzIHNsb3cuCisgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29u
bmVjdGlvbkNvdW50OyArK2kpIHsKKyAgICAgICAgICAgIGNvbnN0IFtjb25uZWN0aW9uLCBjbGll
bnRDb25uZWN0aW9uSWRlbnRpZmllcl0gPSBJUEMuY3JlYXRlQ29ubmVjdGlvblBhaXIoKTsKKyAg
ICAgICAgICAgIGNvbm5lY3Rpb24ub3BlbigpOworICAgICAgICAgICAgY29uc3QgbWVzc2FnZUNv
dW50ID0gMzsgLy8gRklYTUU6IHNob3VsZCBiZSAxMDAwMCwgYnV0IHdhaXRpbmcgZm9yIG1lc3Nh
Z2VzIGlzIHNsb3cuCisgICAgICAgICAgICBJUEMuc2VuZE1lc3NhZ2UocHJvY2Vzc1RhcmdldCwg
MCwgSVBDLm1lc3NhZ2VzLklQQ1Rlc3Rlcl9DcmVhdGVDb25uZWN0aW9uVGVzdGVyQW5kU2VuZEFz
eW5jTWVzc2FnZXMubmFtZSwgWworICAgICAgICAgICAgICAgIHsgdHlwZTogJ3VpbnQ2NF90Jywg
dmFsdWU6IHRlc3RlcklEIH0sCisgICAgICAgICAgICAgICAgeyB0eXBlOiAnQXR0YWNobWVudCcs
IHZhbHVlOiBjbGllbnRDb25uZWN0aW9uSWRlbnRpZmllciB9LAorICAgICAgICAgICAgICAgIHsg
dHlwZTogJ3VpbnQzMl90JywgdmFsdWU6IG1lc3NhZ2VDb3VudCB9LAorICAgICAgICAgICAgXSk7
CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGZvciAobGV0IHYgPSAwOyB2IDwg
bWVzc2FnZUNvdW50OyB2KyspIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgbXNnID0gY29u
bmVjdGlvbi53YWl0Rm9yTWVzc2FnZSgwLCBJUEMubWVzc2FnZXMuSVBDQ29ubmVjdGlvblRlc3Rl
cl9Bc3luY01lc3NhZ2UubmFtZSwgZGVmYXVsdFRpbWVvdXQpOworICAgICAgICAgICAgICAgICAg
ICBhc3NlcnRfZXF1YWxzKG1zZ1swXS50eXBlLCAidWludDMyX3QiLCBgZm9yICR7IHByb2Nlc3NU
YXJnZXQgfWApOworICAgICAgICAgICAgICAgICAgICBhc3NlcnRfZXF1YWxzKG1zZ1swXS52YWx1
ZSwgdiwgYGZvciAkeyBwcm9jZXNzVGFyZ2V0IH1gKTsKKworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICAgICAgY29ubmVjdGlvbi5pbnZhbGlk
YXRlKCk7CisgICAgICAgICAgICAgICAgSVBDLnNlbmRTeW5jTWVzc2FnZShwcm9jZXNzVGFyZ2V0
LCAwLCBJUEMubWVzc2FnZXMuSVBDVGVzdGVyX1JlbGVhc2VDb25uZWN0aW9uVGVzdGVyLm5hbWUs
IGRlZmF1bHRUaW1lb3V0LCBbeyB0eXBlOiAndWludDY0X3QnLCB2YWx1ZTogdGVzdGVySUQgfV0p
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfSwgIlNlbmRpbmcgYXN5bmMgbWVz
c2FnZXMgZnJvbSB0aGUgY2xpZW50IGltbWVkaWF0ZWx5IGFmdGVyIG9wZW5pbmcgdGhlIGNvbm5l
Y3Rpb24gd29ya3MuIik7Cis8L3NjcmlwdD4KKzwvYm9keT4KXCBObyBuZXdsaW5lIGF0IGVuZCBv
ZiBmaWxlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>458445</attachid>
            <date>2022-04-27 07:42:19 -0700</date>
            <delta_ts>2022-04-28 00:14:49 -0700</delta_ts>
            <desc>For landing</desc>
            <filename>bug-239495-20220427174217.patch</filename>
            <type>text/plain</type>
            <size>80839</size>
            <attacher name="Kimmo Kinnunen">kkinnunen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkzNDk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDEwNzRkNDEzZWE3NjNmYjJm
NjU2NmQzYjhmY2EyYzUzZjc0MDAwMjIuLmM5YmRmOTJmNDkxMWE0ZGJkYzI3NTMxODBhMmFkZWU2
ZTNhODczYTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTAxIEBACisyMDIyLTA0LTI3ICBLaW1tbyBL
aW5udW5lbiAgPGtraW5udW5lbkBhcHBsZS5jb20+CisKKyAgICAgICAgSVBDIHRlc3RpbmcgQVBJ
IHNob3VsZCBoYXZlIHRoZSBhYmlsaXR5IHRvIHRlc3QgSVBDOjpDb25uZWN0aW9uIHNlbmQgYW5k
IHJlY2VpdmUgdGhyb3VnaCBJUEM6OkNvbm5lY3Rpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzOTQ5NQorCisgICAgICAgIFJldmlld2VkIGJ5IERh
cmluIEFkbGVyLgorCisgICAgICAgIEFkZCB0aGUgdGVzdGluZyBpbnRlcmZhY2VzIHRvIGJlIGFi
bGUgdG8gc2VuZCBJUEM6OkNvbm5lY3Rpb24gaW5zdGFuY2VzCisgICAgICAgIHRvIG90aGVyIHBy
b2Nlc3Nlcy4KKyAgICAgICAgQWRkIHRoZSB0ZXN0aW5nIGludGVyZmFjZXMgdG8gYmUgYWJsZSB0
byBzZW5kIG1lc3NhZ2VzIHRocm91Z2ggYXJiaXRyYXJ5CisgICAgICAgIElQQzo6Q29ubmVjdGlv
biBpbnN0YW5jZXMuCisKKyAgICAgICAgVGVzdDogaXBjL2NyZWF0ZS1jb25uZWN0aW9uLWFuZC1z
ZW5kLWFzeW5jLmh0bWwKKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIERl
cml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3Q6CisgICAgICAgICogRGVyaXZlZFNvdXJjZXMt
b3V0cHV0LnhjZmlsZWxpc3Q6CisgICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAgICAg
ICAgKiBQbGF0Zm9ybS9JUEMvQ29ubmVjdGlvbi5oOgorICAgICAgICAoSVBDOjpDb25uZWN0aW9u
Ojp3YWl0Rm9yTWVzc2FnZUZvclRlc3RpbmcpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0L21l
c3NhZ2VzLnB5OgorICAgICAgICAodHlwZXNfdGhhdF9jYW5ub3RfYmVfZm9yd2FyZF9kZWNsYXJl
ZCk6CisgICAgICAgICogU2hhcmVkL0lQQ0Nvbm5lY3Rpb25UZXN0ZXIuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYktpdDo6YXNJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYktpdDo6SVBDQ29ubmVj
dGlvblRlc3Rlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6SVBDQ29ubmVjdGlvblRlc3Rl
cjo6SVBDQ29ubmVjdGlvblRlc3Rlcik6CisgICAgICAgIChXZWJLaXQ6OklQQ0Nvbm5lY3Rpb25U
ZXN0ZXI6OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViS2l0OjpJUENDb25uZWN0aW9uVGVzdGVy
OjpzdG9wTGlzdGVuaW5nRm9ySVBDKToKKyAgICAgICAgKFdlYktpdDo6SVBDQ29ubmVjdGlvblRl
c3Rlcjo6c2VuZEFzeW5jTWVzc2FnZXMpOgorICAgICAgICAoV2ViS2l0OjpJUENDb25uZWN0aW9u
VGVzdGVyOjpkaWRDbG9zZSk6CisgICAgICAgIChXZWJLaXQ6OklQQ0Nvbm5lY3Rpb25UZXN0ZXI6
OmRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6OklQQ0Nvbm5lY3Rp
b25UZXN0ZXI6OmFzeW5jTWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6OklQQ0Nvbm5lY3Rpb25U
ZXN0ZXI6OnN5bmNNZXNzYWdlKToKKyAgICAgICAgKiBTaGFyZWQvSVBDQ29ubmVjdGlvblRlc3Rl
ci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9JUENUZXN0ZXIuaC4KKyAgICAg
ICAgKiBTaGFyZWQvSVBDQ29ubmVjdGlvblRlc3Rlci5tZXNzYWdlcy5pbjogQ29waWVkIGZyb20g
U291cmNlL1dlYktpdC9TaGFyZWQvSVBDVGVzdGVyLm1lc3NhZ2VzLmluLgorICAgICAgICAqIFNo
YXJlZC9JUENDb25uZWN0aW9uVGVzdGVySWRlbnRpZmllci5oOiBBZGRlZC4KKyAgICAgICAgKiBT
aGFyZWQvSVBDVGVzdGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGVyOjpjcmVhdGVD
b25uZWN0aW9uVGVzdGVyKToKKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGVyOjpjcmVhdGVDb25u
ZWN0aW9uVGVzdGVyQW5kU2VuZEFzeW5jTWVzc2FnZXMpOgorICAgICAgICAoV2ViS2l0OjpJUENU
ZXN0ZXI6OnJlbGVhc2VDb25uZWN0aW9uVGVzdGVyKToKKyAgICAgICAgKiBTaGFyZWQvSVBDVGVz
dGVyLmg6CisgICAgICAgICogU2hhcmVkL0lQQ1Rlc3Rlci5tZXNzYWdlcy5pbjoKKyAgICAgICAg
KiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ajoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvSVBDVGVzdGluZ0FQSS5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBDQXR0YWNobWVudDo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6SlNJUENBdHRhY2htZW50OjplbmNvZGUgY29u
c3QpOgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjpKU0lQQ0F0dGFjaG1lbnQ6OkpT
SVBDQXR0YWNobWVudCk6CisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBDQ29u
bmVjdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6SlNJUEND
b25uZWN0aW9uOjpKU0lQQ0Nvbm5lY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5n
QVBJOjpjcmVhdGVUeXBlRXJyb3IpOgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjpj
b252ZXJ0VG9VaW50NjQpOgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjpzZW5kTWVz
c2FnZVdpdGhKU0FyZ3VtZW50cyk6CisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OmV4
dHJhY3RTeW5jSVBDTWVzc2FnZUluZm8pOgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJ
OjpzZW5kU3luY01lc3NhZ2VXaXRoSlNBcmd1bWVudHMpOgorICAgICAgICAoV2ViS2l0OjpJUENU
ZXN0aW5nQVBJOjp3YWl0Rm9yTWVzc2FnZVdpdGhKU0FyZ3VtZW50cyk6CisgICAgICAgIChXZWJL
aXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBDU2VtYXBob3JlOjpjcmVhdGVKU1dyYXBwZXIpOgorICAg
ICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjpKU0lQQ1NlbWFwaG9yZTo6d3JhcHBlckNsYXNz
KToKKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6SlNJUENTZW1hcGhvcmU6OnVud3Jh
cCk6CisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBDU2VtYXBob3JlOjp0b1dy
YXBwZWQpOgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjpKU0lQQ1NlbWFwaG9yZTo6
aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBDU2VtYXBo
b3JlOjpmaW5hbGl6ZSk6CisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBDU2Vt
YXBob3JlOjpzdGF0aWNGdW5jdGlvbnMpOgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJ
OjpKU0lQQ0F0dGFjaG1lbnQ6OmNyZWF0ZUpTV3JhcHBlcik6CisgICAgICAgIChXZWJLaXQ6OklQ
Q1Rlc3RpbmdBUEk6OkpTSVBDQXR0YWNobWVudDo6d3JhcHBlckNsYXNzKToKKyAgICAgICAgKFdl
YktpdDo6SVBDVGVzdGluZ0FQSTo6SlNJUENBdHRhY2htZW50Ojp1bndyYXApOgorICAgICAgICAo
V2ViS2l0OjpJUENUZXN0aW5nQVBJOjpKU0lQQ0F0dGFjaG1lbnQ6OnRvV3JhcHBlZCk6CisgICAg
ICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBDQXR0YWNobWVudDo6aW5pdGlhbGl6ZSk6
CisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBDQXR0YWNobWVudDo6ZmluYWxp
emUpOgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjpKU0lQQ0F0dGFjaG1lbnQ6OnN0
YXRpY0Z1bmN0aW9ucyk6CisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBDQ29u
bmVjdGlvbjo6Y3JlYXRlSlNXcmFwcGVyKToKKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQ
STo6SlNJUENDb25uZWN0aW9uOjp3cmFwcGVyQ2xhc3MpOgorICAgICAgICAoV2ViS2l0OjpJUENU
ZXN0aW5nQVBJOjpKU0lQQ0Nvbm5lY3Rpb246OnVud3JhcCk6CisgICAgICAgIChXZWJLaXQ6OklQ
Q1Rlc3RpbmdBUEk6OkpTSVBDQ29ubmVjdGlvbjo6dG9XcmFwcGVkKToKKyAgICAgICAgKFdlYktp
dDo6SVBDVGVzdGluZ0FQSTo6SlNJUENDb25uZWN0aW9uOjppbml0aWFsaXplKToKKyAgICAgICAg
KFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6SlNJUENDb25uZWN0aW9uOjpmaW5hbGl6ZSk6CisgICAg
ICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBDQ29ubmVjdGlvbjo6ZGlkUmVjZWl2ZU1l
c3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjpKU0lQQ0Nvbm5lY3Rpb246
OmRpZFJlY2VpdmVTeW5jTWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6
OkpTSVBDQ29ubmVjdGlvbjo6ZGlkQ2xvc2UpOgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5n
QVBJOjpKU0lQQ0Nvbm5lY3Rpb246OmRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZSk6CisgICAgICAg
IChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBDQ29ubmVjdGlvbjo6c3RhdGljRnVuY3Rpb25z
KToKKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6SlNJUENDb25uZWN0aW9uOjpvcGVu
KToKKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6SlNJUENDb25uZWN0aW9uOjppbnZh
bGlkYXRlKToKKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6SlNJUENDb25uZWN0aW9u
OjpzZW5kTWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBDQ29u
bmVjdGlvbjo6c2VuZFN5bmNNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQ
STo6SlNJUENDb25uZWN0aW9uOjp3YWl0Rm9yTWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6OklQ
Q1Rlc3RpbmdBUEk6OkpTSVBDU3RyZWFtQ2xpZW50Q29ubmVjdGlvbjo6cHJlcGFyZVRvU2VuZE91
dE9mU3RyZWFtTWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBD
OjpzdGF0aWNGdW5jdGlvbnMpOgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjplbmNv
ZGVGcmFtZUluZm9EYXRhKToKKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6ZW5jb2Rl
QXR0YWNobWVudCk6CisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OlZlY3RvckVuY29k
ZUhlbHBlcjo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6
ZW5jb2RlQXJyYXlBcmd1bWVudCk6CisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OmVu
Y29kZUFyZ3VtZW50KToKKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6SlNJUEM6OnNl
bmRNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6SlNJUEM6OndhaXRG
b3JNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6SlNJUEM6OnNlbmRT
eW5jTWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBDOjpjcmVh
dGVDb25uZWN0aW9uUGFpcik6CisKIDIwMjItMDQtMjYgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZy
YXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgRG9uJ3QgZmx1c2ggdGhlIElPU3VyZmFjZSBDR0Nv
bnRleHQgd2hlbiBqdXN0IHNldHRpbmcgb3duZXJzaGlwIGlkZW50aXR5CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYktpdC9DTWFrZUxpc3RzLnR4
dAppbmRleCA2OWFjZDhkZWRkOWE5MjEyZGZmOGNhZWQ3MDRjZDYzYmEyMzJmM2ZlLi5jNDRmMjlh
NTQ2Y2IxZTlhZWYxMTNlNTNiMzlmZTQyNmM3YzNhZThhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvQ01ha2VMaXN0cy50eHQKQEAg
LTIxNSw2ICsyMTUsNyBAQCBzZXQoV2ViS2l0X01FU1NBR0VTX0lOX0ZJTEVTCiAgICAgTmV0d29y
a1Byb2Nlc3Mvd2VicnRjL1JUQ0RhdGFDaGFubmVsUmVtb3RlTWFuYWdlclByb3h5CiAKICAgICBT
aGFyZWQvQXV4aWxpYXJ5UHJvY2VzcworICAgIFNoYXJlZC9JUENDb25uZWN0aW9uVGVzdGVyCiAg
ICAgU2hhcmVkL0lQQ1N0cmVhbVRlc3RlcgogICAgIFNoYXJlZC9JUENTdHJlYW1UZXN0ZXJQcm94
eQogICAgIFNoYXJlZC9JUENUZXN0ZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvRGVyaXZl
ZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdCBiL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMt
aW5wdXQueGNmaWxlbGlzdAppbmRleCA5N2I0MWU5N2YyY2Y4NjIxMWFlY2JlOWNlYTMxYWEzZTY2
MDM0ODA4Li5jZjQ4NTRlYWJlZmZhYzM3ZDkzZGZiYmJiZWQwYWMxYzQ2MWI5M2FhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKKysrIGIv
U291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0CkBAIC0xMjksNiAr
MTI5LDcgQEAgJChQUk9KRUNUX0RJUikvU2hhcmVkL0FwcGxlUGF5L1dlYlBheW1lbnRDb29yZGlu
YXRvclByb3h5Lm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9TaGFyZWQvQXV0aGVudGljYXRp
b24vQXV0aGVudGljYXRpb25NYW5hZ2VyLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9TaGFy
ZWQvQXV4aWxpYXJ5UHJvY2Vzcy5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvU2hhcmVkL0hU
VFBTVXBncmFkZS9IVFRQU1VwZ3JhZGVMaXN0LnR4dAorJChQUk9KRUNUX0RJUikvU2hhcmVkL0lQ
Q0Nvbm5lY3Rpb25UZXN0ZXIubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1NoYXJlZC9JUENT
dHJlYW1UZXN0ZXIubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1NoYXJlZC9JUENTdHJlYW1U
ZXN0ZXJQcm94eS5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvU2hhcmVkL0lQQ1Rlc3Rlci5t
ZXNzYWdlcy5pbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1vdXRw
dXQueGNmaWxlbGlzdCBiL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmls
ZWxpc3QKaW5kZXggMjgwNDg3MDk0ZmMxZDY0NGVhYjgyNDc2YWIzNjUzZWVmODcyY2U2Ny4uMjVl
MzUyMzM2ZWQ1ZTlmMmU4MGZjMzY4YjhiM2NlZGM2MjQxYTBhZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9EZXJpdmVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlzdAorKysgYi9Tb3VyY2UvV2Vi
S2l0L0Rlcml2ZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0CkBAIC00Niw2ICs0Niw5IEBAICQo
QlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQvR1BVUHJvY2Vzc01lc3Nh
Z2VzUmVwbGllcy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0
L0dQVVByb2Nlc3NQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKICQoQlVJTFRfUFJPRFVDVFNfRElS
KS9EZXJpdmVkU291cmNlcy9XZWJLaXQvR1BVUHJvY2Vzc1Byb3h5TWVzc2FnZXMuaAogJChCVUlM
VF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdC9HUFVQcm9jZXNzUHJveHlNZXNz
YWdlc1JlcGxpZXMuaAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktp
dC9JUENDb25uZWN0aW9uVGVzdGVyTWVzc2FnZVJlY2VpdmVyLmNwcAorJChCVUlMVF9QUk9EVUNU
U19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdC9JUENDb25uZWN0aW9uVGVzdGVyTWVzc2FnZXMu
aAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdC9JUENDb25uZWN0
aW9uVGVzdGVyTWVzc2FnZXNSZXBsaWVzLmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVk
U291cmNlcy9XZWJLaXQvSVBDU3RyZWFtVGVzdGVyTWVzc2FnZVJlY2VpdmVyLmNwcAogJChCVUlM
VF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdC9JUENTdHJlYW1UZXN0ZXJNZXNz
YWdlcy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0L0lQQ1N0
cmVhbVRlc3Rlck1lc3NhZ2VzUmVwbGllcy5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0Rl
cml2ZWRTb3VyY2VzLm1ha2UgYi9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLm1ha2UKaW5k
ZXggZWI1OTg1YzhkOGE3NjFlODcwYzg5NWFkZDdmOTE3NTA1YmM1NjRiMi4uNWYyY2YwOWE2NWM0
MzRlMGJjZWMwZjUyYmYwYTUwY2JhZmZmN2VkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9E
ZXJpdmVkU291cmNlcy5tYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMubWFr
ZQpAQCAtMTQ5LDYgKzE0OSw3IEBAIE1FU1NBR0VfUkVDRUlWRVJTID0gXAogCVNoYXJlZC9BdXRo
ZW50aWNhdGlvbi9BdXRoZW50aWNhdGlvbk1hbmFnZXIgXAogCVNoYXJlZC9Ob3RpZmljYXRpb25z
L05vdGlmaWNhdGlvbk1hbmFnZXJNZXNzYWdlSGFuZGxlciBcCiAJU2hhcmVkL1dlYkNvbm5lY3Rp
b24gXAorCVNoYXJlZC9JUENDb25uZWN0aW9uVGVzdGVyIFwKIAlTaGFyZWQvSVBDU3RyZWFtVGVz
dGVyIFwKIAlTaGFyZWQvSVBDU3RyZWFtVGVzdGVyUHJveHkgXAogCVNoYXJlZC9JUENUZXN0ZXIg
XApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQ29ubmVjdGlvbi5oIGIv
U291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQ29ubmVjdGlvbi5oCmluZGV4IDJhM2EzMjA0OGI0
YzY4MWE3NzdkYTEwMmMzMTgxMzUzZmQ0YmI4M2IuLmFjOTg1M2IwNDNkMzhmNGQ0Y2FjYThkODA0
ODk5MjA3YjljMjUwOWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0Nv
bm5lY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Db25uZWN0aW9uLmgK
QEAgLTU3LDExICs1Nyw2IEBACiAjaW5jbHVkZSA8d3RmL2dsaWIvR1NvY2tldE1vbml0b3IuaD4K
ICNlbmRpZgogCi1uYW1lc3BhY2UgV2ViS2l0IHsKLW5hbWVzcGFjZSBJUENUZXN0aW5nQVBJIHsK
LWNsYXNzIEpTSVBDOwotfQotfQogCiBuYW1lc3BhY2UgSVBDIHsKIApAQCAtMzMzLDYgKzMyOCw3
IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldElnbm9yZUludmFsaWRNZXNzYWdlRm9yVGVzdGluZygp
IHsgbV9pZ25vcmVJbnZhbGlkTWVzc2FnZUZvclRlc3RpbmcgPSB0cnVlOyB9CiAgICAgYm9vbCBp
Z25vcmVJbnZhbGlkTWVzc2FnZUZvclRlc3RpbmcoKSBjb25zdCB7IHJldHVybiBtX2lnbm9yZUlu
dmFsaWRNZXNzYWdlRm9yVGVzdGluZzsgfQogICAgIHZvaWQgZGlzcGF0Y2hJbmNvbWluZ01lc3Nh
Z2VGb3JUZXN0aW5nKHN0ZDo6dW5pcXVlX3B0cjxEZWNvZGVyPiYmKTsKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8RGVjb2Rlcj4gd2FpdEZvck1lc3NhZ2VGb3JUZXN0aW5nKE1lc3NhZ2VOYW1lLCB1aW50
NjRfdCBkZXN0aW5hdGlvbklELCBUaW1lb3V0LCBPcHRpb25TZXQ8V2FpdEZvck9wdGlvbj4pOwog
I2VuZGlmCiAKICAgICB2b2lkIGRpc3BhdGNoTWVzc2FnZVJlY2VpdmVyTWVzc2FnZShNZXNzYWdl
UmVjZWl2ZXImLCBzdGQ6OnVuaXF1ZV9wdHI8RGVjb2Rlcj4mJik7CkBAIC01MjQsNyArNTIwLDYg
QEAgcHJpdmF0ZToKICAgICBIQU5ETEUgbV9jb25uZWN0aW9uUGlwZSB7IElOVkFMSURfSEFORExF
X1ZBTFVFIH07CiAjZW5kaWYKICAgICBmcmllbmQgY2xhc3MgU3RyZWFtQ2xpZW50Q29ubmVjdGlv
bjsKLSAgICBmcmllbmQgY2xhc3MgV2ViS2l0OjpJUENUZXN0aW5nQVBJOjpKU0lQQzsKIH07CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+CkBAIC02NTcsNiArNjUyLDE0IEBAIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+IGJvb2wgQ29ubmVjdGlvbjo6d2FpdEZvckFzeW5jQ2FsbGJhY2tBbmREaXNwYXRjaElt
bWVkaWF0ZWx5CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKKyNpZiBFTkFCTEUoSVBDX1RFU1RJTkdf
QVBJKQoraW5saW5lIHN0ZDo6dW5pcXVlX3B0cjxEZWNvZGVyPiBDb25uZWN0aW9uOjp3YWl0Rm9y
TWVzc2FnZUZvclRlc3RpbmcoTWVzc2FnZU5hbWUgbWVzc2FnZU5hbWUsIHVpbnQ2NF90IGRlc3Rp
bmF0aW9uSUQsIFRpbWVvdXQgdGltZW91dCwgT3B0aW9uU2V0PFdhaXRGb3JPcHRpb24+IG9wdGlv
bnMpCit7CisgICAgcmV0dXJuIHdhaXRGb3JNZXNzYWdlKG1lc3NhZ2VOYW1lLCBkZXN0aW5hdGlv
bklELCB0aW1lb3V0LCBvcHRpb25zKTsKK30KKyNlbmRpZgorCisKIGNsYXNzIFVuYm91bmRlZFN5
bmNocm9ub3VzSVBDU2NvcGUgewogcHVibGljOgogICAgIFVuYm91bmRlZFN5bmNocm9ub3VzSVBD
U2NvcGUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdl
cy5weSBiL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkKaW5kZXggYTMx
OGE1M2IxZWM5MjUxNzE4MDAxOWQ1Y2M0ZWM5NTIwMDBmMjVhOC4uZTZhOTlmNTBjMjkzMGJiZTZm
N2E1MDQ3ZjVhMzRhNWVkMGY5ZTI3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TY3JpcHRz
L3dlYmtpdC9tZXNzYWdlcy5weQorKysgYi9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21l
c3NhZ2VzLnB5CkBAIC0zMjQsNiArMzI0LDcgQEAgZGVmIHR5cGVzX3RoYXRfY2Fubm90X2JlX2Zv
cndhcmRfZGVjbGFyZWQoKToKICAgICAgICAgJ1dlYktpdDo6R2VvbG9jYXRpb25JZGVudGlmaWVy
JywKICAgICAgICAgJ1dlYktpdDo6R3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyJywKICAgICAg
ICAgJ1dlYktpdDo6SW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlJywKKyAgICAgICAgJ1dlYktpdDo6
SVBDQ29ubmVjdGlvblRlc3RlcklkZW50aWZpZXInLAogICAgICAgICAnV2ViS2l0OjpJUENTdHJl
YW1UZXN0ZXJJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYktpdDo6TGF5ZXJIb3N0aW5nQ29udGV4
dElEJywKICAgICAgICAgJ1dlYktpdDo6TGVnYWN5Q3VzdG9tUHJvdG9jb2xJRCcsCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9JUENDb25uZWN0aW9uVGVzdGVyLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvU2hhcmVkL0lQQ0Nvbm5lY3Rpb25UZXN0ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjcwOWVl
ZDRhNWFkY2U0N2YwYTkwOTE2MTdlZmZjMmZjYjYwY2YzODEKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0L1NoYXJlZC9JUENDb25uZWN0aW9uVGVzdGVyLmNwcApAQCAtMCwwICsxLDEw
NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJUENDb25u
ZWN0aW9uVGVzdGVyLmgiCisKKyNpZiBFTkFCTEUoSVBDX1RFU1RJTkdfQVBJKQorI2luY2x1ZGUg
IklQQ0Nvbm5lY3Rpb25UZXN0ZXJNZXNzYWdlcy5oIgorI2luY2x1ZGUgIklQQ1Rlc3Rlci5oIgor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworLy8gRklYTUUoaHR0cHM6Ly93ZWJraXQub3JnL2IvMjM5
NDg3KTogVGhlc2UgaWZkZWZzIGFyZSBlcnJvciBwcm9uZSwgZHVwbGljYXRlZCBhbmQgdGhlIGxh
Y2sgb2YgbW92ZSBzZW1hbnRpY3MgY2F1c2VzIGxlYWtzLgorc3RhdGljIElQQzo6Q29ubmVjdGlv
bjo6SWRlbnRpZmllciBhc0lkZW50aWZpZXIoSVBDOjpBdHRhY2htZW50JiYgY29ubmVjdGlvbklk
ZW50aWZpZXIpCit7CisjaWYgVVNFKFVOSVhfRE9NQUlOX1NPQ0tFVFMpCisgICAgcmV0dXJuIHsg
Y29ubmVjdGlvbklkZW50aWZpZXIucmVsZWFzZSgpLnJlbGVhc2UoKSB9OworI2VsaWYgT1MoREFS
V0lOKQorICAgIHJldHVybiB7IGNvbm5lY3Rpb25JZGVudGlmaWVyLnBvcnQoKSB9OworI2VsaWYg
T1MoV0lORE9XUykKKyAgICByZXR1cm4geyBjb25uZWN0aW9uSWRlbnRpZmllci5oYW5kbGUoKSB9
OworI2Vsc2UKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiB7IH07CisjZW5kaWYK
K30KKworUmVmPElQQ0Nvbm5lY3Rpb25UZXN0ZXI+IElQQ0Nvbm5lY3Rpb25UZXN0ZXI6OmNyZWF0
ZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQ0Nvbm5lY3Rpb25UZXN0ZXJJZGVudGlm
aWVyIGlkZW50aWZpZXIsIElQQzo6QXR0YWNobWVudCYmIHRlc3RlZENvbm5lY3Rpb25JZGVudGlm
aWVyKQoreworICAgIGF1dG8gdGVzdGVyID0gYWRvcHRSZWYoKm5ldyBJUENDb25uZWN0aW9uVGVz
dGVyKGNvbm5lY3Rpb24sIGlkZW50aWZpZXIsIFdURk1vdmUodGVzdGVkQ29ubmVjdGlvbklkZW50
aWZpZXIpKSk7CisgICAgdGVzdGVyLT5pbml0aWFsaXplKCk7CisgICAgcmV0dXJuIHRlc3RlcjsK
K30KKworSVBDQ29ubmVjdGlvblRlc3Rlcjo6SVBDQ29ubmVjdGlvblRlc3RlcihSZWY8SVBDOjpD
b25uZWN0aW9uPiYmIGNvbm5lY3Rpb24sIElQQ0Nvbm5lY3Rpb25UZXN0ZXJJZGVudGlmaWVyIGlk
ZW50aWZpZXIsIElQQzo6QXR0YWNobWVudCYmIHRlc3RlZENvbm5lY3Rpb25JZGVudGlmaWVyKQor
ICAgIDogbV9jb25uZWN0aW9uKFdURk1vdmUoY29ubmVjdGlvbikpCisgICAgLCBtX3Rlc3RlZENv
bm5lY3Rpb24oSVBDOjpDb25uZWN0aW9uOjpjcmVhdGVDbGllbnRDb25uZWN0aW9uKGFzSWRlbnRp
ZmllcihXVEZNb3ZlKHRlc3RlZENvbm5lY3Rpb25JZGVudGlmaWVyKSksICp0aGlzKSkKKyAgICAs
IG1faWRlbnRpZmllcihpZGVudGlmaWVyKQoreworfQorCitJUENDb25uZWN0aW9uVGVzdGVyOjp+
SVBDQ29ubmVjdGlvblRlc3RlcigpID0gZGVmYXVsdDsKKwordm9pZCBJUENDb25uZWN0aW9uVGVz
dGVyOjppbml0aWFsaXplKCkKK3sKKyAgICBtX3Rlc3RlZENvbm5lY3Rpb24tPm9wZW4oKTsKK30K
Kwordm9pZCBJUENDb25uZWN0aW9uVGVzdGVyOjpzdG9wTGlzdGVuaW5nRm9ySVBDKFJlZjxJUEND
b25uZWN0aW9uVGVzdGVyPiYmIHJlZkZyb21Db25uZWN0aW9uKQoreworICAgIG1fdGVzdGVkQ29u
bmVjdGlvbi0+aW52YWxpZGF0ZSgpOworfQorCit2b2lkIElQQ0Nvbm5lY3Rpb25UZXN0ZXI6OnNl
bmRBc3luY01lc3NhZ2VzKHVpbnQzMl90IG1lc3NhZ2VDb3VudCkKK3sKKyAgICBmb3IgKHVpbnQz
Ml90IGkgPSAwOyBpIDwgbWVzc2FnZUNvdW50OyArK2kpCisgICAgICAgIG1fdGVzdGVkQ29ubmVj
dGlvbi0+c2VuZChNZXNzYWdlczo6SVBDQ29ubmVjdGlvblRlc3Rlcjo6QXN5bmNNZXNzYWdlKGkp
LCAwKTsKK30KKwordm9pZCBJUENDb25uZWN0aW9uVGVzdGVyOjpkaWRDbG9zZShJUEM6OkNvbm5l
Y3Rpb24mKQoreworfQorCit2b2lkIElQQ0Nvbm5lY3Rpb25UZXN0ZXI6OmRpZFJlY2VpdmVJbnZh
bGlkTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6Ok1lc3NhZ2VOYW1lKQoreworICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIElQQ0Nvbm5lY3Rpb25UZXN0ZXI6OmFzeW5j
TWVzc2FnZSh1aW50MzJfdCB2YWx1ZSkKK3sKKyAgICBpZiAobV9wcmV2aW91c0FzeW5jTWVzc2Fn
ZVZhbHVlICE9IHZhbHVlIC0gMSkgeworICAgICAgICBBU1NFUlRfSVNfVEVTVElOR19JUEMoKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX3ByZXZpb3VzQXN5bmNNZXNzYWdlVmFsdWUg
PSB2YWx1ZTsKK30KKwordm9pZCBJUENDb25uZWN0aW9uVGVzdGVyOjpzeW5jTWVzc2FnZSh1aW50
MzJfdCB2YWx1ZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCh1aW50MzJfdCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCit7CisgICAgY29tcGxldGlvbkhhbmRsZXIodmFsdWUgKyBtX3ByZXZpb3VzQXN5
bmNNZXNzYWdlVmFsdWUpOworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9TaGFyZWQvSVBDQ29ubmVjdGlvblRlc3Rlci5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQv
SVBDQ29ubmVjdGlvblRlc3Rlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYwZDkzOGJlNDM5ZGFhMTA5NjBlYjQw
MTE0Y2MwYjE5OWU2OGNiNzYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9JUENDb25uZWN0aW9uVGVzdGVyLmgKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaWYgRU5BQkxFKElQQ19URVNUSU5HX0FQSSkKKworI2luY2x1ZGUgIkNv
bm5lY3Rpb24uaCIKKyNpbmNsdWRlICJJUENDb25uZWN0aW9uVGVzdGVySWRlbnRpZmllci5oIgor
I2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgorI2luY2x1ZGUgPG9wdGlvbmFsPgorI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+CisKK25hbWVzcGFjZSBJUEMgeworY2xhc3MgQ29ubmVjdGlvbjsK
K30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKKy8vIEludGVyZmFjZSB0byB0ZXN0IHZhcmlvdXMg
SVBDOjpDb25uZWN0aW9uIHJlbGF0ZWQgYWN0aXZpdGllcy4KK2NsYXNzIElQQ0Nvbm5lY3Rpb25U
ZXN0ZXIgZmluYWwgOiBwdWJsaWMgUmVmQ291bnRlZDxJUENDb25uZWN0aW9uVGVzdGVyPiwgcHJp
dmF0ZSBJUEM6OkNvbm5lY3Rpb246OkNsaWVudCB7CitwdWJsaWM6CisgICAgfklQQ0Nvbm5lY3Rp
b25UZXN0ZXIoKTsKKyAgICBzdGF0aWMgUmVmPElQQ0Nvbm5lY3Rpb25UZXN0ZXI+IGNyZWF0ZShJ
UEM6OkNvbm5lY3Rpb24mLCBJUENDb25uZWN0aW9uVGVzdGVySWRlbnRpZmllciwgSVBDOjpBdHRh
Y2htZW50JiYgdGVzdGVkQ29ubmVjdGlvbklkZW50aWZpZXIpOworICAgIHZvaWQgc3RvcExpc3Rl
bmluZ0ZvcklQQyhSZWY8SVBDQ29ubmVjdGlvblRlc3Rlcj4mJiByZWZGcm9tQ29ubmVjdGlvbik7
CisKKyAgICB2b2lkIHNlbmRBc3luY01lc3NhZ2VzKHVpbnQzMl90IG1lc3NhZ2VDb3VudCk7Citw
cml2YXRlOgorICAgIElQQ0Nvbm5lY3Rpb25UZXN0ZXIoUmVmPElQQzo6Q29ubmVjdGlvbj4mJiwg
SVBDQ29ubmVjdGlvblRlc3RlcklkZW50aWZpZXIsIElQQzo6QXR0YWNobWVudCYmIHRlc3RlZENv
bm5lY3Rpb25JZGVudGlmaWVyKTsKKyAgICB2b2lkIGluaXRpYWxpemUoKTsKKworICAgIC8vIElQ
Qzo6Q29ubmVjdGlvbjo6Q2xpZW50IG92ZXJyaWRlcy4KKyAgICB2b2lkIGRpZFJlY2VpdmVNZXNz
YWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIGZpbmFsOworICAgIGJvb2wgZGlk
UmVjZWl2ZVN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYsIFVuaXF1
ZVJlZjxJUEM6OkVuY29kZXI+JikgZmluYWw7CisgICAgdm9pZCBkaWRDbG9zZShJUEM6OkNvbm5l
Y3Rpb24mKSBmaW5hbDsKKyAgICB2b2lkIGRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShJUEM6OkNv
bm5lY3Rpb24mLCBJUEM6Ok1lc3NhZ2VOYW1lKSBmaW5hbDsKKworICAgIC8vIE1lc3NhZ2VzLgor
ICAgIHZvaWQgYXN5bmNNZXNzYWdlKHVpbnQzMl90IHZhbHVlKTsKKyAgICB2b2lkIHN5bmNNZXNz
YWdlKHVpbnQzMl90IHZhbHVlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHVpbnQzMl90IHNhbWVW
YWx1ZSk+JiYpOworCisgICAgY29uc3QgUmVmPElQQzo6Q29ubmVjdGlvbj4gbV9jb25uZWN0aW9u
OworICAgIGNvbnN0IFJlZjxJUEM6OkNvbm5lY3Rpb24+IG1fdGVzdGVkQ29ubmVjdGlvbjsKKyAg
ICBjb25zdCBJUENDb25uZWN0aW9uVGVzdGVySWRlbnRpZmllciBtX2lkZW50aWZpZXI7CisgICAg
dWludDMyX3QgbV9wcmV2aW91c0FzeW5jTWVzc2FnZVZhbHVlIHsgMCB9OworfTsKKworfQorCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0lQQ0Nvbm5lY3Rpb25UZXN0
ZXIubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9JUENDb25uZWN0aW9uVGVzdGVy
Lm1lc3NhZ2VzLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRiYTU1NmY3NTAzNTFjZTE3MzVmNzUyNjM0MzBiODI1
Y2UwNDY4MzAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9JUENDb25u
ZWN0aW9uVGVzdGVyLm1lc3NhZ2VzLmluCkBAIC0wLDAgKzEsMzAgQEAKKyMgQ29weXJpZ2h0IChD
KSAyMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisj
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMg
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2lmIEVOQUJMRShJUENfVEVTVElOR19BUEkpCisK
K21lc3NhZ2VzIC0+IElQQ0Nvbm5lY3Rpb25UZXN0ZXIgTm90UmVmQ291bnRlZCB7CisgICAgQXN5
bmNNZXNzYWdlKHVpbnQzMl90IHZhbHVlKQorICAgIFN5bmNNZXNzYWdlKHVpbnQzMl90IHZhbHVl
KSAtPiAodWludDMyX3Qgc2FtZVZhbHVlKSBTeW5jaHJvbm91cworfQorCisjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0lQQ0Nvbm5lY3Rpb25UZXN0ZXJJZGVudGlmaWVy
LmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9JUENDb25uZWN0aW9uVGVzdGVySWRlbnRpZmllci5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjM5NGFjZDg5ZjIxYjIxOTkwNmUyNTkzYzNhOTM5Y2E3ZWEzZDgzYzIKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9JUENDb25uZWN0aW9uVGVzdGVy
SWRlbnRpZmllci5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2lmIEVOQUJMRShJUENfVEVTVElOR19BUEkpCisKKyNpbmNsdWRlIDx3dGYvT2JqZWN0SWRl
bnRpZmllci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworZW51bSBJUENDb25uZWN0aW9uVGVz
dGVySWRlbnRpZmllclR5cGUgeyB9OwordXNpbmcgSVBDQ29ubmVjdGlvblRlc3RlcklkZW50aWZp
ZXIgPSBPYmplY3RJZGVudGlmaWVyPElQQ0Nvbm5lY3Rpb25UZXN0ZXJJZGVudGlmaWVyVHlwZT47
CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9JUENUZXN0
ZXIuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvSVBDVGVzdGVyLmNwcAppbmRleCBjNzRhZmRj
ZWYyZmQwMjliM2M2ODFiMGNhNzcxMjM5YTU2Njg5YmViLi41MDdkM2JjNDQ4MWFmMGE2YmRlYTk0
YzZhNDU5NmNhYmM3NWJkMWExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9JUENU
ZXN0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0lQQ1Rlc3Rlci5jcHAKQEAgLTI5
LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoSVBDX1RFU1RJTkdfQVBJKQogI2luY2x1ZGUgIkNvbm5l
Y3Rpb24uaCIKICNpbmNsdWRlICJEZWNvZGVyLmgiCisjaW5jbHVkZSAiSVBDQ29ubmVjdGlvblRl
c3Rlci5oIgogI2luY2x1ZGUgIklQQ1N0cmVhbVRlc3Rlci5oIgogI2luY2x1ZGUgIklQQ1Rlc3Rl
ck1lc3NhZ2VzLmgiCiAKQEAgLTE2OCw2ICsxNjksMzIgQEAgdm9pZCBJUENUZXN0ZXI6OnNlbmRT
ZW1hcGhvcmVCYWNrQW5kU2lnbmFsUHJvdG9jb2woSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9u
LAogICAgIH0KIH0KIAordm9pZCBJUENUZXN0ZXI6OmNyZWF0ZUNvbm5lY3Rpb25UZXN0ZXIoSVBD
OjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUENDb25uZWN0aW9uVGVzdGVySWRlbnRpZmllciBp
ZGVudGlmaWVyLCBJUEM6OkF0dGFjaG1lbnQmJiB0ZXN0ZWRDb25uZWN0aW9uSWRlbnRpZmllcikK
K3sKKyAgICBhdXRvIGFkZFJlc3VsdCA9IG1fY29ubmVjdGlvblRlc3RlcnMuZW5zdXJlKGlkZW50
aWZpZXIsIFsmXSB7CisgICAgICAgIHJldHVybiBJUEM6OlNjb3BlZEFjdGl2ZU1lc3NhZ2VSZWNl
aXZlUXVldWU8SVBDQ29ubmVjdGlvblRlc3Rlcj4geyBJUENDb25uZWN0aW9uVGVzdGVyOjpjcmVh
dGUoY29ubmVjdGlvbiwgaWRlbnRpZmllciwgV1RGTW92ZSh0ZXN0ZWRDb25uZWN0aW9uSWRlbnRp
ZmllcikpIH07CisgICAgfSk7CisgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3Vs
dC5pc05ld0VudHJ5IHx8IGlzVGVzdGluZ0lQQygpKTsKK30KKwordm9pZCBJUENUZXN0ZXI6OmNy
ZWF0ZUNvbm5lY3Rpb25UZXN0ZXJBbmRTZW5kQXN5bmNNZXNzYWdlcyhJUEM6OkNvbm5lY3Rpb24m
IGNvbm5lY3Rpb24sIElQQ0Nvbm5lY3Rpb25UZXN0ZXJJZGVudGlmaWVyIGlkZW50aWZpZXIsIElQ
Qzo6QXR0YWNobWVudCYmIHRlc3RlZENvbm5lY3Rpb25JZGVudGlmaWVyLCB1aW50MzJfdCBtZXNz
YWdlQ291bnQpCit7CisgICAgYXV0byBhZGRSZXN1bHQgPSBtX2Nvbm5lY3Rpb25UZXN0ZXJzLmVu
c3VyZShpZGVudGlmaWVyLCBbJl0geworICAgICAgICByZXR1cm4gSVBDOjpTY29wZWRBY3RpdmVN
ZXNzYWdlUmVjZWl2ZVF1ZXVlPElQQ0Nvbm5lY3Rpb25UZXN0ZXI+IHsgSVBDQ29ubmVjdGlvblRl
c3Rlcjo6Y3JlYXRlKGNvbm5lY3Rpb24sIGlkZW50aWZpZXIsIFdURk1vdmUodGVzdGVkQ29ubmVj
dGlvbklkZW50aWZpZXIpKSB9OworICAgIH0pOworICAgIGlmICghYWRkUmVzdWx0LmlzTmV3RW50
cnkpIHsKKyAgICAgICAgQVNTRVJUX0lTX1RFU1RJTkdfSVBDKCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+c2VuZEFzeW5jTWVzc2FnZXMo
bWVzc2FnZUNvdW50KTsKK30KKwordm9pZCBJUENUZXN0ZXI6OnJlbGVhc2VDb25uZWN0aW9uVGVz
dGVyKElQQ0Nvbm5lY3Rpb25UZXN0ZXJJZGVudGlmaWVyIGlkZW50aWZpZXIsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBtX2Nvbm5lY3Rpb25U
ZXN0ZXJzLnJlbW92ZShpZGVudGlmaWVyKTsKKyAgICBjb21wbGV0aW9uSGFuZGxlcigpOworfQor
CiB2b2lkIElQQ1Rlc3Rlcjo6c3RvcElmTmVlZGVkKCkKIHsKICAgICBpZiAobV90ZXN0UXVldWUp
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0lQQ1Rlc3Rlci5oIGIvU291cmNl
L1dlYktpdC9TaGFyZWQvSVBDVGVzdGVyLmgKaW5kZXggNDc3ZjhkOGE4NjRkNjhhODFkMTg2NDQ5
NTE1ODIyMzk5YTBiNGFmMi4uMDYyZWM4MzNmMzgyMDFhMjdmZGQ5ZmIzNjQ5MWQwOTU5M2UxYWUz
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvSVBDVGVzdGVyLmgKKysrIGIvU291
cmNlL1dlYktpdC9TaGFyZWQvSVBDVGVzdGVyLmgKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVO
QUJMRShJUENfVEVTVElOR19BUEkpCiAKKyNpbmNsdWRlICJJUENDb25uZWN0aW9uVGVzdGVySWRl
bnRpZmllci5oIgogI2luY2x1ZGUgIklQQ1N0cmVhbVRlc3RlcklkZW50aWZpZXIuaCIKICNpbmNs
dWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIKICNpbmNsdWRlICJTY29wZWRBY3RpdmVNZXNzYWdlUmVj
ZWl2ZVF1ZXVlLmgiCkBAIC01Miw2ICs1Myw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogLy8gYW5k
IGV4cG9zZXMgYnVncyB1bmRlcm5lYXRoLgogYm9vbCBpc1Rlc3RpbmdJUEMoKTsKIAorY2xhc3Mg
SVBDQ29ubmVjdGlvblRlc3RlcjsKIGNsYXNzIElQQ1N0cmVhbVRlc3RlcjsKIAogLy8gTWFpbiB0
ZXN0IGludGVyZmFjZSBmb3IgaW5pdGlhdGluZyB2YXJpb3VzIElQQyB0ZXN0IGFjdGl2aXRpZXMu
CkBAIC02OSw2ICs3MSw5IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzdG9wTWVzc2FnZVRlc3Rpbmco
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPik7CiAgICAgdm9pZCBjcmVhdGVTdHJlYW1UZXN0ZXIo
SVBDOjpDb25uZWN0aW9uJiwgSVBDU3RyZWFtVGVzdGVySWRlbnRpZmllciwgSVBDOjpTdHJlYW1D
b25uZWN0aW9uQnVmZmVyJiYpOwogICAgIHZvaWQgcmVsZWFzZVN0cmVhbVRlc3RlcihJUENTdHJl
YW1UZXN0ZXJJZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOworICAgIHZv
aWQgY3JlYXRlQ29ubmVjdGlvblRlc3RlcihJUEM6OkNvbm5lY3Rpb24mLCBJUENDb25uZWN0aW9u
VGVzdGVySWRlbnRpZmllciwgSVBDOjpBdHRhY2htZW50JiYpOworICAgIHZvaWQgY3JlYXRlQ29u
bmVjdGlvblRlc3RlckFuZFNlbmRBc3luY01lc3NhZ2VzKElQQzo6Q29ubmVjdGlvbiYsIElQQ0Nv
bm5lY3Rpb25UZXN0ZXJJZGVudGlmaWVyLCBJUEM6OkF0dGFjaG1lbnQmJiwgdWludDMyX3QgbWVz
c2FnZUNvdW50KTsKKyAgICB2b2lkIHJlbGVhc2VDb25uZWN0aW9uVGVzdGVyKElQQ0Nvbm5lY3Rp
b25UZXN0ZXJJZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogICAgIHZv
aWQgc2VuZFNhbWVTZW1hcGhvcmVCYWNrKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6U2VtYXBob3Jl
JiYpOwogICAgIHZvaWQgc2VuZFNlbWFwaG9yZUJhY2tBbmRTaWduYWxQcm90b2NvbChJUEM6OkNv
bm5lY3Rpb24mLCBJUEM6OlNlbWFwaG9yZSYmKTsKIApAQCAtNzksNiArODQsOSBAQCBwcml2YXRl
OgogCiAgICAgdXNpbmcgU3RyZWFtVGVzdGVyTWFwID0gSGFzaE1hcDxJUENTdHJlYW1UZXN0ZXJJ
ZGVudGlmaWVyLCBJUEM6OlNjb3BlZEFjdGl2ZU1lc3NhZ2VSZWNlaXZlUXVldWU8SVBDU3RyZWFt
VGVzdGVyPj47CiAgICAgU3RyZWFtVGVzdGVyTWFwIG1fc3RyZWFtVGVzdGVyczsKKworICAgIHVz
aW5nIENvbm5lY3Rpb25UZXN0ZXJNYXAgPSBIYXNoTWFwPElQQ0Nvbm5lY3Rpb25UZXN0ZXJJZGVu
dGlmaWVyLCBJUEM6OlNjb3BlZEFjdGl2ZU1lc3NhZ2VSZWNlaXZlUXVldWU8SVBDQ29ubmVjdGlv
blRlc3Rlcj4+OworICAgIENvbm5lY3Rpb25UZXN0ZXJNYXAgbV9jb25uZWN0aW9uVGVzdGVyczsK
IH07CiAKICNlbHNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9JUENUZXN0ZXIu
bWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9JUENUZXN0ZXIubWVzc2FnZXMuaW4K
aW5kZXggN2E4MmEwMDZiMjkwYjViN2RkY2IwMGFiNzkzYjgwNmNiODgyNzNmZC4uM2VlOGVhNGZl
YTJhYzA1OGZiN2UyNWViNDFhYTlhYjM2M2RiN2M1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9TaGFyZWQvSVBDVGVzdGVyLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L0lQQ1Rlc3Rlci5tZXNzYWdlcy5pbgpAQCAtMjcsNiArMjcsOSBAQCBtZXNzYWdlcyAtPiBJUENU
ZXN0ZXIgTm90UmVmQ291bnRlZCB7CiAgICAgU3RvcE1lc3NhZ2VUZXN0aW5nKCkgLT4gKCkgU3lu
Y2hyb25vdXMKICAgICBDcmVhdGVTdHJlYW1UZXN0ZXIoV2ViS2l0OjpJUENTdHJlYW1UZXN0ZXJJ
ZGVudGlmaWVyIGlkZW50aWZpZXIsIElQQzo6U3RyZWFtQ29ubmVjdGlvbkJ1ZmZlciBzdHJlYW0p
IFdhbnRzQ29ubmVjdGlvbgogICAgIFJlbGVhc2VTdHJlYW1UZXN0ZXIoV2ViS2l0OjpJUENTdHJl
YW1UZXN0ZXJJZGVudGlmaWVyIGlkZW50aWZpZXIpIC0+ICgpIFN5bmNocm9ub3VzCisgICAgQ3Jl
YXRlQ29ubmVjdGlvblRlc3RlcihXZWJLaXQ6OklQQ0Nvbm5lY3Rpb25UZXN0ZXJJZGVudGlmaWVy
IGlkZcWTbnRpZmllciwgSVBDOjpBdHRhY2htZW50IGNvbm5lY3Rpb24pIFdhbnRzQ29ubmVjdGlv
bgorICAgIENyZWF0ZUNvbm5lY3Rpb25UZXN0ZXJBbmRTZW5kQXN5bmNNZXNzYWdlcyhXZWJLaXQ6
OklQQ0Nvbm5lY3Rpb25UZXN0ZXJJZGVudGlmaWVyIGlkZW50aWZpZXIsIElQQzo6QXR0YWNobWVu
dCBjb25uZWN0aW9uLCB1aW50MzJfdCBtZXNzYWdlQ291bnQpIFdhbnRzQ29ubmVjdGlvbgorICAg
IFJlbGVhc2VDb25uZWN0aW9uVGVzdGVyKFdlYktpdDo6SVBDQ29ubmVjdGlvblRlc3RlcklkZW50
aWZpZXIgaWRlbnRpZmllcikgLT4gKCkgU3luY2hyb25vdXMKIAogICAgIFNlbmRTYW1lU2VtYXBo
b3JlQmFjayhJUEM6OlNlbWFwaG9yZSBzZW1hcGhvcmUpIFdhbnRzQ29ubmVjdGlvbgogICAgIFNl
bmRTZW1hcGhvcmVCYWNrQW5kU2lnbmFsUHJvdG9jb2woSVBDOjpTZW1hcGhvcmUgc2VtYXBob3Jl
KSBXYW50c0Nvbm5lY3Rpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQg
Yi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0CmluZGV4IDUzYmI4MThmMGEyNWI3MmM2OTM5Yjcy
NTJlOTM2MjQ3NTM1NDY5ZjcuLmVhMGMwNjYzM2E0NjcyNmQ2NmZiNzQxMjE5NmYzNDEwYTgzOTI0
OTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dl
YktpdC9Tb3VyY2VzLnR4dApAQCAtMjI3LDYgKzIyNyw3IEBAIFNoYXJlZC9FZGl0b3JTdGF0ZS5j
cHAKIFNoYXJlZC9Gb250SW5mby5jcHAKIFNoYXJlZC9GcmFtZUluZm9EYXRhLmNwcAogU2hhcmVk
L0luc3BlY3RvckV4dGVuc2lvblR5cGVzLmNwcAorU2hhcmVkL0lQQ0Nvbm5lY3Rpb25UZXN0ZXIu
Y3BwCiBTaGFyZWQvSVBDU3RyZWFtVGVzdGVyLmNwcAogU2hhcmVkL0lQQ1Rlc3Rlci5jcHAKIFNo
YXJlZC9MYXllclRyZWVDb250ZXh0LmNwcApAQCAtODY4LDYgKzg2OSw3IEBAIFdlYlByb2Nlc3Mv
V2ViU3RvcmFnZS9XZWJTdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXIuY3BwCiAKIFdlYlByb2Nlc3Mv
WFIvUGxhdGZvcm1YUlN5c3RlbVByb3h5LmNwcAogCitJUENDb25uZWN0aW9uVGVzdGVyTWVzc2Fn
ZVJlY2VpdmVyLmNwcAogSVBDU3RyZWFtVGVzdGVyTWVzc2FnZVJlY2VpdmVyLmNwcAogSVBDU3Ry
ZWFtVGVzdGVyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwCiBJUENUZXN0ZXJNZXNzYWdlUmVjZWl2
ZXIuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agppbmRleCBjYzc4YmIwMDZlODQ1NmQ1ODAyNDkyMzYxODY5MDhjZjk0NGM3MDA1Li5hMDMzN2Ri
NTg3ZTBjOWY4MzBkZDQ3Zjg0MGE3ZWRlNmEzODg2NDdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQv
V2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEzNTEsNiArMTM1MSw4IEBACiAJ
CTdCNzMxMjQxMjVDQzg1MjUwMDNCMjc5NiAvKiBTdHJlYW1TZXJ2ZXJDb25uZWN0aW9uLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QjczMTIzODI1Q0M4
NTI0MDAzQjI3OTYgLyogU3RyZWFtU2VydmVyQ29ubmVjdGlvbi5oICovOyB9OwogCQk3QjczMTI0
MjI1Q0M4NTI1MDAzQjI3OTYgLyogU3RyZWFtQ29ubmVjdGlvbkVuY29kZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCNzMxMjM5MjVDQzg1MjUwMDNC
Mjc5NiAvKiBTdHJlYW1Db25uZWN0aW9uRW5jb2Rlci5oICovOyB9OwogCQk3QkFCMTExMDI1REQw
MkIzMDA4RkM0NzkgLyogU2NvcGVkQWN0aXZlTWVzc2FnZVJlY2VpdmVRdWV1ZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0JBQjExMEYyNUREMDJCMjAw
OEZDNDc5IC8qIFNjb3BlZEFjdGl2ZU1lc3NhZ2VSZWNlaXZlUXVldWUuaCAqLzsgfTsKKwkJN0JC
QTYzREYyODBFOTNEMjAwQjA0ODIzIC8qIElQQ0Nvbm5lY3Rpb25UZXN0ZXJJZGVudGlmaWVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QkJBNjNEQzI4
MEU5M0I1MDBCMDQ4MjMgLyogSVBDQ29ubmVjdGlvblRlc3RlcklkZW50aWZpZXIuaCAqLzsgfTsK
KwkJN0JCQTYzRTAyODBFOTNENjAwQjA0ODIzIC8qIElQQ0Nvbm5lY3Rpb25UZXN0ZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCQkE2M0RFMjgwRTkz
QjYwMEIwNDgyMyAvKiBJUENDb25uZWN0aW9uVGVzdGVyLmggKi87IH07CiAJCTdCQ0Y3MERFMjYx
NUQwNkUwMEU0RkI3MCAvKiBTY29wZWRSZW5kZXJpbmdSZXNvdXJjZXNSZXF1ZXN0Q29jb2EubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QkNGNzBDQjI2
MTQ5MzVFMDBFNEZCNzAgLyogU2NvcGVkUmVuZGVyaW5nUmVzb3VyY2VzUmVxdWVzdENvY29hLm1t
ICovOyB9OwogCQk3QkUzN0Y5MzI3QzdDQTUxMDA3QTZDRDMgLyogSVBDU3RyZWFtVGVzdGVySWRl
bnRpZmllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
N0JFMzdGOTIyN0M3QzUxODAwN0E2Q0QzIC8qIElQQ1N0cmVhbVRlc3RlcklkZW50aWZpZXIuaCAq
LzsgfTsKIAkJN0JFOTMyNjMyN0Y1Qzc1QTAwRDVGRUZCIC8qIFJlY2VpdmVyTWF0Y2hlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0JFOTMyNjIyN0Y1
Qzc1QTAwRDVGRUZCIC8qIFJlY2VpdmVyTWF0Y2hlci5oICovOyB9OwpAQCAtNTUzNSw2ICs1NTM3
LDkgQEAKIAkJN0I5MDQxNkEyNTRBRkVBNzAwNkVFQjhDIC8qIFJlbW90ZUdyYXBoaWNzQ29udGV4
dEdMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdCOTA0MTZEMjU1MDEwOEMwMDZFRUI4QyAvKiBSZW1vdGVH
cmFwaGljc0NvbnRleHRHTEZ1bmN0aW9uc0dlbmVyYXRlZC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1v
dGVHcmFwaGljc0NvbnRleHRHTEZ1bmN0aW9uc0dlbmVyYXRlZC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3QkFCMTEwRjI1REQwMkIyMDA4RkM0NzkgLyogU2NvcGVkQWN0aXZlTWVz
c2FnZVJlY2VpdmVRdWV1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY29w
ZWRBY3RpdmVNZXNzYWdlUmVjZWl2ZVF1ZXVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTdCQkE2M0RDMjgwRTkzQjUwMEIwNDgyMyAvKiBJUENDb25uZWN0aW9uVGVzdGVySWRlbnRp
Zmllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBJUENDb25uZWN0aW9uVGVzdGVySWRlbnRpZmllci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QkJBNjNERDI4MEU5M0I2MDBCMDQ4MjMgLyog
SVBDQ29ubmVjdGlvblRlc3Rlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJUENDb25uZWN0aW9u
VGVzdGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0JCQTYzREUyODBFOTNC
NjAwQjA0ODIzIC8qIElQQ0Nvbm5lY3Rpb25UZXN0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSVBDQ29u
bmVjdGlvblRlc3Rlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QkNGNzBDQTI2
MTQ5MzVFMDBFNEZCNzAgLyogU2NvcGVkUmVuZGVyaW5nUmVzb3VyY2VzUmVxdWVzdC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBTY29wZWRSZW5kZXJpbmdSZXNvdXJjZXNSZXF1ZXN0LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0JDRjcwQ0IyNjE0OTM1RTAwRTRGQjcwIC8qIFNj
b3BlZFJlbmRlcmluZ1Jlc291cmNlc1JlcXVlc3RDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IFNjb3BlZFJlbmRlcmluZ1Jlc291cmNlc1JlcXVlc3RDb2NvYS5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJN0JDRjcwQ0MyNjE0OTM1RjAwRTRGQjcwIC8qIFNjb3BlZFdlYkdM
UmVuZGVyaW5nUmVzb3VyY2VzUmVxdWVzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY29wZWRX
ZWJHTFJlbmRlcmluZ1Jlc291cmNlc1JlcXVlc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtNzkzOSw2ICs3OTQ0LDkgQEAKIAkJCQlCQ0NGNkIyMzEyQzkzRTdBMDA4RjlDMzUg
LyogSW1hZ2VPcHRpb25zLmggKi8sCiAJCQkJOTk5QjdFRDgyNTUwRTRBODAwRjQ1MEE0IC8qIElu
c3BlY3RvckV4dGVuc2lvblR5cGVzLmNwcCAqLywKIAkJCQk5OUJFM0IxNjI1NDMzQjk0MDBDNjU1
MUMgLyogSW5zcGVjdG9yRXh0ZW5zaW9uVHlwZXMuaCAqLywKKwkJCQk3QkJBNjNERDI4MEU5M0I2
MDBCMDQ4MjMgLyogSVBDQ29ubmVjdGlvblRlc3Rlci5jcHAgKi8sCisJCQkJN0JCQTYzREUyODBF
OTNCNjAwQjA0ODIzIC8qIElQQ0Nvbm5lY3Rpb25UZXN0ZXIuaCAqLywKKwkJCQk3QkJBNjNEQzI4
MEU5M0I1MDBCMDQ4MjMgLyogSVBDQ29ubmVjdGlvblRlc3RlcklkZW50aWZpZXIuaCAqLywKIAkJ
CQk3QkUzN0Y5NTI3QzdDRDkwMDA3QTZDRDMgLyogSVBDU3RyZWFtVGVzdGVyLmNwcCAqLywKIAkJ
CQk3QkUzN0Y5NDI3QzdDRDUxMDA3QTZDRDMgLyogSVBDU3RyZWFtVGVzdGVyLmggKi8sCiAJCQkJ
N0JFMzdGOTIyN0M3QzUxODAwN0E2Q0QzIC8qIElQQ1N0cmVhbVRlc3RlcklkZW50aWZpZXIuaCAq
LywKQEAgLTE0MzM3LDYgKzE0MzQ1LDggQEAKIAkJCQk1MUU5MDQ5QzI3QkNCOUQ0MDA5MjlFN0Ug
LyogSW5zdGFsbENvb3JkaW5hdGlvblNQSS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzVCQ0U1REYx
QzUwNzY2QTAwQ0RFM0ZBIC8qIEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLmggaW4g
SGVhZGVycyAqLywKIAkJCQkyRDREMkM4MTFERjYwQkYzMDAyRUIxMEMgLyogSW50ZXJhY3Rpb25J
bmZvcm1hdGlvblJlcXVlc3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTdCQkE2M0UwMjgwRTkzRDYw
MEIwNDgyMyAvKiBJUENDb25uZWN0aW9uVGVzdGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk3QkJB
NjNERjI4MEU5M0QyMDBCMDQ4MjMgLyogSVBDQ29ubmVjdGlvblRlc3RlcklkZW50aWZpZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCUEzMUY2MEE0MjVDQzdEQjkwMEFGMTRGNCAvKiBJUENTZW1hcGhv
cmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTdCRTM3RjkzMjdDN0NBNTEwMDdBNkNEMyAvKiBJUENT
dHJlYW1UZXN0ZXJJZGVudGlmaWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5QjQ3OTA4RjI1MzE1
MUNDMDBFQzExQUIgLyogSlNJUENCaW5kaW5nLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0lQQ1Rlc3RpbmdBUEkuY3BwIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvSVBDVGVzdGluZ0FQSS5jcHAKaW5kZXggMzI4
OWMwNGVmMDY3NDc3YjM3NmYxZDQwZGIwMDJmZDM1OWRiZmIwMC4uNzIyZmNlMjRkNTlhMGNkZTgx
Y2NkMTJhNmYwM2ZjMzExMDA3ZTNlNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvSVBDVGVzdGluZ0FQSS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvSVBDVGVzdGluZ0FQSS5jcHAKQEAgLTYxLDYgKzYxLDggQEAgbmFtZXNwYWNl
IFdlYktpdCB7CiAKIG5hbWVzcGFjZSBJUENUZXN0aW5nQVBJIHsKIAorY2xhc3MgSlNJUEM7CisK
IHN0YXRpYyBjb25zdGV4cHIgYXV0byBwcm9jZXNzVGFyZ2V0TmFtZVVJID0gIlVJIl9zOwogI2lm
IEVOQUJMRShHUFVfUFJPQ0VTUykKIHN0YXRpYyBjb25zdGV4cHIgYXV0byBwcm9jZXNzVGFyZ2V0
TmFtZUdQVSA9ICJHUFUiX3M7CkBAIC03MCw3ICs3Miw3IEBAIHN0YXRpYyBjb25zdGV4cHIgYXV0
byBwcm9jZXNzVGFyZ2V0TmFtZU5ldHdvcmtpbmcgPSAiTmV0d29ya2luZyJfczsKIHN0YXRpYyBz
dGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBkZXN0aW5hdGlvbklERnJvbUFyZ3VtZW50KEpTQzo6SlNH
bG9iYWxPYmplY3QqLCBKU1ZhbHVlUmVmLCBKU1ZhbHVlUmVmKik7CiBzdGF0aWMgc3RkOjpvcHRp
b25hbDx1aW50NjRfdD4gbWVzc2FnZUlERnJvbUFyZ3VtZW50KEpTQzo6SlNHbG9iYWxPYmplY3Qq
LCBKU1ZhbHVlUmVmLCBKU1ZhbHVlUmVmKik7CiBzdGF0aWMgSlNDOjpKU09iamVjdCoganNSZXN1
bHRGcm9tUmVwbHlEZWNvZGVyKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBJUEM6Ok1lc3NhZ2VOYW1l
LCBJUEM6OkRlY29kZXImKTsKLXN0YXRpYyBib29sIGVuY29kZUFyZ3VtZW50KElQQzo6RW5jb2Rl
ciYsIEpTSVBDJiwgSlNDb250ZXh0UmVmLCBKU1ZhbHVlUmVmLCBKU1ZhbHVlUmVmKiBleGNlcHRp
b24pOworc3RhdGljIGJvb2wgZW5jb2RlQXJndW1lbnQoSVBDOjpFbmNvZGVyJiwgSlNDb250ZXh0
UmVmLCBKU1ZhbHVlUmVmLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOwogCiBjbGFzcyBKU0lQQ1Nl
bWFwaG9yZSA6IHB1YmxpYyBSZWZDb3VudGVkPEpTSVBDU2VtYXBob3JlPiB7CiBwdWJsaWM6CkBA
IC0xMDYsNiArMTA4LDcxIEBAIHByaXZhdGU6CiAgICAgSVBDOjpTZW1hcGhvcmUgbV9zZW1hcGhv
cmU7CiB9OwogCitjbGFzcyBKU0lQQ0F0dGFjaG1lbnQgOiBwdWJsaWMgUmVmQ291bnRlZDxKU0lQ
Q0F0dGFjaG1lbnQ+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPEpTSVBDQXR0YWNobWVudD4g
Y3JlYXRlKElQQzo6QXR0YWNobWVudCYmIGF0dGFjaG1lbnQpCisgICAgeworICAgICAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBKU0lQQ0F0dGFjaG1lbnQoV1RGTW92ZShhdHRhY2htZW50KSkpOwor
ICAgIH0KKworICAgIEpTT2JqZWN0UmVmIGNyZWF0ZUpTV3JhcHBlcihKU0NvbnRleHRSZWYpOwor
ICAgIHN0YXRpYyBKU0lQQ0F0dGFjaG1lbnQqIHRvV3JhcHBlZChKU0NvbnRleHRSZWYsIEpTVmFs
dWVSZWYpOworCisgICAgdm9pZCBlbmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVyKSBjb25zdCB7
IG1fYXR0YWNobWVudC5lbmNvZGUoZW5jb2Rlcik7IH0KKworcHJpdmF0ZToKKyAgICBKU0lQQ0F0
dGFjaG1lbnQoSVBDOjpBdHRhY2htZW50JiYgYXR0YWNobWVudCkKKyAgICAgICAgOiBtX2F0dGFj
aG1lbnQoV1RGTW92ZShhdHRhY2htZW50KSkKKyAgICB7IH0KKworICAgIHN0YXRpYyBKU0NsYXNz
UmVmIHdyYXBwZXJDbGFzcygpOworICAgIHN0YXRpYyBKU0lQQ0F0dGFjaG1lbnQqIHVud3JhcChK
U09iamVjdFJlZik7CisgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZShKU0NvbnRleHRSZWYsIEpT
T2JqZWN0UmVmKTsKKyAgICBzdGF0aWMgdm9pZCBmaW5hbGl6ZShKU09iamVjdFJlZik7CisKKyAg
ICBzdGF0aWMgY29uc3QgSlNTdGF0aWNGdW5jdGlvbiogc3RhdGljRnVuY3Rpb25zKCk7CisKKyAg
ICBJUEM6OkF0dGFjaG1lbnQgbV9hdHRhY2htZW50OworfTsKKworY2xhc3MgSlNJUENDb25uZWN0
aW9uIDogcHVibGljIFJlZkNvdW50ZWQ8SlNJUENDb25uZWN0aW9uPiwgcHJpdmF0ZSBJUEM6OkNv
bm5lY3Rpb246OkNsaWVudCB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxKU0lQQ0Nvbm5lY3Rp
b24+IGNyZWF0ZShJUEM6OkNvbm5lY3Rpb246OklkZW50aWZpZXImJiB0ZXN0ZWRDb25uZWN0aW9u
SWRlbnRpZmllcikKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEpTSVBDQ29u
bmVjdGlvbihXVEZNb3ZlKHRlc3RlZENvbm5lY3Rpb25JZGVudGlmaWVyKSkpOworICAgIH0KKwor
ICAgIEpTT2JqZWN0UmVmIGNyZWF0ZUpTV3JhcHBlcihKU0NvbnRleHRSZWYpOworICAgIHN0YXRp
YyBKU0lQQ0Nvbm5lY3Rpb24qIHRvV3JhcHBlZChKU0NvbnRleHRSZWYsIEpTVmFsdWVSZWYpOwor
Citwcml2YXRlOgorICAgIEpTSVBDQ29ubmVjdGlvbihJUEM6OkNvbm5lY3Rpb246OklkZW50aWZp
ZXImJiB0ZXN0ZWRDb25uZWN0aW9uSWRlbnRpZmllcikKKyAgICAgICAgOiBtX3Rlc3RlZENvbm5l
Y3Rpb24geyBJUEM6OkNvbm5lY3Rpb246OmNyZWF0ZVNlcnZlckNvbm5lY3Rpb24odGVzdGVkQ29u
bmVjdGlvbklkZW50aWZpZXIsICp0aGlzKSB9CisgICAgeworICAgIH0KKworICAgIC8vIElQQzo6
Q29ubmVjdGlvbjo6Q2xpZW50IG92ZXJyaWRlcy4KKyAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdl
KElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIGZpbmFsOworICAgIGJvb2wgZGlkUmVj
ZWl2ZVN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYsIFVuaXF1ZVJl
ZjxJUEM6OkVuY29kZXI+JikgZmluYWw7CisgICAgdm9pZCBkaWRDbG9zZShJUEM6OkNvbm5lY3Rp
b24mKSBmaW5hbDsKKyAgICB2b2lkIGRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShJUEM6OkNvbm5l
Y3Rpb24mLCBJUEM6Ok1lc3NhZ2VOYW1lKSBmaW5hbDsKKworICAgIHN0YXRpYyBKU0NsYXNzUmVm
IHdyYXBwZXJDbGFzcygpOworICAgIHN0YXRpYyBKU0lQQ0Nvbm5lY3Rpb24qIHVud3JhcChKU09i
amVjdFJlZik7CisgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZShKU0NvbnRleHRSZWYsIEpTT2Jq
ZWN0UmVmKTsKKyAgICBzdGF0aWMgdm9pZCBmaW5hbGl6ZShKU09iamVjdFJlZik7CisKKworICAg
IHN0YXRpYyBjb25zdCBKU1N0YXRpY0Z1bmN0aW9uKiBzdGF0aWNGdW5jdGlvbnMoKTsKKyAgICBz
dGF0aWMgSlNWYWx1ZVJlZiBvcGVuKEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYsIEpTT2JqZWN0
UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFy
Z3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOworICAgIHN0YXRpYyBKU1ZhbHVlUmVm
IGludmFsaWRhdGUoSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiwgSlNPYmplY3RSZWYgdGhpc09i
amVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10s
IEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CisgICAgc3RhdGljIEpTVmFsdWVSZWYgc2VuZE1lc3Nh
Z2UoSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6
ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVS
ZWYqIGV4Y2VwdGlvbik7CisgICAgc3RhdGljIEpTVmFsdWVSZWYgc2VuZFN5bmNNZXNzYWdlKEpT
Q29udGV4dFJlZiwgSlNPYmplY3RSZWYsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBh
cmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBl
eGNlcHRpb24pOworICAgIHN0YXRpYyBKU1ZhbHVlUmVmIHdhaXRGb3JNZXNzYWdlKEpTQ29udGV4
dFJlZiwgSlNPYmplY3RSZWYsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVu
dENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRp
b24pOworCisgICAgUmVmPElQQzo6Q29ubmVjdGlvbj4gbV90ZXN0ZWRDb25uZWN0aW9uOworfTsK
KwogY2xhc3MgSlNJUENTdHJlYW1DbGllbnRDb25uZWN0aW9uIDogcHVibGljIFJlZkNvdW50ZWQ8
SlNJUENTdHJlYW1DbGllbnRDb25uZWN0aW9uPiwgcHVibGljIENhbk1ha2VXZWFrUHRyPEpTSVBD
U3RyZWFtQ2xpZW50Q29ubmVjdGlvbj4gewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8SlNJUENT
dHJlYW1DbGllbnRDb25uZWN0aW9uPiBjcmVhdGUoSlNJUEMmIGpzSVBDLCBJUEM6OkNvbm5lY3Rp
b24mIGNvbm5lY3Rpb24sIHNpemVfdCBidWZmZXJTaXplKQpAQCAtMjIwLDggKzI4Nyw2IEBAIHBy
aXZhdGU6CiAgICAgUmVmPFNoYXJlZE1lbW9yeT4gbV9zaGFyZWRNZW1vcnk7CiB9OwogCi1jbGFz
cyBKU0lQQzsKLQogY2xhc3MgSlNNZXNzYWdlTGlzdGVuZXIgZmluYWwgOiBwdWJsaWMgSVBDOjpD
b25uZWN0aW9uOjpNZXNzYWdlT2JzZXJ2ZXIgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwogcHVibGljOgpAQCAtMjQ2LDcgKzMxMSw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IEpTSVBDKHdlYlBhZ2UsIHdlYkZyYW1lKSk7CiAgICAgfQotCisg
ICAgc3RhdGljIEpTSVBDKiB0b1dyYXBwZWQoSlNDb250ZXh0UmVmLCBKU1ZhbHVlUmVmKTsKICAg
ICBzdGF0aWMgSlNDbGFzc1JlZiB3cmFwcGVyQ2xhc3MoKTsKIAogICAgIFdlYkZyYW1lKiB3ZWJG
cmFtZSgpIHsgcmV0dXJuIG1fd2ViRnJhbWUuZ2V0KCk7IH0KQEAgLTI1OCw3ICszMjMsNiBAQCBw
cml2YXRlOgogICAgIHsgfQogCiAgICAgc3RhdGljIEpTSVBDKiB1bndyYXAoSlNPYmplY3RSZWYp
OwotICAgIHN0YXRpYyBKU0lQQyogdG9XcmFwcGVkKEpTQ29udGV4dFJlZiwgSlNWYWx1ZVJlZik7
CiAgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZShKU0NvbnRleHRSZWYsIEpTT2JqZWN0UmVmKTsK
ICAgICBzdGF0aWMgdm9pZCBmaW5hbGl6ZShKU09iamVjdFJlZik7CiAgICAgc3RhdGljIGNvbnN0
IEpTU3RhdGljRnVuY3Rpb24qIHN0YXRpY0Z1bmN0aW9ucygpOwpAQCAtMjcyLDYgKzMzNiw4IEBA
IHByaXZhdGU6CiAgICAgc3RhdGljIEpTVmFsdWVSZWYgc2VuZFN5bmNNZXNzYWdlKEpTQ29udGV4
dFJlZiwgSlNPYmplY3RSZWYsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVu
dENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRp
b24pOwogICAgIHN0YXRpYyBKU1ZhbHVlUmVmIHdhaXRGb3JNZXNzYWdlKEpTQ29udGV4dFJlZiwg
SlNPYmplY3RSZWYsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50
LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOwog
CisgICAgc3RhdGljIEpTVmFsdWVSZWYgY3JlYXRlQ29ubmVjdGlvblBhaXIoSlNDb250ZXh0UmVm
LCBKU09iamVjdFJlZiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291
bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7
CisKICAgICBzdGF0aWMgSlNWYWx1ZVJlZiBjcmVhdGVTdHJlYW1DbGllbnRDb25uZWN0aW9uKEpT
Q29udGV4dFJlZiwgSlNPYmplY3RSZWYsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBh
cmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBl
eGNlcHRpb24pOwogICAgIHN0YXRpYyBKU1ZhbHVlUmVmIGNyZWF0ZVNlbWFwaG9yZShKU0NvbnRl
eHRSZWYsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1l
bnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0
aW9uKTsKICAgICBzdGF0aWMgSlNWYWx1ZVJlZiBjcmVhdGVTaGFyZWRNZW1vcnkoSlNDb250ZXh0
UmVmLCBKU09iamVjdFJlZiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50
Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlv
bik7CkBAIC0yOTIsMjYgKzM1OCwzMDMgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8VW5pcXVlUmVm
PEpTTWVzc2FnZUxpc3RlbmVyPj4gbV9tZXNzYWdlTGlzdGVuZXJzOwogfTsKIAotc3RhdGljIEpT
VmFsdWVSZWYgY3JlYXRlVHlwZUVycm9yKEpTQ29udGV4dFJlZiBjb250ZXh0LCBjb25zdCBTdHJp
bmcmIG1lc3NhZ2UpCitzdGF0aWMgSlNWYWx1ZVJlZiBjcmVhdGVUeXBlRXJyb3IoSlNDb250ZXh0
UmVmIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBKU0M6OkpTTG9ja0hv
bGRlciBsb2NrKHRvSlMoY29udGV4dCktPnZtKCkpOworICAgIHJldHVybiB0b1JlZihKU0M6OmNy
ZWF0ZVR5cGVFcnJvcih0b0pTKGNvbnRleHQpLCBtZXNzYWdlKSk7Cit9CisKK3N0YXRpYyBzdGQ6
Om9wdGlvbmFsPHVpbnQ2NF90PiBjb252ZXJ0VG9VaW50NjQoSlNDOjpKU1ZhbHVlIGpzVmFsdWUp
Cit7CisgICAgaWYgKGpzVmFsdWUuaXNOdW1iZXIoKSkgeworICAgICAgICBkb3VibGUgdmFsdWUg
PSBqc1ZhbHVlLmFzTnVtYmVyKCk7CisgICAgICAgIGlmICh2YWx1ZSA8IDAgfHwgdHJ1bmModmFs
dWUpICE9IHZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAgICAg
cmV0dXJuIHZhbHVlOworICAgIH0KKyAgICBpZiAoanNWYWx1ZS5pc0JpZ0ludCgpKQorICAgICAg
ICByZXR1cm4gSlNDOjpKU0JpZ0ludDo6dG9CaWdVSW50NjQoanNWYWx1ZSk7CisgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKK30KKworCitzdGF0aWMgSlNWYWx1ZVJlZiBzZW5kTWVzc2FnZVdpdGhK
U0FyZ3VtZW50cyhJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIEpTQ29udGV4dFJlZiBjb250
ZXh0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwg
SlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIGF1dG8qIGdsb2JhbE9iamVjdCA9IHRvSlMo
Y29udGV4dCk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhnbG9iYWxPYmplY3QtPnZtKCkp
OworCisgICAgYXV0byBkZXN0aW5hdGlvbklEID0gZGVzdGluYXRpb25JREZyb21Bcmd1bWVudChn
bG9iYWxPYmplY3QsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKTsKKyAgICBpZiAoIWRlc3RpbmF0
aW9uSUQpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKwor
ICAgIGF1dG8gbWVzc2FnZUlEID0gbWVzc2FnZUlERnJvbUFyZ3VtZW50KGdsb2JhbE9iamVjdCwg
YXJndW1lbnRzWzFdLCBleGNlcHRpb24pOworICAgIGlmICghbWVzc2FnZUlEKQorICAgICAgICBy
ZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisKKyAgICBhdXRvIG1lc3NhZ2VO
YW1lID0gc3RhdGljX2Nhc3Q8SVBDOjpNZXNzYWdlTmFtZT4oKm1lc3NhZ2VJRCk7CisgICAgYXV0
byBlbmNvZGVyID0gbWFrZVVuaXF1ZVJlZjxJUEM6OkVuY29kZXI+KG1lc3NhZ2VOYW1lLCAqZGVz
dGluYXRpb25JRCk7CisKKyAgICBKU1ZhbHVlUmVmIHJldHVyblZhbHVlID0gSlNWYWx1ZU1ha2VV
bmRlZmluZWQoY29udGV4dCk7CisKKyAgICBib29sIGhhc1JlcGx5ID0gISFtZXNzYWdlUmVwbHlB
cmd1bWVudERlc2NyaXB0aW9ucyhtZXNzYWdlTmFtZSk7CisgICAgaWYgKGhhc1JlcGx5KSB7Cisg
ICAgICAgIHVpbnQ2NF90IGxpc3RlbmVySUQgPSBJUEM6Om5leHRBc3luY1JlcGx5SGFuZGxlcklE
KCk7CisgICAgICAgIGVuY29kZXIuZ2V0KCkgPDwgbGlzdGVuZXJJRDsKKworICAgICAgICBKU09i
amVjdFJlZiByZXNvbHZlOworICAgICAgICBKU09iamVjdFJlZiByZWplY3Q7CitBTExPV19ORVdf
QVBJX1dJVEhPVVRfR1VBUkRTX0JFR0lOCisgICAgICAgIHJldHVyblZhbHVlID0gSlNPYmplY3RN
YWtlRGVmZXJyZWRQcm9taXNlKGNvbnRleHQsICZyZXNvbHZlLCAmcmVqZWN0LCBleGNlcHRpb24p
OyAvLyBOT0xJTlQKK0FMTE9XX05FV19BUElfV0lUSE9VVF9HVUFSRFNfRU5ECisgICAgICAgIGlm
ICghcmV0dXJuVmFsdWUpICAvLyBOT0xJTlQKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFr
ZVVuZGVmaW5lZChjb250ZXh0KTsKKworICAgICAgICBKU0dsb2JhbENvbnRleHRSZXRhaW4oSlND
b250ZXh0R2V0R2xvYmFsQ29udGV4dChjb250ZXh0KSk7CisgICAgICAgIEpTVmFsdWVQcm90ZWN0
KGNvbnRleHQsIHJlc29sdmUpOworICAgICAgICBKU1ZhbHVlUHJvdGVjdChjb250ZXh0LCByZWpl
Y3QpOworICAgICAgICBJUEM6OmFkZEFzeW5jUmVwbHlIYW5kbGVyKGNvbm5lY3Rpb24sIGxpc3Rl
bmVySUQsIFttZXNzYWdlTmFtZSwgY29udGV4dCwgcmVzb2x2ZSwgcmVqZWN0XShJUEM6OkRlY29k
ZXIqIHJlcGx5RGVjb2RlcikgeworICAgICAgICAgICAgYXV0byogZ2xvYmFsT2JqZWN0ID0gdG9K
Uyhjb250ZXh0KTsKKyAgICAgICAgICAgIGF1dG8mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwor
ICAgICAgICAgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisKKyAgICAgICAgICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKyAgICAgICAgICAgIGF1dG8qIGpz
UmVzdWx0ID0ganNSZXN1bHRGcm9tUmVwbHlEZWNvZGVyKGdsb2JhbE9iamVjdCwgbWVzc2FnZU5h
bWUsICpyZXBseURlY29kZXIpOworICAgICAgICAgICAgaWYgKGF1dG8qIGV4Y2VwdGlvbiA9IHNj
b3BlLmV4Y2VwdGlvbigpKSB7CisgICAgICAgICAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24o
KTsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdID0geyB0b1JlZihnbG9i
YWxPYmplY3QsIGV4Y2VwdGlvbikgfTsKKyAgICAgICAgICAgICAgICBKU09iamVjdENhbGxBc0Z1
bmN0aW9uKGNvbnRleHQsIHJlamVjdCwgcmVqZWN0LCAxLCBhcmd1bWVudHMsIG51bGxwdHIpOwor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlUmVmIGFyZ3VtZW50
c1tdID0geyB0b1JlZihnbG9iYWxPYmplY3QsIGpzUmVzdWx0KSB9OworICAgICAgICAgICAgICAg
IEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb24oY29udGV4dCwgcmVzb2x2ZSwgcmVzb2x2ZSwgMSwgYXJn
dW1lbnRzLCBudWxscHRyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgSlNWYWx1ZVVu
cHJvdGVjdChjb250ZXh0LCByZWplY3QpOworICAgICAgICAgICAgSlNWYWx1ZVVucHJvdGVjdChj
b250ZXh0LCByZXNvbHZlKTsKKyAgICAgICAgICAgIEpTR2xvYmFsQ29udGV4dFJlbGVhc2UoSlND
b250ZXh0R2V0R2xvYmFsQ29udGV4dChjb250ZXh0KSk7CisgICAgICAgIH0pOworICAgIH0KKwor
ICAgIGlmIChhcmd1bWVudENvdW50ID4gMikgeworICAgICAgICBpZiAoIWVuY29kZUFyZ3VtZW50
KGVuY29kZXIuZ2V0KCksIGNvbnRleHQsIGFyZ3VtZW50c1syXSwgZXhjZXB0aW9uKSkKKyAgICAg
ICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKyAgICB9CisKKyAg
ICAvLyBGSVhNRTogQWRkIHRoZSBzdXBwb3J0IGZvciBzcGVjaWZ5aW5nIElQQyBvcHRpb25zLgor
CisgICAgY29ubmVjdGlvbi5zZW5kTWVzc2FnZShXVEZNb3ZlKGVuY29kZXIpLCB7IH0pOworICAg
IHJldHVybiByZXR1cm5WYWx1ZTsKK30KKworbmFtZXNwYWNlIHsKKworc3RydWN0IFN5bmNJUENN
ZXNzYWdlSW5mbyB7CisgICAgdWludDY0X3QgZGVzdGluYXRpb25JRDsKKyAgICBJUEM6Ok1lc3Nh
Z2VOYW1lIG1lc3NhZ2VOYW1lOworICAgIElQQzo6VGltZW91dCB0aW1lb3V0OworfTsKKworfQor
CitzdGF0aWMgc3RkOjpvcHRpb25hbDxTeW5jSVBDTWVzc2FnZUluZm8+IGV4dHJhY3RTeW5jSVBD
TWVzc2FnZUluZm8oSlNDb250ZXh0UmVmIGNvbnRleHQsIHNpemVfdCBhcmd1bWVudENvdW50LCBj
b25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7Cisg
ICAgQVNTRVJUKGFyZ3VtZW50Q291bnQgPj0gMik7CisgICAgYXV0byogZ2xvYmFsT2JqZWN0ID0g
dG9KUyhjb250ZXh0KTsKKyAgICBhdXRvIGRlc3RpbmF0aW9uSUQgPSBkZXN0aW5hdGlvbklERnJv
bUFyZ3VtZW50KGdsb2JhbE9iamVjdCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pOworICAgIGlm
ICghZGVzdGluYXRpb25JRCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGF1
dG8gbWVzc2FnZUlEID0gbWVzc2FnZUlERnJvbUFyZ3VtZW50KGdsb2JhbE9iamVjdCwgYXJndW1l
bnRzWzFdLCBleGNlcHRpb24pOworICAgIGlmICghbWVzc2FnZUlEKQorICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OworCisgICAgU2Vjb25kcyB0aW1lb3V0RHVyYXRpb247CisgICAgeworICAg
ICAgICBhdXRvIGpzVmFsdWUgPSB0b0pTKGdsb2JhbE9iamVjdCwgYXJndW1lbnRzWzJdKTsKKyAg
ICAgICAgaWYgKCFqc1ZhbHVlLmlzTnVtYmVyKCkpIHsKKyAgICAgICAgICAgICpleGNlcHRpb24g
PSBjcmVhdGVUeXBlRXJyb3IoY29udGV4dCwgIlRpbWVvdXQgbXVzdCBiZSBhIG51bWJlciJfcyk7
CisgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgICAgICB9CisgICAgICAgIHRp
bWVvdXREdXJhdGlvbiA9IFNlY29uZHMgeyBqc1ZhbHVlLmFzTnVtYmVyKCkgfTsKKyAgICB9CisK
KyAgICByZXR1cm4geyB7ICpkZXN0aW5hdGlvbklELCBzdGF0aWNfY2FzdDxJUEM6Ok1lc3NhZ2VO
YW1lPigqbWVzc2FnZUlEKSwgeyB0aW1lb3V0RHVyYXRpb24gfSB9IH07Cit9CisKK3N0YXRpYyBK
U1ZhbHVlUmVmIHNlbmRTeW5jTWVzc2FnZVdpdGhKU0FyZ3VtZW50cyhJUEM6OkNvbm5lY3Rpb24m
IGNvbm5lY3Rpb24sIEpTQ29udGV4dFJlZiBjb250ZXh0LCBzaXplX3QgYXJndW1lbnRDb3VudCwg
Y29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQorewor
ICAgIGF1dG8qIGdsb2JhbE9iamVjdCA9IHRvSlMoY29udGV4dCk7CisgICAgSlNDOjpKU0xvY2tI
b2xkZXIgbG9jayhnbG9iYWxPYmplY3QtPnZtKCkpOworICAgIGF1dG8gaW5mbyA9IGV4dHJhY3RT
eW5jSVBDTWVzc2FnZUluZm8oY29udGV4dCwgYXJndW1lbnRDb3VudCwgYXJndW1lbnRzLCBleGNl
cHRpb24pOworICAgIGlmICghaW5mbykKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZp
bmVkKGNvbnRleHQpOworCisgICAgYXV0byBbZGVzdGluYXRpb25JRCwgbWVzc2FnZU5hbWUsIHRp
bWVvdXRdID0gKmluZm87CisKKyAgICAvLyBGSVhNRTogU3VwcG9ydCB0aGUgb3B0aW9ucy4KKwor
ICAgIElQQzo6Q29ubmVjdGlvbjo6U3luY1JlcXVlc3RJRCBzeW5jUmVxdWVzdElEOworICAgIGF1
dG8gZW5jb2RlciA9IGNvbm5lY3Rpb24uY3JlYXRlU3luY01lc3NhZ2VFbmNvZGVyKG1lc3NhZ2VO
YW1lLCBkZXN0aW5hdGlvbklELCBzeW5jUmVxdWVzdElEKTsKKworICAgIGlmIChhcmd1bWVudENv
dW50ID4gMykgeworICAgICAgICBpZiAoIWVuY29kZUFyZ3VtZW50KGVuY29kZXIuZ2V0KCksIGNv
bnRleHQsIGFyZ3VtZW50c1szXSwgZXhjZXB0aW9uKSkKKyAgICAgICAgICAgIHJldHVybiBKU1Zh
bHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKyAgICB9CisKKyAgICBpZiAoYXV0byByZXBseURl
Y29kZXIgPSBjb25uZWN0aW9uLnNlbmRTeW5jTWVzc2FnZShzeW5jUmVxdWVzdElELCBXVEZNb3Zl
KGVuY29kZXIpLCB0aW1lb3V0LCB7IH0pKSB7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X0NBVENIX1NDT1BFKGdsb2JhbE9iamVjdC0+dm0oKSk7CisgICAgICAgIGF1dG8qIGpzUmVzdWx0
ID0ganNSZXN1bHRGcm9tUmVwbHlEZWNvZGVyKGdsb2JhbE9iamVjdCwgbWVzc2FnZU5hbWUsICpy
ZXBseURlY29kZXIpOworICAgICAgICBpZiAoc2NvcGUuZXhjZXB0aW9uKCkpIHsKKyAgICAgICAg
ICAgICpleGNlcHRpb24gPSB0b1JlZihnbG9iYWxPYmplY3QsIHNjb3BlLmV4Y2VwdGlvbigpKTsK
KyAgICAgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgICAgICByZXR1cm4g
SlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IHRvUmVmKGdsb2JhbE9iamVjdCwganNSZXN1bHQpOworICAgIH0KKworICAgIHJldHVybiBKU1Zh
bHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgd2FpdEZv
ck1lc3NhZ2VXaXRoSlNBcmd1bWVudHMoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBKU0Nv
bnRleHRSZWYgY29udGV4dCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYg
YXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBhdXRvKiBnbG9iYWxP
YmplY3QgPSB0b0pTKGNvbnRleHQpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soZ2xvYmFs
T2JqZWN0LT52bSgpKTsKKworICAgIGF1dG8gaW5mbyA9IGV4dHJhY3RTeW5jSVBDTWVzc2FnZUlu
Zm8oY29udGV4dCwgYXJndW1lbnRDb3VudCwgYXJndW1lbnRzLCBleGNlcHRpb24pOworICAgIGlm
ICghaW5mbykKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwor
CisgICAgYXV0byBbZGVzdGluYXRpb25JRCwgbWVzc2FnZU5hbWUsIHRpbWVvdXRdID0gKmluZm87
CisgICAgaWYgKGF1dG8gZGVjb2RlciA9IGNvbm5lY3Rpb24ud2FpdEZvck1lc3NhZ2VGb3JUZXN0
aW5nKG1lc3NhZ2VOYW1lLCBkZXN0aW5hdGlvbklELCB0aW1lb3V0LCB7IH0pKSB7CisgICAgICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKGdsb2JhbE9iamVjdC0+dm0oKSk7Cisg
ICAgICAgIGF1dG8ganNSZXN1bHQgPSBqc1ZhbHVlRm9yQXJndW1lbnRzKGdsb2JhbE9iamVjdCwg
bWVzc2FnZU5hbWUsICpkZWNvZGVyKTsKKyAgICAgICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigpKSB7
CisgICAgICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoZ2xvYmFsT2JqZWN0LCBzY29wZS5leGNl
cHRpb24oKSk7CisgICAgICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICAg
ICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiBqc1Jlc3VsdCA/IHRvUmVmKGdsb2JhbE9iamVjdCwgKmpzUmVzdWx0KSA6IEpT
VmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworICAgIH0KKyAgICByZXR1cm4gSlNWYWx1ZU1h
a2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKK0pTT2JqZWN0UmVmIEpTSVBDU2VtYXBob3JlOjpj
cmVhdGVKU1dyYXBwZXIoSlNDb250ZXh0UmVmIGNvbnRleHQpCit7CisgICAgYXV0byogZ2xvYmFs
T2JqZWN0ID0gdG9KUyhjb250ZXh0KTsKKyAgICBhdXRvJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0o
KTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9DQVRDSF9TQ09QRSh2bSk7CisgICAgSlNPYmplY3RSZWYgd3JhcHBlck9iamVjdCA9IEpT
T2JqZWN0TWFrZSh0b0dsb2JhbFJlZihnbG9iYWxPYmplY3QpLCB3cmFwcGVyQ2xhc3MoKSwgdGhp
cyk7CisgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKKyAgICByZXR1cm4gd3JhcHBlck9iamVj
dDsKK30KKworSlNDbGFzc1JlZiBKU0lQQ1NlbWFwaG9yZTo6d3JhcHBlckNsYXNzKCkKK3sKKyAg
ICBzdGF0aWMgSlNDbGFzc1JlZiBqc0NsYXNzOworICAgIGlmICghanNDbGFzcykgeworICAgICAg
ICBKU0NsYXNzRGVmaW5pdGlvbiBkZWZpbml0aW9uID0ga0pTQ2xhc3NEZWZpbml0aW9uRW1wdHk7
CisgICAgICAgIGRlZmluaXRpb24uY2xhc3NOYW1lID0gIlNlbWFwaG9yZSI7CisgICAgICAgIGRl
ZmluaXRpb24ucGFyZW50Q2xhc3MgPSBudWxscHRyOworICAgICAgICBkZWZpbml0aW9uLnN0YXRp
Y1ZhbHVlcyA9IG51bGxwdHI7CisgICAgICAgIGRlZmluaXRpb24uc3RhdGljRnVuY3Rpb25zID0g
c3RhdGljRnVuY3Rpb25zKCk7CisgICAgICAgIGRlZmluaXRpb24uaW5pdGlhbGl6ZSA9IGluaXRp
YWxpemU7CisgICAgICAgIGRlZmluaXRpb24uZmluYWxpemUgPSBmaW5hbGl6ZTsKKyAgICAgICAg
anNDbGFzcyA9IEpTQ2xhc3NDcmVhdGUoJmRlZmluaXRpb24pOworICAgIH0KKyAgICByZXR1cm4g
anNDbGFzczsKK30KKworaW5saW5lIEpTSVBDU2VtYXBob3JlKiBKU0lQQ1NlbWFwaG9yZTo6dW53
cmFwKEpTT2JqZWN0UmVmIG9iamVjdCkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SlNJUENT
ZW1hcGhvcmUqPihKU09iamVjdEdldFByaXZhdGUob2JqZWN0KSk7Cit9CisKK0pTSVBDU2VtYXBo
b3JlKiBKU0lQQ1NlbWFwaG9yZTo6dG9XcmFwcGVkKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1Zh
bHVlUmVmIHZhbHVlKQoreworICAgIGlmICghY29udGV4dCB8fCAhdmFsdWUgfHwgIUpTVmFsdWVJ
c09iamVjdE9mQ2xhc3MoY29udGV4dCwgdmFsdWUsIHdyYXBwZXJDbGFzcygpKSkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIHVud3JhcChKU1ZhbHVlVG9PYmplY3QoY29udGV4
dCwgdmFsdWUsIG51bGxwdHIpKTsKK30KKwordm9pZCBKU0lQQ1NlbWFwaG9yZTo6aW5pdGlhbGl6
ZShKU0NvbnRleHRSZWYsIEpTT2JqZWN0UmVmIG9iamVjdCkKK3sKKyAgICB1bndyYXAob2JqZWN0
KS0+cmVmKCk7Cit9CisKK3ZvaWQgSlNJUENTZW1hcGhvcmU6OmZpbmFsaXplKEpTT2JqZWN0UmVm
IG9iamVjdCkKK3sKKyAgICB1bndyYXAob2JqZWN0KS0+ZGVyZWYoKTsKK30KKworY29uc3QgSlNT
dGF0aWNGdW5jdGlvbiogSlNJUENTZW1hcGhvcmU6OnN0YXRpY0Z1bmN0aW9ucygpCit7CisgICAg
c3RhdGljIGNvbnN0IEpTU3RhdGljRnVuY3Rpb24gZnVuY3Rpb25zW10gPSB7CisgICAgICAgIHsg
InNpZ25hbCIsIHNpZ25hbCwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIHwga0pTUHJv
cGVydHlBdHRyaWJ1dGVSZWFkT25seSB9LAorICAgICAgICB7ICJ3YWl0Rm9yIiwgd2FpdEZvciwg
a0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIHwga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFk
T25seSB9LAorICAgICAgICB7IDAsIDAsIDAgfQorICAgIH07CisgICAgcmV0dXJuIGZ1bmN0aW9u
czsKK30KKworCitKU09iamVjdFJlZiBKU0lQQ0F0dGFjaG1lbnQ6OmNyZWF0ZUpTV3JhcHBlcihK
U0NvbnRleHRSZWYgY29udGV4dCkKK3sKKyAgICBhdXRvKiBnbG9iYWxPYmplY3QgPSB0b0pTKGNv
bnRleHQpOworICAgIGF1dG8mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIEpTQzo6SlNM
b2NrSG9sZGVyIGxvY2sodm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BF
KHZtKTsKKyAgICBKU09iamVjdFJlZiB3cmFwcGVyT2JqZWN0ID0gSlNPYmplY3RNYWtlKHRvR2xv
YmFsUmVmKGdsb2JhbE9iamVjdCksIHdyYXBwZXJDbGFzcygpLCB0aGlzKTsKKyAgICBzY29wZS5j
bGVhckV4Y2VwdGlvbigpOworICAgIHJldHVybiB3cmFwcGVyT2JqZWN0OworfQorCitKU0NsYXNz
UmVmIEpTSVBDQXR0YWNobWVudDo6d3JhcHBlckNsYXNzKCkKK3sKKyAgICBzdGF0aWMgSlNDbGFz
c1JlZiBqc0NsYXNzOworICAgIGlmICghanNDbGFzcykgeworICAgICAgICBKU0NsYXNzRGVmaW5p
dGlvbiBkZWZpbml0aW9uID0ga0pTQ2xhc3NEZWZpbml0aW9uRW1wdHk7CisgICAgICAgIGRlZmlu
aXRpb24uY2xhc3NOYW1lID0gIkF0dGFjaG1lbnQiOworICAgICAgICBkZWZpbml0aW9uLnBhcmVu
dENsYXNzID0gbnVsbHB0cjsKKyAgICAgICAgZGVmaW5pdGlvbi5zdGF0aWNWYWx1ZXMgPSBudWxs
cHRyOworICAgICAgICBkZWZpbml0aW9uLnN0YXRpY0Z1bmN0aW9ucyA9IHN0YXRpY0Z1bmN0aW9u
cygpOworICAgICAgICBkZWZpbml0aW9uLmluaXRpYWxpemUgPSBpbml0aWFsaXplOworICAgICAg
ICBkZWZpbml0aW9uLmZpbmFsaXplID0gZmluYWxpemU7CisgICAgICAgIGpzQ2xhc3MgPSBKU0Ns
YXNzQ3JlYXRlKCZkZWZpbml0aW9uKTsKKyAgICB9CisgICAgcmV0dXJuIGpzQ2xhc3M7Cit9CisK
K2lubGluZSBKU0lQQ0F0dGFjaG1lbnQqIEpTSVBDQXR0YWNobWVudDo6dW53cmFwKEpTT2JqZWN0
UmVmIG9iamVjdCkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SlNJUENBdHRhY2htZW50Kj4o
SlNPYmplY3RHZXRQcml2YXRlKG9iamVjdCkpOworfQorCitKU0lQQ0F0dGFjaG1lbnQqIEpTSVBD
QXR0YWNobWVudDo6dG9XcmFwcGVkKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIHZh
bHVlKQoreworICAgIGlmICghY29udGV4dCB8fCAhdmFsdWUgfHwgIUpTVmFsdWVJc09iamVjdE9m
Q2xhc3MoY29udGV4dCwgdmFsdWUsIHdyYXBwZXJDbGFzcygpKSkKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgcmV0dXJuIHVud3JhcChKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgdmFsdWUs
IG51bGxwdHIpKTsKK30KKwordm9pZCBKU0lQQ0F0dGFjaG1lbnQ6OmluaXRpYWxpemUoSlNDb250
ZXh0UmVmLCBKU09iamVjdFJlZiBvYmplY3QpCit7CisgICAgdW53cmFwKG9iamVjdCktPnJlZigp
OworfQorCit2b2lkIEpTSVBDQXR0YWNobWVudDo6ZmluYWxpemUoSlNPYmplY3RSZWYgb2JqZWN0
KQogewotICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2sodG9KUyhjb250ZXh0KS0+dm0oKSk7Ci0g
ICAgcmV0dXJuIHRvUmVmKEpTQzo6Y3JlYXRlVHlwZUVycm9yKHRvSlMoY29udGV4dCksIG1lc3Nh
Z2UpKTsKKyAgICB1bndyYXAob2JqZWN0KS0+ZGVyZWYoKTsKIH0KIAotc3RhdGljIHN0ZDo6b3B0
aW9uYWw8dWludDY0X3Q+IGNvbnZlcnRUb1VpbnQ2NChKU0M6OkpTVmFsdWUganNWYWx1ZSkKK2Nv
bnN0IEpTU3RhdGljRnVuY3Rpb24qIEpTSVBDQXR0YWNobWVudDo6c3RhdGljRnVuY3Rpb25zKCkK
IHsKLSAgICBpZiAoanNWYWx1ZS5pc051bWJlcigpKSB7Ci0gICAgICAgIGRvdWJsZSB2YWx1ZSA9
IGpzVmFsdWUuYXNOdW1iZXIoKTsKLSAgICAgICAgaWYgKHZhbHVlIDwgMCB8fCB0cnVuYyh2YWx1
ZSkgIT0gdmFsdWUpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgICAgICBy
ZXR1cm4gdmFsdWU7Ci0gICAgfQotICAgIGlmIChqc1ZhbHVlLmlzQmlnSW50KCkpCi0gICAgICAg
IHJldHVybiBKU0M6OkpTQmlnSW50Ojp0b0JpZ1VJbnQ2NChqc1ZhbHVlKTsKLSAgICByZXR1cm4g
c3RkOjpudWxsb3B0OworICAgIHN0YXRpYyBjb25zdCBKU1N0YXRpY0Z1bmN0aW9uIGZ1bmN0aW9u
c1tdID0geworICAgICAgICB7IDAsIDAsIDAgfQorICAgIH07CisgICAgcmV0dXJuIGZ1bmN0aW9u
czsKIH0KIAotSlNPYmplY3RSZWYgSlNJUENTZW1hcGhvcmU6OmNyZWF0ZUpTV3JhcHBlcihKU0Nv
bnRleHRSZWYgY29udGV4dCkKK0pTT2JqZWN0UmVmIEpTSVBDQ29ubmVjdGlvbjo6Y3JlYXRlSlNX
cmFwcGVyKEpTQ29udGV4dFJlZiBjb250ZXh0KQogewogICAgIGF1dG8qIGdsb2JhbE9iamVjdCA9
IHRvSlMoY29udGV4dCk7CiAgICAgYXV0byYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CkBAIC0z
MjIsMTIgKzY2NSwxMiBAQCBKU09iamVjdFJlZiBKU0lQQ1NlbWFwaG9yZTo6Y3JlYXRlSlNXcmFw
cGVyKEpTQ29udGV4dFJlZiBjb250ZXh0KQogICAgIHJldHVybiB3cmFwcGVyT2JqZWN0OwogfQog
Ci1KU0NsYXNzUmVmIEpTSVBDU2VtYXBob3JlOjp3cmFwcGVyQ2xhc3MoKQorSlNDbGFzc1JlZiBK
U0lQQ0Nvbm5lY3Rpb246OndyYXBwZXJDbGFzcygpCiB7CiAgICAgc3RhdGljIEpTQ2xhc3NSZWYg
anNDbGFzczsKICAgICBpZiAoIWpzQ2xhc3MpIHsKICAgICAgICAgSlNDbGFzc0RlZmluaXRpb24g
ZGVmaW5pdGlvbiA9IGtKU0NsYXNzRGVmaW5pdGlvbkVtcHR5OwotICAgICAgICBkZWZpbml0aW9u
LmNsYXNzTmFtZSA9ICJTZW1hcGhvcmUiOworICAgICAgICBkZWZpbml0aW9uLmNsYXNzTmFtZSA9
ICJDb25uZWN0aW9uIjsKICAgICAgICAgZGVmaW5pdGlvbi5wYXJlbnRDbGFzcyA9IG51bGxwdHI7
CiAgICAgICAgIGRlZmluaXRpb24uc3RhdGljVmFsdWVzID0gbnVsbHB0cjsKICAgICAgICAgZGVm
aW5pdGlvbi5zdGF0aWNGdW5jdGlvbnMgPSBzdGF0aWNGdW5jdGlvbnMoKTsKQEAgLTMzOCwzOCAr
NjgxLDEyNSBAQCBKU0NsYXNzUmVmIEpTSVBDU2VtYXBob3JlOjp3cmFwcGVyQ2xhc3MoKQogICAg
IHJldHVybiBqc0NsYXNzOwogfQogCi1pbmxpbmUgSlNJUENTZW1hcGhvcmUqIEpTSVBDU2VtYXBo
b3JlOjp1bndyYXAoSlNPYmplY3RSZWYgb2JqZWN0KQoraW5saW5lIEpTSVBDQ29ubmVjdGlvbiog
SlNJUENDb25uZWN0aW9uOjp1bndyYXAoSlNPYmplY3RSZWYgb2JqZWN0KQogewotICAgIHJldHVy
biBzdGF0aWNfY2FzdDxKU0lQQ1NlbWFwaG9yZSo+KEpTT2JqZWN0R2V0UHJpdmF0ZShvYmplY3Qp
KTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SlNJUENDb25uZWN0aW9uKj4oSlNPYmplY3RHZXRQ
cml2YXRlKG9iamVjdCkpOwogfQogCi1KU0lQQ1NlbWFwaG9yZSogSlNJUENTZW1hcGhvcmU6OnRv
V3JhcHBlZChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiB2YWx1ZSkKK0pTSVBDQ29u
bmVjdGlvbiogSlNJUENDb25uZWN0aW9uOjp0b1dyYXBwZWQoSlNDb250ZXh0UmVmIGNvbnRleHQs
IEpTVmFsdWVSZWYgdmFsdWUpCiB7CiAgICAgaWYgKCFjb250ZXh0IHx8ICF2YWx1ZSB8fCAhSlNW
YWx1ZUlzT2JqZWN0T2ZDbGFzcyhjb250ZXh0LCB2YWx1ZSwgd3JhcHBlckNsYXNzKCkpKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1cm4gdW53cmFwKEpTVmFsdWVUb09iamVjdChj
b250ZXh0LCB2YWx1ZSwgbnVsbHB0cikpOwogfQogCi12b2lkIEpTSVBDU2VtYXBob3JlOjppbml0
aWFsaXplKEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYgb2JqZWN0KQordm9pZCBKU0lQQ0Nvbm5l
Y3Rpb246OmluaXRpYWxpemUoSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiBvYmplY3QpCiB7CiAg
ICAgdW53cmFwKG9iamVjdCktPnJlZigpOwogfQogCi12b2lkIEpTSVBDU2VtYXBob3JlOjpmaW5h
bGl6ZShKU09iamVjdFJlZiBvYmplY3QpCit2b2lkIEpTSVBDQ29ubmVjdGlvbjo6ZmluYWxpemUo
SlNPYmplY3RSZWYgb2JqZWN0KQogewogICAgIHVud3JhcChvYmplY3QpLT5kZXJlZigpOwogfQog
Ci1jb25zdCBKU1N0YXRpY0Z1bmN0aW9uKiBKU0lQQ1NlbWFwaG9yZTo6c3RhdGljRnVuY3Rpb25z
KCkKK3ZvaWQgSlNJUENDb25uZWN0aW9uOjpkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rp
b24mLCBJUEM6OkRlY29kZXImKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCiti
b29sIEpTSVBDQ29ubmVjdGlvbjo6ZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlv
biYsIElQQzo6RGVjb2RlciYsIFVuaXF1ZVJlZjxJUEM6OkVuY29kZXI+JikKK3sKKyAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBKU0lQQ0Nvbm5lY3Rpb246OmRpZENsb3NlKElQ
Qzo6Q29ubmVjdGlvbiYpCit7Cit9CisKK3ZvaWQgSlNJUENDb25uZWN0aW9uOjpkaWRSZWNlaXZl
SW52YWxpZE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpNZXNzYWdlTmFtZSkKK3sKKyAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworCitjb25zdCBKU1N0YXRpY0Z1bmN0aW9uKiBK
U0lQQ0Nvbm5lY3Rpb246OnN0YXRpY0Z1bmN0aW9ucygpCiB7CiAgICAgc3RhdGljIGNvbnN0IEpT
U3RhdGljRnVuY3Rpb24gZnVuY3Rpb25zW10gPSB7Ci0gICAgICAgIHsgInNpZ25hbCIsIHNpZ25h
bCwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIHwga0pTUHJvcGVydHlBdHRyaWJ1dGVS
ZWFkT25seSB9LAotICAgICAgICB7ICJ3YWl0Rm9yIiwgd2FpdEZvciwga0pTUHJvcGVydHlBdHRy
aWJ1dGVEb250RGVsZXRlIHwga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB9LAorICAgICAg
ICB7ICJvcGVuIiwgb3Blbiwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIHwga0pTUHJv
cGVydHlBdHRyaWJ1dGVSZWFkT25seSB9LAorICAgICAgICB7ICJpbnZhbGlkYXRlIiwgaW52YWxp
ZGF0ZSwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIHwga0pTUHJvcGVydHlBdHRyaWJ1
dGVSZWFkT25seSB9LAorICAgICAgICB7ICJzZW5kTWVzc2FnZSIsIHNlbmRNZXNzYWdlLCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5
IH0sCisgICAgICAgIHsgInNlbmRTeW5jTWVzc2FnZSIsIHNlbmRTeW5jTWVzc2FnZSwga0pTUHJv
cGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIHwga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB9
LAorICAgICAgICB7ICJ3YWl0Rm9yTWVzc2FnZSIsIHdhaXRGb3JNZXNzYWdlLCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZURvbnREZWxldGUgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IH0sCiAg
ICAgICAgIHsgMCwgMCwgMCB9CiAgICAgfTsKICAgICByZXR1cm4gZnVuY3Rpb25zOwogfQogCitK
U1ZhbHVlUmVmIEpTSVBDQ29ubmVjdGlvbjo6b3BlbihKU0NvbnRleHRSZWYgY29udGV4dCwgSlNP
YmplY3RSZWYsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCwgY29uc3QgSlNWYWx1ZVJl
ZltdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgUmVmUHRyIHNlbGYgPSB0b1dyYXBw
ZWQoY29udGV4dCwgdGhpc09iamVjdCk7CisgICAgaWYgKCFzZWxmKSB7CisgICAgICAgICpleGNl
cHRpb24gPSBjcmVhdGVUeXBlRXJyb3IoY29udGV4dCwgIldyb25nIHR5cGUiX3MpOworICAgICAg
ICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisgICAgfQorICAgIHNlbGYt
Pm1fdGVzdGVkQ29ubmVjdGlvbi0+b3BlbigpOworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVm
aW5lZChjb250ZXh0KTsKK30KKworSlNWYWx1ZVJlZiBKU0lQQ0Nvbm5lY3Rpb246OmludmFsaWRh
dGUoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJlZiB0aGlzT2Jq
ZWN0LCBzaXplX3QsIGNvbnN0IEpTVmFsdWVSZWZbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQor
eworICAgIFJlZlB0ciBzZWxmID0gdG9XcmFwcGVkKGNvbnRleHQsIHRoaXNPYmplY3QpOworICAg
IGlmICghc2VsZikgeworICAgICAgICAqZXhjZXB0aW9uID0gY3JlYXRlVHlwZUVycm9yKGNvbnRl
eHQsICJXcm9uZyB0eXBlIl9zKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVk
KGNvbnRleHQpOworICAgIH0KKyAgICBzZWxmLT5tX3Rlc3RlZENvbm5lY3Rpb24tPmludmFsaWRh
dGUoKTsKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKK0pT
VmFsdWVSZWYgSlNJUENDb25uZWN0aW9uOjpzZW5kTWVzc2FnZShKU0NvbnRleHRSZWYgY29udGV4
dCwgSlNPYmplY3RSZWYsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENv
dW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24p
Cit7CisgICAgUmVmUHRyIHNlbGYgPSB0b1dyYXBwZWQoY29udGV4dCwgdGhpc09iamVjdCk7Cisg
ICAgaWYgKCFzZWxmKSB7CisgICAgICAgICpleGNlcHRpb24gPSBjcmVhdGVUeXBlRXJyb3IoY29u
dGV4dCwgIldyb25nIHR5cGUiX3MpOworICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmlu
ZWQoY29udGV4dCk7CisgICAgfQorICAgIGlmIChhcmd1bWVudENvdW50IDwgMikgeworICAgICAg
ICAqZXhjZXB0aW9uID0gY3JlYXRlVHlwZUVycm9yKGNvbnRleHQsICJNdXN0IHNwZWNpZnkgdGhl
IGRlc3RpbmF0aW9uIElEIGFuZCBtZXNzYWdlIElEIGFzIHRoZSBmaXJzdCB0d28gYXJndW1lbnRz
Il9zKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworICAg
IH0KKyAgICByZXR1cm4gc2VuZE1lc3NhZ2VXaXRoSlNBcmd1bWVudHMoc2VsZi0+bV90ZXN0ZWRD
b25uZWN0aW9uLCBjb250ZXh0LCBhcmd1bWVudENvdW50LCBhcmd1bWVudHMsIGV4Y2VwdGlvbik7
Cit9CisKK0pTVmFsdWVSZWYgSlNJUENDb25uZWN0aW9uOjpzZW5kU3luY01lc3NhZ2UoSlNDb250
ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXpl
X3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJl
ZiogZXhjZXB0aW9uKQoreworICAgIFJlZlB0ciBzZWxmID0gdG9XcmFwcGVkKGNvbnRleHQsIHRo
aXNPYmplY3QpOworICAgIGlmICghc2VsZikgeworICAgICAgICAqZXhjZXB0aW9uID0gY3JlYXRl
VHlwZUVycm9yKGNvbnRleHQsICJXcm9uZyB0eXBlIl9zKTsKKyAgICAgICAgcmV0dXJuIEpTVmFs
dWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworICAgIH0KKyAgICBpZiAoYXJndW1lbnRDb3VudCA8
IDIpIHsKKyAgICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0ZVR5cGVFcnJvcihjb250ZXh0LCAiTXVz
dCBzcGVjaWZ5IHRoZSBkZXN0aW5hdGlvbiBJRCBhbmQgbWVzc2FnZSBJRCBhcyB0aGUgZmlyc3Qg
dHdvIGFyZ3VtZW50cyJfcyk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChj
b250ZXh0KTsKKyAgICB9CisgICAgcmV0dXJuIHNlbmRTeW5jTWVzc2FnZVdpdGhKU0FyZ3VtZW50
cyhzZWxmLT5tX3Rlc3RlZENvbm5lY3Rpb24sIGNvbnRleHQsIGFyZ3VtZW50Q291bnQsIGFyZ3Vt
ZW50cywgZXhjZXB0aW9uKTsKK30KKworSlNWYWx1ZVJlZiBKU0lQQ0Nvbm5lY3Rpb246OndhaXRG
b3JNZXNzYWdlKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiwgSlNPYmplY3RSZWYg
dGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1l
bnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBSZWZQdHIgc2VsZiA9IHRvV3Jh
cHBlZChjb250ZXh0LCB0aGlzT2JqZWN0KTsKKyAgICBpZiAoIXNlbGYpIHsKKyAgICAgICAgKmV4
Y2VwdGlvbiA9IGNyZWF0ZVR5cGVFcnJvcihjb250ZXh0LCAiV3JvbmcgdHlwZSJfcyk7CisgICAg
ICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKyAgICB9CisgICAgaWYg
KGFyZ3VtZW50Q291bnQgPCAyKSB7CisgICAgICAgICpleGNlcHRpb24gPSBjcmVhdGVUeXBlRXJy
b3IoY29udGV4dCwgIk11c3Qgc3BlY2lmeSB0aGUgZGVzdGluYXRpb24gSUQgYW5kIG1lc3NhZ2Ug
SUQgYXMgdGhlIGZpcnN0IHR3byBhcmd1bWVudHMiX3MpOworICAgICAgICByZXR1cm4gSlNWYWx1
ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisgICAgfQorICAgIHJldHVybiB3YWl0Rm9yTWVzc2Fn
ZVdpdGhKU0FyZ3VtZW50cyhzZWxmLT5tX3Rlc3RlZENvbm5lY3Rpb24sIGNvbnRleHQsIGFyZ3Vt
ZW50Q291bnQsIGFyZ3VtZW50cywgZXhjZXB0aW9uKTsKK30KKwogSlNPYmplY3RSZWYgSlNJUENT
dHJlYW1DbGllbnRDb25uZWN0aW9uOjpjcmVhdGVKU1dyYXBwZXIoSlNDb250ZXh0UmVmIGNvbnRl
eHQpCiB7CiAgICAgYXV0byogZ2xvYmFsT2JqZWN0ID0gdG9KUyhjb250ZXh0KTsKQEAgLTUwOCw3
ICs5MzgsNyBAQCBib29sIEpTSVBDU3RyZWFtQ2xpZW50Q29ubmVjdGlvbjo6cHJlcGFyZVRvU2Vu
ZE91dE9mU3RyZWFtTWVzc2FnZShKU0NvbnRleHRSZWYgYwogewogICAgIC8vIEZJWE1FOiBBZGQg
c3VwcG9ydCBmb3Igc2VuZGluZyBpbi1zdHJlYW0gSVBDIG1lc3NhZ2VzIHdoZW4gYXBwcm9wcmlh
dGUuCiAgICAgaWYgKGFyZ3VtZW50Q291bnQgPiAzKSB7Ci0gICAgICAgIGlmICghZW5jb2RlQXJn
dW1lbnQoZW5jb2RlciwganNJUEMsIGNvbnRleHQsIGFyZ3VtZW50c1szXSwgZXhjZXB0aW9uKSkK
KyAgICAgICAgaWYgKCFlbmNvZGVBcmd1bWVudChlbmNvZGVyLCBjb250ZXh0LCBhcmd1bWVudHNb
M10sIGV4Y2VwdGlvbikpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC0x
MTE4LDYgKzE1NDgsNyBAQCBjb25zdCBKU1N0YXRpY0Z1bmN0aW9uKiBKU0lQQzo6c3RhdGljRnVu
Y3Rpb25zKCkKICAgICAgICAgeyAic2VuZE1lc3NhZ2UiLCBzZW5kTWVzc2FnZSwga0pTUHJvcGVy
dHlBdHRyaWJ1dGVEb250RGVsZXRlIHwga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB9LAog
ICAgICAgICB7ICJzZW5kU3luY01lc3NhZ2UiLCBzZW5kU3luY01lc3NhZ2UsIGtKU1Byb3BlcnR5
QXR0cmlidXRlRG9udERlbGV0ZSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfSwKICAg
ICAgICAgeyAid2FpdEZvck1lc3NhZ2UiLCB3YWl0Rm9yTWVzc2FnZSwga0pTUHJvcGVydHlBdHRy
aWJ1dGVEb250RGVsZXRlIHwga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB9LAorICAgICAg
ICB7ICJjcmVhdGVDb25uZWN0aW9uUGFpciIsIGNyZWF0ZUNvbm5lY3Rpb25QYWlyLCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IH0s
CiAgICAgICAgIHsgImNyZWF0ZVN0cmVhbUNsaWVudENvbm5lY3Rpb24iLCBjcmVhdGVTdHJlYW1D
bGllbnRDb25uZWN0aW9uLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IH0sCiAgICAgICAgIHsgImNyZWF0ZVNlbWFwaG9yZSIsIGNy
ZWF0ZVNlbWFwaG9yZSwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIHwga0pTUHJvcGVy
dHlBdHRyaWJ1dGVSZWFkT25seSB9LAogICAgICAgICB7ICJjcmVhdGVTaGFyZWRNZW1vcnkiLCBj
cmVhdGVTaGFyZWRNZW1vcnksIGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB8IGtKU1By
b3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfSwKQEAgLTEzNTYsNiArMTc4NywyMSBAQCBzdGF0aWMg
Ym9vbCBlbmNvZGVTaGFyZWRNZW1vcnkoSVBDOjpFbmNvZGVyJiBlbmNvZGVyLCBKU0M6OkpTR2xv
YmFsT2JqZWN0KiBnbG9iYQogICAgIHJldHVybiB0cnVlOwogfQogCitzdGF0aWMgYm9vbCBlbmNv
ZGVGcmFtZUluZm9EYXRhKElQQzo6RW5jb2RlciYgZW5jb2RlciwgSlNDOjpKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTT2JqZWN0KiBqc09iamVjdCwgSlNDOjpDYXRjaFNjb3Bl
JiBzY29wZSkKK3sKKyAgICBhdXRvIGpzSVBDVmFsdWUgPSBqc09iamVjdC0+Z2V0KGdsb2JhbE9i
amVjdCwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGdsb2JhbE9iamVjdC0+dm0oKSwgInZh
bHVlIl9zKSk7CisgICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgUmVmUHRyIGpzSVBDID0gSlNJUEM6OnRvV3JhcHBlZCh0b1JlZihnbG9iYWxPYmpl
Y3QpLCB0b1JlZihqc0lQQ1ZhbHVlKSk7CisgICAgaWYgKCFqc0lQQykKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIFJlZlB0ciB3ZWJGcmFtZSA9IGpzSVBDLT53ZWJGcmFtZSgpOworICAgIGlm
ICghd2ViRnJhbWUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBlbmNvZGVyIDw8IHdlYkZy
YW1lLT5pbmZvKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKIHN0YXRpYyBib29sIGVuY29kZVN0
cmVhbUNvbm5lY3Rpb25CdWZmZXIoSVBDOjpFbmNvZGVyJiBlbmNvZGVyLCBKU0M6OkpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBqc1ZhbHVlLCBKU0M6OkNhdGNoU2Nv
cGUmIHNjb3BlKQogewogICAgIFJlZlB0ciBqc0lQQ1N0cmVhbUNvbm5lY3Rpb25CdWZmZXIgPSBK
U0lQQ1N0cmVhbUNvbm5lY3Rpb25CdWZmZXI6OnRvV3JhcHBlZCh0b1JlZihnbG9iYWxPYmplY3Qp
LCB0b1JlZihqc1ZhbHVlKSk7CkBAIC0xMzc2LDggKzE4MjIsMTcgQEAgc3RhdGljIGJvb2wgZW5j
b2RlU2VtYXBob3JlKElQQzo6RW5jb2RlciYgZW5jb2RlciwgSlNDOjpKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2IKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorc3RhdGljIGJvb2wgZW5jb2RlQXR0YWNo
bWVudChJUEM6OkVuY29kZXImIGVuY29kZXIsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNDOjpKU1ZhbHVlIGpzVmFsdWUsIEpTQzo6Q2F0Y2hTY29wZSYgc2NvcGUpCit7Cisg
ICAgUmVmUHRyIGpzSVBDQXR0YWNobWVudCA9IEpTSVBDQXR0YWNobWVudDo6dG9XcmFwcGVkKHRv
UmVmKGdsb2JhbE9iamVjdCksIHRvUmVmKGpzVmFsdWUpKTsKKyAgICBpZiAoIWpzSVBDQXR0YWNo
bWVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAganNJUENBdHRhY2htZW50LT5lbmNv
ZGUoZW5jb2Rlcik7CisgICAgcmV0dXJuIHRydWU7Cit9CisKIHN0cnVjdCBWZWN0b3JFbmNvZGVI
ZWxwZXIgewotICAgIFJlZjxKU0lQQz4ganNJUEM7CiAgICAgSlNDb250ZXh0UmVmIGNvbnRleHQ7
CiAgICAgSlNWYWx1ZVJlZiB2YWx1ZVJlZjsKICAgICBKU1ZhbHVlUmVmKiBleGNlcHRpb247CkBA
IC0xMzg3LDEyICsxODQyLDEyIEBAIHN0cnVjdCBWZWN0b3JFbmNvZGVIZWxwZXIgewogICAgIHsK
ICAgICAgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBzdWNj
ZXNzID0gZW5jb2RlQXJndW1lbnQoZW5jb2RlciwganNJUEMuZ2V0KCksIGNvbnRleHQsIHZhbHVl
UmVmLCBleGNlcHRpb24pOworICAgICAgICBzdWNjZXNzID0gZW5jb2RlQXJndW1lbnQoZW5jb2Rl
ciwgY29udGV4dCwgdmFsdWVSZWYsIGV4Y2VwdGlvbik7CiAgICAgfQogfTsKIAogZW51bSBjbGFz
cyBBcnJheU1vZGUgeyBUdXBsZSwgVmVjdG9yIH07Ci1zdGF0aWMgYm9vbCBlbmNvZGVBcnJheUFy
Z3VtZW50KElQQzo6RW5jb2RlciYgZW5jb2RlciwgSlNJUEMmIGpzSVBDLCBBcnJheU1vZGUgYXJy
YXlNb2RlLCBKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiB2YWx1ZVJlZiwgSlNWYWx1
ZVJlZiogZXhjZXB0aW9uKQorc3RhdGljIGJvb2wgZW5jb2RlQXJyYXlBcmd1bWVudChJUEM6OkVu
Y29kZXImIGVuY29kZXIsIEFycmF5TW9kZSBhcnJheU1vZGUsIEpTQ29udGV4dFJlZiBjb250ZXh0
LCBKU1ZhbHVlUmVmIHZhbHVlUmVmLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7CiAgICAgYXV0
byBvYmplY3RSZWYgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgdmFsdWVSZWYsIGV4Y2VwdGlv
bik7CiAgICAgQVNTRVJUKG9iamVjdFJlZik7CkBAIC0xNDE4LDcgKzE4NzMsNyBAQCBzdGF0aWMg
Ym9vbCBlbmNvZGVBcnJheUFyZ3VtZW50KElQQzo6RW5jb2RlciYgZW5jb2RlciwgSlNJUEMmIGpz
SVBDLCBBcnJheU1vZGUgYQogICAgICAgICBhdXRvIGl0ZW1SZWYgPSBKU09iamVjdEdldFByb3Bl
cnR5QXRJbmRleChjb250ZXh0LCBvYmplY3RSZWYsIGksIGV4Y2VwdGlvbik7CiAgICAgICAgIGlm
ICghaXRlbVJlZikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgdmVjdG9yLmFw
cGVuZChWZWN0b3JFbmNvZGVIZWxwZXIgeyBqc0lQQywgY29udGV4dCwgaXRlbVJlZiwgZXhjZXB0
aW9uLCBzdWNjZXNzIH0pOworICAgICAgICB2ZWN0b3IuYXBwZW5kKFZlY3RvckVuY29kZUhlbHBl
ciB7IGNvbnRleHQsIGl0ZW1SZWYsIGV4Y2VwdGlvbiwgc3VjY2VzcyB9KTsKICAgICB9CiAgICAg
aWYgKGFycmF5TW9kZSA9PSBBcnJheU1vZGU6OlR1cGxlKSB7CiAgICAgICAgIGZvciAoYXV0byYg
aXRlbSA6IHZlY3RvcikKQEAgLTE0MjgsNyArMTg4Myw3IEBAIHN0YXRpYyBib29sIGVuY29kZUFy
cmF5QXJndW1lbnQoSVBDOjpFbmNvZGVyJiBlbmNvZGVyLCBKU0lQQyYganNJUEMsIEFycmF5TW9k
ZSBhCiAgICAgcmV0dXJuIHN1Y2Nlc3M7CiB9CiAKLXN0YXRpYyBib29sIGVuY29kZUFyZ3VtZW50
KElQQzo6RW5jb2RlciYgZW5jb2RlciwgSlNJUEMmIGpzSVBDLCBKU0NvbnRleHRSZWYgY29udGV4
dCwgSlNWYWx1ZVJlZiB2YWx1ZVJlZiwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQorc3RhdGljIGJv
b2wgZW5jb2RlQXJndW1lbnQoSVBDOjpFbmNvZGVyJiBlbmNvZGVyLCBKU0NvbnRleHRSZWYgY29u
dGV4dCwgSlNWYWx1ZVJlZiB2YWx1ZVJlZiwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewogICAg
IGF1dG8gb2JqZWN0UmVmID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIHZhbHVlUmVmLCBleGNl
cHRpb24pOwogICAgIGlmICghb2JqZWN0UmVmKQpAQCAtMTQzOCw3ICsxODkzLDcgQEAgc3RhdGlj
IGJvb2wgZW5jb2RlQXJndW1lbnQoSVBDOjpFbmNvZGVyJiBlbmNvZGVyLCBKU0lQQyYganNJUEMs
IEpTQ29udGV4dFJlZiBjb24KICAgICAgICAgcmV0dXJuIGVuY29kZVR5cGVkQXJyYXkoZW5jb2Rl
ciwgY29udGV4dCwgb2JqZWN0UmVmLCB0eXBlLCBleGNlcHRpb24pOwogCiAgICAgaWYgKEpTVmFs
dWVJc0FycmF5KGNvbnRleHQsIG9iamVjdFJlZikpCi0gICAgICAgIHJldHVybiBlbmNvZGVBcnJh
eUFyZ3VtZW50KGVuY29kZXIsIGpzSVBDLCBBcnJheU1vZGU6OlR1cGxlLCBjb250ZXh0LCBvYmpl
Y3RSZWYsIGV4Y2VwdGlvbik7CisgICAgICAgIHJldHVybiBlbmNvZGVBcnJheUFyZ3VtZW50KGVu
Y29kZXIsIEFycmF5TW9kZTo6VHVwbGUsIGNvbnRleHQsIG9iamVjdFJlZiwgZXhjZXB0aW9uKTsK
IAogICAgIGF1dG8qIGdsb2JhbE9iamVjdCA9IHRvSlMoY29udGV4dCk7CiAgICAgYXV0byYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CkBAIC0xNTA1LDEyICsxOTYwLDEwIEBAIHN0YXRpYyBib29s
IGVuY29kZUFyZ3VtZW50KElQQzo6RW5jb2RlciYgZW5jb2RlciwgSlNJUEMmIGpzSVBDLCBKU0Nv
bnRleHRSZWYgY29uCiAgICAgfQogCiAgICAgaWYgKHR5cGUgPT0gIkZyYW1lSW5mb0RhdGEiKSB7
Ci0gICAgICAgIFJlZlB0ciB3ZWJGcmFtZSA9IGpzSVBDLndlYkZyYW1lKCk7Ci0gICAgICAgIGlm
ICghd2ViRnJhbWUpIHsKKyAgICAgICAgaWYgKCFlbmNvZGVGcmFtZUluZm9EYXRhKGVuY29kZXIs
IGdsb2JhbE9iamVjdCwganNPYmplY3QsIHNjb3BlKSkgewogICAgICAgICAgICAgKmV4Y2VwdGlv
biA9IGNyZWF0ZVR5cGVFcnJvcihjb250ZXh0LCAiRmFpbGVkIHRvIGdldCB0aGUgZnJhbWUiX3Mp
OwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0gICAgICAgIGVuY29kZXIg
PDwgd2ViRnJhbWUtPmluZm8oKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0x
NTM0LDEyICsxOTg3LDIwIEBAIHN0YXRpYyBib29sIGVuY29kZUFyZ3VtZW50KElQQzo6RW5jb2Rl
ciYgZW5jb2RlciwgSlNJUEMmIGpzSVBDLCBKU0NvbnRleHRSZWYgY29uCiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KIAorICAgIGlmICh0eXBlID09ICJBdHRhY2htZW50IikgeworICAgICAg
ICBpZiAoIWVuY29kZUF0dGFjaG1lbnQoZW5jb2RlciwgZ2xvYmFsT2JqZWN0LCBqc1ZhbHVlLCBz
Y29wZSkpIHsKKyAgICAgICAgICAgICpleGNlcHRpb24gPSBjcmVhdGVUeXBlRXJyb3IoY29udGV4
dCwgIkZhaWxlZCB0byBjb252ZXJ0IEF0dGFjaG1lbnQiX3MpOworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwogICAgIGlm
ICh0eXBlID09ICJWZWN0b3IiKSB7CiAgICAgICAgIGlmICghanNWYWx1ZS5pbmhlcml0czxKU0M6
OkpTQXJyYXk+KCkpIHsKICAgICAgICAgICAgICpleGNlcHRpb24gPSBjcmVhdGVUeXBlRXJyb3Io
Y29udGV4dCwgIlZlY3RvciB2YWx1ZSBtdXN0IGJlIGFuIGFycmF5Il9zKTsKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gZW5jb2RlQXJyYXlBcmd1
bWVudChlbmNvZGVyLCBqc0lQQywgQXJyYXlNb2RlOjpWZWN0b3IsIGNvbnRleHQsIHRvUmVmKGds
b2JhbE9iamVjdCwganNWYWx1ZSksIGV4Y2VwdGlvbik7CisgICAgICAgIHJldHVybiBlbmNvZGVB
cnJheUFyZ3VtZW50KGVuY29kZXIsIEFycmF5TW9kZTo6VmVjdG9yLCBjb250ZXh0LCB0b1JlZihn
bG9iYWxPYmplY3QsIGpzVmFsdWUpLCBleGNlcHRpb24pOwogICAgIH0KIAogICAgIGlmICh0eXBl
ID09ICJTdHJpbmciKSB7CkBAIC0xNjcwLDE4NSArMjEzMSw3OCBAQCBKU1ZhbHVlUmVmIEpTSVBD
OjpzZW5kTWVzc2FnZShKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYsIEpTT2JqZWN0
UmVmIHRoaQogICAgICAgICAqZXhjZXB0aW9uID0gY3JlYXRlVHlwZUVycm9yKGNvbnRleHQsICJX
cm9uZyB0eXBlIl9zKTsKICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRl
eHQpOwogICAgIH0KLQogICAgIGlmIChhcmd1bWVudENvdW50IDwgMykgewogICAgICAgICAqZXhj
ZXB0aW9uID0gY3JlYXRlVHlwZUVycm9yKGNvbnRleHQsICJNdXN0IHNwZWNpZnkgdGhlIHRhcmdl
dCBwcm9jZXNzLCBkZXN0aW5hdGlvbiBJRCwgYW5kIG1lc3NhZ2UgSUQgYXMgdGhlIGZpcnN0IHRo
cmVlIGFyZ3VtZW50cyJfcyk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChj
b250ZXh0KTsKICAgICB9Ci0KICAgICBhdXRvIGNvbm5lY3Rpb24gPSBwcm9jZXNzVGFyZ2V0RnJv
bUFyZ3VtZW50KGdsb2JhbE9iamVjdCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pOwogICAgIGlm
ICghY29ubmVjdGlvbikKICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRl
eHQpOwotCi0gICAgYXV0byBkZXN0aW5hdGlvbklEID0gZGVzdGluYXRpb25JREZyb21Bcmd1bWVu
dChnbG9iYWxPYmplY3QsIGFyZ3VtZW50c1sxXSwgZXhjZXB0aW9uKTsKLSAgICBpZiAoIWRlc3Rp
bmF0aW9uSUQpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsK
LQotICAgIGF1dG8gbWVzc2FnZUlEID0gbWVzc2FnZUlERnJvbUFyZ3VtZW50KGdsb2JhbE9iamVj
dCwgYXJndW1lbnRzWzJdLCBleGNlcHRpb24pOwotICAgIGlmICghbWVzc2FnZUlEKQotICAgICAg
ICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci0KLSAgICBhdXRvIG1lc3Nh
Z2VOYW1lID0gc3RhdGljX2Nhc3Q8SVBDOjpNZXNzYWdlTmFtZT4oKm1lc3NhZ2VJRCk7Ci0gICAg
YXV0byBlbmNvZGVyID0gbWFrZVVuaXF1ZVJlZjxJUEM6OkVuY29kZXI+KG1lc3NhZ2VOYW1lLCAq
ZGVzdGluYXRpb25JRCk7Ci0KLSAgICBKU1ZhbHVlUmVmIHJldHVyblZhbHVlID0gSlNWYWx1ZU1h
a2VVbmRlZmluZWQoY29udGV4dCk7Ci0KLSAgICBib29sIGhhc1JlcGx5ID0gISFtZXNzYWdlUmVw
bHlBcmd1bWVudERlc2NyaXB0aW9ucyhtZXNzYWdlTmFtZSk7Ci0gICAgaWYgKGhhc1JlcGx5KSB7
Ci0gICAgICAgIHVpbnQ2NF90IGxpc3RlbmVySUQgPSBJUEM6Om5leHRBc3luY1JlcGx5SGFuZGxl
cklEKCk7Ci0gICAgICAgIGVuY29kZXIuZ2V0KCkgPDwgbGlzdGVuZXJJRDsKLQotICAgICAgICBK
U09iamVjdFJlZiByZXNvbHZlOwotICAgICAgICBKU09iamVjdFJlZiByZWplY3Q7Ci1BTExPV19O
RVdfQVBJX1dJVEhPVVRfR1VBUkRTX0JFR0lOCi0gICAgICAgIHJldHVyblZhbHVlID0gSlNPYmpl
Y3RNYWtlRGVmZXJyZWRQcm9taXNlKGNvbnRleHQsICZyZXNvbHZlLCAmcmVqZWN0LCBleGNlcHRp
b24pOwotQUxMT1dfTkVXX0FQSV9XSVRIT1VUX0dVQVJEU19FTkQKLSAgICAgICAgaWYgKCFyZXR1
cm5WYWx1ZSkKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0
KTsKLQotICAgICAgICBKU0dsb2JhbENvbnRleHRSZXRhaW4oSlNDb250ZXh0R2V0R2xvYmFsQ29u
dGV4dChjb250ZXh0KSk7Ci0gICAgICAgIEpTVmFsdWVQcm90ZWN0KGNvbnRleHQsIHJlc29sdmUp
OwotICAgICAgICBKU1ZhbHVlUHJvdGVjdChjb250ZXh0LCByZWplY3QpOwotICAgICAgICBJUEM6
OmFkZEFzeW5jUmVwbHlIYW5kbGVyKCpjb25uZWN0aW9uLCBsaXN0ZW5lcklELCBbbWVzc2FnZU5h
bWUsIGNvbnRleHQsIHJlc29sdmUsIHJlamVjdF0oSVBDOjpEZWNvZGVyKiByZXBseURlY29kZXIp
IHsKLSAgICAgICAgICAgIGF1dG8qIGdsb2JhbE9iamVjdCA9IHRvSlMoY29udGV4dCk7Ci0gICAg
ICAgICAgICBhdXRvJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICAgICAgICAgIEpTQzo6
SlNMb2NrSG9sZGVyIGxvY2sodm0pOwotCi0gICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9DQVRDSF9TQ09QRSh2bSk7Ci0gICAgICAgICAgICBhdXRvKiBqc1Jlc3VsdCA9IGpzUmVzdWx0
RnJvbVJlcGx5RGVjb2RlcihnbG9iYWxPYmplY3QsIG1lc3NhZ2VOYW1lLCAqcmVwbHlEZWNvZGVy
KTsKLSAgICAgICAgICAgIGlmIChhdXRvKiBleGNlcHRpb24gPSBzY29wZS5leGNlcHRpb24oKSkg
ewotICAgICAgICAgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAgICAgICAgICAg
ICAgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSA9IHsgdG9SZWYoZ2xvYmFsT2JqZWN0LCBleGNlcHRp
b24pIH07Ci0gICAgICAgICAgICAgICAgSlNPYmplY3RDYWxsQXNGdW5jdGlvbihjb250ZXh0LCBy
ZWplY3QsIHJlamVjdCwgMSwgYXJndW1lbnRzLCBudWxscHRyKTsKLSAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSA9IHsgdG9SZWYoZ2xv
YmFsT2JqZWN0LCBqc1Jlc3VsdCkgfTsKLSAgICAgICAgICAgICAgICBKU09iamVjdENhbGxBc0Z1
bmN0aW9uKGNvbnRleHQsIHJlc29sdmUsIHJlc29sdmUsIDEsIGFyZ3VtZW50cywgbnVsbHB0cik7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEpTVmFsdWVVbnByb3RlY3QoY29udGV4dCwg
cmVqZWN0KTsKLSAgICAgICAgICAgIEpTVmFsdWVVbnByb3RlY3QoY29udGV4dCwgcmVzb2x2ZSk7
Ci0gICAgICAgICAgICBKU0dsb2JhbENvbnRleHRSZWxlYXNlKEpTQ29udGV4dEdldEdsb2JhbENv
bnRleHQoY29udGV4dCkpOwotICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICBpZiAoYXJndW1lbnRD
b3VudCA+IDMpIHsKLSAgICAgICAgaWYgKCFlbmNvZGVBcmd1bWVudChlbmNvZGVyLmdldCgpLCAq
anNJUEMsIGNvbnRleHQsIGFyZ3VtZW50c1szXSwgZXhjZXB0aW9uKSkKLSAgICAgICAgICAgIHJl
dHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLSAgICB9Ci0KLSAgICAvLyBGSVhN
RTogQWRkIHRoZSBzdXBwb3J0IGZvciBzcGVjaWZ5aW5nIElQQyBvcHRpb25zLgotCi0gICAgY29u
bmVjdGlvbi0+c2VuZE1lc3NhZ2UoV1RGTW92ZShlbmNvZGVyKSwgeyB9KTsKLQotICAgIHJldHVy
biByZXR1cm5WYWx1ZTsKKyAgICByZXR1cm4gc2VuZE1lc3NhZ2VXaXRoSlNBcmd1bWVudHMoKmNv
bm5lY3Rpb24sIGNvbnRleHQsIGFyZ3VtZW50Q291bnQgLSAxLCBhcmd1bWVudHMgKyAxLCBleGNl
cHRpb24pOwogfQogCi1zdHJ1Y3QgU3luY0lQQ01lc3NhZ2VJbmZvIHsKLSAgICBSZWY8SVBDOjpD
b25uZWN0aW9uPiBjb25uZWN0aW9uOwotICAgIHVpbnQ2NF90IGRlc3RpbmF0aW9uSUQ7Ci0gICAg
SVBDOjpNZXNzYWdlTmFtZSBtZXNzYWdlTmFtZTsKLSAgICBJUEM6OlRpbWVvdXQgdGltZW91dDsK
LX07Ci0KLXN0YXRpYyBzdGQ6Om9wdGlvbmFsPFN5bmNJUENNZXNzYWdlSW5mbz4gZXh0cmFjdFN5
bmNJUENNZXNzYWdlSW5mbyhKU0NvbnRleHRSZWYgY29udGV4dCwgc2l6ZV90IGFyZ3VtZW50Q291
bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikK
K0pTVmFsdWVSZWYgSlNJUEM6OndhaXRGb3JNZXNzYWdlKEpTQ29udGV4dFJlZiBjb250ZXh0LCBK
U09iamVjdFJlZiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQs
IGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsK
LSAgICBpZiAoYXJndW1lbnRDb3VudCA8IDQpIHsKKyAgICBSZWZQdHIganNJUEMgPSB0b1dyYXBw
ZWQoY29udGV4dCwgdGhpc09iamVjdCk7CisgICAgaWYgKCFqc0lQQykgeworICAgICAgICAqZXhj
ZXB0aW9uID0gY3JlYXRlVHlwZUVycm9yKGNvbnRleHQsICJXcm9uZyB0eXBlIl9zKTsKKyAgICAg
ICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworICAgIH0KKyAgICBpZiAo
YXJndW1lbnRDb3VudCA8IDMpIHsKICAgICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0ZVR5cGVFcnJv
cihjb250ZXh0LCAiTXVzdCBzcGVjaWZ5IHRoZSB0YXJnZXQgcHJvY2VzcywgZGVzdGluYXRpb24g
SUQsIGFuZCBtZXNzYWdlIElEIGFzIHRoZSBmaXJzdCB0aHJlZSBhcmd1bWVudHMiX3MpOwotICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRl
ZmluZWQoY29udGV4dCk7CiAgICAgfQotCiAgICAgYXV0byogZ2xvYmFsT2JqZWN0ID0gdG9KUyhj
b250ZXh0KTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKGdsb2JhbE9iamVjdC0+dm0oKSk7
CiAgICAgYXV0byBjb25uZWN0aW9uID0gcHJvY2Vzc1RhcmdldEZyb21Bcmd1bWVudChnbG9iYWxP
YmplY3QsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKTsKICAgICBpZiAoIWNvbm5lY3Rpb24pCi0g
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICBhdXRvIGRlc3RpbmF0aW9uSUQgPSBk
ZXN0aW5hdGlvbklERnJvbUFyZ3VtZW50KGdsb2JhbE9iamVjdCwgYXJndW1lbnRzWzFdLCBleGNl
cHRpb24pOwotICAgIGlmICghZGVzdGluYXRpb25JRCkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKLQotICAgIGF1dG8gbWVzc2FnZUlEID0gbWVzc2FnZUlERnJvbUFyZ3VtZW50KGdsb2Jh
bE9iamVjdCwgYXJndW1lbnRzWzJdLCBleGNlcHRpb24pOwotICAgIGlmICghbWVzc2FnZUlEKQot
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgU2Vjb25kcyB0aW1lb3V0RHVyYXRp
b247Ci0gICAgewotICAgICAgICBhdXRvIGpzVmFsdWUgPSB0b0pTKGdsb2JhbE9iamVjdCwgYXJn
dW1lbnRzWzNdKTsKLSAgICAgICAgaWYgKCFqc1ZhbHVlLmlzTnVtYmVyKCkpIHsKLSAgICAgICAg
ICAgICpleGNlcHRpb24gPSBjcmVhdGVUeXBlRXJyb3IoY29udGV4dCwgIlRpbWVvdXQgbXVzdCBi
ZSBhIG51bWJlciJfcyk7Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgICAg
ICB9Ci0gICAgICAgIHRpbWVvdXREdXJhdGlvbiA9IFNlY29uZHMgeyBqc1ZhbHVlLmFzTnVtYmVy
KCkgfTsKLSAgICB9Ci0KLSAgICByZXR1cm4geyB7IGNvbm5lY3Rpb24ucmVsZWFzZU5vbk51bGwo
KSwgKmRlc3RpbmF0aW9uSUQsIHN0YXRpY19jYXN0PElQQzo6TWVzc2FnZU5hbWU+KCptZXNzYWdl
SUQpLCB7IHRpbWVvdXREdXJhdGlvbiB9IH0gfTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtl
VW5kZWZpbmVkKGNvbnRleHQpOworICAgIHJldHVybiB3YWl0Rm9yTWVzc2FnZVdpdGhKU0FyZ3Vt
ZW50cygqY29ubmVjdGlvbiwgY29udGV4dCwgYXJndW1lbnRDb3VudCAtIDEsIGFyZ3VtZW50cyAr
IDEsIGV4Y2VwdGlvbik7CiB9CiAKLUpTVmFsdWVSZWYgSlNJUEM6OndhaXRGb3JNZXNzYWdlKEpT
Q29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwg
c2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFs
dWVSZWYqIGV4Y2VwdGlvbikKK0pTVmFsdWVSZWYgSlNJUEM6OnNlbmRTeW5jTWVzc2FnZShKU0Nv
bnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNp
emVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVl
UmVmKiBleGNlcHRpb24pCiB7Ci0gICAgYXV0byogZ2xvYmFsT2JqZWN0ID0gdG9KUyhjb250ZXh0
KTsKLSAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKGdsb2JhbE9iamVjdC0+dm0oKSk7CiAgICAg
UmVmUHRyIGpzSVBDID0gdG9XcmFwcGVkKGNvbnRleHQsIHRoaXNPYmplY3QpOwogICAgIGlmICgh
anNJUEMpIHsKICAgICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0ZVR5cGVFcnJvcihjb250ZXh0LCAi
V3JvbmcgdHlwZSJfcyk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250
ZXh0KTsKICAgICB9Ci0KLSAgICBhdXRvIGluZm8gPSBleHRyYWN0U3luY0lQQ01lc3NhZ2VJbmZv
KGNvbnRleHQsIGFyZ3VtZW50Q291bnQsIGFyZ3VtZW50cywgZXhjZXB0aW9uKTsKLSAgICBpZiAo
IWluZm8pCisgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAzKSB7CisgICAgICAgICpleGNlcHRpb24g
PSBjcmVhdGVUeXBlRXJyb3IoY29udGV4dCwgIk11c3Qgc3BlY2lmeSB0aGUgdGFyZ2V0IHByb2Nl
c3MsIGRlc3RpbmF0aW9uIElELCBhbmQgbWVzc2FnZSBJRCBhcyB0aGUgZmlyc3QgdGhyZWUgYXJn
dW1lbnRzIl9zKTsKICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQp
OwotCi0gICAgYXV0byBbY29ubmVjdGlvbiwgZGVzdGluYXRpb25JRCwgbWVzc2FnZU5hbWUsIHRp
bWVvdXRdID0gKmluZm87Ci0gICAgaWYgKGF1dG8gZGVjb2RlciA9IGNvbm5lY3Rpb24tPndhaXRG
b3JNZXNzYWdlKG1lc3NhZ2VOYW1lLCBkZXN0aW5hdGlvbklELCB0aW1lb3V0LCB7IH0pKSB7Ci0g
ICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKGdsb2JhbE9iamVjdC0+dm0o
KSk7Ci0gICAgICAgIGF1dG8ganNSZXN1bHQgPSBqc1ZhbHVlRm9yQXJndW1lbnRzKGdsb2JhbE9i
amVjdCwgbWVzc2FnZU5hbWUsICpkZWNvZGVyKTsKLSAgICAgICAgaWYgKHNjb3BlLmV4Y2VwdGlv
bigpKSB7Ci0gICAgICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoZ2xvYmFsT2JqZWN0LCBzY29w
ZS5leGNlcHRpb24oKSk7Ci0gICAgICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwotICAg
ICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotICAgICAgICB9
Ci0gICAgICAgIHJldHVybiBqc1Jlc3VsdCA/IHRvUmVmKGdsb2JhbE9iamVjdCwgKmpzUmVzdWx0
KSA6IEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogICAgIH0KLSAgICByZXR1cm4gSlNW
YWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisgICAgYXV0byogZ2xvYmFsT2JqZWN0ID0gdG9K
Uyhjb250ZXh0KTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKGdsb2JhbE9iamVjdC0+dm0o
KSk7CisgICAgYXV0byBjb25uZWN0aW9uID0gcHJvY2Vzc1RhcmdldEZyb21Bcmd1bWVudChnbG9i
YWxPYmplY3QsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKTsKKyAgICBpZiAoIWNvbm5lY3Rpb24p
CisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKyAgICByZXR1
cm4gc2VuZFN5bmNNZXNzYWdlV2l0aEpTQXJndW1lbnRzKCpjb25uZWN0aW9uLCBjb250ZXh0LCBh
cmd1bWVudENvdW50IC0gMSwgYXJndW1lbnRzICsgMSwgZXhjZXB0aW9uKTsKIH0KIAotSlNWYWx1
ZVJlZiBKU0lQQzo6c2VuZFN5bmNNZXNzYWdlKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVj
dFJlZiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0
IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK0pTVmFsdWVS
ZWYgSlNJUEM6OmNyZWF0ZUNvbm5lY3Rpb25QYWlyKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09i
amVjdFJlZiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNv
bnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKLSAg
ICBhdXRvKiBnbG9iYWxPYmplY3QgPSB0b0pTKGNvbnRleHQpOwotICAgIEpTQzo6SlNMb2NrSG9s
ZGVyIGxvY2soZ2xvYmFsT2JqZWN0LT52bSgpKTsKICAgICBSZWZQdHIganNJUEMgPSB0b1dyYXBw
ZWQoY29udGV4dCwgdGhpc09iamVjdCk7CiAgICAgaWYgKCFqc0lQQykgewogICAgICAgICAqZXhj
ZXB0aW9uID0gY3JlYXRlVHlwZUVycm9yKGNvbnRleHQsICJXcm9uZyB0eXBlIl9zKTsKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogICAgIH0KLQotICAgIGF1
dG8gaW5mbyA9IGV4dHJhY3RTeW5jSVBDTWVzc2FnZUluZm8oY29udGV4dCwgYXJndW1lbnRDb3Vu
dCwgYXJndW1lbnRzLCBleGNlcHRpb24pOwotICAgIGlmICghaW5mbykKKyAgICBhdXRvIGNvbm5l
Y3Rpb25JZGVudGlmaWVycyA9IElQQzo6Q29ubmVjdGlvbjo6Y3JlYXRlQ29ubmVjdGlvbklkZW50
aWZpZXJQYWlyKCk7CisgICAgaWYgKCFjb25uZWN0aW9uSWRlbnRpZmllcnMpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLQotICAgIGF1dG8gW2Nvbm5lY3Rp
b24sIGRlc3RpbmF0aW9uSUQsIG1lc3NhZ2VOYW1lLCB0aW1lb3V0XSA9ICppbmZvOwotCi0gICAg
Ly8gRklYTUU6IFN1cHBvcnQgdGhlIG9wdGlvbnMuCi0KLSAgICBJUEM6OkNvbm5lY3Rpb246OlN5
bmNSZXF1ZXN0SUQgc3luY1JlcXVlc3RJRDsKLSAgICBhdXRvIGVuY29kZXIgPSBjb25uZWN0aW9u
LT5jcmVhdGVTeW5jTWVzc2FnZUVuY29kZXIobWVzc2FnZU5hbWUsIGRlc3RpbmF0aW9uSUQsIHN5
bmNSZXF1ZXN0SUQpOwotCi0gICAgaWYgKGFyZ3VtZW50Q291bnQgPiA0KSB7Ci0gICAgICAgIGlm
ICghZW5jb2RlQXJndW1lbnQoZW5jb2Rlci5nZXQoKSwgKmpzSVBDLCBjb250ZXh0LCBhcmd1bWVu
dHNbNF0sIGV4Y2VwdGlvbikpCi0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmlu
ZWQoY29udGV4dCk7Ci0gICAgfQotCi0gICAgaWYgKGF1dG8gcmVwbHlEZWNvZGVyID0gY29ubmVj
dGlvbi0+c2VuZFN5bmNNZXNzYWdlKHN5bmNSZXF1ZXN0SUQsIFdURk1vdmUoZW5jb2RlciksIHRp
bWVvdXQsIHsgfSkpIHsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUo
Z2xvYmFsT2JqZWN0LT52bSgpKTsKLSAgICAgICAgYXV0byoganNSZXN1bHQgPSBqc1Jlc3VsdEZy
b21SZXBseURlY29kZXIoZ2xvYmFsT2JqZWN0LCBtZXNzYWdlTmFtZSwgKnJlcGx5RGVjb2Rlcik7
Ci0gICAgICAgIGlmIChzY29wZS5leGNlcHRpb24oKSkgewotICAgICAgICAgICAgKmV4Y2VwdGlv
biA9IHRvUmVmKGdsb2JhbE9iamVjdCwgc2NvcGUuZXhjZXB0aW9uKCkpOwotICAgICAgICAgICAg
c2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVu
ZGVmaW5lZChjb250ZXh0KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdG9SZWYoZ2xvYmFs
T2JqZWN0LCBqc1Jlc3VsdCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZp
bmVkKGNvbnRleHQpOworICAgIGF1dG8qIGdsb2JhbE9iamVjdCA9IHRvSlMoY29udGV4dCk7Cisg
ICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhnbG9iYWxPYmplY3QtPnZtKCkpOworICAgIGF1dG8m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENI
X1NDT1BFKHZtKTsKKyAgICBKU0M6OkpTT2JqZWN0KiBjb25uZWN0aW9uUGFpck9iamVjdCA9IEpT
Qzo6Y29uc3RydWN0RW1wdHlBcnJheShnbG9iYWxPYmplY3QsIG51bGxwdHIpOworICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpKTsKKyAg
ICBpbnQgaW5kZXggPSAwOworICAgIGF1dG8ganNWYWx1ZSA9IHRvSlMoZ2xvYmFsT2JqZWN0LCBK
U0lQQ0Nvbm5lY3Rpb246OmNyZWF0ZShXVEZNb3ZlKGNvbm5lY3Rpb25JZGVudGlmaWVycy0+c2Vy
dmVyKSktPmNyZWF0ZUpTV3JhcHBlcihjb250ZXh0KSk7CisgICAgY29ubmVjdGlvblBhaXJPYmpl
Y3QtPnB1dERpcmVjdEluZGV4KGdsb2JhbE9iamVjdCwgaW5kZXgrKywganNWYWx1ZSk7CisgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCkp
OworICAgIGpzVmFsdWUgPSB0b0pTKGdsb2JhbE9iamVjdCwgSlNJUENBdHRhY2htZW50OjpjcmVh
dGUoV1RGTW92ZShjb25uZWN0aW9uSWRlbnRpZmllcnMtPmNsaWVudCkpLT5jcmVhdGVKU1dyYXBw
ZXIoY29udGV4dCkpOworICAgIGNvbm5lY3Rpb25QYWlyT2JqZWN0LT5wdXREaXJlY3RJbmRleChn
bG9iYWxPYmplY3QsIGluZGV4KyssIGpzVmFsdWUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpKTsKKyAgICByZXR1cm4gdG9SZWYo
dm0sIGNvbm5lY3Rpb25QYWlyT2JqZWN0KTsKIH0KIAogSlNWYWx1ZVJlZiBKU0lQQzo6Y3JlYXRl
U3RyZWFtQ2xpZW50Q29ubmVjdGlvbihKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYs
IEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1Zh
bHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCmRpZmYgLS1naXQgYS9U
b29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggOTFmMDFmMGNhZGYzNDdhZTEz
N2UxM2ZkYjNmYmQ4ZDQ1ZjFhYTY1Ny4uODA0OGQxN2M4NTdmOGY0YzJiNGU3MDE0YTAwMjJjYTU3
ODdkMzVhZSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDE1IEBACisyMDIyLTA0LTI3ICBLaW1tbyBLaW5udW5lbiAgPGtraW5udW5l
bkBhcHBsZS5jb20+CisKKyAgICAgICAgSVBDIHRlc3RpbmcgQVBJIHNob3VsZCBoYXZlIHRoZSBh
YmlsaXR5IHRvIHRlc3QgSVBDOjpDb25uZWN0aW9uIHNlbmQgYW5kIHJlY2VpdmUgdGhyb3VnaCBJ
UEM6OkNvbm5lY3Rpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIzOTQ5NQorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAg
ICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JUENUZXN0aW5nQVBJLm1tOgor
ICAgICAgICAoVEVTVCk6CisgICAgICAgIENoYW5nZSB0d28gdGVzdHMgdG8gcGFzcyAiSVBDIiBv
YmplY3QgYXMgdGhlIHZhbHVlIG9mIEZyYW1lSW5mb0RhdGEuIFRoaXMgd2F5IHRoZSBhcmd1bWVu
dCBlbmNvZGUgZnVuY3Rpb25zCisgICAgICAgIGRvIG5vdCBuZWVkIHRvIHRha2UgdGhlIEpTSVBD
IGFyZ3VtZW50LgorCiAyMDIyLTA0LTI3ICBLaW1tbyBLaW5udW5lbiAgPGtraW5udW5lbkBhcHBs
ZS5jb20+CiAKICAgICAgICAgdGVzdC13ZWJraXRwZXJsIG91dHB1dHMgZXJyb3JzIGFib3V0IHVu
aW5pdGlhbGl6ZWQgJHBsYXRmb3JtIHZhcmlhYmxlCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lQQ1Rlc3RpbmdBUEkubW0gYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lQQ1Rlc3RpbmdBUEkubW0KaW5kZXggZjczOGNlZTc0
YzUyZDBlOTk1ZGQzZTFkMTBkYzcyZGYxYTYyYzYzMS4uODQwM2ZkOWY1OTA4OWExMTE3NmI4MGM3
NzkxZTRiM2VjMGM2NjAxNCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9JUENUZXN0aW5nQVBJLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvSVBDVGVzdGluZ0FQSS5tbQpAQCAtMTc3LDcgKzE3Nyw3IEBAIFRFU1Qo
SVBDVGVzdGluZ0FQSSwgQ2FuU2VuZEFsZXJ0KQogCiAgICAgZG9uZSA9IGZhbHNlOwogICAgIFt3
ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZzpAIjwhRE9DVFlQRSBodG1sPjxzY3Jp
cHQ+SVBDLnNlbmRTeW5jTWVzc2FnZSgnVUknLCBJUEMud2ViUGFnZVByb3h5SUQsIElQQy5tZXNz
YWdlcy5XZWJQYWdlUHJveHlfUnVuSmF2YVNjcmlwdEFsZXJ0Lm5hbWUsIDEwMCwiCi0gICAgICAg
ICJbe3R5cGU6ICd1aW50NjRfdCcsIHZhbHVlOiBJUEMuZnJhbWVJRH0sIHt0eXBlOiAnRnJhbWVJ
bmZvRGF0YSd9LCB7J3R5cGUnOiAnU3RyaW5nJywgJ3ZhbHVlJzogJ2hpJ31dKTs8L3NjcmlwdD4i
XTsKKyAgICAgICAgIlt7dHlwZTogJ3VpbnQ2NF90JywgdmFsdWU6IElQQy5mcmFtZUlEfSwge3R5
cGU6ICdGcmFtZUluZm9EYXRhJywgdmFsdWU6IElQQ30sIHsndHlwZSc6ICdTdHJpbmcnLCAndmFs
dWUnOiAnaGknfV0pOzwvc2NyaXB0PiJdOwogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigm
ZG9uZSk7CiAKICAgICBFWFBFQ1RfU1RSRVEoW2FsZXJ0TWVzc2FnZSBVVEY4U3RyaW5nXSwgImhp
Iik7CkBAIC0zNDUsNyArMzQ1LDcgQEAgVEVTVChJUENUZXN0aW5nQVBJLCBEZWNvZGVzUmVwbHlB
cmd1bWVudHNGb3JQcm9tcHQpCiAgICAgZG9uZSA9IGZhbHNlOwogICAgIHByb21wdFJlc3VsdCA9
IEAiZm9vIjsKICAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZEhUTUxTdHJpbmc6QCI8IURP
Q1RZUEUgaHRtbD48c2NyaXB0PnJlc3VsdCA9IElQQy5zZW5kU3luY01lc3NhZ2UoJ1VJJywgSVBD
LndlYlBhZ2VQcm94eUlELCBJUEMubWVzc2FnZXMuV2ViUGFnZVByb3h5X1J1bkphdmFTY3JpcHRQ
cm9tcHQubmFtZSwgMTAwLCIKLSAgICAgICAgIlt7dHlwZTogJ3VpbnQ2NF90JywgdmFsdWU6IElQ
Qy5mcmFtZUlEfSwge3R5cGU6ICdGcmFtZUluZm9EYXRhJ30sIHsndHlwZSc6ICdTdHJpbmcnLCAn
dmFsdWUnOiAnaGknfSwgeyd0eXBlJzogJ1N0cmluZycsICd2YWx1ZSc6ICdiYXInfV0pOzwvc2Ny
aXB0PiJdOworICAgICAgICAiW3t0eXBlOiAndWludDY0X3QnLCB2YWx1ZTogSVBDLmZyYW1lSUR9
LCB7dHlwZTogJ0ZyYW1lSW5mb0RhdGEnLCB2YWx1ZTogSVBDfSwgeyd0eXBlJzogJ1N0cmluZycs
ICd2YWx1ZSc6ICdoaSd9LCB7J3R5cGUnOiAnU3RyaW5nJywgJ3ZhbHVlJzogJ2Jhcid9XSk7PC9z
Y3JpcHQ+Il07CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKIAogICAgIEVY
UEVDVF9TVFJFUShbcHJvbXB0RGVmYXVsdCBVVEY4U3RyaW5nXSwgImJhciIpOwpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDMy
Y2NlNDVjMTAzYjM4ZDI2ZDBiYWZmNDBkNTVhMTZmNTNlNjZhYjAuLjI1ZTE5ZTk5NjRkYmNlMjNk
Yjk1MWQ3ZTIzZDcwZWE4YTlhNDc1ZDYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxv
ZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAorMjAyMi0wNC0y
NyAgS2ltbW8gS2lubnVuZW4gIDxra2lubnVuZW5AYXBwbGUuY29tPgorCisgICAgICAgIElQQyB0
ZXN0aW5nIEFQSSBzaG91bGQgaGF2ZSB0aGUgYWJpbGl0eSB0byB0ZXN0IElQQzo6Q29ubmVjdGlv
biBzZW5kIGFuZCByZWNlaXZlIHRocm91Z2ggSVBDOjpDb25uZWN0aW9uCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzk0OTUKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGlwYy9jcmVhdGUtY29ubmVjdGlv
bi1hbmQtc2VuZC1hc3luYy5odG1sOiBBZGRlZC4KKwogMjAyMi0wNC0yNiAgQW50dGkgS29pdmlz
dG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgOjpmaXJzdC1sZXR0ZXIgZG9lcyBub3Qg
d29yayBpZiB1c2VkIG9ubHkgaW4gc2hhZG93IGNvbnRlbnQKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2lwYy9jcmVhdGUtY29ubmVjdGlvbi1hbmQtc2VuZC1hc3luYy1leHBlY3RlZC50eHQgYi9M
YXlvdXRUZXN0cy9pcGMvY3JlYXRlLWNvbm5lY3Rpb24tYW5kLXNlbmQtYXN5bmMtZXhwZWN0ZWQu
dHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjZhZmY3N2RiM2I4YTZhMDIxNGY2OTBkYzQ1ODg4NzY1ZjNjZTdiMjQK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pcGMvY3JlYXRlLWNvbm5lY3Rpb24tYW5k
LXNlbmQtYXN5bmMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNCBAQAorCitQQVNTIFNlbmRpbmcg
YXN5bmMgbWVzc2FnZXMgZnJvbSB0aGUgc2VydmVyIGltbWVkaWF0ZWx5IGFmdGVyIG9wZW5pbmcg
YSBuZXcgY29ubmVjdGlvbiB3b3Jrcy4KK1BBU1MgU2VuZGluZyBhc3luYyBtZXNzYWdlcyBmcm9t
IHRoZSBjbGllbnQgaW1tZWRpYXRlbHkgYWZ0ZXIgb3BlbmluZyB0aGUgY29ubmVjdGlvbiB3b3Jr
cy4KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaXBjL2NyZWF0ZS1jb25uZWN0aW9uLWFuZC1z
ZW5kLWFzeW5jLmh0bWwgYi9MYXlvdXRUZXN0cy9pcGMvY3JlYXRlLWNvbm5lY3Rpb24tYW5kLXNl
bmQtYXN5bmMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43OThjMmZhMjYwODcxMmY0YWNhNDc3NTJkYmQ1NWZl
OTFkYmM3NTM1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaXBjL2NyZWF0ZS1jb25u
ZWN0aW9uLWFuZC1zZW5kLWFzeW5jLmh0bWwKQEAgLTAsMCArMSw3MiBAQAorPCFkb2N0eXBlIGh0
bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBJUENUZXN0aW5nQVBJRW5hYmxlZD10cnVlIF0g
LS0+Cis8dGl0bGU+VGVzdCB0aGF0IHNlbmRpbmcgbWVzc2FnZXMgaW1tZWRpYXRlbHkgYWZ0ZXIg
Y3JlYXRpbmcgYSBuZXcgY29ubmVjdGlvbiB3b3Jrcy48L3RpdGxlPgorPHNjcmlwdCBzcmM9Ii4u
L3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVz
b3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzxib2R5PgorPHNjcmlwdD4K
K2NvbnN0IGRlZmF1bHRUaW1lb3V0ID0gMTAwMDsKKworcHJvbWlzZV90ZXN0KGFzeW5jIHQgPT4g
eworICAgIGlmICghd2luZG93LklQQykKKyAgICAgICAgcmV0dXJuOworICAgIGNvbnN0IHRlc3Rl
cklEID0gNDQ3OworICAgIGZvciAoY29uc3QgcHJvY2Vzc1RhcmdldCBvZiBJUEMucHJvY2Vzc1Rh
cmdldHMpIHsKKyAgICAgICAgLy8gVGVzdCBzdGFydHMgaGVyZS4KKyAgICAgICAgY29uc3QgW2Nv
bm5lY3Rpb24sIGNsaWVudENvbm5lY3Rpb25JZGVudGlmaWVyXSA9IElQQy5jcmVhdGVDb25uZWN0
aW9uUGFpcigpOworICAgICAgICBjb25uZWN0aW9uLm9wZW4oKTsKKyAgICAgICAgY29uc3QgbXNn
cyA9IFtdOworICAgICAgICBjb25zdCBudW1NZXNzYWdlcyA9IDEwMDAwOworICAgICAgICBmb3Ig
KGxldCB2ID0gMDsgdiA8IG51bU1lc3NhZ2VzOyB2KyspCisgICAgICAgICAgICBtc2dzLnB1c2go
W3sgdHlwZTogJ3VpbnQzMl90JywgdmFsdWU6IHYgKyAxfV0pOworICAgICAgICBsZXQgbXNnTmFt
ZSA9IElQQy5tZXNzYWdlcy5JUENDb25uZWN0aW9uVGVzdGVyX0FzeW5jTWVzc2FnZS5uYW1lOwor
CisgICAgICAgIElQQy5zZW5kTWVzc2FnZShwcm9jZXNzVGFyZ2V0LCAwLCBJUEMubWVzc2FnZXMu
SVBDVGVzdGVyX0NyZWF0ZUNvbm5lY3Rpb25UZXN0ZXIubmFtZSwgWworICAgICAgICAgICAgeyB0
eXBlOiAndWludDY0X3QnLCB2YWx1ZTogdGVzdGVySUQgfSwKKyAgICAgICAgICAgIHsgdHlwZTog
J0F0dGFjaG1lbnQnLCB2YWx1ZTogY2xpZW50Q29ubmVjdGlvbklkZW50aWZpZXIgfSwKKyAgICAg
ICAgXSk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBmb3IgKGxldCBtc2cgb2YgbXNncykK
KyAgICAgICAgICAgICAgICBjb25uZWN0aW9uLnNlbmRNZXNzYWdlKDAsIG1zZ05hbWUsIG1zZyk7
CisgICAgICAgICAgICBjb25zdCByZXBseSA9IGNvbm5lY3Rpb24uc2VuZFN5bmNNZXNzYWdlKDAs
IElQQy5tZXNzYWdlcy5JUENDb25uZWN0aW9uVGVzdGVyX1N5bmNNZXNzYWdlLm5hbWUsIGRlZmF1
bHRUaW1lb3V0LCBbeyB0eXBlOiAndWludDMyX3QnLCB2YWx1ZTogNTUgfV0pOworICAgICAgICAg
ICAgY29uc3QgZmlyc3RSZXN1bHQgPSByZXBseS5hcmd1bWVudHNbMF07CisgICAgICAgICAgICBh
c3NlcnRfZXF1YWxzKGZpcnN0UmVzdWx0LnR5cGUsICJ1aW50MzJfdCIsIGBmb3IgJHsgcHJvY2Vz
c1RhcmdldCB9YCk7CisgICAgICAgICAgICBhc3NlcnRfZXF1YWxzKGZpcnN0UmVzdWx0LnZhbHVl
LCA1NSArIG51bU1lc3NhZ2VzLCBgZm9yICR7IHByb2Nlc3NUYXJnZXQgfWApOworICAgICAgICB9
IGZpbmFsbHkgeworICAgICAgICAgICAgY29ubmVjdGlvbi5pbnZhbGlkYXRlKCk7CisgICAgICAg
ICAgICBJUEMuc2VuZFN5bmNNZXNzYWdlKHByb2Nlc3NUYXJnZXQsIDAsIElQQy5tZXNzYWdlcy5J
UENUZXN0ZXJfUmVsZWFzZUNvbm5lY3Rpb25UZXN0ZXIubmFtZSwgZGVmYXVsdFRpbWVvdXQsIFt7
IHR5cGU6ICd1aW50NjRfdCcsIHZhbHVlOiB0ZXN0ZXJJRCB9XSk7CisgICAgICAgIH0KKyAgICB9
Cit9LCAiU2VuZGluZyBhc3luYyBtZXNzYWdlcyBmcm9tIHRoZSBzZXJ2ZXIgaW1tZWRpYXRlbHkg
YWZ0ZXIgb3BlbmluZyBhIG5ldyBjb25uZWN0aW9uIHdvcmtzLiIpOworCitwcm9taXNlX3Rlc3Qo
YXN5bmMgdCA9PiB7CisgICAgaWYgKCF3aW5kb3cuSVBDKQorICAgICAgICByZXR1cm47CisgICAg
Y29uc3QgdGVzdGVySUQgPSA0NDg7CisgICAgZm9yIChjb25zdCBwcm9jZXNzVGFyZ2V0IG9mIElQ
Qy5wcm9jZXNzVGFyZ2V0cykgeworICAgICAgICAvLyBUZXN0IHN0YXJ0cyBoZXJlLgorICAgICAg
ICBjb25zdCBjb25uZWN0aW9uQ291bnQgPSA1OyAvLyBGSVhNRTogc2hvdWxkIGJlIDEwMCwgYnV0
IHdhaXRpbmcgZm9yIG1lc3NhZ2VzIGlzIHNsb3cuCisgICAgICAgIGZvciAobGV0IGkgPSAwOyBp
IDwgY29ubmVjdGlvbkNvdW50OyArK2kpIHsKKyAgICAgICAgICAgIGNvbnN0IFtjb25uZWN0aW9u
LCBjbGllbnRDb25uZWN0aW9uSWRlbnRpZmllcl0gPSBJUEMuY3JlYXRlQ29ubmVjdGlvblBhaXIo
KTsKKyAgICAgICAgICAgIGNvbm5lY3Rpb24ub3BlbigpOworICAgICAgICAgICAgY29uc3QgbWVz
c2FnZUNvdW50ID0gMzsgLy8gRklYTUU6IHNob3VsZCBiZSAxMDAwMCwgYnV0IHdhaXRpbmcgZm9y
IG1lc3NhZ2VzIGlzIHNsb3cuCisgICAgICAgICAgICBJUEMuc2VuZE1lc3NhZ2UocHJvY2Vzc1Rh
cmdldCwgMCwgSVBDLm1lc3NhZ2VzLklQQ1Rlc3Rlcl9DcmVhdGVDb25uZWN0aW9uVGVzdGVyQW5k
U2VuZEFzeW5jTWVzc2FnZXMubmFtZSwgWworICAgICAgICAgICAgICAgIHsgdHlwZTogJ3VpbnQ2
NF90JywgdmFsdWU6IHRlc3RlcklEIH0sCisgICAgICAgICAgICAgICAgeyB0eXBlOiAnQXR0YWNo
bWVudCcsIHZhbHVlOiBjbGllbnRDb25uZWN0aW9uSWRlbnRpZmllciB9LAorICAgICAgICAgICAg
ICAgIHsgdHlwZTogJ3VpbnQzMl90JywgdmFsdWU6IG1lc3NhZ2VDb3VudCB9LAorICAgICAgICAg
ICAgXSk7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGZvciAobGV0IHYgPSAw
OyB2IDwgbWVzc2FnZUNvdW50OyB2KyspIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgbXNn
ID0gY29ubmVjdGlvbi53YWl0Rm9yTWVzc2FnZSgwLCBJUEMubWVzc2FnZXMuSVBDQ29ubmVjdGlv
blRlc3Rlcl9Bc3luY01lc3NhZ2UubmFtZSwgZGVmYXVsdFRpbWVvdXQpOworICAgICAgICAgICAg
ICAgICAgICBhc3NlcnRfZXF1YWxzKG1zZ1swXS50eXBlLCAidWludDMyX3QiLCBgZm9yICR7IHBy
b2Nlc3NUYXJnZXQgfWApOworICAgICAgICAgICAgICAgICAgICBhc3NlcnRfZXF1YWxzKG1zZ1sw
XS52YWx1ZSwgdiwgYGZvciAkeyBwcm9jZXNzVGFyZ2V0IH1gKTsKKworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICAgICAgY29ubmVjdGlvbi5p
bnZhbGlkYXRlKCk7CisgICAgICAgICAgICAgICAgSVBDLnNlbmRTeW5jTWVzc2FnZShwcm9jZXNz
VGFyZ2V0LCAwLCBJUEMubWVzc2FnZXMuSVBDVGVzdGVyX1JlbGVhc2VDb25uZWN0aW9uVGVzdGVy
Lm5hbWUsIGRlZmF1bHRUaW1lb3V0LCBbeyB0eXBlOiAndWludDY0X3QnLCB2YWx1ZTogdGVzdGVy
SUQgfV0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfSwgIlNlbmRpbmcgYXN5
bmMgbWVzc2FnZXMgZnJvbSB0aGUgY2xpZW50IGltbWVkaWF0ZWx5IGFmdGVyIG9wZW5pbmcgdGhl
IGNvbm5lY3Rpb24gd29ya3MuIik7Cis8L3NjcmlwdD4KKzwvYm9keT4KXCBObyBuZXdsaW5lIGF0
IGVuZCBvZiBmaWxlCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>458496</attachid>
            <date>2022-04-28 00:14:55 -0700</date>
            <delta_ts>2022-04-28 00:19:27 -0700</delta_ts>
            <desc>[fast-cq] For landing</desc>
            <filename>bug-239495-20220428101453.patch</filename>
            <type>text/plain</type>
            <size>80888</size>
            <attacher name="Kimmo Kinnunen">kkinnunen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkzNTY2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDdjMzMxNGQ1NTBhZTE2OGFj
NjBjNWIwNzA5ODRmODk2YmNkZDMxN2QuLmNhN2U0NTg1MzIwNGJhMzExMzQ4ODhhNjdlMWQ2OTBm
MWIwMTY5MmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTAxIEBACisyMDIyLTA0LTI3ICBLaW1tbyBL
aW5udW5lbiAgPGtraW5udW5lbkBhcHBsZS5jb20+CisKKyAgICAgICAgSVBDIHRlc3RpbmcgQVBJ
IHNob3VsZCBoYXZlIHRoZSBhYmlsaXR5IHRvIHRlc3QgSVBDOjpDb25uZWN0aW9uIHNlbmQgYW5k
IHJlY2VpdmUgdGhyb3VnaCBJUEM6OkNvbm5lY3Rpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzOTQ5NQorCisgICAgICAgIFJldmlld2VkIGJ5IERh
cmluIEFkbGVyLgorCisgICAgICAgIEFkZCB0aGUgdGVzdGluZyBpbnRlcmZhY2VzIHRvIGJlIGFi
bGUgdG8gc2VuZCBJUEM6OkNvbm5lY3Rpb24gaW5zdGFuY2VzCisgICAgICAgIHRvIG90aGVyIHBy
b2Nlc3Nlcy4KKyAgICAgICAgQWRkIHRoZSB0ZXN0aW5nIGludGVyZmFjZXMgdG8gYmUgYWJsZSB0
byBzZW5kIG1lc3NhZ2VzIHRocm91Z2ggYXJiaXRyYXJ5CisgICAgICAgIElQQzo6Q29ubmVjdGlv
biBpbnN0YW5jZXMuCisKKyAgICAgICAgVGVzdDogaXBjL2NyZWF0ZS1jb25uZWN0aW9uLWFuZC1z
ZW5kLWFzeW5jLmh0bWwKKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIERl
cml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3Q6CisgICAgICAgICogRGVyaXZlZFNvdXJjZXMt
b3V0cHV0LnhjZmlsZWxpc3Q6CisgICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAgICAg
ICAgKiBQbGF0Zm9ybS9JUEMvQ29ubmVjdGlvbi5oOgorICAgICAgICAoSVBDOjpDb25uZWN0aW9u
Ojp3YWl0Rm9yTWVzc2FnZUZvclRlc3RpbmcpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0L21l
c3NhZ2VzLnB5OgorICAgICAgICAodHlwZXNfdGhhdF9jYW5ub3RfYmVfZm9yd2FyZF9kZWNsYXJl
ZCk6CisgICAgICAgICogU2hhcmVkL0lQQ0Nvbm5lY3Rpb25UZXN0ZXIuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYktpdDo6YXNJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYktpdDo6SVBDQ29ubmVj
dGlvblRlc3Rlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6SVBDQ29ubmVjdGlvblRlc3Rl
cjo6SVBDQ29ubmVjdGlvblRlc3Rlcik6CisgICAgICAgIChXZWJLaXQ6OklQQ0Nvbm5lY3Rpb25U
ZXN0ZXI6OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViS2l0OjpJUENDb25uZWN0aW9uVGVzdGVy
OjpzdG9wTGlzdGVuaW5nRm9ySVBDKToKKyAgICAgICAgKFdlYktpdDo6SVBDQ29ubmVjdGlvblRl
c3Rlcjo6c2VuZEFzeW5jTWVzc2FnZXMpOgorICAgICAgICAoV2ViS2l0OjpJUENDb25uZWN0aW9u
VGVzdGVyOjpkaWRDbG9zZSk6CisgICAgICAgIChXZWJLaXQ6OklQQ0Nvbm5lY3Rpb25UZXN0ZXI6
OmRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6OklQQ0Nvbm5lY3Rp
b25UZXN0ZXI6OmFzeW5jTWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6OklQQ0Nvbm5lY3Rpb25U
ZXN0ZXI6OnN5bmNNZXNzYWdlKToKKyAgICAgICAgKiBTaGFyZWQvSVBDQ29ubmVjdGlvblRlc3Rl
ci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9JUENUZXN0ZXIuaC4KKyAgICAg
ICAgKiBTaGFyZWQvSVBDQ29ubmVjdGlvblRlc3Rlci5tZXNzYWdlcy5pbjogQ29waWVkIGZyb20g
U291cmNlL1dlYktpdC9TaGFyZWQvSVBDVGVzdGVyLm1lc3NhZ2VzLmluLgorICAgICAgICAqIFNo
YXJlZC9JUENDb25uZWN0aW9uVGVzdGVySWRlbnRpZmllci5oOiBBZGRlZC4KKyAgICAgICAgKiBT
aGFyZWQvSVBDVGVzdGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGVyOjpjcmVhdGVD
b25uZWN0aW9uVGVzdGVyKToKKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGVyOjpjcmVhdGVDb25u
ZWN0aW9uVGVzdGVyQW5kU2VuZEFzeW5jTWVzc2FnZXMpOgorICAgICAgICAoV2ViS2l0OjpJUENU
ZXN0ZXI6OnJlbGVhc2VDb25uZWN0aW9uVGVzdGVyKToKKyAgICAgICAgKiBTaGFyZWQvSVBDVGVz
dGVyLmg6CisgICAgICAgICogU2hhcmVkL0lQQ1Rlc3Rlci5tZXNzYWdlcy5pbjoKKyAgICAgICAg
KiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ajoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvSVBDVGVzdGluZ0FQSS5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBDQXR0YWNobWVudDo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6SlNJUENBdHRhY2htZW50OjplbmNvZGUgY29u
c3QpOgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjpKU0lQQ0F0dGFjaG1lbnQ6OkpT
SVBDQXR0YWNobWVudCk6CisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBDQ29u
bmVjdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6SlNJUEND
b25uZWN0aW9uOjpKU0lQQ0Nvbm5lY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5n
QVBJOjpjcmVhdGVUeXBlRXJyb3IpOgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjpj
b252ZXJ0VG9VaW50NjQpOgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjpzZW5kTWVz
c2FnZVdpdGhKU0FyZ3VtZW50cyk6CisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OmV4
dHJhY3RTeW5jSVBDTWVzc2FnZUluZm8pOgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJ
OjpzZW5kU3luY01lc3NhZ2VXaXRoSlNBcmd1bWVudHMpOgorICAgICAgICAoV2ViS2l0OjpJUENU
ZXN0aW5nQVBJOjp3YWl0Rm9yTWVzc2FnZVdpdGhKU0FyZ3VtZW50cyk6CisgICAgICAgIChXZWJL
aXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBDU2VtYXBob3JlOjpjcmVhdGVKU1dyYXBwZXIpOgorICAg
ICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjpKU0lQQ1NlbWFwaG9yZTo6d3JhcHBlckNsYXNz
KToKKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6SlNJUENTZW1hcGhvcmU6OnVud3Jh
cCk6CisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBDU2VtYXBob3JlOjp0b1dy
YXBwZWQpOgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjpKU0lQQ1NlbWFwaG9yZTo6
aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBDU2VtYXBo
b3JlOjpmaW5hbGl6ZSk6CisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBDU2Vt
YXBob3JlOjpzdGF0aWNGdW5jdGlvbnMpOgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJ
OjpKU0lQQ0F0dGFjaG1lbnQ6OmNyZWF0ZUpTV3JhcHBlcik6CisgICAgICAgIChXZWJLaXQ6OklQ
Q1Rlc3RpbmdBUEk6OkpTSVBDQXR0YWNobWVudDo6d3JhcHBlckNsYXNzKToKKyAgICAgICAgKFdl
YktpdDo6SVBDVGVzdGluZ0FQSTo6SlNJUENBdHRhY2htZW50Ojp1bndyYXApOgorICAgICAgICAo
V2ViS2l0OjpJUENUZXN0aW5nQVBJOjpKU0lQQ0F0dGFjaG1lbnQ6OnRvV3JhcHBlZCk6CisgICAg
ICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBDQXR0YWNobWVudDo6aW5pdGlhbGl6ZSk6
CisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBDQXR0YWNobWVudDo6ZmluYWxp
emUpOgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjpKU0lQQ0F0dGFjaG1lbnQ6OnN0
YXRpY0Z1bmN0aW9ucyk6CisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBDQ29u
bmVjdGlvbjo6Y3JlYXRlSlNXcmFwcGVyKToKKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQ
STo6SlNJUENDb25uZWN0aW9uOjp3cmFwcGVyQ2xhc3MpOgorICAgICAgICAoV2ViS2l0OjpJUENU
ZXN0aW5nQVBJOjpKU0lQQ0Nvbm5lY3Rpb246OnVud3JhcCk6CisgICAgICAgIChXZWJLaXQ6OklQ
Q1Rlc3RpbmdBUEk6OkpTSVBDQ29ubmVjdGlvbjo6dG9XcmFwcGVkKToKKyAgICAgICAgKFdlYktp
dDo6SVBDVGVzdGluZ0FQSTo6SlNJUENDb25uZWN0aW9uOjppbml0aWFsaXplKToKKyAgICAgICAg
KFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6SlNJUENDb25uZWN0aW9uOjpmaW5hbGl6ZSk6CisgICAg
ICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBDQ29ubmVjdGlvbjo6ZGlkUmVjZWl2ZU1l
c3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjpKU0lQQ0Nvbm5lY3Rpb246
OmRpZFJlY2VpdmVTeW5jTWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6
OkpTSVBDQ29ubmVjdGlvbjo6ZGlkQ2xvc2UpOgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5n
QVBJOjpKU0lQQ0Nvbm5lY3Rpb246OmRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZSk6CisgICAgICAg
IChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBDQ29ubmVjdGlvbjo6c3RhdGljRnVuY3Rpb25z
KToKKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6SlNJUENDb25uZWN0aW9uOjpvcGVu
KToKKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6SlNJUENDb25uZWN0aW9uOjppbnZh
bGlkYXRlKToKKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6SlNJUENDb25uZWN0aW9u
OjpzZW5kTWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBDQ29u
bmVjdGlvbjo6c2VuZFN5bmNNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQ
STo6SlNJUENDb25uZWN0aW9uOjp3YWl0Rm9yTWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6OklQ
Q1Rlc3RpbmdBUEk6OkpTSVBDU3RyZWFtQ2xpZW50Q29ubmVjdGlvbjo6cHJlcGFyZVRvU2VuZE91
dE9mU3RyZWFtTWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBD
OjpzdGF0aWNGdW5jdGlvbnMpOgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjplbmNv
ZGVGcmFtZUluZm9EYXRhKToKKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6ZW5jb2Rl
QXR0YWNobWVudCk6CisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OlZlY3RvckVuY29k
ZUhlbHBlcjo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6
ZW5jb2RlQXJyYXlBcmd1bWVudCk6CisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OmVu
Y29kZUFyZ3VtZW50KToKKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6SlNJUEM6OnNl
bmRNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6SlNJUEM6OndhaXRG
b3JNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6SlNJUEM6OnNlbmRT
eW5jTWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBDOjpjcmVh
dGVDb25uZWN0aW9uUGFpcik6CisKIDIwMjItMDQtMjcgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9o
c2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgW2lPU10gQWRkIGEgbWVjaGFuaXNtIHRvIG92ZXJy
aWRlIGRlc2t0b3AtY2xhc3MgYnJvd3Npbmcgc3RhdGUgaW4gbXVsdGl0YXNraW5nIG1vZGUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViS2l0L0NN
YWtlTGlzdHMudHh0CmluZGV4IDY5YWNkOGRlZGQ5YTkyMTJkZmY4Y2FlZDcwNGNkNjNiYTIzMmYz
ZmUuLmM0NGYyOWE1NDZjYjFlOWFlZjExM2U1M2IzOWZlNDI2YzdjM2FlOGEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYktpdC9DTWFrZUxp
c3RzLnR4dApAQCAtMjE1LDYgKzIxNSw3IEBAIHNldChXZWJLaXRfTUVTU0FHRVNfSU5fRklMRVMK
ICAgICBOZXR3b3JrUHJvY2Vzcy93ZWJydGMvUlRDRGF0YUNoYW5uZWxSZW1vdGVNYW5hZ2VyUHJv
eHkKIAogICAgIFNoYXJlZC9BdXhpbGlhcnlQcm9jZXNzCisgICAgU2hhcmVkL0lQQ0Nvbm5lY3Rp
b25UZXN0ZXIKICAgICBTaGFyZWQvSVBDU3RyZWFtVGVzdGVyCiAgICAgU2hhcmVkL0lQQ1N0cmVh
bVRlc3RlclByb3h5CiAgICAgU2hhcmVkL0lQQ1Rlc3RlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0IGIvU291cmNlL1dlYktpdC9EZXJp
dmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0CmluZGV4IDk3YjQxZTk3ZjJjZjg2MjExYWVjYmU5
Y2VhMzFhYTNlNjYwMzQ4MDguLmNmNDg1NGVhYmVmZmFjMzdkOTNkZmJiYmJlZDBhYzFjNDYxYjkz
YWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxl
bGlzdAorKysgYi9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QK
QEAgLTEyOSw2ICsxMjksNyBAQCAkKFBST0pFQ1RfRElSKS9TaGFyZWQvQXBwbGVQYXkvV2ViUGF5
bWVudENvb3JkaW5hdG9yUHJveHkubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1NoYXJlZC9B
dXRoZW50aWNhdGlvbi9BdXRoZW50aWNhdGlvbk1hbmFnZXIubWVzc2FnZXMuaW4KICQoUFJPSkVD
VF9ESVIpL1NoYXJlZC9BdXhpbGlhcnlQcm9jZXNzLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElS
KS9TaGFyZWQvSFRUUFNVcGdyYWRlL0hUVFBTVXBncmFkZUxpc3QudHh0CiskKFBST0pFQ1RfRElS
KS9TaGFyZWQvSVBDQ29ubmVjdGlvblRlc3Rlci5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikv
U2hhcmVkL0lQQ1N0cmVhbVRlc3Rlci5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvU2hhcmVk
L0lQQ1N0cmVhbVRlc3RlclByb3h5Lm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9TaGFyZWQv
SVBDVGVzdGVyLm1lc3NhZ2VzLmluCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRT
b3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0IGIvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1v
dXRwdXQueGNmaWxlbGlzdAppbmRleCAyODA0ODcwOTRmYzFkNjQ0ZWFiODI0NzZhYjM2NTNlZWY4
NzJjZTY3Li4yNWUzNTIzMzZlZDVlOWYyZTgwZmMzNjhiOGIzY2VkYzYyNDFhMGFmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0CisrKyBi
L1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QKQEAgLTQ2LDYg
KzQ2LDkgQEAgJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdC9HUFVQ
cm9jZXNzTWVzc2FnZXNSZXBsaWVzLmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291
cmNlcy9XZWJLaXQvR1BVUHJvY2Vzc1Byb3h5TWVzc2FnZVJlY2VpdmVyLmNwcAogJChCVUlMVF9Q
Uk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdC9HUFVQcm9jZXNzUHJveHlNZXNzYWdl
cy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0L0dQVVByb2Nl
c3NQcm94eU1lc3NhZ2VzUmVwbGllcy5oCiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNv
dXJjZXMvV2ViS2l0L0lQQ0Nvbm5lY3Rpb25UZXN0ZXJNZXNzYWdlUmVjZWl2ZXIuY3BwCiskKEJV
SUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0L0lQQ0Nvbm5lY3Rpb25UZXN0
ZXJNZXNzYWdlcy5oCiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0
L0lQQ0Nvbm5lY3Rpb25UZXN0ZXJNZXNzYWdlc1JlcGxpZXMuaAogJChCVUlMVF9QUk9EVUNUU19E
SVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdC9JUENTdHJlYW1UZXN0ZXJNZXNzYWdlUmVjZWl2ZXIu
Y3BwCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0L0lQQ1N0cmVh
bVRlc3Rlck1lc3NhZ2VzLmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9X
ZWJLaXQvSVBDU3RyZWFtVGVzdGVyTWVzc2FnZXNSZXBsaWVzLmgKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMubWFrZSBiL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJj
ZXMubWFrZQppbmRleCBlYjU5ODVjOGQ4YTc2MWU4NzBjODk1YWRkN2Y5MTc1MDViYzU2NGIyLi41
ZjJjZjA5YTY1YzQzNGUwYmNlYzBmNTJiZjBhNTBjYmFmZmY3ZWQ4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLm1ha2UKKysrIGIvU291cmNlL1dlYktpdC9EZXJpdmVk
U291cmNlcy5tYWtlCkBAIC0xNDksNiArMTQ5LDcgQEAgTUVTU0FHRV9SRUNFSVZFUlMgPSBcCiAJ
U2hhcmVkL0F1dGhlbnRpY2F0aW9uL0F1dGhlbnRpY2F0aW9uTWFuYWdlciBcCiAJU2hhcmVkL05v
dGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uTWFuYWdlck1lc3NhZ2VIYW5kbGVyIFwKIAlTaGFyZWQv
V2ViQ29ubmVjdGlvbiBcCisJU2hhcmVkL0lQQ0Nvbm5lY3Rpb25UZXN0ZXIgXAogCVNoYXJlZC9J
UENTdHJlYW1UZXN0ZXIgXAogCVNoYXJlZC9JUENTdHJlYW1UZXN0ZXJQcm94eSBcCiAJU2hhcmVk
L0lQQ1Rlc3RlciBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Db25u
ZWN0aW9uLmggYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Db25uZWN0aW9uLmgKaW5kZXgg
MmEzYTMyMDQ4YjRjNjgxYTc3N2RhMTAyYzMxODEzNTNmZDRiYjgzYi4uYWM5ODUzYjA0M2QzOGY0
ZDRjYWNhOGQ4MDQ4OTkyMDdiOWMyNTA5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0
Zm9ybS9JUEMvQ29ubmVjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0Nv
bm5lY3Rpb24uaApAQCAtNTcsMTEgKzU3LDYgQEAKICNpbmNsdWRlIDx3dGYvZ2xpYi9HU29ja2V0
TW9uaXRvci5oPgogI2VuZGlmCiAKLW5hbWVzcGFjZSBXZWJLaXQgewotbmFtZXNwYWNlIElQQ1Rl
c3RpbmdBUEkgewotY2xhc3MgSlNJUEM7Ci19Ci19CiAKIG5hbWVzcGFjZSBJUEMgewogCkBAIC0z
MzMsNiArMzI4LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0SWdub3JlSW52YWxpZE1lc3NhZ2VG
b3JUZXN0aW5nKCkgeyBtX2lnbm9yZUludmFsaWRNZXNzYWdlRm9yVGVzdGluZyA9IHRydWU7IH0K
ICAgICBib29sIGlnbm9yZUludmFsaWRNZXNzYWdlRm9yVGVzdGluZygpIGNvbnN0IHsgcmV0dXJu
IG1faWdub3JlSW52YWxpZE1lc3NhZ2VGb3JUZXN0aW5nOyB9CiAgICAgdm9pZCBkaXNwYXRjaElu
Y29taW5nTWVzc2FnZUZvclRlc3Rpbmcoc3RkOjp1bmlxdWVfcHRyPERlY29kZXI+JiYpOworICAg
IHN0ZDo6dW5pcXVlX3B0cjxEZWNvZGVyPiB3YWl0Rm9yTWVzc2FnZUZvclRlc3RpbmcoTWVzc2Fn
ZU5hbWUsIHVpbnQ2NF90IGRlc3RpbmF0aW9uSUQsIFRpbWVvdXQsIE9wdGlvblNldDxXYWl0Rm9y
T3B0aW9uPik7CiAjZW5kaWYKIAogICAgIHZvaWQgZGlzcGF0Y2hNZXNzYWdlUmVjZWl2ZXJNZXNz
YWdlKE1lc3NhZ2VSZWNlaXZlciYsIHN0ZDo6dW5pcXVlX3B0cjxEZWNvZGVyPiYmKTsKQEAgLTUy
NCw3ICs1MjAsNiBAQCBwcml2YXRlOgogICAgIEhBTkRMRSBtX2Nvbm5lY3Rpb25QaXBlIHsgSU5W
QUxJRF9IQU5ETEVfVkFMVUUgfTsKICNlbmRpZgogICAgIGZyaWVuZCBjbGFzcyBTdHJlYW1DbGll
bnRDb25uZWN0aW9uOwotICAgIGZyaWVuZCBjbGFzcyBXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpT
SVBDOwogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KQEAgLTY1Nyw2ICs2NTIsMTQgQEAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4gYm9vbCBDb25uZWN0aW9uOjp3YWl0Rm9yQXN5bmNDYWxsYmFja0Fu
ZERpc3BhdGNoSW1tZWRpYXRlbHkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorI2lmIEVOQUJMRShJ
UENfVEVTVElOR19BUEkpCitpbmxpbmUgc3RkOjp1bmlxdWVfcHRyPERlY29kZXI+IENvbm5lY3Rp
b246OndhaXRGb3JNZXNzYWdlRm9yVGVzdGluZyhNZXNzYWdlTmFtZSBtZXNzYWdlTmFtZSwgdWlu
dDY0X3QgZGVzdGluYXRpb25JRCwgVGltZW91dCB0aW1lb3V0LCBPcHRpb25TZXQ8V2FpdEZvck9w
dGlvbj4gb3B0aW9ucykKK3sKKyAgICByZXR1cm4gd2FpdEZvck1lc3NhZ2UobWVzc2FnZU5hbWUs
IGRlc3RpbmF0aW9uSUQsIHRpbWVvdXQsIG9wdGlvbnMpOworfQorI2VuZGlmCisKKwogY2xhc3Mg
VW5ib3VuZGVkU3luY2hyb25vdXNJUENTY29wZSB7CiBwdWJsaWM6CiAgICAgVW5ib3VuZGVkU3lu
Y2hyb25vdXNJUENTY29wZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Vi
a2l0L21lc3NhZ2VzLnB5IGIvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5w
eQppbmRleCBhMzE4YTUzYjFlYzkyNTE3MTgwMDE5ZDVjYzRlYzk1MjAwMGYyNWE4Li5lNmE5OWY1
MGMyOTMwYmJlNmY3YTUwNDdmNWEzNGE1ZWQwZjllMjc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CisrKyBiL1NvdXJjZS9XZWJLaXQvU2NyaXB0
cy93ZWJraXQvbWVzc2FnZXMucHkKQEAgLTMyNCw2ICszMjQsNyBAQCBkZWYgdHlwZXNfdGhhdF9j
YW5ub3RfYmVfZm9yd2FyZF9kZWNsYXJlZCgpOgogICAgICAgICAnV2ViS2l0OjpHZW9sb2NhdGlv
bklkZW50aWZpZXInLAogICAgICAgICAnV2ViS2l0OjpHcmFwaGljc0NvbnRleHRHTElkZW50aWZp
ZXInLAogICAgICAgICAnV2ViS2l0OjpJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUnLAorICAgICAg
ICAnV2ViS2l0OjpJUENDb25uZWN0aW9uVGVzdGVySWRlbnRpZmllcicsCiAgICAgICAgICdXZWJL
aXQ6OklQQ1N0cmVhbVRlc3RlcklkZW50aWZpZXInLAogICAgICAgICAnV2ViS2l0OjpMYXllckhv
c3RpbmdDb250ZXh0SUQnLAogICAgICAgICAnV2ViS2l0OjpMZWdhY3lDdXN0b21Qcm90b2NvbElE
JywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0lQQ0Nvbm5lY3Rpb25UZXN0ZXIu
Y3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvSVBDQ29ubmVjdGlvblRlc3Rlci5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNzA5ZWVkNGE1YWRjZTQ3ZjBhOTA5MTYxN2VmZmMyZmNiNjBjZjM4MQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0lQQ0Nvbm5lY3Rpb25UZXN0ZXIuY3BwCkBA
IC0wLDAgKzEsMTA3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIklQQ0Nvbm5lY3Rpb25UZXN0ZXIuaCIKKworI2lmIEVOQUJMRShJUENfVEVTVElOR19BUEkp
CisjaW5jbHVkZSAiSVBDQ29ubmVjdGlvblRlc3Rlck1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiSVBD
VGVzdGVyLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCisvLyBGSVhNRShodHRwczovL3dlYmtp
dC5vcmcvYi8yMzk0ODcpOiBUaGVzZSBpZmRlZnMgYXJlIGVycm9yIHByb25lLCBkdXBsaWNhdGVk
IGFuZCB0aGUgbGFjayBvZiBtb3ZlIHNlbWFudGljcyBjYXVzZXMgbGVha3MuCitzdGF0aWMgSVBD
OjpDb25uZWN0aW9uOjpJZGVudGlmaWVyIGFzSWRlbnRpZmllcihJUEM6OkF0dGFjaG1lbnQmJiBj
b25uZWN0aW9uSWRlbnRpZmllcikKK3sKKyNpZiBVU0UoVU5JWF9ET01BSU5fU09DS0VUUykKKyAg
ICByZXR1cm4geyBjb25uZWN0aW9uSWRlbnRpZmllci5yZWxlYXNlKCkucmVsZWFzZSgpIH07Cisj
ZWxpZiBPUyhEQVJXSU4pCisgICAgcmV0dXJuIHsgY29ubmVjdGlvbklkZW50aWZpZXIucG9ydCgp
IH07CisjZWxpZiBPUyhXSU5ET1dTKQorICAgIHJldHVybiB7IGNvbm5lY3Rpb25JZGVudGlmaWVy
LmhhbmRsZSgpIH07CisjZWxzZQorICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHsg
fTsKKyNlbmRpZgorfQorCitSZWY8SVBDQ29ubmVjdGlvblRlc3Rlcj4gSVBDQ29ubmVjdGlvblRl
c3Rlcjo6Y3JlYXRlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDQ29ubmVjdGlvblRl
c3RlcklkZW50aWZpZXIgaWRlbnRpZmllciwgSVBDOjpBdHRhY2htZW50JiYgdGVzdGVkQ29ubmVj
dGlvbklkZW50aWZpZXIpCit7CisgICAgYXV0byB0ZXN0ZXIgPSBhZG9wdFJlZigqbmV3IElQQ0Nv
bm5lY3Rpb25UZXN0ZXIoY29ubmVjdGlvbiwgaWRlbnRpZmllciwgV1RGTW92ZSh0ZXN0ZWRDb25u
ZWN0aW9uSWRlbnRpZmllcikpKTsKKyAgICB0ZXN0ZXItPmluaXRpYWxpemUoKTsKKyAgICByZXR1
cm4gdGVzdGVyOworfQorCitJUENDb25uZWN0aW9uVGVzdGVyOjpJUENDb25uZWN0aW9uVGVzdGVy
KFJlZjxJUEM6OkNvbm5lY3Rpb24+JiYgY29ubmVjdGlvbiwgSVBDQ29ubmVjdGlvblRlc3Rlcklk
ZW50aWZpZXIgaWRlbnRpZmllciwgSVBDOjpBdHRhY2htZW50JiYgdGVzdGVkQ29ubmVjdGlvbklk
ZW50aWZpZXIpCisgICAgOiBtX2Nvbm5lY3Rpb24oV1RGTW92ZShjb25uZWN0aW9uKSkKKyAgICAs
IG1fdGVzdGVkQ29ubmVjdGlvbihJUEM6OkNvbm5lY3Rpb246OmNyZWF0ZUNsaWVudENvbm5lY3Rp
b24oYXNJZGVudGlmaWVyKFdURk1vdmUodGVzdGVkQ29ubmVjdGlvbklkZW50aWZpZXIpKSwgKnRo
aXMpKQorICAgICwgbV9pZGVudGlmaWVyKGlkZW50aWZpZXIpCit7Cit9CisKK0lQQ0Nvbm5lY3Rp
b25UZXN0ZXI6On5JUENDb25uZWN0aW9uVGVzdGVyKCkgPSBkZWZhdWx0OworCit2b2lkIElQQ0Nv
bm5lY3Rpb25UZXN0ZXI6OmluaXRpYWxpemUoKQoreworICAgIG1fdGVzdGVkQ29ubmVjdGlvbi0+
b3BlbigpOworfQorCit2b2lkIElQQ0Nvbm5lY3Rpb25UZXN0ZXI6OnN0b3BMaXN0ZW5pbmdGb3JJ
UEMoUmVmPElQQ0Nvbm5lY3Rpb25UZXN0ZXI+JiYgcmVmRnJvbUNvbm5lY3Rpb24pCit7CisgICAg
bV90ZXN0ZWRDb25uZWN0aW9uLT5pbnZhbGlkYXRlKCk7Cit9CisKK3ZvaWQgSVBDQ29ubmVjdGlv
blRlc3Rlcjo6c2VuZEFzeW5jTWVzc2FnZXModWludDMyX3QgbWVzc2FnZUNvdW50KQoreworICAg
IGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBtZXNzYWdlQ291bnQ7ICsraSkKKyAgICAgICAgbV90
ZXN0ZWRDb25uZWN0aW9uLT5zZW5kKE1lc3NhZ2VzOjpJUENDb25uZWN0aW9uVGVzdGVyOjpBc3lu
Y01lc3NhZ2UoaSksIDApOworfQorCit2b2lkIElQQ0Nvbm5lY3Rpb25UZXN0ZXI6OmRpZENsb3Nl
KElQQzo6Q29ubmVjdGlvbiYpCit7Cit9CisKK3ZvaWQgSVBDQ29ubmVjdGlvblRlc3Rlcjo6ZGlk
UmVjZWl2ZUludmFsaWRNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6TWVzc2FnZU5hbWUp
Cit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgSVBDQ29ubmVjdGlvblRl
c3Rlcjo6YXN5bmNNZXNzYWdlKHVpbnQzMl90IHZhbHVlKQoreworICAgIGlmIChtX3ByZXZpb3Vz
QXN5bmNNZXNzYWdlVmFsdWUgIT0gdmFsdWUgLSAxKSB7CisgICAgICAgIEFTU0VSVF9JU19URVNU
SU5HX0lQQygpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fcHJldmlvdXNBc3luY01l
c3NhZ2VWYWx1ZSA9IHZhbHVlOworfQorCit2b2lkIElQQ0Nvbm5lY3Rpb25UZXN0ZXI6OnN5bmNN
ZXNzYWdlKHVpbnQzMl90IHZhbHVlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHVpbnQzMl90KT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBjb21wbGV0aW9uSGFuZGxlcih2YWx1ZSArIG1f
cHJldmlvdXNBc3luY01lc3NhZ2VWYWx1ZSk7Cit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9JUENDb25uZWN0aW9uVGVzdGVyLmggYi9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9JUENDb25uZWN0aW9uVGVzdGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjBkOTM4YmU0Mzlk
YWExMDk2MGViNDAxMTRjYzBiMTk5ZTY4Y2I3NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvU2hhcmVkL0lQQ0Nvbm5lY3Rpb25UZXN0ZXIuaApAQCAtMCwwICsxLDcyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoSVBDX1RFU1RJTkdfQVBJKQorCisj
aW5jbHVkZSAiQ29ubmVjdGlvbi5oIgorI2luY2x1ZGUgIklQQ0Nvbm5lY3Rpb25UZXN0ZXJJZGVu
dGlmaWVyLmgiCisjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCisjaW5jbHVkZSA8b3B0aW9u
YWw+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIElQQyB7CitjbGFzcyBD
b25uZWN0aW9uOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworLy8gSW50ZXJmYWNlIHRvIHRl
c3QgdmFyaW91cyBJUEM6OkNvbm5lY3Rpb24gcmVsYXRlZCBhY3Rpdml0aWVzLgorY2xhc3MgSVBD
Q29ubmVjdGlvblRlc3RlciBmaW5hbCA6IHB1YmxpYyBSZWZDb3VudGVkPElQQ0Nvbm5lY3Rpb25U
ZXN0ZXI+LCBwcml2YXRlIElQQzo6Q29ubmVjdGlvbjo6Q2xpZW50IHsKK3B1YmxpYzoKKyAgICB+
SVBDQ29ubmVjdGlvblRlc3RlcigpOworICAgIHN0YXRpYyBSZWY8SVBDQ29ubmVjdGlvblRlc3Rl
cj4gY3JlYXRlKElQQzo6Q29ubmVjdGlvbiYsIElQQ0Nvbm5lY3Rpb25UZXN0ZXJJZGVudGlmaWVy
LCBJUEM6OkF0dGFjaG1lbnQmJiB0ZXN0ZWRDb25uZWN0aW9uSWRlbnRpZmllcik7CisgICAgdm9p
ZCBzdG9wTGlzdGVuaW5nRm9ySVBDKFJlZjxJUENDb25uZWN0aW9uVGVzdGVyPiYmIHJlZkZyb21D
b25uZWN0aW9uKTsKKworICAgIHZvaWQgc2VuZEFzeW5jTWVzc2FnZXModWludDMyX3QgbWVzc2Fn
ZUNvdW50KTsKK3ByaXZhdGU6CisgICAgSVBDQ29ubmVjdGlvblRlc3RlcihSZWY8SVBDOjpDb25u
ZWN0aW9uPiYmLCBJUENDb25uZWN0aW9uVGVzdGVySWRlbnRpZmllciwgSVBDOjpBdHRhY2htZW50
JiYgdGVzdGVkQ29ubmVjdGlvbklkZW50aWZpZXIpOworICAgIHZvaWQgaW5pdGlhbGl6ZSgpOwor
CisgICAgLy8gSVBDOjpDb25uZWN0aW9uOjpDbGllbnQgb3ZlcnJpZGVzLgorICAgIHZvaWQgZGlk
UmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgZmluYWw7Cisg
ICAgYm9vbCBkaWRSZWNlaXZlU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNv
ZGVyJiwgVW5pcXVlUmVmPElQQzo6RW5jb2Rlcj4mKSBmaW5hbDsKKyAgICB2b2lkIGRpZENsb3Nl
KElQQzo6Q29ubmVjdGlvbiYpIGZpbmFsOworICAgIHZvaWQgZGlkUmVjZWl2ZUludmFsaWRNZXNz
YWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6TWVzc2FnZU5hbWUpIGZpbmFsOworCisgICAgLy8g
TWVzc2FnZXMuCisgICAgdm9pZCBhc3luY01lc3NhZ2UodWludDMyX3QgdmFsdWUpOworICAgIHZv
aWQgc3luY01lc3NhZ2UodWludDMyX3QgdmFsdWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQodWlu
dDMyX3Qgc2FtZVZhbHVlKT4mJik7CisKKyAgICBjb25zdCBSZWY8SVBDOjpDb25uZWN0aW9uPiBt
X2Nvbm5lY3Rpb247CisgICAgY29uc3QgUmVmPElQQzo6Q29ubmVjdGlvbj4gbV90ZXN0ZWRDb25u
ZWN0aW9uOworICAgIGNvbnN0IElQQ0Nvbm5lY3Rpb25UZXN0ZXJJZGVudGlmaWVyIG1faWRlbnRp
ZmllcjsKKyAgICB1aW50MzJfdCBtX3ByZXZpb3VzQXN5bmNNZXNzYWdlVmFsdWUgeyAwIH07Cit9
OworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvSVBDQ29u
bmVjdGlvblRlc3Rlci5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0lQQ0Nvbm5l
Y3Rpb25UZXN0ZXIubWVzc2FnZXMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGJhNTU2Zjc1MDM1MWNlMTczNWY3
NTI2MzQzMGI4MjVjZTA0NjgzMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL0lQQ0Nvbm5lY3Rpb25UZXN0ZXIubWVzc2FnZXMuaW4KQEAgLTAsMCArMSwzMCBAQAorIyBD
b3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisj
CisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjaWYgRU5BQkxFKElQQ19URVNU
SU5HX0FQSSkKKworbWVzc2FnZXMgLT4gSVBDQ29ubmVjdGlvblRlc3RlciBOb3RSZWZDb3VudGVk
IHsKKyAgICBBc3luY01lc3NhZ2UodWludDMyX3QgdmFsdWUpCisgICAgU3luY01lc3NhZ2UodWlu
dDMyX3QgdmFsdWUpIC0+ICh1aW50MzJfdCBzYW1lVmFsdWUpIFN5bmNocm9ub3VzCit9CisKKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvSVBDQ29ubmVjdGlvblRlc3Rl
cklkZW50aWZpZXIuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0lQQ0Nvbm5lY3Rpb25UZXN0ZXJJ
ZGVudGlmaWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzk0YWNkODlmMjFiMjE5OTA2ZTI1OTNjM2E5MzljYTdl
YTNkODNjMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0lQQ0Nvbm5l
Y3Rpb25UZXN0ZXJJZGVudGlmaWVyLmgKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaWYgRU5BQkxFKElQQ19URVNUSU5HX0FQSSkKKworI2luY2x1ZGUgPHd0
Zi9PYmplY3RJZGVudGlmaWVyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitlbnVtIElQQ0Nv
bm5lY3Rpb25UZXN0ZXJJZGVudGlmaWVyVHlwZSB7IH07Cit1c2luZyBJUENDb25uZWN0aW9uVGVz
dGVySWRlbnRpZmllciA9IE9iamVjdElkZW50aWZpZXI8SVBDQ29ubmVjdGlvblRlc3RlcklkZW50
aWZpZXJUeXBlPjsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL0lQQ1Rlc3Rlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9JUENUZXN0ZXIuY3BwCmlu
ZGV4IGM3NGFmZGNlZjJmZDAyOWIzYzY4MWIwY2E3NzEyMzlhNTY2ODliZWIuLjUwN2QzYmM0NDgx
YWYwYTZiZGVhOTRjNmE0NTk2Y2FiYzc1YmQxYTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
U2hhcmVkL0lQQ1Rlc3Rlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvSVBDVGVzdGVy
LmNwcApAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShJUENfVEVTVElOR19BUEkpCiAjaW5j
bHVkZSAiQ29ubmVjdGlvbi5oIgogI2luY2x1ZGUgIkRlY29kZXIuaCIKKyNpbmNsdWRlICJJUEND
b25uZWN0aW9uVGVzdGVyLmgiCiAjaW5jbHVkZSAiSVBDU3RyZWFtVGVzdGVyLmgiCiAjaW5jbHVk
ZSAiSVBDVGVzdGVyTWVzc2FnZXMuaCIKIApAQCAtMTY4LDYgKzE2OSwzMiBAQCB2b2lkIElQQ1Rl
c3Rlcjo6c2VuZFNlbWFwaG9yZUJhY2tBbmRTaWduYWxQcm90b2NvbChJUEM6OkNvbm5lY3Rpb24m
IGNvbm5lY3Rpb24sCiAgICAgfQogfQogCit2b2lkIElQQ1Rlc3Rlcjo6Y3JlYXRlQ29ubmVjdGlv
blRlc3RlcihJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQ0Nvbm5lY3Rpb25UZXN0ZXJJ
ZGVudGlmaWVyIGlkZW50aWZpZXIsIElQQzo6QXR0YWNobWVudCYmIHRlc3RlZENvbm5lY3Rpb25J
ZGVudGlmaWVyKQoreworICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9jb25uZWN0aW9uVGVzdGVycy5l
bnN1cmUoaWRlbnRpZmllciwgWyZdIHsKKyAgICAgICAgcmV0dXJuIElQQzo6U2NvcGVkQWN0aXZl
TWVzc2FnZVJlY2VpdmVRdWV1ZTxJUENDb25uZWN0aW9uVGVzdGVyPiB7IElQQ0Nvbm5lY3Rpb25U
ZXN0ZXI6OmNyZWF0ZShjb25uZWN0aW9uLCBpZGVudGlmaWVyLCBXVEZNb3ZlKHRlc3RlZENvbm5l
Y3Rpb25JZGVudGlmaWVyKSkgfTsKKyAgICB9KTsKKyAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3Vs
dCwgYWRkUmVzdWx0LmlzTmV3RW50cnkgfHwgaXNUZXN0aW5nSVBDKCkpOworfQorCit2b2lkIElQ
Q1Rlc3Rlcjo6Y3JlYXRlQ29ubmVjdGlvblRlc3RlckFuZFNlbmRBc3luY01lc3NhZ2VzKElQQzo6
Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDQ29ubmVjdGlvblRlc3RlcklkZW50aWZpZXIgaWRl
bnRpZmllciwgSVBDOjpBdHRhY2htZW50JiYgdGVzdGVkQ29ubmVjdGlvbklkZW50aWZpZXIsIHVp
bnQzMl90IG1lc3NhZ2VDb3VudCkKK3sKKyAgICBhdXRvIGFkZFJlc3VsdCA9IG1fY29ubmVjdGlv
blRlc3RlcnMuZW5zdXJlKGlkZW50aWZpZXIsIFsmXSB7CisgICAgICAgIHJldHVybiBJUEM6OlNj
b3BlZEFjdGl2ZU1lc3NhZ2VSZWNlaXZlUXVldWU8SVBDQ29ubmVjdGlvblRlc3Rlcj4geyBJUEND
b25uZWN0aW9uVGVzdGVyOjpjcmVhdGUoY29ubmVjdGlvbiwgaWRlbnRpZmllciwgV1RGTW92ZSh0
ZXN0ZWRDb25uZWN0aW9uSWRlbnRpZmllcikpIH07CisgICAgfSk7CisgICAgaWYgKCFhZGRSZXN1
bHQuaXNOZXdFbnRyeSkgeworICAgICAgICBBU1NFUlRfSVNfVEVTVElOR19JUEMoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5zZW5kQXN5
bmNNZXNzYWdlcyhtZXNzYWdlQ291bnQpOworfQorCit2b2lkIElQQ1Rlc3Rlcjo6cmVsZWFzZUNv
bm5lY3Rpb25UZXN0ZXIoSVBDQ29ubmVjdGlvblRlc3RlcklkZW50aWZpZXIgaWRlbnRpZmllciwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIG1f
Y29ubmVjdGlvblRlc3RlcnMucmVtb3ZlKGlkZW50aWZpZXIpOworICAgIGNvbXBsZXRpb25IYW5k
bGVyKCk7Cit9CisKIHZvaWQgSVBDVGVzdGVyOjpzdG9wSWZOZWVkZWQoKQogewogICAgIGlmICht
X3Rlc3RRdWV1ZSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvSVBDVGVzdGVy
LmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9JUENUZXN0ZXIuaAppbmRleCA0NzdmOGQ4YTg2NGQ2
OGE4MWQxODY0NDk1MTU4MjIzOTlhMGI0YWYyLi4wNjJlYzgzM2YzODIwMWEyN2ZkZDlmYjM2NDkx
ZDA5NTkzZTFhZTNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9JUENUZXN0ZXIu
aAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9JUENUZXN0ZXIuaApAQCAtMjgsNiArMjgsNyBA
QAogCiAjaWYgRU5BQkxFKElQQ19URVNUSU5HX0FQSSkKIAorI2luY2x1ZGUgIklQQ0Nvbm5lY3Rp
b25UZXN0ZXJJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiSVBDU3RyZWFtVGVzdGVySWRlbnRpZmll
ci5oIgogI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgogI2luY2x1ZGUgIlNjb3BlZEFjdGl2
ZU1lc3NhZ2VSZWNlaXZlUXVldWUuaCIKQEAgLTUyLDYgKzUzLDcgQEAgbmFtZXNwYWNlIFdlYktp
dCB7CiAvLyBhbmQgZXhwb3NlcyBidWdzIHVuZGVybmVhdGguCiBib29sIGlzVGVzdGluZ0lQQygp
OwogCitjbGFzcyBJUENDb25uZWN0aW9uVGVzdGVyOwogY2xhc3MgSVBDU3RyZWFtVGVzdGVyOwog
CiAvLyBNYWluIHRlc3QgaW50ZXJmYWNlIGZvciBpbml0aWF0aW5nIHZhcmlvdXMgSVBDIHRlc3Qg
YWN0aXZpdGllcy4KQEAgLTY5LDYgKzcxLDkgQEAgcHJpdmF0ZToKICAgICB2b2lkIHN0b3BNZXNz
YWdlVGVzdGluZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+KTsKICAgICB2b2lkIGNyZWF0ZVN0
cmVhbVRlc3RlcihJUEM6OkNvbm5lY3Rpb24mLCBJUENTdHJlYW1UZXN0ZXJJZGVudGlmaWVyLCBJ
UEM6OlN0cmVhbUNvbm5lY3Rpb25CdWZmZXImJik7CiAgICAgdm9pZCByZWxlYXNlU3RyZWFtVGVz
dGVyKElQQ1N0cmVhbVRlc3RlcklkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
Jik7CisgICAgdm9pZCBjcmVhdGVDb25uZWN0aW9uVGVzdGVyKElQQzo6Q29ubmVjdGlvbiYsIElQ
Q0Nvbm5lY3Rpb25UZXN0ZXJJZGVudGlmaWVyLCBJUEM6OkF0dGFjaG1lbnQmJik7CisgICAgdm9p
ZCBjcmVhdGVDb25uZWN0aW9uVGVzdGVyQW5kU2VuZEFzeW5jTWVzc2FnZXMoSVBDOjpDb25uZWN0
aW9uJiwgSVBDQ29ubmVjdGlvblRlc3RlcklkZW50aWZpZXIsIElQQzo6QXR0YWNobWVudCYmLCB1
aW50MzJfdCBtZXNzYWdlQ291bnQpOworICAgIHZvaWQgcmVsZWFzZUNvbm5lY3Rpb25UZXN0ZXIo
SVBDQ29ubmVjdGlvblRlc3RlcklkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
Jik7CiAgICAgdm9pZCBzZW5kU2FtZVNlbWFwaG9yZUJhY2soSVBDOjpDb25uZWN0aW9uJiwgSVBD
OjpTZW1hcGhvcmUmJik7CiAgICAgdm9pZCBzZW5kU2VtYXBob3JlQmFja0FuZFNpZ25hbFByb3Rv
Y29sKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6U2VtYXBob3JlJiYpOwogCkBAIC03OSw2ICs4NCw5
IEBAIHByaXZhdGU6CiAKICAgICB1c2luZyBTdHJlYW1UZXN0ZXJNYXAgPSBIYXNoTWFwPElQQ1N0
cmVhbVRlc3RlcklkZW50aWZpZXIsIElQQzo6U2NvcGVkQWN0aXZlTWVzc2FnZVJlY2VpdmVRdWV1
ZTxJUENTdHJlYW1UZXN0ZXI+PjsKICAgICBTdHJlYW1UZXN0ZXJNYXAgbV9zdHJlYW1UZXN0ZXJz
OworCisgICAgdXNpbmcgQ29ubmVjdGlvblRlc3Rlck1hcCA9IEhhc2hNYXA8SVBDQ29ubmVjdGlv
blRlc3RlcklkZW50aWZpZXIsIElQQzo6U2NvcGVkQWN0aXZlTWVzc2FnZVJlY2VpdmVRdWV1ZTxJ
UENDb25uZWN0aW9uVGVzdGVyPj47CisgICAgQ29ubmVjdGlvblRlc3Rlck1hcCBtX2Nvbm5lY3Rp
b25UZXN0ZXJzOwogfTsKIAogI2Vsc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L0lQQ1Rlc3Rlci5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0lQQ1Rlc3Rlci5t
ZXNzYWdlcy5pbgppbmRleCA3YTgyYTAwNmIyOTBiNWI3ZGRjYjAwYWI3OTNiODA2Y2I4ODI3M2Zk
Li4zZWU4ZWE0ZmVhMmFjMDU4ZmI3ZTI1ZWI0MWFhOWFiMzYzZGI3YzU1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1NoYXJlZC9JUENUZXN0ZXIubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dl
YktpdC9TaGFyZWQvSVBDVGVzdGVyLm1lc3NhZ2VzLmluCkBAIC0yNyw2ICsyNyw5IEBAIG1lc3Nh
Z2VzIC0+IElQQ1Rlc3RlciBOb3RSZWZDb3VudGVkIHsKICAgICBTdG9wTWVzc2FnZVRlc3Rpbmco
KSAtPiAoKSBTeW5jaHJvbm91cwogICAgIENyZWF0ZVN0cmVhbVRlc3RlcihXZWJLaXQ6OklQQ1N0
cmVhbVRlc3RlcklkZW50aWZpZXIgaWRlbnRpZmllciwgSVBDOjpTdHJlYW1Db25uZWN0aW9uQnVm
ZmVyIHN0cmVhbSkgV2FudHNDb25uZWN0aW9uCiAgICAgUmVsZWFzZVN0cmVhbVRlc3RlcihXZWJL
aXQ6OklQQ1N0cmVhbVRlc3RlcklkZW50aWZpZXIgaWRlbnRpZmllcikgLT4gKCkgU3luY2hyb25v
dXMKKyAgICBDcmVhdGVDb25uZWN0aW9uVGVzdGVyKFdlYktpdDo6SVBDQ29ubmVjdGlvblRlc3Rl
cklkZW50aWZpZXIgaWRlxZNudGlmaWVyLCBJUEM6OkF0dGFjaG1lbnQgY29ubmVjdGlvbikgV2Fu
dHNDb25uZWN0aW9uCisgICAgQ3JlYXRlQ29ubmVjdGlvblRlc3RlckFuZFNlbmRBc3luY01lc3Nh
Z2VzKFdlYktpdDo6SVBDQ29ubmVjdGlvblRlc3RlcklkZW50aWZpZXIgaWRlbnRpZmllciwgSVBD
OjpBdHRhY2htZW50IGNvbm5lY3Rpb24sIHVpbnQzMl90IG1lc3NhZ2VDb3VudCkgV2FudHNDb25u
ZWN0aW9uCisgICAgUmVsZWFzZUNvbm5lY3Rpb25UZXN0ZXIoV2ViS2l0OjpJUENDb25uZWN0aW9u
VGVzdGVySWRlbnRpZmllciBpZGVudGlmaWVyKSAtPiAoKSBTeW5jaHJvbm91cwogCiAgICAgU2Vu
ZFNhbWVTZW1hcGhvcmVCYWNrKElQQzo6U2VtYXBob3JlIHNlbWFwaG9yZSkgV2FudHNDb25uZWN0
aW9uCiAgICAgU2VuZFNlbWFwaG9yZUJhY2tBbmRTaWduYWxQcm90b2NvbChJUEM6OlNlbWFwaG9y
ZSBzZW1hcGhvcmUpIFdhbnRzQ29ubmVjdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9T
b3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQKaW5kZXggNTNiYjgxOGYwYTI1
YjcyYzY5MzliNzI1MmU5MzYyNDc1MzU0NjlmNy4uZWEwYzA2NjMzYTQ2NzI2ZDY2ZmI3NDEyMTk2
ZjM0MTBhODM5MjQ5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0CkBAIC0yMjcsNiArMjI3LDcgQEAgU2hhcmVkL0Vk
aXRvclN0YXRlLmNwcAogU2hhcmVkL0ZvbnRJbmZvLmNwcAogU2hhcmVkL0ZyYW1lSW5mb0RhdGEu
Y3BwCiBTaGFyZWQvSW5zcGVjdG9yRXh0ZW5zaW9uVHlwZXMuY3BwCitTaGFyZWQvSVBDQ29ubmVj
dGlvblRlc3Rlci5jcHAKIFNoYXJlZC9JUENTdHJlYW1UZXN0ZXIuY3BwCiBTaGFyZWQvSVBDVGVz
dGVyLmNwcAogU2hhcmVkL0xheWVyVHJlZUNvbnRleHQuY3BwCkBAIC04NjgsNiArODY5LDcgQEAg
V2ViUHJvY2Vzcy9XZWJTdG9yYWdlL1dlYlN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlci5jcHAKIAog
V2ViUHJvY2Vzcy9YUi9QbGF0Zm9ybVhSU3lzdGVtUHJveHkuY3BwCiAKK0lQQ0Nvbm5lY3Rpb25U
ZXN0ZXJNZXNzYWdlUmVjZWl2ZXIuY3BwCiBJUENTdHJlYW1UZXN0ZXJNZXNzYWdlUmVjZWl2ZXIu
Y3BwCiBJUENTdHJlYW1UZXN0ZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKIElQQ1Rlc3Rlck1l
c3NhZ2VSZWNlaXZlci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCmluZGV4IGNjNzhiYjAwNmU4NDU2ZDU4MDI0OTIzNjE4NjkwOGNmOTQ0Yzcw
MDUuLmEwMzM3ZGI1ODdlMGM5ZjgzMGRkNDdmODQwYTdlZGU2YTM4ODY0N2IgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291
cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTM1MSw2ICsx
MzUxLDggQEAKIAkJN0I3MzEyNDEyNUNDODUyNTAwM0IyNzk2IC8qIFN0cmVhbVNlcnZlckNvbm5l
Y3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdC
NzMxMjM4MjVDQzg1MjQwMDNCMjc5NiAvKiBTdHJlYW1TZXJ2ZXJDb25uZWN0aW9uLmggKi87IH07
CiAJCTdCNzMxMjQyMjVDQzg1MjUwMDNCMjc5NiAvKiBTdHJlYW1Db25uZWN0aW9uRW5jb2Rlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0I3MzEyMzky
NUNDODUyNTAwM0IyNzk2IC8qIFN0cmVhbUNvbm5lY3Rpb25FbmNvZGVyLmggKi87IH07CiAJCTdC
QUIxMTEwMjVERDAyQjMwMDhGQzQ3OSAvKiBTY29wZWRBY3RpdmVNZXNzYWdlUmVjZWl2ZVF1ZXVl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QkFCMTEw
RjI1REQwMkIyMDA4RkM0NzkgLyogU2NvcGVkQWN0aXZlTWVzc2FnZVJlY2VpdmVRdWV1ZS5oICov
OyB9OworCQk3QkJBNjNERjI4MEU5M0QyMDBCMDQ4MjMgLyogSVBDQ29ubmVjdGlvblRlc3Rlcklk
ZW50aWZpZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDdCQkE2M0RDMjgwRTkzQjUwMEIwNDgyMyAvKiBJUENDb25uZWN0aW9uVGVzdGVySWRlbnRpZmll
ci5oICovOyB9OworCQk3QkJBNjNFMDI4MEU5M0Q2MDBCMDQ4MjMgLyogSVBDQ29ubmVjdGlvblRl
c3Rlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0JC
QTYzREUyODBFOTNCNjAwQjA0ODIzIC8qIElQQ0Nvbm5lY3Rpb25UZXN0ZXIuaCAqLzsgfTsKIAkJ
N0JDRjcwREUyNjE1RDA2RTAwRTRGQjcwIC8qIFNjb3BlZFJlbmRlcmluZ1Jlc291cmNlc1JlcXVl
c3RDb2NvYS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDdCQ0Y3MENCMjYxNDkzNUUwMEU0RkI3MCAvKiBTY29wZWRSZW5kZXJpbmdSZXNvdXJjZXNSZXF1
ZXN0Q29jb2EubW0gKi87IH07CiAJCTdCRTM3RjkzMjdDN0NBNTEwMDdBNkNEMyAvKiBJUENTdHJl
YW1UZXN0ZXJJZGVudGlmaWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3QkUzN0Y5MjI3QzdDNTE4MDA3QTZDRDMgLyogSVBDU3RyZWFtVGVzdGVySWRl
bnRpZmllci5oICovOyB9OwogCQk3QkU5MzI2MzI3RjVDNzVBMDBENUZFRkIgLyogUmVjZWl2ZXJN
YXRjaGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
QkU5MzI2MjI3RjVDNzVBMDBENUZFRkIgLyogUmVjZWl2ZXJNYXRjaGVyLmggKi87IH07CkBAIC01
NTM1LDYgKzU1MzcsOSBAQAogCQk3QjkwNDE2QTI1NEFGRUE3MDA2RUVCOEMgLyogUmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0I5MDQxNkQyNTUwMTA4QzAwNkVFQjhD
IC8qIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMRnVuY3Rpb25zR2VuZXJhdGVkLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMRnVuY3Rpb25zR2VuZXJhdGVkLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdCQUIxMTBGMjVERDAyQjIwMDhGQzQ3OSAvKiBTY29w
ZWRBY3RpdmVNZXNzYWdlUmVjZWl2ZVF1ZXVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFNjb3BlZEFjdGl2ZU1lc3NhZ2VSZWNlaXZlUXVldWUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJN0JCQTYzREMyODBFOTNCNTAwQjA0ODIzIC8qIElQQ0Nvbm5lY3Rpb25U
ZXN0ZXJJZGVudGlmaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElQQ0Nvbm5lY3Rpb25UZXN0ZXJJZGVu
dGlmaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdCQkE2M0REMjgwRTkzQjYw
MEIwNDgyMyAvKiBJUENDb25uZWN0aW9uVGVzdGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElQ
Q0Nvbm5lY3Rpb25UZXN0ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QkJB
NjNERTI4MEU5M0I2MDBCMDQ4MjMgLyogSVBDQ29ubmVjdGlvblRlc3Rlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBJUENDb25uZWN0aW9uVGVzdGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTdCQ0Y3MENBMjYxNDkzNUUwMEU0RkI3MCAvKiBTY29wZWRSZW5kZXJpbmdSZXNvdXJjZXNSZXF1
ZXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjb3BlZFJlbmRlcmluZ1Jlc291cmNlc1JlcXVl
c3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QkNGNzBDQjI2MTQ5MzVFMDBF
NEZCNzAgLyogU2NvcGVkUmVuZGVyaW5nUmVzb3VyY2VzUmVxdWVzdENvY29hLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gU2NvcGVkUmVuZGVyaW5nUmVzb3VyY2VzUmVxdWVzdENvY29hLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QkNGNzBDQzI2MTQ5MzVGMDBFNEZCNzAgLyog
U2NvcGVkV2ViR0xSZW5kZXJpbmdSZXNvdXJjZXNSZXF1ZXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFNjb3BlZFdlYkdMUmVuZGVyaW5nUmVzb3VyY2VzUmVxdWVzdC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC03OTM5LDYgKzc5NDQsOSBAQAogCQkJCUJDQ0Y2QjIzMTJDOTNF
N0EwMDhGOUMzNSAvKiBJbWFnZU9wdGlvbnMuaCAqLywKIAkJCQk5OTlCN0VEODI1NTBFNEE4MDBG
NDUwQTQgLyogSW5zcGVjdG9yRXh0ZW5zaW9uVHlwZXMuY3BwICovLAogCQkJCTk5QkUzQjE2MjU0
MzNCOTQwMEM2NTUxQyAvKiBJbnNwZWN0b3JFeHRlbnNpb25UeXBlcy5oICovLAorCQkJCTdCQkE2
M0REMjgwRTkzQjYwMEIwNDgyMyAvKiBJUENDb25uZWN0aW9uVGVzdGVyLmNwcCAqLywKKwkJCQk3
QkJBNjNERTI4MEU5M0I2MDBCMDQ4MjMgLyogSVBDQ29ubmVjdGlvblRlc3Rlci5oICovLAorCQkJ
CTdCQkE2M0RDMjgwRTkzQjUwMEIwNDgyMyAvKiBJUENDb25uZWN0aW9uVGVzdGVySWRlbnRpZmll
ci5oICovLAogCQkJCTdCRTM3Rjk1MjdDN0NEOTAwMDdBNkNEMyAvKiBJUENTdHJlYW1UZXN0ZXIu
Y3BwICovLAogCQkJCTdCRTM3Rjk0MjdDN0NENTEwMDdBNkNEMyAvKiBJUENTdHJlYW1UZXN0ZXIu
aCAqLywKIAkJCQk3QkUzN0Y5MjI3QzdDNTE4MDA3QTZDRDMgLyogSVBDU3RyZWFtVGVzdGVySWRl
bnRpZmllci5oICovLApAQCAtMTQzMzcsNiArMTQzNDUsOCBAQAogCQkJCTUxRTkwNDlDMjdCQ0I5
RDQwMDkyOUU3RSAvKiBJbnN0YWxsQ29vcmRpbmF0aW9uU1BJLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlDNUJDRTVERjFDNTA3NjZBMDBDREUzRkEgLyogSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9z
aXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTJENEQyQzgxMURGNjBCRjMwMDJFQjEwQyAvKiBJ
bnRlcmFjdGlvbkluZm9ybWF0aW9uUmVxdWVzdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJN0JCQTYz
RTAyODBFOTNENjAwQjA0ODIzIC8qIElQQ0Nvbm5lY3Rpb25UZXN0ZXIuaCBpbiBIZWFkZXJzICov
LAorCQkJCTdCQkE2M0RGMjgwRTkzRDIwMEIwNDgyMyAvKiBJUENDb25uZWN0aW9uVGVzdGVySWRl
bnRpZmllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTMxRjYwQTQyNUNDN0RCOTAwQUYxNEY0IC8q
IElQQ1NlbWFwaG9yZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0JFMzdGOTMyN0M3Q0E1MTAwN0E2
Q0QzIC8qIElQQ1N0cmVhbVRlc3RlcklkZW50aWZpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTlC
NDc5MDhGMjUzMTUxQ0MwMEVDMTFBQiAvKiBKU0lQQ0JpbmRpbmcuaCBpbiBIZWFkZXJzICovLApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvSVBDVGVzdGluZ0FQ
SS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9JUENUZXN0aW5nQVBJLmNw
cAppbmRleCAzMjg5YzA0ZWYwNjc0NzdiMzc2ZjFkNDBkYjAwMmZkMzU5ZGJmYjAwLi43MjJmY2Uy
NGQ1OWEwY2RlODFjY2QxMmE2ZjAzZmMzMTEwMDdlM2U2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9JUENUZXN0aW5nQVBJLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9JUENUZXN0aW5nQVBJLmNwcApAQCAtNjEsNiArNjEsOCBA
QCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogbmFtZXNwYWNlIElQQ1Rlc3RpbmdBUEkgewogCitjbGFz
cyBKU0lQQzsKKwogc3RhdGljIGNvbnN0ZXhwciBhdXRvIHByb2Nlc3NUYXJnZXROYW1lVUkgPSAi
VUkiX3M7CiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogc3RhdGljIGNvbnN0ZXhwciBhdXRvIHBy
b2Nlc3NUYXJnZXROYW1lR1BVID0gIkdQVSJfczsKQEAgLTcwLDcgKzcyLDcgQEAgc3RhdGljIGNv
bnN0ZXhwciBhdXRvIHByb2Nlc3NUYXJnZXROYW1lTmV0d29ya2luZyA9ICJOZXR3b3JraW5nIl9z
Owogc3RhdGljIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IGRlc3RpbmF0aW9uSURGcm9tQXJndW1l
bnQoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTVmFsdWVSZWYsIEpTVmFsdWVSZWYqKTsKIHN0YXRp
YyBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBtZXNzYWdlSURGcm9tQXJndW1lbnQoSlNDOjpKU0ds
b2JhbE9iamVjdCosIEpTVmFsdWVSZWYsIEpTVmFsdWVSZWYqKTsKIHN0YXRpYyBKU0M6OkpTT2Jq
ZWN0KiBqc1Jlc3VsdEZyb21SZXBseURlY29kZXIoSlNDOjpKU0dsb2JhbE9iamVjdCosIElQQzo6
TWVzc2FnZU5hbWUsIElQQzo6RGVjb2RlciYpOwotc3RhdGljIGJvb2wgZW5jb2RlQXJndW1lbnQo
SVBDOjpFbmNvZGVyJiwgSlNJUEMmLCBKU0NvbnRleHRSZWYsIEpTVmFsdWVSZWYsIEpTVmFsdWVS
ZWYqIGV4Y2VwdGlvbik7CitzdGF0aWMgYm9vbCBlbmNvZGVBcmd1bWVudChJUEM6OkVuY29kZXIm
LCBKU0NvbnRleHRSZWYsIEpTVmFsdWVSZWYsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CiAKIGNs
YXNzIEpTSVBDU2VtYXBob3JlIDogcHVibGljIFJlZkNvdW50ZWQ8SlNJUENTZW1hcGhvcmU+IHsK
IHB1YmxpYzoKQEAgLTEwNiw2ICsxMDgsNzEgQEAgcHJpdmF0ZToKICAgICBJUEM6OlNlbWFwaG9y
ZSBtX3NlbWFwaG9yZTsKIH07CiAKK2NsYXNzIEpTSVBDQXR0YWNobWVudCA6IHB1YmxpYyBSZWZD
b3VudGVkPEpTSVBDQXR0YWNobWVudD4geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8SlNJUENB
dHRhY2htZW50PiBjcmVhdGUoSVBDOjpBdHRhY2htZW50JiYgYXR0YWNobWVudCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEpTSVBDQXR0YWNobWVudChXVEZNb3ZlKGF0dGFj
aG1lbnQpKSk7CisgICAgfQorCisgICAgSlNPYmplY3RSZWYgY3JlYXRlSlNXcmFwcGVyKEpTQ29u
dGV4dFJlZik7CisgICAgc3RhdGljIEpTSVBDQXR0YWNobWVudCogdG9XcmFwcGVkKEpTQ29udGV4
dFJlZiwgSlNWYWx1ZVJlZik7CisKKyAgICB2b2lkIGVuY29kZShJUEM6OkVuY29kZXImIGVuY29k
ZXIpIGNvbnN0IHsgbV9hdHRhY2htZW50LmVuY29kZShlbmNvZGVyKTsgfQorCitwcml2YXRlOgor
ICAgIEpTSVBDQXR0YWNobWVudChJUEM6OkF0dGFjaG1lbnQmJiBhdHRhY2htZW50KQorICAgICAg
ICA6IG1fYXR0YWNobWVudChXVEZNb3ZlKGF0dGFjaG1lbnQpKQorICAgIHsgfQorCisgICAgc3Rh
dGljIEpTQ2xhc3NSZWYgd3JhcHBlckNsYXNzKCk7CisgICAgc3RhdGljIEpTSVBDQXR0YWNobWVu
dCogdW53cmFwKEpTT2JqZWN0UmVmKTsKKyAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplKEpTQ29u
dGV4dFJlZiwgSlNPYmplY3RSZWYpOworICAgIHN0YXRpYyB2b2lkIGZpbmFsaXplKEpTT2JqZWN0
UmVmKTsKKworICAgIHN0YXRpYyBjb25zdCBKU1N0YXRpY0Z1bmN0aW9uKiBzdGF0aWNGdW5jdGlv
bnMoKTsKKworICAgIElQQzo6QXR0YWNobWVudCBtX2F0dGFjaG1lbnQ7Cit9OworCitjbGFzcyBK
U0lQQ0Nvbm5lY3Rpb24gOiBwdWJsaWMgUmVmQ291bnRlZDxKU0lQQ0Nvbm5lY3Rpb24+LCBwcml2
YXRlIElQQzo6Q29ubmVjdGlvbjo6Q2xpZW50IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPEpT
SVBDQ29ubmVjdGlvbj4gY3JlYXRlKElQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllciYmIHRlc3Rl
ZENvbm5lY3Rpb25JZGVudGlmaWVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgSlNJUENDb25uZWN0aW9uKFdURk1vdmUodGVzdGVkQ29ubmVjdGlvbklkZW50aWZpZXIpKSk7
CisgICAgfQorCisgICAgSlNPYmplY3RSZWYgY3JlYXRlSlNXcmFwcGVyKEpTQ29udGV4dFJlZik7
CisgICAgc3RhdGljIEpTSVBDQ29ubmVjdGlvbiogdG9XcmFwcGVkKEpTQ29udGV4dFJlZiwgSlNW
YWx1ZVJlZik7CisKK3ByaXZhdGU6CisgICAgSlNJUENDb25uZWN0aW9uKElQQzo6Q29ubmVjdGlv
bjo6SWRlbnRpZmllciYmIHRlc3RlZENvbm5lY3Rpb25JZGVudGlmaWVyKQorICAgICAgICA6IG1f
dGVzdGVkQ29ubmVjdGlvbiB7IElQQzo6Q29ubmVjdGlvbjo6Y3JlYXRlU2VydmVyQ29ubmVjdGlv
bih0ZXN0ZWRDb25uZWN0aW9uSWRlbnRpZmllciwgKnRoaXMpIH0KKyAgICB7CisgICAgfQorCisg
ICAgLy8gSVBDOjpDb25uZWN0aW9uOjpDbGllbnQgb3ZlcnJpZGVzLgorICAgIHZvaWQgZGlkUmVj
ZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgZmluYWw7CisgICAg
Ym9vbCBkaWRSZWNlaXZlU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVy
JiwgVW5pcXVlUmVmPElQQzo6RW5jb2Rlcj4mKSBmaW5hbDsKKyAgICB2b2lkIGRpZENsb3NlKElQ
Qzo6Q29ubmVjdGlvbiYpIGZpbmFsOworICAgIHZvaWQgZGlkUmVjZWl2ZUludmFsaWRNZXNzYWdl
KElQQzo6Q29ubmVjdGlvbiYsIElQQzo6TWVzc2FnZU5hbWUpIGZpbmFsOworCisgICAgc3RhdGlj
IEpTQ2xhc3NSZWYgd3JhcHBlckNsYXNzKCk7CisgICAgc3RhdGljIEpTSVBDQ29ubmVjdGlvbiog
dW53cmFwKEpTT2JqZWN0UmVmKTsKKyAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplKEpTQ29udGV4
dFJlZiwgSlNPYmplY3RSZWYpOworICAgIHN0YXRpYyB2b2lkIGZpbmFsaXplKEpTT2JqZWN0UmVm
KTsKKworCisgICAgc3RhdGljIGNvbnN0IEpTU3RhdGljRnVuY3Rpb24qIHN0YXRpY0Z1bmN0aW9u
cygpOworICAgIHN0YXRpYyBKU1ZhbHVlUmVmIG9wZW4oSlNDb250ZXh0UmVmLCBKU09iamVjdFJl
ZiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpT
VmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CisgICAgc3RhdGlj
IEpTVmFsdWVSZWYgaW52YWxpZGF0ZShKU0NvbnRleHRSZWYsIEpTT2JqZWN0UmVmLCBKU09iamVj
dFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBh
cmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKTsKKyAgICBzdGF0aWMgSlNWYWx1ZVJl
ZiBzZW5kTWVzc2FnZShKU0NvbnRleHRSZWYsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJlZiB0aGlz
T2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNb
XSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKTsKKyAgICBzdGF0aWMgSlNWYWx1ZVJlZiBzZW5kU3lu
Y01lc3NhZ2UoSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiwgSlNPYmplY3RSZWYgdGhpc09iamVj
dCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpT
VmFsdWVSZWYqIGV4Y2VwdGlvbik7CisgICAgc3RhdGljIEpTVmFsdWVSZWYgd2FpdEZvck1lc3Nh
Z2UoSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6
ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVS
ZWYqIGV4Y2VwdGlvbik7CisKKyAgICBSZWY8SVBDOjpDb25uZWN0aW9uPiBtX3Rlc3RlZENvbm5l
Y3Rpb247Cit9OworCiBjbGFzcyBKU0lQQ1N0cmVhbUNsaWVudENvbm5lY3Rpb24gOiBwdWJsaWMg
UmVmQ291bnRlZDxKU0lQQ1N0cmVhbUNsaWVudENvbm5lY3Rpb24+LCBwdWJsaWMgQ2FuTWFrZVdl
YWtQdHI8SlNJUENTdHJlYW1DbGllbnRDb25uZWN0aW9uPiB7CiBwdWJsaWM6CiAgICAgc3RhdGlj
IFJlZjxKU0lQQ1N0cmVhbUNsaWVudENvbm5lY3Rpb24+IGNyZWF0ZShKU0lQQyYganNJUEMsIElQ
Qzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgc2l6ZV90IGJ1ZmZlclNpemUpCkBAIC0yMjAsOCAr
Mjg3LDYgQEAgcHJpdmF0ZToKICAgICBSZWY8U2hhcmVkTWVtb3J5PiBtX3NoYXJlZE1lbW9yeTsK
IH07CiAKLWNsYXNzIEpTSVBDOwotCiBjbGFzcyBKU01lc3NhZ2VMaXN0ZW5lciBmaW5hbCA6IHB1
YmxpYyBJUEM6OkNvbm5lY3Rpb246Ok1lc3NhZ2VPYnNlcnZlciB7CiAgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CiBwdWJsaWM6CkBAIC0yNDYsNyArMzExLDcgQEAgcHVibGljOgogICAgIHsK
ICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSlNJUEMod2ViUGFnZSwgd2ViRnJhbWUpKTsK
ICAgICB9Ci0KKyAgICBzdGF0aWMgSlNJUEMqIHRvV3JhcHBlZChKU0NvbnRleHRSZWYsIEpTVmFs
dWVSZWYpOwogICAgIHN0YXRpYyBKU0NsYXNzUmVmIHdyYXBwZXJDbGFzcygpOwogCiAgICAgV2Vi
RnJhbWUqIHdlYkZyYW1lKCkgeyByZXR1cm4gbV93ZWJGcmFtZS5nZXQoKTsgfQpAQCAtMjU4LDcg
KzMyMyw2IEBAIHByaXZhdGU6CiAgICAgeyB9CiAKICAgICBzdGF0aWMgSlNJUEMqIHVud3JhcChK
U09iamVjdFJlZik7Ci0gICAgc3RhdGljIEpTSVBDKiB0b1dyYXBwZWQoSlNDb250ZXh0UmVmLCBK
U1ZhbHVlUmVmKTsKICAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplKEpTQ29udGV4dFJlZiwgSlNP
YmplY3RSZWYpOwogICAgIHN0YXRpYyB2b2lkIGZpbmFsaXplKEpTT2JqZWN0UmVmKTsKICAgICBz
dGF0aWMgY29uc3QgSlNTdGF0aWNGdW5jdGlvbiogc3RhdGljRnVuY3Rpb25zKCk7CkBAIC0yNzIs
NiArMzM2LDggQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgSlNWYWx1ZVJlZiBzZW5kU3luY01lc3Nh
Z2UoSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6
ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVS
ZWYqIGV4Y2VwdGlvbik7CiAgICAgc3RhdGljIEpTVmFsdWVSZWYgd2FpdEZvck1lc3NhZ2UoSlND
b250ZXh0UmVmLCBKU09iamVjdFJlZiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFy
Z3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4
Y2VwdGlvbik7CiAKKyAgICBzdGF0aWMgSlNWYWx1ZVJlZiBjcmVhdGVDb25uZWN0aW9uUGFpcihK
U0NvbnRleHRSZWYsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3Qg
YXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiog
ZXhjZXB0aW9uKTsKKwogICAgIHN0YXRpYyBKU1ZhbHVlUmVmIGNyZWF0ZVN0cmVhbUNsaWVudENv
bm5lY3Rpb24oSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiwgSlNPYmplY3RSZWYgdGhpc09iamVj
dCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpT
VmFsdWVSZWYqIGV4Y2VwdGlvbik7CiAgICAgc3RhdGljIEpTVmFsdWVSZWYgY3JlYXRlU2VtYXBo
b3JlKEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNp
emVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVl
UmVmKiBleGNlcHRpb24pOwogICAgIHN0YXRpYyBKU1ZhbHVlUmVmIGNyZWF0ZVNoYXJlZE1lbW9y
eShKU0NvbnRleHRSZWYsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXpl
X3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJl
ZiogZXhjZXB0aW9uKTsKQEAgLTI5MiwyNiArMzU4LDMwMyBAQCBwcml2YXRlOgogICAgIFZlY3Rv
cjxVbmlxdWVSZWY8SlNNZXNzYWdlTGlzdGVuZXI+PiBtX21lc3NhZ2VMaXN0ZW5lcnM7CiB9Owog
Ci1zdGF0aWMgSlNWYWx1ZVJlZiBjcmVhdGVUeXBlRXJyb3IoSlNDb250ZXh0UmVmIGNvbnRleHQs
IGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3N0YXRpYyBKU1ZhbHVlUmVmIGNyZWF0ZVR5cGVFcnJv
cihKU0NvbnRleHRSZWYgY29udGV4dCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQoreworICAgIEpT
Qzo6SlNMb2NrSG9sZGVyIGxvY2sodG9KUyhjb250ZXh0KS0+dm0oKSk7CisgICAgcmV0dXJuIHRv
UmVmKEpTQzo6Y3JlYXRlVHlwZUVycm9yKHRvSlMoY29udGV4dCksIG1lc3NhZ2UpKTsKK30KKwor
c3RhdGljIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IGNvbnZlcnRUb1VpbnQ2NChKU0M6OkpTVmFs
dWUganNWYWx1ZSkKK3sKKyAgICBpZiAoanNWYWx1ZS5pc051bWJlcigpKSB7CisgICAgICAgIGRv
dWJsZSB2YWx1ZSA9IGpzVmFsdWUuYXNOdW1iZXIoKTsKKyAgICAgICAgaWYgKHZhbHVlIDwgMCB8
fCB0cnVuYyh2YWx1ZSkgIT0gdmFsdWUpCisgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OworICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgfQorICAgIGlmIChqc1ZhbHVlLmlzQmlnSW50
KCkpCisgICAgICAgIHJldHVybiBKU0M6OkpTQmlnSW50Ojp0b0JpZ1VJbnQ2NChqc1ZhbHVlKTsK
KyAgICByZXR1cm4gc3RkOjpudWxsb3B0OworfQorCisKK3N0YXRpYyBKU1ZhbHVlUmVmIHNlbmRN
ZXNzYWdlV2l0aEpTQXJndW1lbnRzKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSlNDb250
ZXh0UmVmIGNvbnRleHQsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFy
Z3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgYXV0byogZ2xvYmFsT2Jq
ZWN0ID0gdG9KUyhjb250ZXh0KTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKGdsb2JhbE9i
amVjdC0+dm0oKSk7CisKKyAgICBhdXRvIGRlc3RpbmF0aW9uSUQgPSBkZXN0aW5hdGlvbklERnJv
bUFyZ3VtZW50KGdsb2JhbE9iamVjdCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pOworICAgIGlm
ICghZGVzdGluYXRpb25JRCkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNv
bnRleHQpOworCisgICAgYXV0byBtZXNzYWdlSUQgPSBtZXNzYWdlSURGcm9tQXJndW1lbnQoZ2xv
YmFsT2JqZWN0LCBhcmd1bWVudHNbMV0sIGV4Y2VwdGlvbik7CisgICAgaWYgKCFtZXNzYWdlSUQp
CisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKworICAgIGF1
dG8gbWVzc2FnZU5hbWUgPSBzdGF0aWNfY2FzdDxJUEM6Ok1lc3NhZ2VOYW1lPigqbWVzc2FnZUlE
KTsKKyAgICBhdXRvIGVuY29kZXIgPSBtYWtlVW5pcXVlUmVmPElQQzo6RW5jb2Rlcj4obWVzc2Fn
ZU5hbWUsICpkZXN0aW5hdGlvbklEKTsKKworICAgIEpTVmFsdWVSZWYgcmV0dXJuVmFsdWUgPSBK
U1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKworICAgIGJvb2wgaGFzUmVwbHkgPSAhIW1l
c3NhZ2VSZXBseUFyZ3VtZW50RGVzY3JpcHRpb25zKG1lc3NhZ2VOYW1lKTsKKyAgICBpZiAoaGFz
UmVwbHkpIHsKKyAgICAgICAgdWludDY0X3QgbGlzdGVuZXJJRCA9IElQQzo6bmV4dEFzeW5jUmVw
bHlIYW5kbGVySUQoKTsKKyAgICAgICAgZW5jb2Rlci5nZXQoKSA8PCBsaXN0ZW5lcklEOworCisg
ICAgICAgIEpTT2JqZWN0UmVmIHJlc29sdmU7CisgICAgICAgIEpTT2JqZWN0UmVmIHJlamVjdDsK
K0FMTE9XX05FV19BUElfV0lUSE9VVF9HVUFSRFNfQkVHSU4KKyAgICAgICAgcmV0dXJuVmFsdWUg
PSBKU09iamVjdE1ha2VEZWZlcnJlZFByb21pc2UoY29udGV4dCwgJnJlc29sdmUsICZyZWplY3Qs
IGV4Y2VwdGlvbik7IC8vIE5PTElOVAorQUxMT1dfTkVXX0FQSV9XSVRIT1VUX0dVQVJEU19FTkQK
KyAgICAgICAgaWYgKCFyZXR1cm5WYWx1ZSkgIC8vIE5PTElOVAorICAgICAgICAgICAgcmV0dXJu
IEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworCisgICAgICAgIEpTR2xvYmFsQ29udGV4
dFJldGFpbihKU0NvbnRleHRHZXRHbG9iYWxDb250ZXh0KGNvbnRleHQpKTsKKyAgICAgICAgSlNW
YWx1ZVByb3RlY3QoY29udGV4dCwgcmVzb2x2ZSk7CisgICAgICAgIEpTVmFsdWVQcm90ZWN0KGNv
bnRleHQsIHJlamVjdCk7CisgICAgICAgIElQQzo6YWRkQXN5bmNSZXBseUhhbmRsZXIoY29ubmVj
dGlvbiwgbGlzdGVuZXJJRCwgW21lc3NhZ2VOYW1lLCBjb250ZXh0LCByZXNvbHZlLCByZWplY3Rd
KElQQzo6RGVjb2RlciogcmVwbHlEZWNvZGVyKSB7CisgICAgICAgICAgICBhdXRvKiBnbG9iYWxP
YmplY3QgPSB0b0pTKGNvbnRleHQpOworICAgICAgICAgICAgYXV0byYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CisgICAgICAgICAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKworICAg
ICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworICAgICAgICAg
ICAgYXV0byoganNSZXN1bHQgPSBqc1Jlc3VsdEZyb21SZXBseURlY29kZXIoZ2xvYmFsT2JqZWN0
LCBtZXNzYWdlTmFtZSwgKnJlcGx5RGVjb2Rlcik7CisgICAgICAgICAgICBpZiAoYXV0byogZXhj
ZXB0aW9uID0gc2NvcGUuZXhjZXB0aW9uKCkpIHsKKyAgICAgICAgICAgICAgICBzY29wZS5jbGVh
ckV4Y2VwdGlvbigpOworICAgICAgICAgICAgICAgIEpTVmFsdWVSZWYgYXJndW1lbnRzW10gPSB7
IHRvUmVmKGdsb2JhbE9iamVjdCwgZXhjZXB0aW9uKSB9OworICAgICAgICAgICAgICAgIEpTT2Jq
ZWN0Q2FsbEFzRnVuY3Rpb24oY29udGV4dCwgcmVqZWN0LCByZWplY3QsIDEsIGFyZ3VtZW50cywg
bnVsbHB0cik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEpTVmFsdWVS
ZWYgYXJndW1lbnRzW10gPSB7IHRvUmVmKGdsb2JhbE9iamVjdCwganNSZXN1bHQpIH07CisgICAg
ICAgICAgICAgICAgSlNPYmplY3RDYWxsQXNGdW5jdGlvbihjb250ZXh0LCByZXNvbHZlLCByZXNv
bHZlLCAxLCBhcmd1bWVudHMsIG51bGxwdHIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBKU1ZhbHVlVW5wcm90ZWN0KGNvbnRleHQsIHJlamVjdCk7CisgICAgICAgICAgICBKU1ZhbHVl
VW5wcm90ZWN0KGNvbnRleHQsIHJlc29sdmUpOworICAgICAgICAgICAgSlNHbG9iYWxDb250ZXh0
UmVsZWFzZShKU0NvbnRleHRHZXRHbG9iYWxDb250ZXh0KGNvbnRleHQpKTsKKyAgICAgICAgfSk7
CisgICAgfQorCisgICAgaWYgKGFyZ3VtZW50Q291bnQgPiAyKSB7CisgICAgICAgIGlmICghZW5j
b2RlQXJndW1lbnQoZW5jb2Rlci5nZXQoKSwgY29udGV4dCwgYXJndW1lbnRzWzJdLCBleGNlcHRp
b24pKQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwor
ICAgIH0KKworICAgIC8vIEZJWE1FOiBBZGQgdGhlIHN1cHBvcnQgZm9yIHNwZWNpZnlpbmcgSVBD
IG9wdGlvbnMuCisKKyAgICBjb25uZWN0aW9uLnNlbmRNZXNzYWdlKFdURk1vdmUoZW5jb2Rlciks
IHsgfSk7CisgICAgcmV0dXJuIHJldHVyblZhbHVlOworfQorCituYW1lc3BhY2UgeworCitzdHJ1
Y3QgU3luY0lQQ01lc3NhZ2VJbmZvIHsKKyAgICB1aW50NjRfdCBkZXN0aW5hdGlvbklEOworICAg
IElQQzo6TWVzc2FnZU5hbWUgbWVzc2FnZU5hbWU7CisgICAgSVBDOjpUaW1lb3V0IHRpbWVvdXQ7
Cit9OworCit9CisKK3N0YXRpYyBzdGQ6Om9wdGlvbmFsPFN5bmNJUENNZXNzYWdlSW5mbz4gZXh0
cmFjdFN5bmNJUENNZXNzYWdlSW5mbyhKU0NvbnRleHRSZWYgY29udGV4dCwgc2l6ZV90IGFyZ3Vt
ZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2Vw
dGlvbikKK3sKKyAgICBBU1NFUlQoYXJndW1lbnRDb3VudCA+PSAyKTsKKyAgICBhdXRvKiBnbG9i
YWxPYmplY3QgPSB0b0pTKGNvbnRleHQpOworICAgIGF1dG8gZGVzdGluYXRpb25JRCA9IGRlc3Rp
bmF0aW9uSURGcm9tQXJndW1lbnQoZ2xvYmFsT2JqZWN0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlv
bik7CisgICAgaWYgKCFkZXN0aW5hdGlvbklEKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OworCisgICAgYXV0byBtZXNzYWdlSUQgPSBtZXNzYWdlSURGcm9tQXJndW1lbnQoZ2xvYmFsT2Jq
ZWN0LCBhcmd1bWVudHNbMV0sIGV4Y2VwdGlvbik7CisgICAgaWYgKCFtZXNzYWdlSUQpCisgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBTZWNvbmRzIHRpbWVvdXREdXJhdGlvbjsK
KyAgICB7CisgICAgICAgIGF1dG8ganNWYWx1ZSA9IHRvSlMoZ2xvYmFsT2JqZWN0LCBhcmd1bWVu
dHNbMl0pOworICAgICAgICBpZiAoIWpzVmFsdWUuaXNOdW1iZXIoKSkgeworICAgICAgICAgICAg
KmV4Y2VwdGlvbiA9IGNyZWF0ZVR5cGVFcnJvcihjb250ZXh0LCAiVGltZW91dCBtdXN0IGJlIGEg
bnVtYmVyIl9zKTsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgIH0K
KyAgICAgICAgdGltZW91dER1cmF0aW9uID0gU2Vjb25kcyB7IGpzVmFsdWUuYXNOdW1iZXIoKSB9
OworICAgIH0KKworICAgIHJldHVybiB7IHsgKmRlc3RpbmF0aW9uSUQsIHN0YXRpY19jYXN0PElQ
Qzo6TWVzc2FnZU5hbWU+KCptZXNzYWdlSUQpLCB7IHRpbWVvdXREdXJhdGlvbiB9IH0gfTsKK30K
Kworc3RhdGljIEpTVmFsdWVSZWYgc2VuZFN5bmNNZXNzYWdlV2l0aEpTQXJndW1lbnRzKElQQzo6
Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSlNDb250ZXh0UmVmIGNvbnRleHQsIHNpemVfdCBhcmd1
bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNl
cHRpb24pCit7CisgICAgYXV0byogZ2xvYmFsT2JqZWN0ID0gdG9KUyhjb250ZXh0KTsKKyAgICBK
U0M6OkpTTG9ja0hvbGRlciBsb2NrKGdsb2JhbE9iamVjdC0+dm0oKSk7CisgICAgYXV0byBpbmZv
ID0gZXh0cmFjdFN5bmNJUENNZXNzYWdlSW5mbyhjb250ZXh0LCBhcmd1bWVudENvdW50LCBhcmd1
bWVudHMsIGV4Y2VwdGlvbik7CisgICAgaWYgKCFpbmZvKQorICAgICAgICByZXR1cm4gSlNWYWx1
ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisKKyAgICBhdXRvIFtkZXN0aW5hdGlvbklELCBtZXNz
YWdlTmFtZSwgdGltZW91dF0gPSAqaW5mbzsKKworICAgIC8vIEZJWE1FOiBTdXBwb3J0IHRoZSBv
cHRpb25zLgorCisgICAgSVBDOjpDb25uZWN0aW9uOjpTeW5jUmVxdWVzdElEIHN5bmNSZXF1ZXN0
SUQ7CisgICAgYXV0byBlbmNvZGVyID0gY29ubmVjdGlvbi5jcmVhdGVTeW5jTWVzc2FnZUVuY29k
ZXIobWVzc2FnZU5hbWUsIGRlc3RpbmF0aW9uSUQsIHN5bmNSZXF1ZXN0SUQpOworCisgICAgaWYg
KGFyZ3VtZW50Q291bnQgPiAzKSB7CisgICAgICAgIGlmICghZW5jb2RlQXJndW1lbnQoZW5jb2Rl
ci5nZXQoKSwgY29udGV4dCwgYXJndW1lbnRzWzNdLCBleGNlcHRpb24pKQorICAgICAgICAgICAg
cmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworICAgIH0KKworICAgIGlmIChh
dXRvIHJlcGx5RGVjb2RlciA9IGNvbm5lY3Rpb24uc2VuZFN5bmNNZXNzYWdlKHN5bmNSZXF1ZXN0
SUQsIFdURk1vdmUoZW5jb2RlciksIHRpbWVvdXQsIHsgfSkpIHsKKyAgICAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUoZ2xvYmFsT2JqZWN0LT52bSgpKTsKKyAgICAgICAgYXV0
byoganNSZXN1bHQgPSBqc1Jlc3VsdEZyb21SZXBseURlY29kZXIoZ2xvYmFsT2JqZWN0LCBtZXNz
YWdlTmFtZSwgKnJlcGx5RGVjb2Rlcik7CisgICAgICAgIGlmIChzY29wZS5leGNlcHRpb24oKSkg
eworICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKGdsb2JhbE9iamVjdCwgc2NvcGUuZXhj
ZXB0aW9uKCkpOworICAgICAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAg
ICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gdG9SZWYoZ2xvYmFsT2JqZWN0LCBqc1Jlc3VsdCk7CisgICAgfQorCisgICAg
cmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCitzdGF0aWMgSlNWYWx1
ZVJlZiB3YWl0Rm9yTWVzc2FnZVdpdGhKU0FyZ3VtZW50cyhJUEM6OkNvbm5lY3Rpb24mIGNvbm5l
Y3Rpb24sIEpTQ29udGV4dFJlZiBjb250ZXh0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3Qg
SlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIGF1
dG8qIGdsb2JhbE9iamVjdCA9IHRvSlMoY29udGV4dCk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIg
bG9jayhnbG9iYWxPYmplY3QtPnZtKCkpOworCisgICAgYXV0byBpbmZvID0gZXh0cmFjdFN5bmNJ
UENNZXNzYWdlSW5mbyhjb250ZXh0LCBhcmd1bWVudENvdW50LCBhcmd1bWVudHMsIGV4Y2VwdGlv
bik7CisgICAgaWYgKCFpbmZvKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQo
Y29udGV4dCk7CisKKyAgICBhdXRvIFtkZXN0aW5hdGlvbklELCBtZXNzYWdlTmFtZSwgdGltZW91
dF0gPSAqaW5mbzsKKyAgICBpZiAoYXV0byBkZWNvZGVyID0gY29ubmVjdGlvbi53YWl0Rm9yTWVz
c2FnZUZvclRlc3RpbmcobWVzc2FnZU5hbWUsIGRlc3RpbmF0aW9uSUQsIHRpbWVvdXQsIHsgfSkp
IHsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUoZ2xvYmFsT2JqZWN0
LT52bSgpKTsKKyAgICAgICAgYXV0byBqc1Jlc3VsdCA9IGpzVmFsdWVGb3JBcmd1bWVudHMoZ2xv
YmFsT2JqZWN0LCBtZXNzYWdlTmFtZSwgKmRlY29kZXIpOworICAgICAgICBpZiAoc2NvcGUuZXhj
ZXB0aW9uKCkpIHsKKyAgICAgICAgICAgICpleGNlcHRpb24gPSB0b1JlZihnbG9iYWxPYmplY3Qs
IHNjb3BlLmV4Y2VwdGlvbigpKTsKKyAgICAgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7
CisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIGpzUmVzdWx0ID8gdG9SZWYoZ2xvYmFsT2JqZWN0LCAqanNS
ZXN1bHQpIDogSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisgICAgfQorICAgIHJldHVy
biBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKworSlNPYmplY3RSZWYgSlNJUENT
ZW1hcGhvcmU6OmNyZWF0ZUpTV3JhcHBlcihKU0NvbnRleHRSZWYgY29udGV4dCkKK3sKKyAgICBh
dXRvKiBnbG9iYWxPYmplY3QgPSB0b0pTKGNvbnRleHQpOworICAgIGF1dG8mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKyAgICBKU09iamVjdFJlZiB3cmFwcGVy
T2JqZWN0ID0gSlNPYmplY3RNYWtlKHRvR2xvYmFsUmVmKGdsb2JhbE9iamVjdCksIHdyYXBwZXJD
bGFzcygpLCB0aGlzKTsKKyAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOworICAgIHJldHVybiB3
cmFwcGVyT2JqZWN0OworfQorCitKU0NsYXNzUmVmIEpTSVBDU2VtYXBob3JlOjp3cmFwcGVyQ2xh
c3MoKQoreworICAgIHN0YXRpYyBKU0NsYXNzUmVmIGpzQ2xhc3M7CisgICAgaWYgKCFqc0NsYXNz
KSB7CisgICAgICAgIEpTQ2xhc3NEZWZpbml0aW9uIGRlZmluaXRpb24gPSBrSlNDbGFzc0RlZmlu
aXRpb25FbXB0eTsKKyAgICAgICAgZGVmaW5pdGlvbi5jbGFzc05hbWUgPSAiU2VtYXBob3JlIjsK
KyAgICAgICAgZGVmaW5pdGlvbi5wYXJlbnRDbGFzcyA9IG51bGxwdHI7CisgICAgICAgIGRlZmlu
aXRpb24uc3RhdGljVmFsdWVzID0gbnVsbHB0cjsKKyAgICAgICAgZGVmaW5pdGlvbi5zdGF0aWNG
dW5jdGlvbnMgPSBzdGF0aWNGdW5jdGlvbnMoKTsKKyAgICAgICAgZGVmaW5pdGlvbi5pbml0aWFs
aXplID0gaW5pdGlhbGl6ZTsKKyAgICAgICAgZGVmaW5pdGlvbi5maW5hbGl6ZSA9IGZpbmFsaXpl
OworICAgICAgICBqc0NsYXNzID0gSlNDbGFzc0NyZWF0ZSgmZGVmaW5pdGlvbik7CisgICAgfQor
ICAgIHJldHVybiBqc0NsYXNzOworfQorCitpbmxpbmUgSlNJUENTZW1hcGhvcmUqIEpTSVBDU2Vt
YXBob3JlOjp1bndyYXAoSlNPYmplY3RSZWYgb2JqZWN0KQoreworICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxKU0lQQ1NlbWFwaG9yZSo+KEpTT2JqZWN0R2V0UHJpdmF0ZShvYmplY3QpKTsKK30KKwor
SlNJUENTZW1hcGhvcmUqIEpTSVBDU2VtYXBob3JlOjp0b1dyYXBwZWQoSlNDb250ZXh0UmVmIGNv
bnRleHQsIEpTVmFsdWVSZWYgdmFsdWUpCit7CisgICAgaWYgKCFjb250ZXh0IHx8ICF2YWx1ZSB8
fCAhSlNWYWx1ZUlzT2JqZWN0T2ZDbGFzcyhjb250ZXh0LCB2YWx1ZSwgd3JhcHBlckNsYXNzKCkp
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gdW53cmFwKEpTVmFsdWVUb09i
amVjdChjb250ZXh0LCB2YWx1ZSwgbnVsbHB0cikpOworfQorCit2b2lkIEpTSVBDU2VtYXBob3Jl
Ojppbml0aWFsaXplKEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYgb2JqZWN0KQoreworICAgIHVu
d3JhcChvYmplY3QpLT5yZWYoKTsKK30KKwordm9pZCBKU0lQQ1NlbWFwaG9yZTo6ZmluYWxpemUo
SlNPYmplY3RSZWYgb2JqZWN0KQoreworICAgIHVud3JhcChvYmplY3QpLT5kZXJlZigpOworfQor
Citjb25zdCBKU1N0YXRpY0Z1bmN0aW9uKiBKU0lQQ1NlbWFwaG9yZTo6c3RhdGljRnVuY3Rpb25z
KCkKK3sKKyAgICBzdGF0aWMgY29uc3QgSlNTdGF0aWNGdW5jdGlvbiBmdW5jdGlvbnNbXSA9IHsK
KyAgICAgICAgeyAic2lnbmFsIiwgc2lnbmFsLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxl
dGUgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IH0sCisgICAgICAgIHsgIndhaXRGb3Ii
LCB3YWl0Rm9yLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfCBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZVJlYWRPbmx5IH0sCisgICAgICAgIHsgMCwgMCwgMCB9CisgICAgfTsKKyAgICByZXR1
cm4gZnVuY3Rpb25zOworfQorCisKK0pTT2JqZWN0UmVmIEpTSVBDQXR0YWNobWVudDo6Y3JlYXRl
SlNXcmFwcGVyKEpTQ29udGV4dFJlZiBjb250ZXh0KQoreworICAgIGF1dG8qIGdsb2JhbE9iamVj
dCA9IHRvSlMoY29udGV4dCk7CisgICAgYXV0byYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Cisg
ICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
Q0FUQ0hfU0NPUEUodm0pOworICAgIEpTT2JqZWN0UmVmIHdyYXBwZXJPYmplY3QgPSBKU09iamVj
dE1ha2UodG9HbG9iYWxSZWYoZ2xvYmFsT2JqZWN0KSwgd3JhcHBlckNsYXNzKCksIHRoaXMpOwor
ICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CisgICAgcmV0dXJuIHdyYXBwZXJPYmplY3Q7Cit9
CisKK0pTQ2xhc3NSZWYgSlNJUENBdHRhY2htZW50Ojp3cmFwcGVyQ2xhc3MoKQoreworICAgIHN0
YXRpYyBKU0NsYXNzUmVmIGpzQ2xhc3M7CisgICAgaWYgKCFqc0NsYXNzKSB7CisgICAgICAgIEpT
Q2xhc3NEZWZpbml0aW9uIGRlZmluaXRpb24gPSBrSlNDbGFzc0RlZmluaXRpb25FbXB0eTsKKyAg
ICAgICAgZGVmaW5pdGlvbi5jbGFzc05hbWUgPSAiQXR0YWNobWVudCI7CisgICAgICAgIGRlZmlu
aXRpb24ucGFyZW50Q2xhc3MgPSBudWxscHRyOworICAgICAgICBkZWZpbml0aW9uLnN0YXRpY1Zh
bHVlcyA9IG51bGxwdHI7CisgICAgICAgIGRlZmluaXRpb24uc3RhdGljRnVuY3Rpb25zID0gc3Rh
dGljRnVuY3Rpb25zKCk7CisgICAgICAgIGRlZmluaXRpb24uaW5pdGlhbGl6ZSA9IGluaXRpYWxp
emU7CisgICAgICAgIGRlZmluaXRpb24uZmluYWxpemUgPSBmaW5hbGl6ZTsKKyAgICAgICAganND
bGFzcyA9IEpTQ2xhc3NDcmVhdGUoJmRlZmluaXRpb24pOworICAgIH0KKyAgICByZXR1cm4ganND
bGFzczsKK30KKworaW5saW5lIEpTSVBDQXR0YWNobWVudCogSlNJUENBdHRhY2htZW50Ojp1bndy
YXAoSlNPYmplY3RSZWYgb2JqZWN0KQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxKU0lQQ0F0
dGFjaG1lbnQqPihKU09iamVjdEdldFByaXZhdGUob2JqZWN0KSk7Cit9CisKK0pTSVBDQXR0YWNo
bWVudCogSlNJUENBdHRhY2htZW50Ojp0b1dyYXBwZWQoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpT
VmFsdWVSZWYgdmFsdWUpCit7CisgICAgaWYgKCFjb250ZXh0IHx8ICF2YWx1ZSB8fCAhSlNWYWx1
ZUlzT2JqZWN0T2ZDbGFzcyhjb250ZXh0LCB2YWx1ZSwgd3JhcHBlckNsYXNzKCkpKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gdW53cmFwKEpTVmFsdWVUb09iamVjdChjb250
ZXh0LCB2YWx1ZSwgbnVsbHB0cikpOworfQorCit2b2lkIEpTSVBDQXR0YWNobWVudDo6aW5pdGlh
bGl6ZShKU0NvbnRleHRSZWYsIEpTT2JqZWN0UmVmIG9iamVjdCkKK3sKKyAgICB1bndyYXAob2Jq
ZWN0KS0+cmVmKCk7Cit9CisKK3ZvaWQgSlNJUENBdHRhY2htZW50OjpmaW5hbGl6ZShKU09iamVj
dFJlZiBvYmplY3QpCiB7Ci0gICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayh0b0pTKGNvbnRleHQp
LT52bSgpKTsKLSAgICByZXR1cm4gdG9SZWYoSlNDOjpjcmVhdGVUeXBlRXJyb3IodG9KUyhjb250
ZXh0KSwgbWVzc2FnZSkpOworICAgIHVud3JhcChvYmplY3QpLT5kZXJlZigpOwogfQogCi1zdGF0
aWMgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gY29udmVydFRvVWludDY0KEpTQzo6SlNWYWx1ZSBq
c1ZhbHVlKQorY29uc3QgSlNTdGF0aWNGdW5jdGlvbiogSlNJUENBdHRhY2htZW50OjpzdGF0aWNG
dW5jdGlvbnMoKQogewotICAgIGlmIChqc1ZhbHVlLmlzTnVtYmVyKCkpIHsKLSAgICAgICAgZG91
YmxlIHZhbHVlID0ganNWYWx1ZS5hc051bWJlcigpOwotICAgICAgICBpZiAodmFsdWUgPCAwIHx8
IHRydW5jKHZhbHVlKSAhPSB2YWx1ZSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
Ci0gICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICB9Ci0gICAgaWYgKGpzVmFsdWUuaXNCaWdJbnQo
KSkKLSAgICAgICAgcmV0dXJuIEpTQzo6SlNCaWdJbnQ6OnRvQmlnVUludDY0KGpzVmFsdWUpOwot
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgc3RhdGljIGNvbnN0IEpTU3RhdGljRnVuY3Rp
b24gZnVuY3Rpb25zW10gPSB7CisgICAgICAgIHsgMCwgMCwgMCB9CisgICAgfTsKKyAgICByZXR1
cm4gZnVuY3Rpb25zOwogfQogCi1KU09iamVjdFJlZiBKU0lQQ1NlbWFwaG9yZTo6Y3JlYXRlSlNX
cmFwcGVyKEpTQ29udGV4dFJlZiBjb250ZXh0KQorSlNPYmplY3RSZWYgSlNJUENDb25uZWN0aW9u
OjpjcmVhdGVKU1dyYXBwZXIoSlNDb250ZXh0UmVmIGNvbnRleHQpCiB7CiAgICAgYXV0byogZ2xv
YmFsT2JqZWN0ID0gdG9KUyhjb250ZXh0KTsKICAgICBhdXRvJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKQEAgLTMyMiwxMiArNjY1LDEyIEBAIEpTT2JqZWN0UmVmIEpTSVBDU2VtYXBob3JlOjpj
cmVhdGVKU1dyYXBwZXIoSlNDb250ZXh0UmVmIGNvbnRleHQpCiAgICAgcmV0dXJuIHdyYXBwZXJP
YmplY3Q7CiB9CiAKLUpTQ2xhc3NSZWYgSlNJUENTZW1hcGhvcmU6OndyYXBwZXJDbGFzcygpCitK
U0NsYXNzUmVmIEpTSVBDQ29ubmVjdGlvbjo6d3JhcHBlckNsYXNzKCkKIHsKICAgICBzdGF0aWMg
SlNDbGFzc1JlZiBqc0NsYXNzOwogICAgIGlmICghanNDbGFzcykgewogICAgICAgICBKU0NsYXNz
RGVmaW5pdGlvbiBkZWZpbml0aW9uID0ga0pTQ2xhc3NEZWZpbml0aW9uRW1wdHk7Ci0gICAgICAg
IGRlZmluaXRpb24uY2xhc3NOYW1lID0gIlNlbWFwaG9yZSI7CisgICAgICAgIGRlZmluaXRpb24u
Y2xhc3NOYW1lID0gIkNvbm5lY3Rpb24iOwogICAgICAgICBkZWZpbml0aW9uLnBhcmVudENsYXNz
ID0gbnVsbHB0cjsKICAgICAgICAgZGVmaW5pdGlvbi5zdGF0aWNWYWx1ZXMgPSBudWxscHRyOwog
ICAgICAgICBkZWZpbml0aW9uLnN0YXRpY0Z1bmN0aW9ucyA9IHN0YXRpY0Z1bmN0aW9ucygpOwpA
QCAtMzM4LDM4ICs2ODEsMTI1IEBAIEpTQ2xhc3NSZWYgSlNJUENTZW1hcGhvcmU6OndyYXBwZXJD
bGFzcygpCiAgICAgcmV0dXJuIGpzQ2xhc3M7CiB9CiAKLWlubGluZSBKU0lQQ1NlbWFwaG9yZSog
SlNJUENTZW1hcGhvcmU6OnVud3JhcChKU09iamVjdFJlZiBvYmplY3QpCitpbmxpbmUgSlNJUEND
b25uZWN0aW9uKiBKU0lQQ0Nvbm5lY3Rpb246OnVud3JhcChKU09iamVjdFJlZiBvYmplY3QpCiB7
Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEpTSVBDU2VtYXBob3JlKj4oSlNPYmplY3RHZXRQcml2
YXRlKG9iamVjdCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxKU0lQQ0Nvbm5lY3Rpb24qPihK
U09iamVjdEdldFByaXZhdGUob2JqZWN0KSk7CiB9CiAKLUpTSVBDU2VtYXBob3JlKiBKU0lQQ1Nl
bWFwaG9yZTo6dG9XcmFwcGVkKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIHZhbHVl
KQorSlNJUENDb25uZWN0aW9uKiBKU0lQQ0Nvbm5lY3Rpb246OnRvV3JhcHBlZChKU0NvbnRleHRS
ZWYgY29udGV4dCwgSlNWYWx1ZVJlZiB2YWx1ZSkKIHsKICAgICBpZiAoIWNvbnRleHQgfHwgIXZh
bHVlIHx8ICFKU1ZhbHVlSXNPYmplY3RPZkNsYXNzKGNvbnRleHQsIHZhbHVlLCB3cmFwcGVyQ2xh
c3MoKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIHJldHVybiB1bndyYXAoSlNWYWx1
ZVRvT2JqZWN0KGNvbnRleHQsIHZhbHVlLCBudWxscHRyKSk7CiB9CiAKLXZvaWQgSlNJUENTZW1h
cGhvcmU6OmluaXRpYWxpemUoSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiBvYmplY3QpCit2b2lk
IEpTSVBDQ29ubmVjdGlvbjo6aW5pdGlhbGl6ZShKU0NvbnRleHRSZWYsIEpTT2JqZWN0UmVmIG9i
amVjdCkKIHsKICAgICB1bndyYXAob2JqZWN0KS0+cmVmKCk7CiB9CiAKLXZvaWQgSlNJUENTZW1h
cGhvcmU6OmZpbmFsaXplKEpTT2JqZWN0UmVmIG9iamVjdCkKK3ZvaWQgSlNJUENDb25uZWN0aW9u
OjpmaW5hbGl6ZShKU09iamVjdFJlZiBvYmplY3QpCiB7CiAgICAgdW53cmFwKG9iamVjdCktPmRl
cmVmKCk7CiB9CiAKLWNvbnN0IEpTU3RhdGljRnVuY3Rpb24qIEpTSVBDU2VtYXBob3JlOjpzdGF0
aWNGdW5jdGlvbnMoKQordm9pZCBKU0lQQ0Nvbm5lY3Rpb246OmRpZFJlY2VpdmVNZXNzYWdlKElQ
Qzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Cit9CisKK2Jvb2wgSlNJUENDb25uZWN0aW9uOjpkaWRSZWNlaXZlU3luY01lc3NhZ2UoSVBD
OjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJiwgVW5pcXVlUmVmPElQQzo6RW5jb2Rlcj4mKQor
eworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIEpTSVBDQ29ubmVjdGlvbjo6
ZGlkQ2xvc2UoSVBDOjpDb25uZWN0aW9uJikKK3sKK30KKwordm9pZCBKU0lQQ0Nvbm5lY3Rpb246
OmRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6Ok1lc3NhZ2VO
YW1lKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCisKK2NvbnN0IEpTU3RhdGlj
RnVuY3Rpb24qIEpTSVBDQ29ubmVjdGlvbjo6c3RhdGljRnVuY3Rpb25zKCkKIHsKICAgICBzdGF0
aWMgY29uc3QgSlNTdGF0aWNGdW5jdGlvbiBmdW5jdGlvbnNbXSA9IHsKLSAgICAgICAgeyAic2ln
bmFsIiwgc2lnbmFsLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZVJlYWRPbmx5IH0sCi0gICAgICAgIHsgIndhaXRGb3IiLCB3YWl0Rm9yLCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5
IH0sCisgICAgICAgIHsgIm9wZW4iLCBvcGVuLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxl
dGUgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IH0sCisgICAgICAgIHsgImludmFsaWRh
dGUiLCBpbnZhbGlkYXRlLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IH0sCisgICAgICAgIHsgInNlbmRNZXNzYWdlIiwgc2VuZE1l
c3NhZ2UsIGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB8IGtKU1Byb3BlcnR5QXR0cmli
dXRlUmVhZE9ubHkgfSwKKyAgICAgICAgeyAic2VuZFN5bmNNZXNzYWdlIiwgc2VuZFN5bmNNZXNz
YWdlLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZVJlYWRPbmx5IH0sCisgICAgICAgIHsgIndhaXRGb3JNZXNzYWdlIiwgd2FpdEZvck1lc3NhZ2Us
IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlUmVh
ZE9ubHkgfSwKICAgICAgICAgeyAwLCAwLCAwIH0KICAgICB9OwogICAgIHJldHVybiBmdW5jdGlv
bnM7CiB9CiAKK0pTVmFsdWVSZWYgSlNJUENDb25uZWN0aW9uOjpvcGVuKEpTQ29udGV4dFJlZiBj
b250ZXh0LCBKU09iamVjdFJlZiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90LCBjb25z
dCBKU1ZhbHVlUmVmW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBSZWZQdHIgc2Vs
ZiA9IHRvV3JhcHBlZChjb250ZXh0LCB0aGlzT2JqZWN0KTsKKyAgICBpZiAoIXNlbGYpIHsKKyAg
ICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0ZVR5cGVFcnJvcihjb250ZXh0LCAiV3JvbmcgdHlwZSJf
cyk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKyAgICB9
CisgICAgc2VsZi0+bV90ZXN0ZWRDb25uZWN0aW9uLT5vcGVuKCk7CisgICAgcmV0dXJuIEpTVmFs
dWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCitKU1ZhbHVlUmVmIEpTSVBDQ29ubmVjdGlv
bjo6aW52YWxpZGF0ZShKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYsIEpTT2JqZWN0
UmVmIHRoaXNPYmplY3QsIHNpemVfdCwgY29uc3QgSlNWYWx1ZVJlZltdLCBKU1ZhbHVlUmVmKiBl
eGNlcHRpb24pCit7CisgICAgUmVmUHRyIHNlbGYgPSB0b1dyYXBwZWQoY29udGV4dCwgdGhpc09i
amVjdCk7CisgICAgaWYgKCFzZWxmKSB7CisgICAgICAgICpleGNlcHRpb24gPSBjcmVhdGVUeXBl
RXJyb3IoY29udGV4dCwgIldyb25nIHR5cGUiX3MpOworICAgICAgICByZXR1cm4gSlNWYWx1ZU1h
a2VVbmRlZmluZWQoY29udGV4dCk7CisgICAgfQorICAgIHNlbGYtPm1fdGVzdGVkQ29ubmVjdGlv
bi0+aW52YWxpZGF0ZSgpOworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0
KTsKK30KKworSlNWYWx1ZVJlZiBKU0lQQ0Nvbm5lY3Rpb246OnNlbmRNZXNzYWdlKEpTQ29udGV4
dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90
IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYq
IGV4Y2VwdGlvbikKK3sKKyAgICBSZWZQdHIgc2VsZiA9IHRvV3JhcHBlZChjb250ZXh0LCB0aGlz
T2JqZWN0KTsKKyAgICBpZiAoIXNlbGYpIHsKKyAgICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0ZVR5
cGVFcnJvcihjb250ZXh0LCAiV3JvbmcgdHlwZSJfcyk7CisgICAgICAgIHJldHVybiBKU1ZhbHVl
TWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKyAgICB9CisgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAy
KSB7CisgICAgICAgICpleGNlcHRpb24gPSBjcmVhdGVUeXBlRXJyb3IoY29udGV4dCwgIk11c3Qg
c3BlY2lmeSB0aGUgZGVzdGluYXRpb24gSUQgYW5kIG1lc3NhZ2UgSUQgYXMgdGhlIGZpcnN0IHR3
byBhcmd1bWVudHMiX3MpOworICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29u
dGV4dCk7CisgICAgfQorICAgIHJldHVybiBzZW5kTWVzc2FnZVdpdGhKU0FyZ3VtZW50cyhzZWxm
LT5tX3Rlc3RlZENvbm5lY3Rpb24sIGNvbnRleHQsIGFyZ3VtZW50Q291bnQsIGFyZ3VtZW50cywg
ZXhjZXB0aW9uKTsKK30KKworSlNWYWx1ZVJlZiBKU0lQQ0Nvbm5lY3Rpb246OnNlbmRTeW5jTWVz
c2FnZShKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYsIEpTT2JqZWN0UmVmIHRoaXNP
YmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1td
LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgUmVmUHRyIHNlbGYgPSB0b1dyYXBwZWQo
Y29udGV4dCwgdGhpc09iamVjdCk7CisgICAgaWYgKCFzZWxmKSB7CisgICAgICAgICpleGNlcHRp
b24gPSBjcmVhdGVUeXBlRXJyb3IoY29udGV4dCwgIldyb25nIHR5cGUiX3MpOworICAgICAgICBy
ZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisgICAgfQorICAgIGlmIChhcmd1
bWVudENvdW50IDwgMikgeworICAgICAgICAqZXhjZXB0aW9uID0gY3JlYXRlVHlwZUVycm9yKGNv
bnRleHQsICJNdXN0IHNwZWNpZnkgdGhlIGRlc3RpbmF0aW9uIElEIGFuZCBtZXNzYWdlIElEIGFz
IHRoZSBmaXJzdCB0d28gYXJndW1lbnRzIl9zKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtl
VW5kZWZpbmVkKGNvbnRleHQpOworICAgIH0KKyAgICByZXR1cm4gc2VuZFN5bmNNZXNzYWdlV2l0
aEpTQXJndW1lbnRzKHNlbGYtPm1fdGVzdGVkQ29ubmVjdGlvbiwgY29udGV4dCwgYXJndW1lbnRD
b3VudCwgYXJndW1lbnRzLCBleGNlcHRpb24pOworfQorCitKU1ZhbHVlUmVmIEpTSVBDQ29ubmVj
dGlvbjo6d2FpdEZvck1lc3NhZ2UoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmLCBK
U09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1
ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIFJlZlB0ciBz
ZWxmID0gdG9XcmFwcGVkKGNvbnRleHQsIHRoaXNPYmplY3QpOworICAgIGlmICghc2VsZikgewor
ICAgICAgICAqZXhjZXB0aW9uID0gY3JlYXRlVHlwZUVycm9yKGNvbnRleHQsICJXcm9uZyB0eXBl
Il9zKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworICAg
IH0KKyAgICBpZiAoYXJndW1lbnRDb3VudCA8IDIpIHsKKyAgICAgICAgKmV4Y2VwdGlvbiA9IGNy
ZWF0ZVR5cGVFcnJvcihjb250ZXh0LCAiTXVzdCBzcGVjaWZ5IHRoZSBkZXN0aW5hdGlvbiBJRCBh
bmQgbWVzc2FnZSBJRCBhcyB0aGUgZmlyc3QgdHdvIGFyZ3VtZW50cyJfcyk7CisgICAgICAgIHJl
dHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKyAgICB9CisgICAgcmV0dXJuIHdh
aXRGb3JNZXNzYWdlV2l0aEpTQXJndW1lbnRzKHNlbGYtPm1fdGVzdGVkQ29ubmVjdGlvbiwgY29u
dGV4dCwgYXJndW1lbnRDb3VudCwgYXJndW1lbnRzLCBleGNlcHRpb24pOworfQorCiBKU09iamVj
dFJlZiBKU0lQQ1N0cmVhbUNsaWVudENvbm5lY3Rpb246OmNyZWF0ZUpTV3JhcHBlcihKU0NvbnRl
eHRSZWYgY29udGV4dCkKIHsKICAgICBhdXRvKiBnbG9iYWxPYmplY3QgPSB0b0pTKGNvbnRleHQp
OwpAQCAtNTA4LDcgKzkzOCw3IEBAIGJvb2wgSlNJUENTdHJlYW1DbGllbnRDb25uZWN0aW9uOjpw
cmVwYXJlVG9TZW5kT3V0T2ZTdHJlYW1NZXNzYWdlKEpTQ29udGV4dFJlZiBjCiB7CiAgICAgLy8g
RklYTUU6IEFkZCBzdXBwb3J0IGZvciBzZW5kaW5nIGluLXN0cmVhbSBJUEMgbWVzc2FnZXMgd2hl
biBhcHByb3ByaWF0ZS4KICAgICBpZiAoYXJndW1lbnRDb3VudCA+IDMpIHsKLSAgICAgICAgaWYg
KCFlbmNvZGVBcmd1bWVudChlbmNvZGVyLCBqc0lQQywgY29udGV4dCwgYXJndW1lbnRzWzNdLCBl
eGNlcHRpb24pKQorICAgICAgICBpZiAoIWVuY29kZUFyZ3VtZW50KGVuY29kZXIsIGNvbnRleHQs
IGFyZ3VtZW50c1szXSwgZXhjZXB0aW9uKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9CiAKQEAgLTExMTgsNiArMTU0OCw3IEBAIGNvbnN0IEpTU3RhdGljRnVuY3Rpb24qIEpTSVBD
OjpzdGF0aWNGdW5jdGlvbnMoKQogICAgICAgICB7ICJzZW5kTWVzc2FnZSIsIHNlbmRNZXNzYWdl
LCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJl
YWRPbmx5IH0sCiAgICAgICAgIHsgInNlbmRTeW5jTWVzc2FnZSIsIHNlbmRTeW5jTWVzc2FnZSwg
a0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIHwga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFk
T25seSB9LAogICAgICAgICB7ICJ3YWl0Rm9yTWVzc2FnZSIsIHdhaXRGb3JNZXNzYWdlLCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5
IH0sCisgICAgICAgIHsgImNyZWF0ZUNvbm5lY3Rpb25QYWlyIiwgY3JlYXRlQ29ubmVjdGlvblBh
aXIsIGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB8IGtKU1Byb3BlcnR5QXR0cmlidXRl
UmVhZE9ubHkgfSwKICAgICAgICAgeyAiY3JlYXRlU3RyZWFtQ2xpZW50Q29ubmVjdGlvbiIsIGNy
ZWF0ZVN0cmVhbUNsaWVudENvbm5lY3Rpb24sIGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0
ZSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfSwKICAgICAgICAgeyAiY3JlYXRlU2Vt
YXBob3JlIiwgY3JlYXRlU2VtYXBob3JlLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUg
fCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IH0sCiAgICAgICAgIHsgImNyZWF0ZVNoYXJl
ZE1lbW9yeSIsIGNyZWF0ZVNoYXJlZE1lbW9yeSwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVs
ZXRlIHwga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB9LApAQCAtMTM1Niw2ICsxNzg3LDIx
IEBAIHN0YXRpYyBib29sIGVuY29kZVNoYXJlZE1lbW9yeShJUEM6OkVuY29kZXImIGVuY29kZXIs
IEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3N0YXRp
YyBib29sIGVuY29kZUZyYW1lSW5mb0RhdGEoSVBDOjpFbmNvZGVyJiBlbmNvZGVyLCBKU0M6OkpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNPYmplY3QqIGpzT2JqZWN0LCBKU0M6
OkNhdGNoU2NvcGUmIHNjb3BlKQoreworICAgIGF1dG8ganNJUENWYWx1ZSA9IGpzT2JqZWN0LT5n
ZXQoZ2xvYmFsT2JqZWN0LCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoZ2xvYmFsT2JqZWN0
LT52bSgpLCAidmFsdWUiX3MpKTsKKyAgICBpZiAoc2NvcGUuZXhjZXB0aW9uKCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBSZWZQdHIganNJUEMgPSBKU0lQQzo6dG9XcmFwcGVkKHRvUmVm
KGdsb2JhbE9iamVjdCksIHRvUmVmKGpzSVBDVmFsdWUpKTsKKyAgICBpZiAoIWpzSVBDKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgUmVmUHRyIHdlYkZyYW1lID0ganNJUEMtPndlYkZyYW1l
KCk7CisgICAgaWYgKCF3ZWJGcmFtZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGVuY29k
ZXIgPDwgd2ViRnJhbWUtPmluZm8oKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogc3RhdGljIGJv
b2wgZW5jb2RlU3RyZWFtQ29ubmVjdGlvbkJ1ZmZlcihJUEM6OkVuY29kZXImIGVuY29kZXIsIEpT
Qzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIGpzVmFsdWUsIEpT
Qzo6Q2F0Y2hTY29wZSYgc2NvcGUpCiB7CiAgICAgUmVmUHRyIGpzSVBDU3RyZWFtQ29ubmVjdGlv
bkJ1ZmZlciA9IEpTSVBDU3RyZWFtQ29ubmVjdGlvbkJ1ZmZlcjo6dG9XcmFwcGVkKHRvUmVmKGds
b2JhbE9iamVjdCksIHRvUmVmKGpzVmFsdWUpKTsKQEAgLTEzNzYsOCArMTgyMiwxNyBAQCBzdGF0
aWMgYm9vbCBlbmNvZGVTZW1hcGhvcmUoSVBDOjpFbmNvZGVyJiBlbmNvZGVyLCBKU0M6OkpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYgogICAgIHJldHVybiB0cnVlOwogfQogCitzdGF0aWMgYm9vbCBl
bmNvZGVBdHRhY2htZW50KElQQzo6RW5jb2RlciYgZW5jb2RlciwgSlNDOjpKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUganNWYWx1ZSwgSlNDOjpDYXRjaFNjb3BlJiBz
Y29wZSkKK3sKKyAgICBSZWZQdHIganNJUENBdHRhY2htZW50ID0gSlNJUENBdHRhY2htZW50Ojp0
b1dyYXBwZWQodG9SZWYoZ2xvYmFsT2JqZWN0KSwgdG9SZWYoanNWYWx1ZSkpOworICAgIGlmICgh
anNJUENBdHRhY2htZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBqc0lQQ0F0dGFj
aG1lbnQtPmVuY29kZShlbmNvZGVyKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogc3RydWN0IFZl
Y3RvckVuY29kZUhlbHBlciB7Ci0gICAgUmVmPEpTSVBDPiBqc0lQQzsKICAgICBKU0NvbnRleHRS
ZWYgY29udGV4dDsKICAgICBKU1ZhbHVlUmVmIHZhbHVlUmVmOwogICAgIEpTVmFsdWVSZWYqIGV4
Y2VwdGlvbjsKQEAgLTEzODcsMTIgKzE4NDIsMTIgQEAgc3RydWN0IFZlY3RvckVuY29kZUhlbHBl
ciB7CiAgICAgewogICAgICAgICBpZiAoIXN1Y2Nlc3MpCiAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIHN1Y2Nlc3MgPSBlbmNvZGVBcmd1bWVudChlbmNvZGVyLCBqc0lQQy5nZXQoKSwgY29u
dGV4dCwgdmFsdWVSZWYsIGV4Y2VwdGlvbik7CisgICAgICAgIHN1Y2Nlc3MgPSBlbmNvZGVBcmd1
bWVudChlbmNvZGVyLCBjb250ZXh0LCB2YWx1ZVJlZiwgZXhjZXB0aW9uKTsKICAgICB9CiB9Owog
CiBlbnVtIGNsYXNzIEFycmF5TW9kZSB7IFR1cGxlLCBWZWN0b3IgfTsKLXN0YXRpYyBib29sIGVu
Y29kZUFycmF5QXJndW1lbnQoSVBDOjpFbmNvZGVyJiBlbmNvZGVyLCBKU0lQQyYganNJUEMsIEFy
cmF5TW9kZSBhcnJheU1vZGUsIEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIHZhbHVl
UmVmLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCitzdGF0aWMgYm9vbCBlbmNvZGVBcnJheUFyZ3Vt
ZW50KElQQzo6RW5jb2RlciYgZW5jb2RlciwgQXJyYXlNb2RlIGFycmF5TW9kZSwgSlNDb250ZXh0
UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgdmFsdWVSZWYsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikK
IHsKICAgICBhdXRvIG9iamVjdFJlZiA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCB2YWx1ZVJl
ZiwgZXhjZXB0aW9uKTsKICAgICBBU1NFUlQob2JqZWN0UmVmKTsKQEAgLTE0MTgsNyArMTg3Myw3
IEBAIHN0YXRpYyBib29sIGVuY29kZUFycmF5QXJndW1lbnQoSVBDOjpFbmNvZGVyJiBlbmNvZGVy
LCBKU0lQQyYganNJUEMsIEFycmF5TW9kZSBhCiAgICAgICAgIGF1dG8gaXRlbVJlZiA9IEpTT2Jq
ZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIG9iamVjdFJlZiwgaSwgZXhjZXB0aW9uKTsK
ICAgICAgICAgaWYgKCFpdGVtUmVmKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICB2ZWN0b3IuYXBwZW5kKFZlY3RvckVuY29kZUhlbHBlciB7IGpzSVBDLCBjb250ZXh0LCBpdGVt
UmVmLCBleGNlcHRpb24sIHN1Y2Nlc3MgfSk7CisgICAgICAgIHZlY3Rvci5hcHBlbmQoVmVjdG9y
RW5jb2RlSGVscGVyIHsgY29udGV4dCwgaXRlbVJlZiwgZXhjZXB0aW9uLCBzdWNjZXNzIH0pOwog
ICAgIH0KICAgICBpZiAoYXJyYXlNb2RlID09IEFycmF5TW9kZTo6VHVwbGUpIHsKICAgICAgICAg
Zm9yIChhdXRvJiBpdGVtIDogdmVjdG9yKQpAQCAtMTQyOCw3ICsxODgzLDcgQEAgc3RhdGljIGJv
b2wgZW5jb2RlQXJyYXlBcmd1bWVudChJUEM6OkVuY29kZXImIGVuY29kZXIsIEpTSVBDJiBqc0lQ
QywgQXJyYXlNb2RlIGEKICAgICByZXR1cm4gc3VjY2VzczsKIH0KIAotc3RhdGljIGJvb2wgZW5j
b2RlQXJndW1lbnQoSVBDOjpFbmNvZGVyJiBlbmNvZGVyLCBKU0lQQyYganNJUEMsIEpTQ29udGV4
dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIHZhbHVlUmVmLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24p
CitzdGF0aWMgYm9vbCBlbmNvZGVBcmd1bWVudChJUEM6OkVuY29kZXImIGVuY29kZXIsIEpTQ29u
dGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIHZhbHVlUmVmLCBKU1ZhbHVlUmVmKiBleGNlcHRp
b24pCiB7CiAgICAgYXV0byBvYmplY3RSZWYgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgdmFs
dWVSZWYsIGV4Y2VwdGlvbik7CiAgICAgaWYgKCFvYmplY3RSZWYpCkBAIC0xNDM4LDcgKzE4OTMs
NyBAQCBzdGF0aWMgYm9vbCBlbmNvZGVBcmd1bWVudChJUEM6OkVuY29kZXImIGVuY29kZXIsIEpT
SVBDJiBqc0lQQywgSlNDb250ZXh0UmVmIGNvbgogICAgICAgICByZXR1cm4gZW5jb2RlVHlwZWRB
cnJheShlbmNvZGVyLCBjb250ZXh0LCBvYmplY3RSZWYsIHR5cGUsIGV4Y2VwdGlvbik7CiAKICAg
ICBpZiAoSlNWYWx1ZUlzQXJyYXkoY29udGV4dCwgb2JqZWN0UmVmKSkKLSAgICAgICAgcmV0dXJu
IGVuY29kZUFycmF5QXJndW1lbnQoZW5jb2RlciwganNJUEMsIEFycmF5TW9kZTo6VHVwbGUsIGNv
bnRleHQsIG9iamVjdFJlZiwgZXhjZXB0aW9uKTsKKyAgICAgICAgcmV0dXJuIGVuY29kZUFycmF5
QXJndW1lbnQoZW5jb2RlciwgQXJyYXlNb2RlOjpUdXBsZSwgY29udGV4dCwgb2JqZWN0UmVmLCBl
eGNlcHRpb24pOwogCiAgICAgYXV0byogZ2xvYmFsT2JqZWN0ID0gdG9KUyhjb250ZXh0KTsKICAg
ICBhdXRvJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKQEAgLTE1MDUsMTIgKzE5NjAsMTAgQEAg
c3RhdGljIGJvb2wgZW5jb2RlQXJndW1lbnQoSVBDOjpFbmNvZGVyJiBlbmNvZGVyLCBKU0lQQyYg
anNJUEMsIEpTQ29udGV4dFJlZiBjb24KICAgICB9CiAKICAgICBpZiAodHlwZSA9PSAiRnJhbWVJ
bmZvRGF0YSIpIHsKLSAgICAgICAgUmVmUHRyIHdlYkZyYW1lID0ganNJUEMud2ViRnJhbWUoKTsK
LSAgICAgICAgaWYgKCF3ZWJGcmFtZSkgeworICAgICAgICBpZiAoIWVuY29kZUZyYW1lSW5mb0Rh
dGEoZW5jb2RlciwgZ2xvYmFsT2JqZWN0LCBqc09iamVjdCwgc2NvcGUpKSB7CiAgICAgICAgICAg
ICAqZXhjZXB0aW9uID0gY3JlYXRlVHlwZUVycm9yKGNvbnRleHQsICJGYWlsZWQgdG8gZ2V0IHRo
ZSBmcmFtZSJfcyk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAgICAg
ICAgZW5jb2RlciA8PCB3ZWJGcmFtZS0+aW5mbygpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CiAKQEAgLTE1MzQsMTIgKzE5ODcsMjAgQEAgc3RhdGljIGJvb2wgZW5jb2RlQXJndW1lbnQo
SVBDOjpFbmNvZGVyJiBlbmNvZGVyLCBKU0lQQyYganNJUEMsIEpTQ29udGV4dFJlZiBjb24KICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCisgICAgaWYgKHR5cGUgPT0gIkF0dGFjaG1lbnQi
KSB7CisgICAgICAgIGlmICghZW5jb2RlQXR0YWNobWVudChlbmNvZGVyLCBnbG9iYWxPYmplY3Qs
IGpzVmFsdWUsIHNjb3BlKSkgeworICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0ZVR5cGVF
cnJvcihjb250ZXh0LCAiRmFpbGVkIHRvIGNvbnZlcnQgQXR0YWNobWVudCJfcyk7CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorCiAgICAgaWYgKHR5cGUgPT0gIlZlY3RvciIpIHsKICAgICAgICAgaWYgKCFqc1ZhbHVlLmlu
aGVyaXRzPEpTQzo6SlNBcnJheT4oKSkgewogICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0
ZVR5cGVFcnJvcihjb250ZXh0LCAiVmVjdG9yIHZhbHVlIG11c3QgYmUgYW4gYXJyYXkiX3MpOwog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBlbmNv
ZGVBcnJheUFyZ3VtZW50KGVuY29kZXIsIGpzSVBDLCBBcnJheU1vZGU6OlZlY3RvciwgY29udGV4
dCwgdG9SZWYoZ2xvYmFsT2JqZWN0LCBqc1ZhbHVlKSwgZXhjZXB0aW9uKTsKKyAgICAgICAgcmV0
dXJuIGVuY29kZUFycmF5QXJndW1lbnQoZW5jb2RlciwgQXJyYXlNb2RlOjpWZWN0b3IsIGNvbnRl
eHQsIHRvUmVmKGdsb2JhbE9iamVjdCwganNWYWx1ZSksIGV4Y2VwdGlvbik7CiAgICAgfQogCiAg
ICAgaWYgKHR5cGUgPT0gIlN0cmluZyIpIHsKQEAgLTE2NzAsMTg1ICsyMTMxLDc4IEBAIEpTVmFs
dWVSZWYgSlNJUEM6OnNlbmRNZXNzYWdlKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJl
ZiwgSlNPYmplY3RSZWYgdGhpCiAgICAgICAgICpleGNlcHRpb24gPSBjcmVhdGVUeXBlRXJyb3Io
Y29udGV4dCwgIldyb25nIHR5cGUiX3MpOwogICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRl
ZmluZWQoY29udGV4dCk7CiAgICAgfQotCiAgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAzKSB7CiAg
ICAgICAgICpleGNlcHRpb24gPSBjcmVhdGVUeXBlRXJyb3IoY29udGV4dCwgIk11c3Qgc3BlY2lm
eSB0aGUgdGFyZ2V0IHByb2Nlc3MsIGRlc3RpbmF0aW9uIElELCBhbmQgbWVzc2FnZSBJRCBhcyB0
aGUgZmlyc3QgdGhyZWUgYXJndW1lbnRzIl9zKTsKICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtl
VW5kZWZpbmVkKGNvbnRleHQpOwogICAgIH0KLQogICAgIGF1dG8gY29ubmVjdGlvbiA9IHByb2Nl
c3NUYXJnZXRGcm9tQXJndW1lbnQoZ2xvYmFsT2JqZWN0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlv
bik7CiAgICAgaWYgKCFjb25uZWN0aW9uKQogICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRl
ZmluZWQoY29udGV4dCk7Ci0KLSAgICBhdXRvIGRlc3RpbmF0aW9uSUQgPSBkZXN0aW5hdGlvbklE
RnJvbUFyZ3VtZW50KGdsb2JhbE9iamVjdCwgYXJndW1lbnRzWzFdLCBleGNlcHRpb24pOwotICAg
IGlmICghZGVzdGluYXRpb25JRCkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVk
KGNvbnRleHQpOwotCi0gICAgYXV0byBtZXNzYWdlSUQgPSBtZXNzYWdlSURGcm9tQXJndW1lbnQo
Z2xvYmFsT2JqZWN0LCBhcmd1bWVudHNbMl0sIGV4Y2VwdGlvbik7Ci0gICAgaWYgKCFtZXNzYWdl
SUQpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLQotICAg
IGF1dG8gbWVzc2FnZU5hbWUgPSBzdGF0aWNfY2FzdDxJUEM6Ok1lc3NhZ2VOYW1lPigqbWVzc2Fn
ZUlEKTsKLSAgICBhdXRvIGVuY29kZXIgPSBtYWtlVW5pcXVlUmVmPElQQzo6RW5jb2Rlcj4obWVz
c2FnZU5hbWUsICpkZXN0aW5hdGlvbklEKTsKLQotICAgIEpTVmFsdWVSZWYgcmV0dXJuVmFsdWUg
PSBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLQotICAgIGJvb2wgaGFzUmVwbHkgPSAh
IW1lc3NhZ2VSZXBseUFyZ3VtZW50RGVzY3JpcHRpb25zKG1lc3NhZ2VOYW1lKTsKLSAgICBpZiAo
aGFzUmVwbHkpIHsKLSAgICAgICAgdWludDY0X3QgbGlzdGVuZXJJRCA9IElQQzo6bmV4dEFzeW5j
UmVwbHlIYW5kbGVySUQoKTsKLSAgICAgICAgZW5jb2Rlci5nZXQoKSA8PCBsaXN0ZW5lcklEOwot
Ci0gICAgICAgIEpTT2JqZWN0UmVmIHJlc29sdmU7Ci0gICAgICAgIEpTT2JqZWN0UmVmIHJlamVj
dDsKLUFMTE9XX05FV19BUElfV0lUSE9VVF9HVUFSRFNfQkVHSU4KLSAgICAgICAgcmV0dXJuVmFs
dWUgPSBKU09iamVjdE1ha2VEZWZlcnJlZFByb21pc2UoY29udGV4dCwgJnJlc29sdmUsICZyZWpl
Y3QsIGV4Y2VwdGlvbik7Ci1BTExPV19ORVdfQVBJX1dJVEhPVVRfR1VBUkRTX0VORAotICAgICAg
ICBpZiAoIXJldHVyblZhbHVlKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZp
bmVkKGNvbnRleHQpOwotCi0gICAgICAgIEpTR2xvYmFsQ29udGV4dFJldGFpbihKU0NvbnRleHRH
ZXRHbG9iYWxDb250ZXh0KGNvbnRleHQpKTsKLSAgICAgICAgSlNWYWx1ZVByb3RlY3QoY29udGV4
dCwgcmVzb2x2ZSk7Ci0gICAgICAgIEpTVmFsdWVQcm90ZWN0KGNvbnRleHQsIHJlamVjdCk7Ci0g
ICAgICAgIElQQzo6YWRkQXN5bmNSZXBseUhhbmRsZXIoKmNvbm5lY3Rpb24sIGxpc3RlbmVySUQs
IFttZXNzYWdlTmFtZSwgY29udGV4dCwgcmVzb2x2ZSwgcmVqZWN0XShJUEM6OkRlY29kZXIqIHJl
cGx5RGVjb2RlcikgewotICAgICAgICAgICAgYXV0byogZ2xvYmFsT2JqZWN0ID0gdG9KUyhjb250
ZXh0KTsKLSAgICAgICAgICAgIGF1dG8mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgICAg
ICAgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayh2bSk7Ci0KLSAgICAgICAgICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKLSAgICAgICAgICAgIGF1dG8qIGpzUmVzdWx0
ID0ganNSZXN1bHRGcm9tUmVwbHlEZWNvZGVyKGdsb2JhbE9iamVjdCwgbWVzc2FnZU5hbWUsICpy
ZXBseURlY29kZXIpOwotICAgICAgICAgICAgaWYgKGF1dG8qIGV4Y2VwdGlvbiA9IHNjb3BlLmV4
Y2VwdGlvbigpKSB7Ci0gICAgICAgICAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKLSAg
ICAgICAgICAgICAgICBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdID0geyB0b1JlZihnbG9iYWxPYmpl
Y3QsIGV4Y2VwdGlvbikgfTsKLSAgICAgICAgICAgICAgICBKU09iamVjdENhbGxBc0Z1bmN0aW9u
KGNvbnRleHQsIHJlamVjdCwgcmVqZWN0LCAxLCBhcmd1bWVudHMsIG51bGxwdHIpOwotICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdID0g
eyB0b1JlZihnbG9iYWxPYmplY3QsIGpzUmVzdWx0KSB9OwotICAgICAgICAgICAgICAgIEpTT2Jq
ZWN0Q2FsbEFzRnVuY3Rpb24oY29udGV4dCwgcmVzb2x2ZSwgcmVzb2x2ZSwgMSwgYXJndW1lbnRz
LCBudWxscHRyKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgSlNWYWx1ZVVucHJvdGVj
dChjb250ZXh0LCByZWplY3QpOwotICAgICAgICAgICAgSlNWYWx1ZVVucHJvdGVjdChjb250ZXh0
LCByZXNvbHZlKTsKLSAgICAgICAgICAgIEpTR2xvYmFsQ29udGV4dFJlbGVhc2UoSlNDb250ZXh0
R2V0R2xvYmFsQ29udGV4dChjb250ZXh0KSk7Ci0gICAgICAgIH0pOwotICAgIH0KLQotICAgIGlm
IChhcmd1bWVudENvdW50ID4gMykgewotICAgICAgICBpZiAoIWVuY29kZUFyZ3VtZW50KGVuY29k
ZXIuZ2V0KCksICpqc0lQQywgY29udGV4dCwgYXJndW1lbnRzWzNdLCBleGNlcHRpb24pKQotICAg
ICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotICAgIH0KLQot
ICAgIC8vIEZJWE1FOiBBZGQgdGhlIHN1cHBvcnQgZm9yIHNwZWNpZnlpbmcgSVBDIG9wdGlvbnMu
Ci0KLSAgICBjb25uZWN0aW9uLT5zZW5kTWVzc2FnZShXVEZNb3ZlKGVuY29kZXIpLCB7IH0pOwot
Ci0gICAgcmV0dXJuIHJldHVyblZhbHVlOworICAgIHJldHVybiBzZW5kTWVzc2FnZVdpdGhKU0Fy
Z3VtZW50cygqY29ubmVjdGlvbiwgY29udGV4dCwgYXJndW1lbnRDb3VudCAtIDEsIGFyZ3VtZW50
cyArIDEsIGV4Y2VwdGlvbik7CiB9CiAKLXN0cnVjdCBTeW5jSVBDTWVzc2FnZUluZm8gewotICAg
IFJlZjxJUEM6OkNvbm5lY3Rpb24+IGNvbm5lY3Rpb247Ci0gICAgdWludDY0X3QgZGVzdGluYXRp
b25JRDsKLSAgICBJUEM6Ok1lc3NhZ2VOYW1lIG1lc3NhZ2VOYW1lOwotICAgIElQQzo6VGltZW91
dCB0aW1lb3V0OwotfTsKLQotc3RhdGljIHN0ZDo6b3B0aW9uYWw8U3luY0lQQ01lc3NhZ2VJbmZv
PiBleHRyYWN0U3luY0lQQ01lc3NhZ2VJbmZvKEpTQ29udGV4dFJlZiBjb250ZXh0LCBzaXplX3Qg
YXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiog
ZXhjZXB0aW9uKQorSlNWYWx1ZVJlZiBKU0lQQzo6d2FpdEZvck1lc3NhZ2UoSlNDb250ZXh0UmVm
IGNvbnRleHQsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJn
dW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhj
ZXB0aW9uKQogewotICAgIGlmIChhcmd1bWVudENvdW50IDwgNCkgeworICAgIFJlZlB0ciBqc0lQ
QyA9IHRvV3JhcHBlZChjb250ZXh0LCB0aGlzT2JqZWN0KTsKKyAgICBpZiAoIWpzSVBDKSB7Cisg
ICAgICAgICpleGNlcHRpb24gPSBjcmVhdGVUeXBlRXJyb3IoY29udGV4dCwgIldyb25nIHR5cGUi
X3MpOworICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisgICAg
fQorICAgIGlmIChhcmd1bWVudENvdW50IDwgMykgewogICAgICAgICAqZXhjZXB0aW9uID0gY3Jl
YXRlVHlwZUVycm9yKGNvbnRleHQsICJNdXN0IHNwZWNpZnkgdGhlIHRhcmdldCBwcm9jZXNzLCBk
ZXN0aW5hdGlvbiBJRCwgYW5kIG1lc3NhZ2UgSUQgYXMgdGhlIGZpcnN0IHRocmVlIGFyZ3VtZW50
cyJfcyk7Ci0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgIHJldHVybiBKU1Zh
bHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKICAgICB9Ci0KICAgICBhdXRvKiBnbG9iYWxPYmpl
Y3QgPSB0b0pTKGNvbnRleHQpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soZ2xvYmFsT2Jq
ZWN0LT52bSgpKTsKICAgICBhdXRvIGNvbm5lY3Rpb24gPSBwcm9jZXNzVGFyZ2V0RnJvbUFyZ3Vt
ZW50KGdsb2JhbE9iamVjdCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pOwogICAgIGlmICghY29u
bmVjdGlvbikKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgIGF1dG8gZGVzdGlu
YXRpb25JRCA9IGRlc3RpbmF0aW9uSURGcm9tQXJndW1lbnQoZ2xvYmFsT2JqZWN0LCBhcmd1bWVu
dHNbMV0sIGV4Y2VwdGlvbik7Ci0gICAgaWYgKCFkZXN0aW5hdGlvbklEKQotICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OwotCi0gICAgYXV0byBtZXNzYWdlSUQgPSBtZXNzYWdlSURGcm9tQXJn
dW1lbnQoZ2xvYmFsT2JqZWN0LCBhcmd1bWVudHNbMl0sIGV4Y2VwdGlvbik7Ci0gICAgaWYgKCFt
ZXNzYWdlSUQpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICBTZWNvbmRzIHRp
bWVvdXREdXJhdGlvbjsKLSAgICB7Ci0gICAgICAgIGF1dG8ganNWYWx1ZSA9IHRvSlMoZ2xvYmFs
T2JqZWN0LCBhcmd1bWVudHNbM10pOwotICAgICAgICBpZiAoIWpzVmFsdWUuaXNOdW1iZXIoKSkg
ewotICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0ZVR5cGVFcnJvcihjb250ZXh0LCAiVGlt
ZW91dCBtdXN0IGJlIGEgbnVtYmVyIl9zKTsKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7Ci0gICAgICAgIH0KLSAgICAgICAgdGltZW91dER1cmF0aW9uID0gU2Vjb25kcyB7IGpzVmFs
dWUuYXNOdW1iZXIoKSB9OwotICAgIH0KLQotICAgIHJldHVybiB7IHsgY29ubmVjdGlvbi5yZWxl
YXNlTm9uTnVsbCgpLCAqZGVzdGluYXRpb25JRCwgc3RhdGljX2Nhc3Q8SVBDOjpNZXNzYWdlTmFt
ZT4oKm1lc3NhZ2VJRCksIHsgdGltZW91dER1cmF0aW9uIH0gfSB9OworICAgICAgICByZXR1cm4g
SlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisgICAgcmV0dXJuIHdhaXRGb3JNZXNzYWdl
V2l0aEpTQXJndW1lbnRzKCpjb25uZWN0aW9uLCBjb250ZXh0LCBhcmd1bWVudENvdW50IC0gMSwg
YXJndW1lbnRzICsgMSwgZXhjZXB0aW9uKTsKIH0KIAotSlNWYWx1ZVJlZiBKU0lQQzo6d2FpdEZv
ck1lc3NhZ2UoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJlZiB0
aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVu
dHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQorSlNWYWx1ZVJlZiBKU0lQQzo6c2VuZFN5bmNN
ZXNzYWdlKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiwgSlNPYmplY3RSZWYgdGhp
c09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRz
W10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKLSAgICBhdXRvKiBnbG9iYWxPYmplY3QgPSB0
b0pTKGNvbnRleHQpOwotICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soZ2xvYmFsT2JqZWN0LT52
bSgpKTsKICAgICBSZWZQdHIganNJUEMgPSB0b1dyYXBwZWQoY29udGV4dCwgdGhpc09iamVjdCk7
CiAgICAgaWYgKCFqc0lQQykgewogICAgICAgICAqZXhjZXB0aW9uID0gY3JlYXRlVHlwZUVycm9y
KGNvbnRleHQsICJXcm9uZyB0eXBlIl9zKTsKICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5k
ZWZpbmVkKGNvbnRleHQpOwogICAgIH0KLQotICAgIGF1dG8gaW5mbyA9IGV4dHJhY3RTeW5jSVBD
TWVzc2FnZUluZm8oY29udGV4dCwgYXJndW1lbnRDb3VudCwgYXJndW1lbnRzLCBleGNlcHRpb24p
OwotICAgIGlmICghaW5mbykKKyAgICBpZiAoYXJndW1lbnRDb3VudCA8IDMpIHsKKyAgICAgICAg
KmV4Y2VwdGlvbiA9IGNyZWF0ZVR5cGVFcnJvcihjb250ZXh0LCAiTXVzdCBzcGVjaWZ5IHRoZSB0
YXJnZXQgcHJvY2VzcywgZGVzdGluYXRpb24gSUQsIGFuZCBtZXNzYWdlIElEIGFzIHRoZSBmaXJz
dCB0aHJlZSBhcmd1bWVudHMiX3MpOwogICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmlu
ZWQoY29udGV4dCk7Ci0KLSAgICBhdXRvIFtjb25uZWN0aW9uLCBkZXN0aW5hdGlvbklELCBtZXNz
YWdlTmFtZSwgdGltZW91dF0gPSAqaW5mbzsKLSAgICBpZiAoYXV0byBkZWNvZGVyID0gY29ubmVj
dGlvbi0+d2FpdEZvck1lc3NhZ2UobWVzc2FnZU5hbWUsIGRlc3RpbmF0aW9uSUQsIHRpbWVvdXQs
IHsgfSkpIHsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUoZ2xvYmFs
T2JqZWN0LT52bSgpKTsKLSAgICAgICAgYXV0byBqc1Jlc3VsdCA9IGpzVmFsdWVGb3JBcmd1bWVu
dHMoZ2xvYmFsT2JqZWN0LCBtZXNzYWdlTmFtZSwgKmRlY29kZXIpOwotICAgICAgICBpZiAoc2Nv
cGUuZXhjZXB0aW9uKCkpIHsKLSAgICAgICAgICAgICpleGNlcHRpb24gPSB0b1JlZihnbG9iYWxP
YmplY3QsIHNjb3BlLmV4Y2VwdGlvbigpKTsKLSAgICAgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0
aW9uKCk7Ci0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7
Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGpzUmVzdWx0ID8gdG9SZWYoZ2xvYmFsT2JqZWN0
LCAqanNSZXN1bHQpIDogSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiAgICAgfQotICAg
IHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKyAgICBhdXRvKiBnbG9iYWxP
YmplY3QgPSB0b0pTKGNvbnRleHQpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soZ2xvYmFs
T2JqZWN0LT52bSgpKTsKKyAgICBhdXRvIGNvbm5lY3Rpb24gPSBwcm9jZXNzVGFyZ2V0RnJvbUFy
Z3VtZW50KGdsb2JhbE9iamVjdCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pOworICAgIGlmICgh
Y29ubmVjdGlvbikKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQp
OworICAgIHJldHVybiBzZW5kU3luY01lc3NhZ2VXaXRoSlNBcmd1bWVudHMoKmNvbm5lY3Rpb24s
IGNvbnRleHQsIGFyZ3VtZW50Q291bnQgLSAxLCBhcmd1bWVudHMgKyAxLCBleGNlcHRpb24pOwog
fQogCi1KU1ZhbHVlUmVmIEpTSVBDOjpzZW5kU3luY01lc3NhZ2UoSlNDb250ZXh0UmVmIGNvbnRl
eHQsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRD
b3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9u
KQorSlNWYWx1ZVJlZiBKU0lQQzo6Y3JlYXRlQ29ubmVjdGlvblBhaXIoSlNDb250ZXh0UmVmIGNv
bnRleHQsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1l
bnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0
aW9uKQogewotICAgIGF1dG8qIGdsb2JhbE9iamVjdCA9IHRvSlMoY29udGV4dCk7Ci0gICAgSlND
OjpKU0xvY2tIb2xkZXIgbG9jayhnbG9iYWxPYmplY3QtPnZtKCkpOwogICAgIFJlZlB0ciBqc0lQ
QyA9IHRvV3JhcHBlZChjb250ZXh0LCB0aGlzT2JqZWN0KTsKICAgICBpZiAoIWpzSVBDKSB7CiAg
ICAgICAgICpleGNlcHRpb24gPSBjcmVhdGVUeXBlRXJyb3IoY29udGV4dCwgIldyb25nIHR5cGUi
X3MpOwogICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiAgICAg
fQotCi0gICAgYXV0byBpbmZvID0gZXh0cmFjdFN5bmNJUENNZXNzYWdlSW5mbyhjb250ZXh0LCBh
cmd1bWVudENvdW50LCBhcmd1bWVudHMsIGV4Y2VwdGlvbik7Ci0gICAgaWYgKCFpbmZvKQorICAg
IGF1dG8gY29ubmVjdGlvbklkZW50aWZpZXJzID0gSVBDOjpDb25uZWN0aW9uOjpjcmVhdGVDb25u
ZWN0aW9uSWRlbnRpZmllclBhaXIoKTsKKyAgICBpZiAoIWNvbm5lY3Rpb25JZGVudGlmaWVycykK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotCi0gICAgYXV0
byBbY29ubmVjdGlvbiwgZGVzdGluYXRpb25JRCwgbWVzc2FnZU5hbWUsIHRpbWVvdXRdID0gKmlu
Zm87Ci0KLSAgICAvLyBGSVhNRTogU3VwcG9ydCB0aGUgb3B0aW9ucy4KLQotICAgIElQQzo6Q29u
bmVjdGlvbjo6U3luY1JlcXVlc3RJRCBzeW5jUmVxdWVzdElEOwotICAgIGF1dG8gZW5jb2RlciA9
IGNvbm5lY3Rpb24tPmNyZWF0ZVN5bmNNZXNzYWdlRW5jb2RlcihtZXNzYWdlTmFtZSwgZGVzdGlu
YXRpb25JRCwgc3luY1JlcXVlc3RJRCk7Ci0KLSAgICBpZiAoYXJndW1lbnRDb3VudCA+IDQpIHsK
LSAgICAgICAgaWYgKCFlbmNvZGVBcmd1bWVudChlbmNvZGVyLmdldCgpLCAqanNJUEMsIGNvbnRl
eHQsIGFyZ3VtZW50c1s0XSwgZXhjZXB0aW9uKSkKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVl
TWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLSAgICB9Ci0KLSAgICBpZiAoYXV0byByZXBseURlY29k
ZXIgPSBjb25uZWN0aW9uLT5zZW5kU3luY01lc3NhZ2Uoc3luY1JlcXVlc3RJRCwgV1RGTW92ZShl
bmNvZGVyKSwgdGltZW91dCwgeyB9KSkgewotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9D
QVRDSF9TQ09QRShnbG9iYWxPYmplY3QtPnZtKCkpOwotICAgICAgICBhdXRvKiBqc1Jlc3VsdCA9
IGpzUmVzdWx0RnJvbVJlcGx5RGVjb2RlcihnbG9iYWxPYmplY3QsIG1lc3NhZ2VOYW1lLCAqcmVw
bHlEZWNvZGVyKTsKLSAgICAgICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigpKSB7Ci0gICAgICAgICAg
ICAqZXhjZXB0aW9uID0gdG9SZWYoZ2xvYmFsT2JqZWN0LCBzY29wZS5leGNlcHRpb24oKSk7Ci0g
ICAgICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwotICAgICAgICAgICAgcmV0dXJuIEpT
VmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0
b1JlZihnbG9iYWxPYmplY3QsIGpzUmVzdWx0KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gSlNWYWx1
ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisgICAgYXV0byogZ2xvYmFsT2JqZWN0ID0gdG9KUyhj
b250ZXh0KTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKGdsb2JhbE9iamVjdC0+dm0oKSk7
CisgICAgYXV0byYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworICAgIEpTQzo6SlNPYmplY3QqIGNvbm5lY3Rpb25QYWly
T2JqZWN0ID0gSlNDOjpjb25zdHJ1Y3RFbXB0eUFycmF5KGdsb2JhbE9iamVjdCwgbnVsbHB0cik7
CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29u
dGV4dCkpOworICAgIGludCBpbmRleCA9IDA7CisgICAgYXV0byBqc1ZhbHVlID0gdG9KUyhnbG9i
YWxPYmplY3QsIEpTSVBDQ29ubmVjdGlvbjo6Y3JlYXRlKFdURk1vdmUoY29ubmVjdGlvbklkZW50
aWZpZXJzLT5zZXJ2ZXIpKS0+Y3JlYXRlSlNXcmFwcGVyKGNvbnRleHQpKTsKKyAgICBjb25uZWN0
aW9uUGFpck9iamVjdC0+cHV0RGlyZWN0SW5kZXgoZ2xvYmFsT2JqZWN0LCBpbmRleCsrLCBqc1Zh
bHVlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlTWFrZVVuZGVmaW5l
ZChjb250ZXh0KSk7CisgICAganNWYWx1ZSA9IHRvSlMoZ2xvYmFsT2JqZWN0LCBKU0lQQ0F0dGFj
aG1lbnQ6OmNyZWF0ZShXVEZNb3ZlKGNvbm5lY3Rpb25JZGVudGlmaWVycy0+Y2xpZW50KSktPmNy
ZWF0ZUpTV3JhcHBlcihjb250ZXh0KSk7CisgICAgY29ubmVjdGlvblBhaXJPYmplY3QtPnB1dERp
cmVjdEluZGV4KGdsb2JhbE9iamVjdCwgaW5kZXgrKywganNWYWx1ZSk7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCkpOworICAgIHJl
dHVybiB0b1JlZih2bSwgY29ubmVjdGlvblBhaXJPYmplY3QpOwogfQogCiBKU1ZhbHVlUmVmIEpT
SVBDOjpjcmVhdGVTdHJlYW1DbGllbnRDb25uZWN0aW9uKEpTQ29udGV4dFJlZiBjb250ZXh0LCBK
U09iamVjdFJlZiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQs
IGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKZGlm
ZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA3ZWVjZTg5
MjE5NzAyMGUxZDNkNzc2Mzk3MGNmNzRiYmNhMDEzYzRjLi4zMTI5NWM3ZWFlMzc3NTZiZjhlM2Iy
ZjFmNDA3N2JhYjZhMzVhZjMxIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9v
bHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMjItMDQtMjcgIEtpbW1vIEtpbm51bmVu
ICA8a2tpbm51bmVuQGFwcGxlLmNvbT4KKworICAgICAgICBJUEMgdGVzdGluZyBBUEkgc2hvdWxk
IGhhdmUgdGhlIGFiaWxpdHkgdG8gdGVzdCBJUEM6OkNvbm5lY3Rpb24gc2VuZCBhbmQgcmVjZWl2
ZSB0aHJvdWdoIElQQzo6Q29ubmVjdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjM5NDk1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRs
ZXIuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lQQ1Rlc3Rp
bmdBUEkubW06CisgICAgICAgIChURVNUKToKKyAgICAgICAgQ2hhbmdlIHR3byB0ZXN0cyB0byBw
YXNzICJJUEMiIG9iamVjdCBhcyB0aGUgdmFsdWUgb2YgRnJhbWVJbmZvRGF0YS4gVGhpcyB3YXkg
dGhlIGFyZ3VtZW50IGVuY29kZSBmdW5jdGlvbnMKKyAgICAgICAgZG8gbm90IG5lZWQgdG8gdGFr
ZSB0aGUgSlNJUEMgYXJndW1lbnQuCisKIDIwMjItMDQtMjcgIEtpbW1vIEtpbm51bmVuICA8a2tp
bm51bmVuQGFwcGxlLmNvbT4KIAogICAgICAgICB0ZXN0LXdlYmtpdHBlcmwgb3V0cHV0cyBlcnJv
cnMgYWJvdXQgdW5pbml0aWFsaXplZCAkcGxhdGZvcm0gdmFyaWFibGUKZGlmZiAtLWdpdCBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSVBDVGVzdGluZ0FQSS5tbSBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSVBDVGVzdGluZ0FQSS5tbQppbmRl
eCBmNzM4Y2VlNzRjNTJkMGU5OTVkZDNlMWQxMGRjNzJkZjFhNjJjNjMxLi44NDAzZmQ5ZjU5MDg5
YTExMTc2YjgwYzc3OTFlNGIzZWMwYzY2MDE0IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL0lQQ1Rlc3RpbmdBUEkubW0KKysrIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JUENUZXN0aW5nQVBJLm1tCkBAIC0xNzcsNyArMTc3
LDcgQEAgVEVTVChJUENUZXN0aW5nQVBJLCBDYW5TZW5kQWxlcnQpCiAKICAgICBkb25lID0gZmFs
c2U7CiAgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRIVE1MU3RyaW5nOkAiPCFET0NUWVBF
IGh0bWw+PHNjcmlwdD5JUEMuc2VuZFN5bmNNZXNzYWdlKCdVSScsIElQQy53ZWJQYWdlUHJveHlJ
RCwgSVBDLm1lc3NhZ2VzLldlYlBhZ2VQcm94eV9SdW5KYXZhU2NyaXB0QWxlcnQubmFtZSwgMTAw
LCIKLSAgICAgICAgIlt7dHlwZTogJ3VpbnQ2NF90JywgdmFsdWU6IElQQy5mcmFtZUlEfSwge3R5
cGU6ICdGcmFtZUluZm9EYXRhJ30sIHsndHlwZSc6ICdTdHJpbmcnLCAndmFsdWUnOiAnaGknfV0p
Ozwvc2NyaXB0PiJdOworICAgICAgICAiW3t0eXBlOiAndWludDY0X3QnLCB2YWx1ZTogSVBDLmZy
YW1lSUR9LCB7dHlwZTogJ0ZyYW1lSW5mb0RhdGEnLCB2YWx1ZTogSVBDfSwgeyd0eXBlJzogJ1N0
cmluZycsICd2YWx1ZSc6ICdoaSd9XSk7PC9zY3JpcHQ+Il07CiAgICAgVGVzdFdlYktpdEFQSTo6
VXRpbDo6cnVuKCZkb25lKTsKIAogICAgIEVYUEVDVF9TVFJFUShbYWxlcnRNZXNzYWdlIFVURjhT
dHJpbmddLCAiaGkiKTsKQEAgLTM0NSw3ICszNDUsNyBAQCBURVNUKElQQ1Rlc3RpbmdBUEksIERl
Y29kZXNSZXBseUFyZ3VtZW50c0ZvclByb21wdCkKICAgICBkb25lID0gZmFsc2U7CiAgICAgcHJv
bXB0UmVzdWx0ID0gQCJmb28iOwogICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0
cmluZzpAIjwhRE9DVFlQRSBodG1sPjxzY3JpcHQ+cmVzdWx0ID0gSVBDLnNlbmRTeW5jTWVzc2Fn
ZSgnVUknLCBJUEMud2ViUGFnZVByb3h5SUQsIElQQy5tZXNzYWdlcy5XZWJQYWdlUHJveHlfUnVu
SmF2YVNjcmlwdFByb21wdC5uYW1lLCAxMDAsIgotICAgICAgICAiW3t0eXBlOiAndWludDY0X3Qn
LCB2YWx1ZTogSVBDLmZyYW1lSUR9LCB7dHlwZTogJ0ZyYW1lSW5mb0RhdGEnfSwgeyd0eXBlJzog
J1N0cmluZycsICd2YWx1ZSc6ICdoaSd9LCB7J3R5cGUnOiAnU3RyaW5nJywgJ3ZhbHVlJzogJ2Jh
cid9XSk7PC9zY3JpcHQ+Il07CisgICAgICAgICJbe3R5cGU6ICd1aW50NjRfdCcsIHZhbHVlOiBJ
UEMuZnJhbWVJRH0sIHt0eXBlOiAnRnJhbWVJbmZvRGF0YScsIHZhbHVlOiBJUEN9LCB7J3R5cGUn
OiAnU3RyaW5nJywgJ3ZhbHVlJzogJ2hpJ30sIHsndHlwZSc6ICdTdHJpbmcnLCAndmFsdWUnOiAn
YmFyJ31dKTs8L3NjcmlwdD4iXTsKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUp
OwogCiAgICAgRVhQRUNUX1NUUkVRKFtwcm9tcHREZWZhdWx0IFVURjhTdHJpbmddLCAiYmFyIik7
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKaW5kZXggZDk5NjNhZGE2OGY3OWQ5NGNhMjljNDUzMjVmZDljN2UyMTk3YzdjNS4uMTZmNmU4
NDcyMWI3OWQ2YWY2MmM5MGQxMGQ0NzdjYTQ1Y2ViMWZmMyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBA
CisyMDIyLTA0LTI3ICBLaW1tbyBLaW5udW5lbiAgPGtraW5udW5lbkBhcHBsZS5jb20+CisKKyAg
ICAgICAgSVBDIHRlc3RpbmcgQVBJIHNob3VsZCBoYXZlIHRoZSBhYmlsaXR5IHRvIHRlc3QgSVBD
OjpDb25uZWN0aW9uIHNlbmQgYW5kIHJlY2VpdmUgdGhyb3VnaCBJUEM6OkNvbm5lY3Rpb24KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzOTQ5NQorCisg
ICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgICogaXBjL2NyZWF0ZS1j
b25uZWN0aW9uLWFuZC1zZW5kLWFzeW5jLmh0bWw6IEFkZGVkLgorCiAyMDIyLTA0LTI3ICBQYXRy
aWNrIEFuZ2xlICA8cGFuZ2xlQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBb
RmxleGJveF0gYDxidXR0b24+YCBhbmQgYDxzZWxlY3Q+YCBlbGVtZW50cyBhcmUgYXBwZWFyaW5n
IGluIGxpc3Qgb2YgRmxleCBjb250YWluZXJzCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pcGMv
Y3JlYXRlLWNvbm5lY3Rpb24tYW5kLXNlbmQtYXN5bmMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVz
dHMvaXBjL2NyZWF0ZS1jb25uZWN0aW9uLWFuZC1zZW5kLWFzeW5jLWV4cGVjdGVkLnR4dApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi42YWZmNzdkYjNiOGE2YTAyMTRmNjkwZGM0NTg4ODc2NWYzY2U3YjI0Ci0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaXBjL2NyZWF0ZS1jb25uZWN0aW9uLWFuZC1zZW5kLWFz
eW5jLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDQgQEAKKworUEFTUyBTZW5kaW5nIGFzeW5jIG1l
c3NhZ2VzIGZyb20gdGhlIHNlcnZlciBpbW1lZGlhdGVseSBhZnRlciBvcGVuaW5nIGEgbmV3IGNv
bm5lY3Rpb24gd29ya3MuCitQQVNTIFNlbmRpbmcgYXN5bmMgbWVzc2FnZXMgZnJvbSB0aGUgY2xp
ZW50IGltbWVkaWF0ZWx5IGFmdGVyIG9wZW5pbmcgdGhlIGNvbm5lY3Rpb24gd29ya3MuCisKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2lwYy9jcmVhdGUtY29ubmVjdGlvbi1hbmQtc2VuZC1hc3lu
Yy5odG1sIGIvTGF5b3V0VGVzdHMvaXBjL2NyZWF0ZS1jb25uZWN0aW9uLWFuZC1zZW5kLWFzeW5j
Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNzk4YzJmYTI2MDg3MTJmNGFjYTQ3NzUyZGJkNTVmZTkxZGJjNzUz
NQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2lwYy9jcmVhdGUtY29ubmVjdGlvbi1h
bmQtc2VuZC1hc3luYy5odG1sCkBAIC0wLDAgKzEsNzIgQEAKKzwhZG9jdHlwZSBodG1sPjwhLS0g
d2Via2l0LXRlc3QtcnVubmVyIFsgSVBDVGVzdGluZ0FQSUVuYWJsZWQ9dHJ1ZSBdIC0tPgorPHRp
dGxlPlRlc3QgdGhhdCBzZW5kaW5nIG1lc3NhZ2VzIGltbWVkaWF0ZWx5IGFmdGVyIGNyZWF0aW5n
IGEgbmV3IGNvbm5lY3Rpb24gd29ya3MuPC90aXRsZT4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJj
ZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90
ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8Ym9keT4KKzxzY3JpcHQ+Citjb25zdCBk
ZWZhdWx0VGltZW91dCA9IDEwMDA7CisKK3Byb21pc2VfdGVzdChhc3luYyB0ID0+IHsKKyAgICBp
ZiAoIXdpbmRvdy5JUEMpCisgICAgICAgIHJldHVybjsKKyAgICBjb25zdCB0ZXN0ZXJJRCA9IDQ0
NzsKKyAgICBmb3IgKGNvbnN0IHByb2Nlc3NUYXJnZXQgb2YgSVBDLnByb2Nlc3NUYXJnZXRzKSB7
CisgICAgICAgIC8vIFRlc3Qgc3RhcnRzIGhlcmUuCisgICAgICAgIGNvbnN0IFtjb25uZWN0aW9u
LCBjbGllbnRDb25uZWN0aW9uSWRlbnRpZmllcl0gPSBJUEMuY3JlYXRlQ29ubmVjdGlvblBhaXIo
KTsKKyAgICAgICAgY29ubmVjdGlvbi5vcGVuKCk7CisgICAgICAgIGNvbnN0IG1zZ3MgPSBbXTsK
KyAgICAgICAgY29uc3QgbnVtTWVzc2FnZXMgPSAxMDAwMDsKKyAgICAgICAgZm9yIChsZXQgdiA9
IDA7IHYgPCBudW1NZXNzYWdlczsgdisrKQorICAgICAgICAgICAgbXNncy5wdXNoKFt7IHR5cGU6
ICd1aW50MzJfdCcsIHZhbHVlOiB2ICsgMX1dKTsKKyAgICAgICAgbGV0IG1zZ05hbWUgPSBJUEMu
bWVzc2FnZXMuSVBDQ29ubmVjdGlvblRlc3Rlcl9Bc3luY01lc3NhZ2UubmFtZTsKKworICAgICAg
ICBJUEMuc2VuZE1lc3NhZ2UocHJvY2Vzc1RhcmdldCwgMCwgSVBDLm1lc3NhZ2VzLklQQ1Rlc3Rl
cl9DcmVhdGVDb25uZWN0aW9uVGVzdGVyLm5hbWUsIFsKKyAgICAgICAgICAgIHsgdHlwZTogJ3Vp
bnQ2NF90JywgdmFsdWU6IHRlc3RlcklEIH0sCisgICAgICAgICAgICB7IHR5cGU6ICdBdHRhY2ht
ZW50JywgdmFsdWU6IGNsaWVudENvbm5lY3Rpb25JZGVudGlmaWVyIH0sCisgICAgICAgIF0pOwor
ICAgICAgICB0cnkgeworICAgICAgICAgICAgZm9yIChsZXQgbXNnIG9mIG1zZ3MpCisgICAgICAg
ICAgICAgICAgY29ubmVjdGlvbi5zZW5kTWVzc2FnZSgwLCBtc2dOYW1lLCBtc2cpOworICAgICAg
ICAgICAgY29uc3QgcmVwbHkgPSBjb25uZWN0aW9uLnNlbmRTeW5jTWVzc2FnZSgwLCBJUEMubWVz
c2FnZXMuSVBDQ29ubmVjdGlvblRlc3Rlcl9TeW5jTWVzc2FnZS5uYW1lLCBkZWZhdWx0VGltZW91
dCwgW3sgdHlwZTogJ3VpbnQzMl90JywgdmFsdWU6IDU1IH1dKTsKKyAgICAgICAgICAgIGNvbnN0
IGZpcnN0UmVzdWx0ID0gcmVwbHkuYXJndW1lbnRzWzBdOworICAgICAgICAgICAgYXNzZXJ0X2Vx
dWFscyhmaXJzdFJlc3VsdC50eXBlLCAidWludDMyX3QiLCBgZm9yICR7IHByb2Nlc3NUYXJnZXQg
fWApOworICAgICAgICAgICAgYXNzZXJ0X2VxdWFscyhmaXJzdFJlc3VsdC52YWx1ZSwgNTUgKyBu
dW1NZXNzYWdlcywgYGZvciAkeyBwcm9jZXNzVGFyZ2V0IH1gKTsKKyAgICAgICAgfSBmaW5hbGx5
IHsKKyAgICAgICAgICAgIGNvbm5lY3Rpb24uaW52YWxpZGF0ZSgpOworICAgICAgICAgICAgSVBD
LnNlbmRTeW5jTWVzc2FnZShwcm9jZXNzVGFyZ2V0LCAwLCBJUEMubWVzc2FnZXMuSVBDVGVzdGVy
X1JlbGVhc2VDb25uZWN0aW9uVGVzdGVyLm5hbWUsIGRlZmF1bHRUaW1lb3V0LCBbeyB0eXBlOiAn
dWludDY0X3QnLCB2YWx1ZTogdGVzdGVySUQgfV0pOworICAgICAgICB9CisgICAgfQorfSwgIlNl
bmRpbmcgYXN5bmMgbWVzc2FnZXMgZnJvbSB0aGUgc2VydmVyIGltbWVkaWF0ZWx5IGFmdGVyIG9w
ZW5pbmcgYSBuZXcgY29ubmVjdGlvbiB3b3Jrcy4iKTsKKworcHJvbWlzZV90ZXN0KGFzeW5jIHQg
PT4geworICAgIGlmICghd2luZG93LklQQykKKyAgICAgICAgcmV0dXJuOworICAgIGNvbnN0IHRl
c3RlcklEID0gNDQ4OworICAgIGZvciAoY29uc3QgcHJvY2Vzc1RhcmdldCBvZiBJUEMucHJvY2Vz
c1RhcmdldHMpIHsKKyAgICAgICAgLy8gVGVzdCBzdGFydHMgaGVyZS4KKyAgICAgICAgY29uc3Qg
Y29ubmVjdGlvbkNvdW50ID0gNTsgLy8gRklYTUU6IHNob3VsZCBiZSAxMDAsIGJ1dCB3YWl0aW5n
IGZvciBtZXNzYWdlcyBpcyBzbG93LgorICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbm5l
Y3Rpb25Db3VudDsgKytpKSB7CisgICAgICAgICAgICBjb25zdCBbY29ubmVjdGlvbiwgY2xpZW50
Q29ubmVjdGlvbklkZW50aWZpZXJdID0gSVBDLmNyZWF0ZUNvbm5lY3Rpb25QYWlyKCk7CisgICAg
ICAgICAgICBjb25uZWN0aW9uLm9wZW4oKTsKKyAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2VDb3Vu
dCA9IDM7IC8vIEZJWE1FOiBzaG91bGQgYmUgMTAwMDAsIGJ1dCB3YWl0aW5nIGZvciBtZXNzYWdl
cyBpcyBzbG93LgorICAgICAgICAgICAgSVBDLnNlbmRNZXNzYWdlKHByb2Nlc3NUYXJnZXQsIDAs
IElQQy5tZXNzYWdlcy5JUENUZXN0ZXJfQ3JlYXRlQ29ubmVjdGlvblRlc3RlckFuZFNlbmRBc3lu
Y01lc3NhZ2VzLm5hbWUsIFsKKyAgICAgICAgICAgICAgICB7IHR5cGU6ICd1aW50NjRfdCcsIHZh
bHVlOiB0ZXN0ZXJJRCB9LAorICAgICAgICAgICAgICAgIHsgdHlwZTogJ0F0dGFjaG1lbnQnLCB2
YWx1ZTogY2xpZW50Q29ubmVjdGlvbklkZW50aWZpZXIgfSwKKyAgICAgICAgICAgICAgICB7IHR5
cGU6ICd1aW50MzJfdCcsIHZhbHVlOiBtZXNzYWdlQ291bnQgfSwKKyAgICAgICAgICAgIF0pOwor
ICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBmb3IgKGxldCB2ID0gMDsgdiA8IG1l
c3NhZ2VDb3VudDsgdisrKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1zZyA9IGNvbm5l
Y3Rpb24ud2FpdEZvck1lc3NhZ2UoMCwgSVBDLm1lc3NhZ2VzLklQQ0Nvbm5lY3Rpb25UZXN0ZXJf
QXN5bmNNZXNzYWdlLm5hbWUsIGRlZmF1bHRUaW1lb3V0KTsKKyAgICAgICAgICAgICAgICAgICAg
YXNzZXJ0X2VxdWFscyhtc2dbMF0udHlwZSwgInVpbnQzMl90IiwgYGZvciAkeyBwcm9jZXNzVGFy
Z2V0IH1gKTsKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0X2VxdWFscyhtc2dbMF0udmFsdWUs
IHYsIGBmb3IgJHsgcHJvY2Vzc1RhcmdldCB9YCk7CisKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24uaW52YWxpZGF0
ZSgpOworICAgICAgICAgICAgICAgIElQQy5zZW5kU3luY01lc3NhZ2UocHJvY2Vzc1RhcmdldCwg
MCwgSVBDLm1lc3NhZ2VzLklQQ1Rlc3Rlcl9SZWxlYXNlQ29ubmVjdGlvblRlc3Rlci5uYW1lLCBk
ZWZhdWx0VGltZW91dCwgW3sgdHlwZTogJ3VpbnQ2NF90JywgdmFsdWU6IHRlc3RlcklEIH1dKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30sICJTZW5kaW5nIGFzeW5jIG1lc3Nh
Z2VzIGZyb20gdGhlIGNsaWVudCBpbW1lZGlhdGVseSBhZnRlciBvcGVuaW5nIHRoZSBjb25uZWN0
aW9uIHdvcmtzLiIpOworPC9zY3JpcHQ+Cis8L2JvZHk+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2Yg
ZmlsZQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>