<?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>163179</bug_id>
          
          <creation_ts>2016-10-09 04:37:07 -0700</creation_ts>
          <short_desc>Attribute getter binding generated code should use more references</short_desc>
          <delta_ts>2016-10-10 02:05:48 -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>WebCore Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="youenn fablet">youennf</reporter>
          <assigned_to name="youenn fablet">youennf</assigned_to>
          <cc>alecflett</cc>
    
    <cc>beidson</cc>
    
    <cc>cdumez</cc>
    
    <cc>cgarcia</cc>
    
    <cc>commit-queue</cc>
    
    <cc>jsbell</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1238070</commentid>
    <comment_count>0</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-10-09 04:37:07 -0700</bug_when>
    <thetext>We can use references for ExecState and thisObject.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1238071</commentid>
    <comment_count>1</comment_count>
      <attachid>291042</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-10-09 04:42:52 -0700</bug_when>
    <thetext>Created attachment 291042
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1238117</commentid>
    <comment_count>2</comment_count>
      <attachid>291042</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-10-09 15:25:17 -0700</bug_when>
    <thetext>Comment on attachment 291042
Patch

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

Seems OK for now; makes things better in some ways, but worse in others with those extra conditions and variables.

&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:3903
&gt; +    my $useReferences = shift;

This boolean is really ugly, all the mysterious &quot;1&quot;, all the extra variables and cases. Is there some way to avoid this?

&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:4938
&gt; +    my ($signature, $inFunctionCall, $interface, $value, $thisValue, $useReferences) = @_;

This boolean is really ugly, all the mysterious &quot;1&quot;, all the extra variables and cases. Is there some way to avoid this?

&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:4945
&gt; +    # FIXNE: We should move to using references only

FIXME misspelled here</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1238215</commentid>
    <comment_count>3</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-10-10 00:38:19 -0700</bug_when>
    <thetext>Thanks for the review.

&gt; &gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:3903
&gt; &gt; +    my $useReferences = shift;
&gt; 
&gt; This boolean is really ugly, all the mysterious &quot;1&quot;, all the extra variables
&gt; and cases. Is there some way to avoid this?

This is temporary, since it should use references once attribute setters and methods are also moved to using references.
That said, in the meantime, it might be best to introduce a NativeToJSValueWithReferences and NativeToJSValueWithPointers, that would call a sub NativeToJSValue routine.


&gt; &gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:4945
&gt; &gt; +    # FIXNE: We should move to using references only
&gt; 
&gt; FIXME misspelled here

OK</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1238231</commentid>
    <comment_count>4</comment_count>
      <attachid>291077</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-10-10 01:28:26 -0700</bug_when>
    <thetext>Created attachment 291077
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1238233</commentid>
    <comment_count>5</comment_count>
      <attachid>291078</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-10-10 01:30:37 -0700</bug_when>
    <thetext>Created attachment 291078
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1238246</commentid>
    <comment_count>6</comment_count>
      <attachid>291078</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-10-10 02:05:44 -0700</bug_when>
    <thetext>Comment on attachment 291078
Patch for landing

Clearing flags on attachment: 291078

Committed r206992: &lt;http://trac.webkit.org/changeset/206992&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1238247</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-10-10 02:05:48 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>291042</attachid>
            <date>2016-10-09 04:42:52 -0700</date>
            <delta_ts>2016-10-10 01:28:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-163179-20161009133930.patch</filename>
            <type>text/plain</type>
            <size>196099</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA2OTY2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDRiN2Q1NWQ4YjYyN2Qw
NTdhNWEwMzNmYWEzYWY3Njk4MmI4MTMyNi4uNjFjZDA2ZGM0MDE1ZWU3NmRlMDlhMjBjNzg2Yzk0
ZWUwODEyZGNjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDM5IEBACiAyMDE2LTEwLTA5ICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAorICAgICAgICBBdHRyaWJ1dGUgZ2V0dGVy
IGJpbmRpbmcgZ2VuZXJhdGVkIGNvZGUgc2hvdWxkIHVzZSBtb3JlIHJlZmVyZW5jZXMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzE3OQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIGNoYW5nZSBvZiBi
ZWhhdmlvci4KKworICAgICAgICBVc2luZyBtb3JlIHJlZmVyZW5jZXMgaW4gYXR0cmlidXRlIGdl
dHRlciBnZW5lcmF0ZWQgY29kZSBzaW5jZSBCaW5kaW5nQ2FsbGVyOjphdHRyaWJ1dGUgY2FuIGRv
IHRoZQorICAgICAgICBwb2ludGVyLXRvLXJlZmVyZW5jZXMgY2hlY2tzIG9uY2UgZm9yIGFsbC4K
KworICAgICAgICBOZWVkZWQgdG8gdXBkYXRlIEdlbmVyYXRlQ2FsbFdpdGggYW5kIE5hdGl2ZVRv
SlNWYWx1ZSB0byBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgcmVmZXJlbmNlcyAoYXR0cmlidXRlIGdl
dHRlcnMpIG9yCisgICAgICAgIHBvaW50ZXJzIChtZXRob2RzIGFuZCBhdHRyaWJ1dGUgc2V0dGVy
cykgYXJlIHRvIGJlIHVzZWQuCisgICAgICAgIEZ1dHVyZSByZWZhY3RvcmluZyBzaG91bGQgYWxs
aWduIG1ldGhvZHMvYXR0cmlidXRlIHNldHRlcnMgdG8gYXR0cmlidXRlIGdldHRlcnMuCisKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaDoKKyAgICAgICAgKFdlYkNvcmU6OkJp
bmRpbmdDYWxsZXI6OmF0dHJpYnV0ZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2Rl
R2VuZXJhdG9ySlMucG06CisgICAgICAgIChHZW5lcmF0ZUltcGxlbWVudGF0aW9uKToKKyAgICAg
ICAgKEdlbmVyYXRlQ2FsbFdpdGgpOgorICAgICAgICAoTmF0aXZlVG9KU1ZhbHVlKToKKyAgICAg
ICAgKEpTVmFsdWVUb05hdGl2ZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdEFjdGl2ZURPTU9iamVjdC5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RFeGNlcHRpb24uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RHbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwOgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHA6CisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuY3BwOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb25kZXRlcm1pbmlzdGljLmNwcDoKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcDoKKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNhdHRyaWJ1dGUuY3BwOgorCisyMDE2LTEwLTA5ICBZ
b3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKwogICAgICAgICBQcm9taXNlIGF0dHJp
YnV0ZSBnZXR0ZXJzIHNob3VsZCByZWplY3QgcHJvbWlzZXMgaW4gY2FzZSBvZiBjYXN0ZWQtdGhp
cyBlcnJvcnMKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE2MzE2NwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJp
bmRpbmcuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCmluZGV4
IGExMmYxZGU1YjBkYTJhZGVjOGJmMTJmNzQ5NDJiOThjNTRjM2RjYzcuLjE2NGJlNWUzNDZiNzBm
YTI0YmZmYmM1MzQ5ZTZkMGU4OGUwZTA3MmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NQmluZGluZy5oCkBAIC0zMzUsNyArMzM1LDcgQEAgZW51bSBjbGFzcyBDYXN0ZWRUaGlz
RXJyb3JCZWhhdmlvciB7IFRocm93LCBSZXR1cm5FYXJseSwgUmVqZWN0UHJvbWlzZSB9OwogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBKU0NsYXNzPgogc3RydWN0IEJpbmRpbmdDYWxsZXIgewotICAgIHVz
aW5nIEF0dHJpYnV0ZUdldHRlckZ1bmN0aW9uID0gSlNDOjpKU1ZhbHVlKEpTQzo6RXhlY1N0YXRl
KiwgSlNDbGFzcyosIEpTQzo6VGhyb3dTY29wZSYpOworICAgIHVzaW5nIEF0dHJpYnV0ZUdldHRl
ckZ1bmN0aW9uID0gSlNDOjpKU1ZhbHVlKEpTQzo6RXhlY1N0YXRlJiwgSlNDbGFzcyYsIEpTQzo6
VGhyb3dTY29wZSYpOwogCiAgICAgdGVtcGxhdGU8QXR0cmlidXRlR2V0dGVyRnVuY3Rpb24gZ2V0
dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvciBzaG91bGRUaHJvdyA9IENhc3RlZFRoaXNFcnJv
ckJlaGF2aW9yOjpUaHJvdz4KICAgICBzdGF0aWMgSlNDOjpFbmNvZGVkSlNWYWx1ZSBhdHRyaWJ1
dGUoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0M6OkVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
Y29uc3QgY2hhciogYXR0cmlidXRlTmFtZSkKQEAgLTM1MSw4ICszNTEsNyBAQCBzdHJ1Y3QgQmlu
ZGluZ0NhbGxlciB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdFByb21pc2VXaXRoR2V0
dGVyVHlwZUVycm9yKCpzdGF0ZSwgSlNDbGFzczo6aW5mbygpLT5jbGFzc05hbWUsIGF0dHJpYnV0
ZU5hbWUpOwogICAgICAgICAgICAgcmV0dXJuIEpTQzo6SlNWYWx1ZTo6ZW5jb2RlKEpTQzo6anNV
bmRlZmluZWQoKSk7CiAgICAgICAgIH0KLSAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCByZWZh
Y3RvciB0aGUgYmluZGluZyBnZW5lcmF0ZWQgY29kZSB0byB1c2UgcmVmZXJlbmNlcyBmb3Igc3Rh
dGUgYW5kIHRoaXNPYmplY3QuCi0gICAgICAgIHJldHVybiBKU0M6OkpTVmFsdWU6OmVuY29kZShn
ZXR0ZXIoc3RhdGUsIHRoaXNPYmplY3QsIHRocm93U2NvcGUpKTsKKyAgICAgICAgcmV0dXJuIEpT
Qzo6SlNWYWx1ZTo6ZW5jb2RlKGdldHRlcigqc3RhdGUsICp0aGlzT2JqZWN0LCB0aHJvd1Njb3Bl
KSk7CiAgICAgfQogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy9Db2RlR2VuZXJhdG9ySlMucG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L0NvZGVHZW5lcmF0b3JKUy5wbQppbmRleCA3ODFhMWI1OTg3YjcyYzk0N2ViNjA0ODI0YjRiOGVj
OTE5ZGZiZmI4Li5iNzY1MzcwMzJhOTZjNjY4OTYwZGQyNTA0ZjdlNjg2MmNlY2QxY2JlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5w
bQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5w
bQpAQCAtMjkyNiwyNSArMjkyNiwyNiBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAg
ICAgICAgICAgICAgICAgICAkdGVtcGxhdGVQYXJhbWV0ZXJzIC49ICIsIENhc3RlZFRoaXNFcnJv
ckJlaGF2aW9yOjpSZWplY3RQcm9taXNlIjsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgInN0YXRpYyBpbmxpbmUgSlNWYWx1ZSAke2dldEZ1
bmN0aW9uTmFtZX1HZXR0ZXIoRXhlY1N0YXRlKiwgJHtjbGFzc05hbWV9KiwgVGhyb3dTY29wZSYg
dGhyb3dTY29wZSk7XG5cbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
c3RhdGljIGlubGluZSBKU1ZhbHVlICR7Z2V0RnVuY3Rpb25OYW1lfUdldHRlcihFeGVjU3RhdGUm
LCAke2NsYXNzTmFtZX0mLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTtcblxuIik7CiAKICAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIkVuY29kZWRKU1ZhbHVlICR7Z2V0RnVuY3Rp
b25OYW1lfShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSlcbiIpOwogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7
CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIEJpbmRpbmdD
YWxsZXI8JHtjbGFzc05hbWV9Pjo6YXR0cmlidXRlPCR7dGVtcGxhdGVQYXJhbWV0ZXJzfT4oc3Rh
dGUsIHRoaXNWYWx1ZSwgXCIkbmFtZVwiKTtcbiIpOwogICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAifVxuXG4iKTsKIAotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAic3RhdGljIGlubGluZSBKU1ZhbHVlICR7Z2V0RnVuY3Rpb25OYW1lfUdldHRlcihFeGVjU3Rh
dGUqIHN0YXRlLCAke2NsYXNzTmFtZX0qIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpXG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgInN0YXRpYyBpbmxp
bmUgSlNWYWx1ZSAke2dldEZ1bmN0aW9uTmFtZX1HZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgJHtj
bGFzc05hbWV9JiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKVxuIik7CiAgICAg
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKICAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7XG4iKTsKICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJz
dGF0aWMgaW5saW5lIEpTVmFsdWUgJHtnZXRGdW5jdGlvbk5hbWV9R2V0dGVyKEV4ZWNTdGF0ZSop
O1xuXG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgInN0YXRpYyBpbmxp
bmUgSlNWYWx1ZSAke2dldEZ1bmN0aW9uTmFtZX1HZXR0ZXIoRXhlY1N0YXRlJik7XG5cbiIpOwog
CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJFbmNvZGVkSlNWYWx1ZSAke2dl
dEZ1bmN0aW9uTmFtZX0oRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUsIFByb3BlcnR5
TmFtZSlcbiIpOwogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7Ci0g
ICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZSgke2dldEZ1bmN0aW9uTmFtZX1HZXR0ZXIoc3RhdGUpKTtcbiIpOworICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEFTU0VSVChzdGF0ZSk7XG4iKTsKKyAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKCR7
Z2V0RnVuY3Rpb25OYW1lfUdldHRlcigqc3RhdGUpKTtcbiIpOwogICAgICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsKIAotICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAic3RhdGljIGlubGluZSBKU1ZhbHVlICR7Z2V0RnVuY3Rpb25OYW1lfUdldHRlcihF
eGVjU3RhdGUqIHN0YXRlKVxuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICJzdGF0aWMgaW5saW5lIEpTVmFsdWUgJHtnZXRGdW5jdGlvbk5hbWV9R2V0dGVyKEV4ZWNTdGF0
ZSYgc3RhdGUpXG4iKTsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIp
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgVU5V
U0VEX1BBUkFNKHN0YXRlKTtcbiIpOwpAQCAtMjk2NSw5ICsyOTY2LDkgQEAgc3ViIEdlbmVyYXRl
SW1wbGVtZW50YXRpb24KICAgICAgICAgICAgICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkZy
YW1lLmgiKTsKICAgICAgICAgICAgICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIlNldHRpbmdz
LmgiKTsKICAgICAgICAgICAgICAgICAgICAgbXkgJGVuYWJsZV9mdW5jdGlvbiA9IFRvTWV0aG9k
TmFtZSgkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0VuYWJsZWRC
eVNldHRpbmd9KSAuICJFbmFibGVkIjsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgaWYgKFVOTElLRUxZKCF0aGlzT2JqZWN0LT53cmFwcGVkKCkuZnJhbWUoKSkp
XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKFVO
TElLRUxZKCF0aGlzT2JqZWN0LndyYXBwZWQoKS5mcmFtZSgpKSlcbiIpOwogICAgICAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgU2V0dGlu
Z3MmIHNldHRpbmdzID0gdGhpc09iamVjdC0+d3JhcHBlZCgpLmZyYW1lKCktPnNldHRpbmdzKCk7
XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgU2V0dGlu
Z3MmIHNldHRpbmdzID0gdGhpc09iamVjdC53cmFwcGVkKCkuZnJhbWUoKS0+c2V0dGluZ3MoKTtc
biIpOwogICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoIXNl
dHRpbmdzLiRlbmFibGVfZnVuY3Rpb24oKSlcbiIpOwogICAgICAgICAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7XG4iKTsKICAgICAg
ICAgICAgICAgICB9CkBAIC0yOTc5LDkgKzI5ODAsOSBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRh
dGlvbgogICAgICAgICAgICAgICAgICEkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0
cmlidXRlcy0+e0RvTm90Q2hlY2tTZWN1cml0eX0gJiYKICAgICAgICAgICAgICAgICAhJGF0dHJp
YnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntEb05vdENoZWNrU2VjdXJpdHlP
bkdldHRlcn0pIHsKICAgICAgICAgICAgICAgICBpZiAoJGludGVyZmFjZU5hbWUgZXEgIkRPTVdp
bmRvdyIpIHsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYg
KCFCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coc3RhdGUsIHRo
aXNPYmplY3QtPndyYXBwZWQoKSwgVGhyb3dTZWN1cml0eUVycm9yKSlcbiIpOworICAgICAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoIUJpbmRpbmdTZWN1cml0eTo6
c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdygmc3RhdGUsIHRoaXNPYmplY3Qud3JhcHBlZCgp
LCBUaHJvd1NlY3VyaXR5RXJyb3IpKVxuIik7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKCFCaW5kaW5nU2Vj
dXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9GcmFtZShzdGF0ZSwgdGhpc09iamVjdC0+d3JhcHBl
ZCgpLmZyYW1lKCksIFRocm93U2VjdXJpdHlFcnJvcikpXG4iKTsKKyAgICAgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKCFCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFs
bG93QWNjZXNzVG9GcmFtZSgmc3RhdGUsIHRoaXNPYmplY3Qud3JhcHBlZCgpLmZyYW1lKCksIFRo
cm93U2VjdXJpdHlFcnJvcikpXG4iKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpO1xuIik7
CiAgICAgICAgICAgICB9CkBAIC0yOTkyLDcgKzI5OTMsNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1l
bnRhdGlvbgogICAgICAgICAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCI8d3RmL05ldmVyRGVz
dHJveWVkLmg+IiwgIldFQl9SRVBMQVkiKTsKIAogICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiI2lmIEVOQUJMRShXRUJfUkVQTEFZKVxuIik7Ci0gICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHN0YXRl
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc3RhdGUubGV4aWNh
bEdsb2JhbE9iamVjdCgpO1xuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgSW5wdXRDdXJzb3ImIGN1cnNvciA9IGdsb2JhbE9iamVjdC0+aW5wdXRDdXJzb3IoKTtc
biIpOwogCiAgICAgICAgICAgICAgICAgbXkgJG5hdGl2ZVR5cGUgPSBHZXROYXRpdmVUeXBlKCRp
bnRlcmZhY2UsICR0eXBlKTsKQEAgLTMwMDAsMTAgKzMwMDEsMTAgQEAgc3ViIEdlbmVyYXRlSW1w
bGVtZW50YXRpb24KICAgICAgICAgICAgICAgICBteSAkZXhjZXB0aW9uQ29kZSA9ICRnZXR0ZXJN
YXlUaHJvd0xlZ2FjeUV4Y2VwdGlvbldpdGhNZXNzYWdlID8gImVjLmNvZGUiIDogKCRnZXR0ZXJN
YXlUaHJvd0xlZ2FjeUV4Y2VwdGlvbiA/ICJlYyIgOiAiMCIpOwogICAgICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBBdG9taWNT
dHJpbmc+IGJpbmRpbmdOYW1lKFwiJGludGVyZmFjZU5hbWUuJG5hbWVcIiwgQXRvbWljU3RyaW5n
OjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7XG4iKTsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICBpZiAoY3Vyc29yLmlzQ2FwdHVyaW5nKCkpIHtcbiIpOwotICAgICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICAkbWVtb2l6ZWRUeXBlIG1lbW9pemVk
UmVzdWx0ID0gdGhpc09iamVjdC0+d3JhcHBlZCgpLiRpbXBsR2V0dGVyRnVuY3Rpb25OYW1lKCIg
LiBqb2luKCIsICIsIEBhcmd1bWVudHMpIC4gIik7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICAgICAgJG1lbW9pemVkVHlwZSBtZW1vaXplZFJlc3VsdCA9IHRo
aXNPYmplY3Qud3JhcHBlZCgpLiRpbXBsR2V0dGVyRnVuY3Rpb25OYW1lKCIgLiBqb2luKCIsICIs
IEBhcmd1bWVudHMpIC4gIik7XG4iKTsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICAgICAgY3Vyc29yLmFwcGVuZElucHV0PE1lbW9pemVkRE9NUmVzdWx0PCRtZW1vaXpl
ZFR5cGU+PihiaW5kaW5nTmFtZS5nZXQoKS5zdHJpbmcoKSwgbWVtb2l6ZWRSZXN1bHQsICRleGNl
cHRpb25Db2RlKTtcbiIpOwotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
ICAgICBKU1ZhbHVlIHJlc3VsdCA9ICIgLiBOYXRpdmVUb0pTVmFsdWUoJGF0dHJpYnV0ZS0+c2ln
bmF0dXJlLCAwLCAkaW50ZXJmYWNlLCAibWVtb2l6ZWRSZXN1bHQiLCAidGhpc09iamVjdCIpIC4g
IjtcbiIpOwotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBzZXRE
T01FeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIGVjKTtcbiIpIGlmICRnZXR0ZXJNYXlUaHJv
d0xlZ2FjeUV4Y2VwdGlvbjsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICAgICAgSlNWYWx1ZSByZXN1bHQgPSAiIC4gTmF0aXZlVG9KU1ZhbHVlKCRhdHRyaWJ1dGUtPnNp
Z25hdHVyZSwgMCwgJGludGVyZmFjZSwgIm1lbW9pemVkUmVzdWx0IiwgInRoaXNPYmplY3QiLCAx
KSAuICI7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAg
c2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgdGhyb3dTY29wZSwgZWMpO1xuIikgaWYgJGdldHRlck1h
eVRocm93TGVnYWN5RXhjZXB0aW9uOwogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgICAgICByZXR1cm4gcmVzdWx0O1xuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgfVxuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICJcbiIpOwpAQCAtMzAxMiw4ICszMDEzLDggQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24K
ICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgTWVtb2l6ZWRET01S
ZXN1bHRCYXNlKiBpbnB1dCA9IGN1cnNvci5mZXRjaElucHV0PE1lbW9pemVkRE9NUmVzdWx0QmFz
ZT4oKTtcbiIpOwogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBp
ZiAoaW5wdXQgJiYgaW5wdXQtPmNvbnZlcnRUbzwkbWVtb2l6ZWRUeXBlPihtZW1vaXplZFJlc3Vs
dCkpIHtcbiIpOwogICAgICAgICAgICAgICAgICMgRklYTUU6IHRoZSBnZW5lcmF0ZWQgY29kZSBz
aG91bGQgcmVwb3J0IGFuIGVycm9yIGlmIGFuIGlucHV0IGNhbm5vdCBiZSBmZXRjaGVkIG9yIGNv
bnZlcnRlZC4KLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgICAg
IEpTVmFsdWUgcmVzdWx0ID0gIiAuIE5hdGl2ZVRvSlNWYWx1ZSgkYXR0cmlidXRlLT5zaWduYXR1
cmUsIDAsICRpbnRlcmZhY2UsICJtZW1vaXplZFJlc3VsdCIsICJ0aGlzT2JqZWN0IikgLiAiO1xu
Iik7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgICAgICBzZXRE
T01FeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIGlucHV0LT5leGNlcHRpb25Db2RlKCkpO1xu
IikgaWYgJGdldHRlck1heVRocm93TGVnYWN5RXhjZXB0aW9uOworICAgICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSAiIC4gTmF0aXZl
VG9KU1ZhbHVlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgMCwgJGludGVyZmFjZSwgIm1lbW9pemVk
UmVzdWx0IiwgInRoaXNPYmplY3QiLCAxKSAuICI7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICAgICAgICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIHRocm93
U2NvcGUsIGlucHV0LT5leGNlcHRpb25Db2RlKCkpO1xuIikgaWYgJGdldHRlck1heVRocm93TGVn
YWN5RXhjZXB0aW9uOwogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDtcbiIpOwogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgICAgICB9XG4iKTsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICB9XG4iKTsKQEAgLTMwMjEsMTggKzMwMjIsMTggQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50
YXRpb24KICAgICAgICAgICAgIH0gIyBhdHRyaWJ1dGUgTm9uZGV0ZXJtaW5pc3RpYwogCiAgICAg
ICAgICAgICBpZiAoSGFzQ3VzdG9tR2V0dGVyKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzKSkgewotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IHJldHVybiB0aGlzT2JqZWN0LT4kaW1wbEdldHRlckZ1bmN0aW9uTmFtZSgqc3RhdGUpO1xuIik7
CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIHRoaXNPYmpl
Y3QuJGltcGxHZXR0ZXJGdW5jdGlvbk5hbWUoc3RhdGUpO1xuIik7CiAgICAgICAgICAgICB9IGVs
c2lmICgkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0NoZWNrU2Vj
dXJpdHlGb3JOb2RlfSkgewogICAgICAgICAgICAgICAgICRpbXBsSW5jbHVkZXN7IkpTRE9NQmlu
ZGluZy5oIn0gPSAxOwotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7XG4iKTsKLSAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gc2hvdWxkQWxsb3dBY2Nlc3NUb05vZGUoc3Rh
dGUsIGltcGwuIiAuICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+bmFtZSAuICIoKSkgPyAiIC4gTmF0
aXZlVG9KU1ZhbHVlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgMCwgJGludGVyZmFjZSwgImltcGwu
JGltcGxHZXR0ZXJGdW5jdGlvbk5hbWUoKSIsICJ0aGlzT2JqZWN0IikgLiAiIDoganNOdWxsKCk7
XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC53cmFwcGVkKCk7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICByZXR1cm4gc2hvdWxkQWxsb3dBY2Nlc3NUb05vZGUoJnN0YXRlLCBpbXBs
LiIgLiAkYXR0cmlidXRlLT5zaWduYXR1cmUtPm5hbWUgLiAiKCkpID8gIiAuIE5hdGl2ZVRvSlNW
YWx1ZSgkYXR0cmlidXRlLT5zaWduYXR1cmUsIDAsICRpbnRlcmZhY2UsICJpbXBsLiRpbXBsR2V0
dGVyRnVuY3Rpb25OYW1lKCkiLCAidGhpc09iamVjdCIsIDEpIC4gIiA6IGpzTnVsbCgpO1xuIik7
CiAgICAgICAgICAgICB9IGVsc2lmICgkdHlwZSBlcSAiRXZlbnRIYW5kbGVyIikgewogICAgICAg
ICAgICAgICAgICRpbXBsSW5jbHVkZXN7IkV2ZW50TmFtZXMuaCJ9ID0gMTsKICAgICAgICAgICAg
ICAgICBteSAkZ2V0dGVyID0gJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPntXaW5kb3dFdmVudEhhbmRsZXJ9ID8gIndpbmRvd0V2ZW50SGFuZGxlckF0dHJpYnV0ZSIK
ICAgICAgICAgICAgICAgICAgICAgOiAkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0
cmlidXRlcy0+e0RvY3VtZW50RXZlbnRIYW5kbGVyfSA/ICJkb2N1bWVudEV2ZW50SGFuZGxlckF0
dHJpYnV0ZSIKICAgICAgICAgICAgICAgICAgICAgOiAiZXZlbnRIYW5kbGVyQXR0cmlidXRlIjsK
ICAgICAgICAgICAgICAgICBteSAkZXZlbnROYW1lID0gRXZlbnRIYW5kbGVyQXR0cmlidXRlRXZl
bnROYW1lKCRhdHRyaWJ1dGUpOwotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgIHJldHVybiAkZ2V0dGVyKHRoaXNPYmplY3QtPndyYXBwZWQoKSwgJGV2ZW50TmFtZSk7XG4i
KTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gJGdldHRl
cih0aGlzT2JqZWN0LndyYXBwZWQoKSwgJGV2ZW50TmFtZSk7XG4iKTsKICAgICAgICAgICAgIH0g
ZWxzaWYgKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+dHlwZSA9fiAvQ29uc3RydWN0b3IkLykgewog
ICAgICAgICAgICAgICAgIG15ICRjb25zdHJ1Y3RvclR5cGUgPSAkYXR0cmlidXRlLT5zaWduYXR1
cmUtPnR5cGU7CiAgICAgICAgICAgICAgICAgJGNvbnN0cnVjdG9yVHlwZSA9fiBzL0NvbnN0cnVj
dG9yJC8vOwpAQCAtMzA0MSwzMCArMzA0MiwzMCBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlv
bgogICAgICAgICAgICAgICAgIGlmICgkaW50ZXJmYWNlTmFtZSBlcSAiRE9NV2luZG93Iikgewog
ICAgICAgICAgICAgICAgICAgICBteSAkbmFtZWQgPSAoJGNvbnN0cnVjdG9yVHlwZSA9fiAvTmFt
ZWQkLykgPyAiTmFtZWQiIDogIiI7CiAgICAgICAgICAgICAgICAgICAgICRjb25zdHJ1Y3RvclR5
cGUgPX4gcy9OYW1lZCQvLzsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgcmV0dXJuIEpTIiAuICRjb25zdHJ1Y3RvclR5cGUgLiAiOjpnZXQke25hbWVkfUNvbnN0
cnVjdG9yKHN0YXRlLT52bSgpLCB0aGlzT2JqZWN0KTtcbiIpOworICAgICAgICAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gSlMiIC4gJGNvbnN0cnVjdG9yVHlwZSAu
ICI6OmdldCR7bmFtZWR9Q29uc3RydWN0b3Ioc3RhdGUudm0oKSwgJnRoaXNPYmplY3QpO1xuIik7
CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgQWRkVG9JbXBs
SW5jbHVkZXMoIkpTIiAuICRjb25zdHJ1Y3RvclR5cGUgLiAiLmgiLCAkYXR0cmlidXRlLT5zaWdu
YXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0NvbmRpdGlvbmFsfSk7Ci0gICAgICAgICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBKUyIgLiAkY29uc3RydWN0b3JU
eXBlIC4gIjo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIHRoaXNPYmplY3QtPmdsb2JhbE9i
amVjdCgpKTtcbiIpOworICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICByZXR1cm4gSlMiIC4gJGNvbnN0cnVjdG9yVHlwZSAuICI6OmdldENvbnN0cnVjdG9yKHN0YXRl
LnZtKCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpO1xuIik7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfSBlbHNpZiAoISRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57R2V0dGVyTWF5VGhyb3dMZWdhY3lFeGNlcHRpb259ICYmICEkYXR0cmlidXRl
LT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0dldHRlck1heVRocm93TGVnYWN5RXhj
ZXB0aW9uV2l0aE1lc3NhZ2V9KSB7CiAgICAgICAgICAgICAgICAgbXkgJGNhY2hlSW5kZXggPSAw
OwogICAgICAgICAgICAgICAgIGlmICgkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0
cmlidXRlcy0+e0NhY2hlZEF0dHJpYnV0ZX0pIHsKICAgICAgICAgICAgICAgICAgICAgJGNhY2hl
SW5kZXggPSAkY3VycmVudENhY2hlZEF0dHJpYnV0ZTsKICAgICAgICAgICAgICAgICAgICAgJGN1
cnJlbnRDYWNoZWRBdHRyaWJ1dGUrKzsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgaWYgKEpTVmFsdWUgY2FjaGVkVmFsdWUgPSB0aGlzT2JqZWN0LT5tXyIgLiAk
YXR0cmlidXRlLT5zaWduYXR1cmUtPm5hbWUgLiAiLmdldCgpKVxuIik7CisgICAgICAgICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmIChKU1ZhbHVlIGNhY2hlZFZhbHVlID0g
dGhpc09iamVjdC5tXyIgLiAkYXR0cmlidXRlLT5zaWduYXR1cmUtPm5hbWUgLiAiLmdldCgpKVxu
Iik7CiAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1
cm4gY2FjaGVkVmFsdWU7XG4iKTsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAg
ICBteSBAY2FsbFdpdGhBcmdzID0gR2VuZXJhdGVDYWxsV2l0aCgkYXR0cmlidXRlLT5zaWduYXR1
cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0NhbGxXaXRofSwgXEBpbXBsQ29udGVudCwgImpzVW5k
ZWZpbmVkKCkiKTsKKyAgICAgICAgICAgICAgICBteSBAY2FsbFdpdGhBcmdzID0gR2VuZXJhdGVD
YWxsV2l0aCgkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0NhbGxX
aXRofSwgXEBpbXBsQ29udGVudCwgImpzVW5kZWZpbmVkKCkiLCAwLCAxKTsKIAogICAgICAgICAg
ICAgICAgIGlmICgkc3ZnTGlzdFByb3BlcnR5VHlwZSkgewotICAgICAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICBKU1ZhbHVlIHJlc3VsdCA9ICAiIC4gTmF0aXZlVG9KU1Zh
bHVlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgMCwgJGludGVyZmFjZSwgInRoaXNPYmplY3QtPndy
YXBwZWQoKS4kaW1wbEdldHRlckZ1bmN0aW9uTmFtZSgiIC4gKGpvaW4gIiwgIiwgQGNhbGxXaXRo
QXJncykgLiAiKSIsICJ0aGlzT2JqZWN0IikgLiAiO1xuIik7CisgICAgICAgICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgIEpTVmFsdWUgcmVzdWx0ID0gICIgLiBOYXRpdmVUb0pT
VmFsdWUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLCAwLCAkaW50ZXJmYWNlLCAidGhpc09iamVjdC53
cmFwcGVkKCkuJGltcGxHZXR0ZXJGdW5jdGlvbk5hbWUoIiAuIChqb2luICIsICIsIEBjYWxsV2l0
aEFyZ3MpIC4gIikiLCAidGhpc09iamVjdCIsIDEpIC4gIjtcbiIpOwogICAgICAgICAgICAgICAg
IH0gZWxzaWYgKCRzdmdQcm9wZXJ0eU9yTGlzdFByb3BlcnR5VHlwZSkgewotICAgICAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAkc3ZnUHJvcGVydHlPckxpc3RQcm9wZXJ0
eVR5cGUmIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCkucHJvcGVydHlSZWZlcmVuY2UoKTtc
biIpOworICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAkc3ZnUHJv
cGVydHlPckxpc3RQcm9wZXJ0eVR5cGUmIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKS5wcm9w
ZXJ0eVJlZmVyZW5jZSgpO1xuIik7CiAgICAgICAgICAgICAgICAgICAgIGlmICgkc3ZnUHJvcGVy
dHlPckxpc3RQcm9wZXJ0eVR5cGUgZXEgImZsb2F0IikgeyAjIFNwZWNpYWwgY2FzZSBmb3IgSlNT
VkdOdW1iZXIKLSAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IEpTVmFsdWUgcmVzdWx0ID0gIiAuIE5hdGl2ZVRvSlNWYWx1ZSgkYXR0cmlidXRlLT5zaWduYXR1
cmUsIDAsICRpbnRlcmZhY2UsICJpbXBsIiwgInRoaXNPYmplY3QiKSAuICI7XG4iKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEpTVmFsdWUgcmVzdWx0
ID0gIiAuIE5hdGl2ZVRvSlNWYWx1ZSgkYXR0cmlidXRlLT5zaWduYXR1cmUsIDAsICRpbnRlcmZh
Y2UsICJpbXBsIiwgInRoaXNPYmplY3QiLCAxKSAuICI7XG4iKTsKICAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgIEpTVmFsdWUgcmVzdWx0ID0gIiAuIE5hdGl2ZVRvSlNWYWx1ZSgkYXR0cmlidXRlLT5zaWdu
YXR1cmUsIDAsICRpbnRlcmZhY2UsICJpbXBsLiRpbXBsR2V0dGVyRnVuY3Rpb25OYW1lKCIgLiAo
am9pbiAiLCAiLCBAY2FsbFdpdGhBcmdzKSAuICIpIiwgInRoaXNPYmplY3QiKSAuICI7XG4iKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEpTVmFsdWUg
cmVzdWx0ID0gIiAuIE5hdGl2ZVRvSlNWYWx1ZSgkYXR0cmlidXRlLT5zaWduYXR1cmUsIDAsICRp
bnRlcmZhY2UsICJpbXBsLiRpbXBsR2V0dGVyRnVuY3Rpb25OYW1lKCIgLiAoam9pbiAiLCAiLCBA
Y2FsbFdpdGhBcmdzKSAuICIpIiwgInRoaXNPYmplY3QiLCAxKSAuICI7XG4iKTsKIAogICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTMwODEsMzEgKzMw
ODIsMzEgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAgICAgICAgICAg
fQogCiAgICAgICAgICAgICAgICAgICAgIHVuc2hpZnQoQGFyZ3VtZW50cywgQGNhbGxXaXRoQXJn
cyk7Ci0gICAgICAgICAgICAgICAgICAgIG15ICRqc1R5cGUgPSBOYXRpdmVUb0pTVmFsdWUoJGF0
dHJpYnV0ZS0+c2lnbmF0dXJlLCAwLCAkaW50ZXJmYWNlLCAiJHtmdW5jdGlvbk5hbWV9KCIgLiBq
b2luKCIsICIsIEBhcmd1bWVudHMpIC4gIikiLCAidGhpc09iamVjdCIpOwotICAgICAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+
d3JhcHBlZCgpO1xuIikgaWYgISRhdHRyaWJ1dGUtPmlzU3RhdGljOworICAgICAgICAgICAgICAg
ICAgICBteSAkanNUeXBlID0gTmF0aXZlVG9KU1ZhbHVlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwg
MCwgJGludGVyZmFjZSwgIiR7ZnVuY3Rpb25OYW1lfSgiIC4gam9pbigiLCAiLCBAYXJndW1lbnRz
KSAuICIpIiwgInRoaXNPYmplY3QiLCAxKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpO1xuIikgaWYg
ISRhdHRyaWJ1dGUtPmlzU3RhdGljOwogICAgICAgICAgICAgICAgICAgICBpZiAoJGNvZGVHZW5l
cmF0b3ItPklzU1ZHQW5pbWF0ZWRUeXBlKCR0eXBlKSkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byBvYmogPSAkanNUeXBlO1xuIik7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBKU1ZhbHVlIHJlc3Vs
dCA9IHRvSlMoc3RhdGUsIHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpLCBvYmouZ2V0KCkpO1xu
Iik7CisgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBKU1Zh
bHVlIHJlc3VsdCA9IHRvSlMoJnN0YXRlLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCBvYmou
Z2V0KCkpO1xuIik7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBKU1ZhbHVlIHJlc3VsdCA9ICRqc1R5
cGU7XG4iKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KIAotICAg
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHRoaXNPYmplY3QtPm1fIiAuICRh
dHRyaWJ1dGUtPnNpZ25hdHVyZS0+bmFtZSAuICIuc2V0KHN0YXRlLT52bSgpLCB0aGlzT2JqZWN0
LCByZXN1bHQpO1xuIikgaWYgJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPntDYWNoZWRBdHRyaWJ1dGV9OworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIHRoaXNPYmplY3QubV8iIC4gJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5uYW1lIC4gIi5z
ZXQoc3RhdGUudm0oKSwgJnRoaXNPYmplY3QsIHJlc3VsdCk7XG4iKSBpZiAkYXR0cmlidXRlLT5z
aWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0NhY2hlZEF0dHJpYnV0ZX07CiAgICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIHJlc3VsdDtcbiIpOwogCiAg
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHVuc2hpZnQoQGFyZ3VtZW50cywg
R2VuZXJhdGVDYWxsV2l0aCgkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRl
cy0+e0NhbGxXaXRofSwgXEBpbXBsQ29udGVudCwgImpzVW5kZWZpbmVkKCkiKSk7CisgICAgICAg
ICAgICAgICAgdW5zaGlmdChAYXJndW1lbnRzLCBHZW5lcmF0ZUNhbGxXaXRoKCRhdHRyaWJ1dGUt
PnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q2FsbFdpdGh9LCBcQGltcGxDb250ZW50
LCAianNVbmRlZmluZWQoKSIsIDAsIDEpKTsKIAogICAgICAgICAgICAgICAgIGlmICgkc3ZnUHJv
cGVydHlPckxpc3RQcm9wZXJ0eVR5cGUpIHsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgJHN2Z1Byb3BlcnR5T3JMaXN0UHJvcGVydHlUeXBlIGltcGwoKnRoaXNP
YmplY3QtPndyYXBwZWQoKSk7XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgSlNWYWx1ZSByZXN1bHQgPSAiIC4gTmF0aXZlVG9KU1ZhbHVlKCRhdHRyaWJ1
dGUtPnNpZ25hdHVyZSwgMCwgJGludGVyZmFjZSwgImltcGwuJGltcGxHZXR0ZXJGdW5jdGlvbk5h
bWUoIiAuIGpvaW4oIiwgIiwgQGFyZ3VtZW50cykgLiAiKSIsICJ0aGlzT2JqZWN0IikgLiAiO1xu
Iik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICRzdmdQcm9w
ZXJ0eU9yTGlzdFByb3BlcnR5VHlwZSBpbXBsKCp0aGlzT2JqZWN0LndyYXBwZWQoKSk7XG4iKTsK
KyAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgSlNWYWx1ZSByZXN1
bHQgPSAiIC4gTmF0aXZlVG9KU1ZhbHVlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgMCwgJGludGVy
ZmFjZSwgImltcGwuJGltcGxHZXR0ZXJGdW5jdGlvbk5hbWUoIiAuIGpvaW4oIiwgIiwgQGFyZ3Vt
ZW50cykgLiAiKSIsICJ0aGlzT2JqZWN0IiwgMSkgLiAiO1xuIik7CiAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0
byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTtcbiIpOwotICAgICAgICAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBKU1ZhbHVlIHJlc3VsdCA9ICIgLiBOYXRpdmVUb0pT
VmFsdWUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLCAwLCAkaW50ZXJmYWNlLCAiaW1wbC4kaW1wbEdl
dHRlckZ1bmN0aW9uTmFtZSgiIC4gam9pbigiLCAiLCBAYXJndW1lbnRzKSAuICIpIiwgInRoaXNP
YmplY3QiKSAuICI7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpO1xuIik7CisgICAgICAgICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEpTVmFsdWUgcmVzdWx0ID0gIiAuIE5h
dGl2ZVRvSlNWYWx1ZSgkYXR0cmlidXRlLT5zaWduYXR1cmUsIDAsICRpbnRlcmZhY2UsICJpbXBs
LiRpbXBsR2V0dGVyRnVuY3Rpb25OYW1lKCIgLiBqb2luKCIsICIsIEBhcmd1bWVudHMpIC4gIiki
LCAidGhpc09iamVjdCIsIDEpIC4gIjtcbiIpOwogICAgICAgICAgICAgICAgIH0KIAotICAgICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwg
dGhyb3dTY29wZSwgZWMpO1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgdGhyb3dTY29wZSwgZWMpO1xuIik7CiAKICAg
ICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gcmVzdWx0O1xuIik7
CiAgICAgICAgICAgICB9CkBAIC0zODk5LDE4ICszOTAwLDIzIEBAIHN1YiBHZW5lcmF0ZUNhbGxX
aXRoCiAgICAgbXkgJG91dHB1dEFycmF5ID0gc2hpZnQ7CiAgICAgbXkgJHJldHVyblZhbHVlID0g
c2hpZnQ7CiAgICAgbXkgJGZ1bmN0aW9uID0gc2hpZnQ7CisgICAgbXkgJHVzZVJlZmVyZW5jZXMg
PSBzaGlmdDsKKworICAgIG15ICRzdGF0ZVBvaW50ZXIgPSAkdXNlUmVmZXJlbmNlcyA/ICIoJnN0
YXRlKSIgOiAic3RhdGUiOworICAgIG15ICRzdGF0ZVJlZmVyZW5jZSA9ICR1c2VSZWZlcmVuY2Vz
ID8gInN0YXRlIiA6ICIoKnN0YXRlKSI7CisgICAgbXkgJGdsb2JhbE9iamVjdCA9ICR1c2VSZWZl
cmVuY2VzID8gImpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLmxleGljYWxHbG9iYWxP
YmplY3QoKSkiIDogImpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCkpIjsKIAogICAgIG15IEBjYWxsV2l0aEFyZ3M7Ci0gICAgcHVzaChAY2FsbFdp
dGhBcmdzLCAiKnN0YXRlIikgaWYgJGNvZGVHZW5lcmF0b3ItPkV4dGVuZGVkQXR0cmlidXRlQ29u
dGFpbnMoJGNhbGxXaXRoLCAiU2NyaXB0U3RhdGUiKTsKKyAgICBwdXNoKEBjYWxsV2l0aEFyZ3Ms
ICRzdGF0ZVJlZmVyZW5jZSkgaWYgJGNvZGVHZW5lcmF0b3ItPkV4dGVuZGVkQXR0cmlidXRlQ29u
dGFpbnMoJGNhbGxXaXRoLCAiU2NyaXB0U3RhdGUiKTsKICAgICBpZiAoJGNvZGVHZW5lcmF0b3It
PkV4dGVuZGVkQXR0cmlidXRlQ29udGFpbnMoJGNhbGxXaXRoLCAiU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCIpKSB7Ci0gICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBhdXRvKiBjb250ZXh0
ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3Qo
KSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTtcbiIpOworICAgICAgICBwdXNoKEAkb3V0cHV0
QXJyYXksICIgICAgYXV0byogY29udGV4dCA9ICRnbG9iYWxPYmplY3QtPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKTtcbiIpOwogICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgaWYgKCFj
b250ZXh0KVxuIik7CiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgcmV0dXJu
IiAuICgkcmV0dXJuVmFsdWUgPyAiICIgLiAkcmV0dXJuVmFsdWUgOiAiIikgLiAiO1xuIik7CiAg
ICAgICAgIHB1c2goQGNhbGxXaXRoQXJncywgIipjb250ZXh0Iik7CiAgICAgfQogICAgIGlmICgk
Y29kZUdlbmVyYXRvci0+RXh0ZW5kZWRBdHRyaWJ1dGVDb250YWlucygkY2FsbFdpdGgsICJEb2N1
bWVudCIpKSB7CiAgICAgICAgICRpbXBsSW5jbHVkZXN7IkRvY3VtZW50LmgifSA9IDE7Ci0gICAg
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9N
R2xvYmFsT2JqZWN0Kj4oc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKTtcbiIpOworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgYXV0
byogY29udGV4dCA9ICRnbG9iYWxPYmplY3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTtcbiIp
OwogICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgaWYgKCFjb250ZXh0KVxuIik7CiAg
ICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgcmV0dXJuIiAuICgkcmV0dXJuVmFs
dWUgPyAiICIgLiAkcmV0dXJuVmFsdWUgOiAiIikgLiAiO1xuIik7CiAgICAgICAgIHB1c2goQCRv
dXRwdXRBcnJheSwgIiAgICBBU1NFUlQoY29udGV4dC0+aXNEb2N1bWVudCgpKTtcbiIpOwpAQCAt
MzkxOSwyMCArMzkyNSwyMCBAQCBzdWIgR2VuZXJhdGVDYWxsV2l0aAogICAgIH0KICAgICBpZiAo
JGNvZGVHZW5lcmF0b3ItPkV4dGVuZGVkQXR0cmlidXRlQ29udGFpbnMoJGNhbGxXaXRoLCAiQ2Fs
bGVyRG9jdW1lbnQiKSkgewogICAgICAgICAkaW1wbEluY2x1ZGVzeyJEb2N1bWVudC5oIn0gPSAx
OwotICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgYXV0byogZG9jdW1lbnQgPSBjYWxs
ZXJET01XaW5kb3coc3RhdGUpLmRvY3VtZW50KCk7XG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1
dEFycmF5LCAiICAgIGF1dG8qIGRvY3VtZW50ID0gY2FsbGVyRE9NV2luZG93KCRzdGF0ZVBvaW50
ZXIpLmRvY3VtZW50KCk7XG4iKTsKICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlm
ICghZG9jdW1lbnQpXG4iKTsKICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICBy
ZXR1cm4iIC4gKCRyZXR1cm5WYWx1ZSA/ICIgIiAuICRyZXR1cm5WYWx1ZSA6ICIiKSAuICI7XG4i
KTsKICAgICAgICAgcHVzaChAY2FsbFdpdGhBcmdzLCAiKmRvY3VtZW50Iik7CiAgICAgfQogICAg
IGlmICgkZnVuY3Rpb24gYW5kICRjb2RlR2VuZXJhdG9yLT5FeHRlbmRlZEF0dHJpYnV0ZUNvbnRh
aW5zKCRjYWxsV2l0aCwgIlNjcmlwdEFyZ3VtZW50cyIpKSB7Ci0gICAgICAgIHB1c2goQCRvdXRw
dXRBcnJheSwgIiAgICBSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+IHNjcmlwdEFy
Z3VtZW50cyhJbnNwZWN0b3I6OmNyZWF0ZVNjcmlwdEFyZ3VtZW50cyhzdGF0ZSwgIiAuIEB7JGZ1
bmN0aW9uLT5wYXJhbWV0ZXJzfSAuICIpKTtcbiIpOworICAgICAgICBwdXNoKEAkb3V0cHV0QXJy
YXksICIgICAgUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPiBzY3JpcHRBcmd1bWVu
dHMoSW5zcGVjdG9yOjpjcmVhdGVTY3JpcHRBcmd1bWVudHMoJHN0YXRlUG9pbnRlciwgIiAuIEB7
JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfSAuICIpKTtcbiIpOwogICAgICAgICAkaW1wbEluY2x1ZGVz
eyI8aW5zcGVjdG9yL1NjcmlwdEFyZ3VtZW50cy5oPiJ9ID0gMTsKICAgICAgICAgJGltcGxJbmNs
dWRlc3siPGluc3BlY3Rvci9TY3JpcHRDYWxsU3RhY2tGYWN0b3J5Lmg+In0gPSAxOwogICAgICAg
ICBwdXNoKEBjYWxsV2l0aEFyZ3MsICJXVEZNb3ZlKHNjcmlwdEFyZ3VtZW50cykiKTsKICAgICB9
Ci0gICAgcHVzaChAY2FsbFdpdGhBcmdzLCAiYWN0aXZlRE9NV2luZG93KHN0YXRlKSIpIGlmICRj
b2RlR2VuZXJhdG9yLT5FeHRlbmRlZEF0dHJpYnV0ZUNvbnRhaW5zKCRjYWxsV2l0aCwgIkFjdGl2
ZVdpbmRvdyIpOwotICAgIHB1c2goQGNhbGxXaXRoQXJncywgImZpcnN0RE9NV2luZG93KHN0YXRl
KSIpIGlmICRjb2RlR2VuZXJhdG9yLT5FeHRlbmRlZEF0dHJpYnV0ZUNvbnRhaW5zKCRjYWxsV2l0
aCwgIkZpcnN0V2luZG93Iik7Ci0gICAgcHVzaChAY2FsbFdpdGhBcmdzLCAiY2FsbGVyRE9NV2lu
ZG93KHN0YXRlKSIpIGlmICRjb2RlR2VuZXJhdG9yLT5FeHRlbmRlZEF0dHJpYnV0ZUNvbnRhaW5z
KCRjYWxsV2l0aCwgIkNhbGxlcldpbmRvdyIpOworICAgIHB1c2goQGNhbGxXaXRoQXJncywgImFj
dGl2ZURPTVdpbmRvdygkc3RhdGVQb2ludGVyKSIpIGlmICRjb2RlR2VuZXJhdG9yLT5FeHRlbmRl
ZEF0dHJpYnV0ZUNvbnRhaW5zKCRjYWxsV2l0aCwgIkFjdGl2ZVdpbmRvdyIpOworICAgIHB1c2go
QGNhbGxXaXRoQXJncywgImZpcnN0RE9NV2luZG93KCRzdGF0ZVBvaW50ZXIpIikgaWYgJGNvZGVH
ZW5lcmF0b3ItPkV4dGVuZGVkQXR0cmlidXRlQ29udGFpbnMoJGNhbGxXaXRoLCAiRmlyc3RXaW5k
b3ciKTsKKyAgICBwdXNoKEBjYWxsV2l0aEFyZ3MsICJjYWxsZXJET01XaW5kb3coJHN0YXRlUG9p
bnRlcikiKSBpZiAkY29kZUdlbmVyYXRvci0+RXh0ZW5kZWRBdHRyaWJ1dGVDb250YWlucygkY2Fs
bFdpdGgsICJDYWxsZXJXaW5kb3ciKTsKIAogICAgIHJldHVybiBAY2FsbFdpdGhBcmdzOwogfQpA
QCAtNDkyOSwyMSArNDkzNSwyNiBAQCBzdWIgSlNWYWx1ZVRvTmF0aXZlCiAKIHN1YiBOYXRpdmVU
b0pTVmFsdWUKIHsKLSAgICBteSAoJHNpZ25hdHVyZSwgJGluRnVuY3Rpb25DYWxsLCAkaW50ZXJm
YWNlLCAkdmFsdWUsICR0aGlzVmFsdWUpID0gQF87CisgICAgbXkgKCRzaWduYXR1cmUsICRpbkZ1
bmN0aW9uQ2FsbCwgJGludGVyZmFjZSwgJHZhbHVlLCAkdGhpc1ZhbHVlLCAkdXNlUmVmZXJlbmNl
cykgPSBAXzsKIAogICAgIG15ICRjb25kaXRpb25hbCA9ICRzaWduYXR1cmUtPmV4dGVuZGVkQXR0
cmlidXRlcy0+e0NvbmRpdGlvbmFsfTsKICAgICBteSAkdHlwZSA9ICRzaWduYXR1cmUtPnR5cGU7
CiAgICAgbXkgJGlzTnVsbGFibGUgPSAkc2lnbmF0dXJlLT5pc051bGxhYmxlOwogICAgIG15ICRt
YXlUaHJvd0V4Y2VwdGlvbiA9ICRzaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0dldHRl
ck1heVRocm93RXhjZXB0aW9ufSB8fCAkc2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntN
YXlUaHJvd0V4Y2VwdGlvbn07CiAKLSAgICBteSAkZ2xvYmFsT2JqZWN0ID0gJHRoaXNWYWx1ZSA/
ICIkdGhpc1ZhbHVlLT5nbG9iYWxPYmplY3QoKSIgOiAianNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0
Kj4oc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSkiOworICAgICMgRklYTkU6IFdlIHNob3Vs
ZCBtb3ZlIHRvIHVzaW5nIHJlZmVyZW5jZXMgb25seQorICAgIG15ICRzdGF0ZVBvaW50ZXIgPSAk
dXNlUmVmZXJlbmNlcyA/ICImc3RhdGUiIDogInN0YXRlIjsKKyAgICBteSAkc3RhdGVSZWZlcmVu
Y2UgPSAkdXNlUmVmZXJlbmNlcyA/ICJzdGF0ZSIgOiAiKnN0YXRlIjsKKyAgICBteSAkd3JhcHBl
ZCA9ICR1c2VSZWZlcmVuY2VzID8gIiR0aGlzVmFsdWUud3JhcHBlZCgpIiA6ICIkdGhpc1ZhbHVl
LT53cmFwcGVkKCkiOworICAgIG15ICRnbG9iYWxPYmplY3QgPSAkdXNlUmVmZXJlbmNlcyA/ICJq
c0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpIiA6
ICJqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
KSI7CisgICAgJGdsb2JhbE9iamVjdCA9ICR1c2VSZWZlcmVuY2VzID8gIiR0aGlzVmFsdWUuZ2xv
YmFsT2JqZWN0KCkiIDoiJHRoaXNWYWx1ZS0+Z2xvYmFsT2JqZWN0KCkiIGlmICR0aGlzVmFsdWU7
CiAKLSAgICByZXR1cm4gInRvSlNCb29sZWFuKCpzdGF0ZSwgdGhyb3dTY29wZSwgJHZhbHVlKSIg
aWYgJHR5cGUgZXEgImJvb2xlYW4iICYmICRtYXlUaHJvd0V4Y2VwdGlvbjsKKyAgICByZXR1cm4g
InRvSlNCb29sZWFuKCRzdGF0ZVJlZmVyZW5jZSwgdGhyb3dTY29wZSwgJHZhbHVlKSIgaWYgJHR5
cGUgZXEgImJvb2xlYW4iICYmICRtYXlUaHJvd0V4Y2VwdGlvbjsKICAgICByZXR1cm4gImpzQm9v
bGVhbigkdmFsdWUpIiBpZiAkdHlwZSBlcSAiYm9vbGVhbiI7Ci0gICAgcmV0dXJuICJ0b0pTTnVs
bGFibGVEYXRlKCpzdGF0ZSwgdGhyb3dTY29wZSwgJHZhbHVlKSIgaWYgJHR5cGUgZXEgIkRhdGUi
ICYmICRpc051bGxhYmxlICYmICRtYXlUaHJvd0V4Y2VwdGlvbjsKLSAgICByZXR1cm4gImpzRGF0
ZU9yTnVsbChzdGF0ZSwgJHZhbHVlKSIgaWYgJHR5cGUgZXEgIkRhdGUiICYmICRpc051bGxhYmxl
OwotICAgIHJldHVybiAidG9KU0RhdGUoKnN0YXRlLCB0aHJvd1Njb3BlLCAkdmFsdWUpIiBpZiAk
dHlwZSBlcSAiRGF0ZSIgJiYgJG1heVRocm93RXhjZXB0aW9uOwotICAgIHJldHVybiAianNEYXRl
KHN0YXRlLCAkdmFsdWUpIiBpZiAkdHlwZSBlcSAiRGF0ZSI7CisgICAgcmV0dXJuICJ0b0pTTnVs
bGFibGVEYXRlKCRzdGF0ZVJlZmVyZW5jZSwgdGhyb3dTY29wZSwgJHZhbHVlKSIgaWYgJHR5cGUg
ZXEgIkRhdGUiICYmICRpc051bGxhYmxlICYmICRtYXlUaHJvd0V4Y2VwdGlvbjsKKyAgICByZXR1
cm4gImpzRGF0ZU9yTnVsbCgkc3RhdGVQb2ludGVyLCAkdmFsdWUpIiBpZiAkdHlwZSBlcSAiRGF0
ZSIgJiYgJGlzTnVsbGFibGU7CisgICAgcmV0dXJuICJ0b0pTRGF0ZSgkc3RhdGVSZWZlcmVuY2Us
IHRocm93U2NvcGUsICR2YWx1ZSkiIGlmICR0eXBlIGVxICJEYXRlIiAmJiAkbWF5VGhyb3dFeGNl
cHRpb247CisgICAgcmV0dXJuICJqc0RhdGUoJHN0YXRlUG9pbnRlciwgJHZhbHVlKSIgaWYgJHR5
cGUgZXEgIkRhdGUiOwogCiAgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc051bWVyaWNUeXBlKCR0
eXBlKSBvciAkdHlwZSBlcSAiRE9NVGltZVN0YW1wIikgewogICAgICAgICAjIFdlIGNvdWxkIGlu
c3RlYWQgb3ZlcmxvYWQgYSBmdW5jdGlvbiB0byB3b3JrIHdpdGggb3B0aW9uYWwgYXMgd2VsbCBh
cyBub24tb3B0aW9uYWwgbnVtYmVycywgYnV0IHRoaXMKQEAgLTQ5NTIsNDMgKzQ5NjMsNDMgQEAg
c3ViIE5hdGl2ZVRvSlNWYWx1ZQogICAgICAgICAgICAgJHZhbHVlID1+IHMvZ2V0VW5zaWduZWRJ
bnRlZ3JhbEF0dHJpYnV0ZS9nZXRJbnRlZ3JhbEF0dHJpYnV0ZS9nOwogICAgICAgICAgICAgJHZh
bHVlID0gInN0ZDo6bWF4KDAsICR2YWx1ZSkiOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiAi
dG9KU051bGxhYmxlTnVtYmVyKCpzdGF0ZSwgdGhyb3dTY29wZSwgJHZhbHVlKSIgaWYgJGlzTnVs
bGFibGUgJiYgJG1heVRocm93RXhjZXB0aW9uOworICAgICAgICByZXR1cm4gInRvSlNOdWxsYWJs
ZU51bWJlcigkc3RhdGVSZWZlcmVuY2UsIHRocm93U2NvcGUsICR2YWx1ZSkiIGlmICRpc051bGxh
YmxlICYmICRtYXlUaHJvd0V4Y2VwdGlvbjsKICAgICAgICAgcmV0dXJuICJ0b051bGxhYmxlSlNO
dW1iZXIoJHZhbHVlKSIgaWYgJGlzTnVsbGFibGU7Ci0gICAgICAgIHJldHVybiAidG9KU051bWJl
cigqc3RhdGUsIHRocm93U2NvcGUsICR2YWx1ZSkiIGlmICRtYXlUaHJvd0V4Y2VwdGlvbjsKKyAg
ICAgICAgcmV0dXJuICJ0b0pTTnVtYmVyKCRzdGF0ZVJlZmVyZW5jZSwgdGhyb3dTY29wZSwgJHZh
bHVlKSIgaWYgJG1heVRocm93RXhjZXB0aW9uOwogICAgICAgICByZXR1cm4gImpzTnVtYmVyKCR2
YWx1ZSkiOwogICAgIH0KIAogICAgIGlmICgkY29kZUdlbmVyYXRvci0+SXNFbnVtVHlwZSgkdHlw
ZSkpIHsKICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIjxydW50aW1lL0pTU3RyaW5nLmg+Iiwg
JGNvbmRpdGlvbmFsKTsKLSAgICAgICAgcmV0dXJuICJqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwg
JHZhbHVlKSI7CisgICAgICAgIHJldHVybiAianNTdHJpbmdXaXRoQ2FjaGUoJHN0YXRlUG9pbnRl
ciwgJHZhbHVlKSI7CiAgICAgfQogCiAgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc1N0cmluZ1R5
cGUoJHR5cGUpKSB7CiAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJVUkwuaCIsICRjb25kaXRp
b25hbCk7Ci0gICAgICAgIHJldHVybiAianNTdHJpbmdPck51bGwoc3RhdGUsICR2YWx1ZSkiIGlm
ICRpc051bGxhYmxlOworICAgICAgICByZXR1cm4gImpzU3RyaW5nT3JOdWxsKCRzdGF0ZVBvaW50
ZXIsICR2YWx1ZSkiIGlmICRpc051bGxhYmxlOwogICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygi
PHJ1bnRpbWUvSlNTdHJpbmcuaD4iLCAkY29uZGl0aW9uYWwpOwotICAgICAgICByZXR1cm4gImpz
U3RyaW5nV2l0aENhY2hlKHN0YXRlLCAkdmFsdWUpIjsKKyAgICAgICAgcmV0dXJuICJqc1N0cmlu
Z1dpdGhDYWNoZSgkc3RhdGVQb2ludGVyLCAkdmFsdWUpIjsKICAgICB9CiAKICAgICBpZiAoJGNv
ZGVHZW5lcmF0b3ItPklzU2VxdWVuY2VPckZyb3plbkFycmF5VHlwZSgkdHlwZSkpIHsKICAgICAg
ICAgbXkgJGlubmVyVHlwZSA9ICRjb2RlR2VuZXJhdG9yLT5HZXRTZXF1ZW5jZU9yRnJvemVuQXJy
YXlJbm5lclR5cGUoJHR5cGUpOwogICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiSlMke2lubmVy
VHlwZX0uaCIsICRjb25kaXRpb25hbCkgaWYgJGNvZGVHZW5lcmF0b3ItPklzUmVmUHRyVHlwZSgk
aW5uZXJUeXBlKTsKLSAgICAgICAgcmV0dXJuICJqc0FycmF5KHN0YXRlLCAkZ2xvYmFsT2JqZWN0
LCAkdmFsdWUpIiBpZiAkY29kZUdlbmVyYXRvci0+SXNTZXF1ZW5jZVR5cGUoJHR5cGUpOwotICAg
ICAgICByZXR1cm4gImpzRnJvemVuQXJyYXkoc3RhdGUsICRnbG9iYWxPYmplY3QsICR2YWx1ZSki
IGlmICRjb2RlR2VuZXJhdG9yLT5Jc0Zyb3plbkFycmF5VHlwZSgkdHlwZSk7CisgICAgICAgIHJl
dHVybiAianNBcnJheSgkc3RhdGVQb2ludGVyLCAkZ2xvYmFsT2JqZWN0LCAkdmFsdWUpIiBpZiAk
Y29kZUdlbmVyYXRvci0+SXNTZXF1ZW5jZVR5cGUoJHR5cGUpOworICAgICAgICByZXR1cm4gImpz
RnJvemVuQXJyYXkoJHN0YXRlUG9pbnRlciwgJGdsb2JhbE9iamVjdCwgJHZhbHVlKSIgaWYgJGNv
ZGVHZW5lcmF0b3ItPklzRnJvemVuQXJyYXlUeXBlKCR0eXBlKTsKICAgICB9CiAKICAgICBpZiAo
JHR5cGUgZXEgImFueSIpIHsKICAgICAgICAgbXkgJHJldHVyblR5cGUgPSAkc2lnbmF0dXJlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPntJbXBsZW1lbnRhdGlvblJldHVyblR5cGV9OwogICAgICAgICBp
ZiAoZGVmaW5lZCAkcmV0dXJuVHlwZSBhbmQgKCRyZXR1cm5UeXBlIGVxICJJREJLZXlQYXRoIiBv
ciAkcmV0dXJuVHlwZSBlcSAiSURCS2V5IikpIHsKICAgICAgICAgICAgIEFkZFRvSW1wbEluY2x1
ZGVzKCJJREJCaW5kaW5nVXRpbGl0aWVzLmgiLCAkY29uZGl0aW9uYWwpOwotICAgICAgICAgICAg
cmV0dXJuICJ0b0pTKCpzdGF0ZSwgKiRnbG9iYWxPYmplY3QsICR2YWx1ZSkiOworICAgICAgICAg
ICAgcmV0dXJuICJ0b0pTKCRzdGF0ZVJlZmVyZW5jZSwgKiRnbG9iYWxPYmplY3QsICR2YWx1ZSki
OwogICAgICAgICB9CiAgICAgICAgIHJldHVybiAkdmFsdWU7CiAgICAgfQogCiAgICAgaWYgKCR0
eXBlIGVxICJTZXJpYWxpemVkU2NyaXB0VmFsdWUiKSB7CiAgICAgICAgIEFkZFRvSW1wbEluY2x1
ZGVzKCJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIsICRjb25kaXRpb25hbCk7Ci0gICAgICAgIHJl
dHVybiAiJHZhbHVlID8gJHZhbHVlLT5kZXNlcmlhbGl6ZShzdGF0ZSwgJHRoaXNWYWx1ZS0+Z2xv
YmFsT2JqZWN0KCksIDApIDoganNOdWxsKCkiOworICAgICAgICByZXR1cm4gIiR2YWx1ZSA/ICR2
YWx1ZS0+ZGVzZXJpYWxpemUoJHN0YXRlUG9pbnRlciwgJGdsb2JhbE9iamVjdCwgMCkgOiBqc051
bGwoKSI7CiAgICAgfQogCiAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIlN0eWxlUHJvcGVydGllcy5o
IiwgJGNvbmRpdGlvbmFsKSBpZiAkdHlwZSBlcSAiQ1NTU3R5bGVEZWNsYXJhdGlvbiI7CkBAIC01
MDE2LDcgKzUwMjcsNyBAQCBzdWIgTmF0aXZlVG9KU1ZhbHVlCiAgICAgICAgICAgICBpZiAoJHNl
bGZJc1RlYXJPZmZUeXBlKSB7CiAgICAgICAgICAgICAgICAgIyBGSVhNRTogV2h5IFNWR01hdHJp
eCBzcGVjaWZpY2FsbHk/CiAgICAgICAgICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIlNWR01h
dHJpeFRlYXJPZmYuaCIsICRjb25kaXRpb25hbCk7Ci0gICAgICAgICAgICAgICAgJHZhbHVlID0g
IlNWR01hdHJpeFRlYXJPZmY6OmNyZWF0ZSgkdGhpc1ZhbHVlLT53cmFwcGVkKCksICR2YWx1ZSki
OworICAgICAgICAgICAgICAgICR2YWx1ZSA9ICJTVkdNYXRyaXhUZWFyT2ZmOjpjcmVhdGUoJHdy
YXBwZWQsICR2YWx1ZSkiOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBB
ZGRUb0ltcGxJbmNsdWRlcygiU1ZHU3RhdGljUHJvcGVydHlUZWFyT2ZmLmgiLCAkY29uZGl0aW9u
YWwpOwogICAgICAgICAgICAgICAgIG15ICRpbnRlcmZhY2VOYW1lID0gJGludGVyZmFjZS0+bmFt
ZTsKQEAgLTUwMzMsOCArNTA0NCw4IEBAIHN1YiBOYXRpdmVUb0pTVmFsdWUKICAgICBteSAkZnVu
Y3Rpb25OYW1lID0gInRvSlMiOwogICAgICRmdW5jdGlvbk5hbWUgPSAidG9KU05ld2x5Q3JlYXRl
ZCIgaWYgJHNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57TmV3T2JqZWN0fTsKIAotICAg
IG15ICRhcmd1bWVudHMgPSAic3RhdGUsICRnbG9iYWxPYmplY3QsICR2YWx1ZSI7Ci0gICAgJGFy
Z3VtZW50cyA9ICIqc3RhdGUsICokZ2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCAkdmFsdWUiIGlm
ICRtYXlUaHJvd0V4Y2VwdGlvbjsKKyAgICBteSAkYXJndW1lbnRzID0gIiRzdGF0ZVBvaW50ZXIs
ICRnbG9iYWxPYmplY3QsICR2YWx1ZSI7CisgICAgJGFyZ3VtZW50cyA9ICIkc3RhdGVSZWZlcmVu
Y2UsICokZ2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCAkdmFsdWUiIGlmICRtYXlUaHJvd0V4Y2Vw
dGlvbjsKIAogICAgIHJldHVybiAiJGZ1bmN0aW9uTmFtZSgkYXJndW1lbnRzKSI7CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0QWN0
aXZlRE9NT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RBY3RpdmVET01PYmplY3QuY3BwCmluZGV4IGQyMThkMGU1ODY3ZGE1MTY4NWY5MDdk
MWM3MDgyZWZhYTI2MWUzNDguLmYwMmIzOWM4ZTZjMjJlNzBmMGMyMzRjYmVjMmQwY2I0OTQ3MDcz
MWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RBY3RpdmVET01PYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RBY3RpdmVET01PYmplY3QuY3BwCkBAIC0xNDUsMjAgKzE0NSwy
MCBAQCBpbmxpbmUgSlNUZXN0QWN0aXZlRE9NT2JqZWN0KiBKU1Rlc3RBY3RpdmVET01PYmplY3Q6
OmNhc3RGb3JBdHRyaWJ1dGUoSlNDOjpFeGVjUwogICAgIHJldHVybiBqc0R5bmFtaWNDYXN0PEpT
VGVzdEFjdGl2ZURPTU9iamVjdCo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKIH0KIAot
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEFjdGl2ZURPTU9iamVjdEV4Y2l0aW5nQXR0ckdl
dHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RBY3RpdmVET01PYmplY3QqLCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKTsKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RBY3RpdmVET01PYmplY3RFeGNp
dGluZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0QWN0aXZlRE9NT2JqZWN0JiwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEFjdGl2ZURPTU9iamVj
dEV4Y2l0aW5nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RBY3RpdmVE
T01PYmplY3Q+OjphdHRyaWJ1dGU8anNUZXN0QWN0aXZlRE9NT2JqZWN0RXhjaXRpbmdBdHRyR2V0
dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAiZXhjaXRpbmdBdHRyIik7CiB9CiAKLXN0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RBY3RpdmVET01PYmplY3RFeGNpdGluZ0F0dHJHZXR0ZXIoRXhlY1N0
YXRlKiBzdGF0ZSwgSlNUZXN0QWN0aXZlRE9NT2JqZWN0KiB0aGlzT2JqZWN0LCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEFjdGl2ZURPTU9iamVj
dEV4Y2l0aW5nQXR0ckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RBY3RpdmVET01PYmpl
Y3QmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgaWYgKCFCaW5k
aW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9GcmFtZShzdGF0ZSwgdGhpc09iamVjdC0+
d3JhcHBlZCgpLmZyYW1lKCksIFRocm93U2VjdXJpdHlFcnJvcikpCisgICAgaWYgKCFCaW5kaW5n
U2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9GcmFtZSgmc3RhdGUsIHRoaXNPYmplY3Qud3Jh
cHBlZCgpLmZyYW1lKCksIFRocm93U2VjdXJpdHlFcnJvcikpCiAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CisgICAg
YXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0g
anNOdW1iZXIoaW1wbC5leGNpdGluZ0F0dHIoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RF
dmVudENvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RFdmVudENvbnN0cnVjdG9yLmNwcAppbmRleCAzYTQ1YzI4ODYyNWZmM2QzNzJi
ODg1ZWYxYTQ0MWE3NWZlMzM0ZmY4Li40OWFkYWRiZWI5NGY0NmYyN2ZjYTAxMmI2ZDg2ODUzODQ1
MjJkYWRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwCkBAIC0xODMsNTIg
KzE4Myw1MiBAQCBpbmxpbmUgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvciogSlNUZXN0RXZlbnRDb25z
dHJ1Y3Rvcjo6Y2FzdEZvckF0dHJpYnV0ZShKU0M6OkV4ZQogICAgIHJldHVybiBqc0R5bmFtaWND
YXN0PEpTVGVzdEV2ZW50Q29uc3RydWN0b3IqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7
CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RFdmVudENvbnN0cnVjdG9yQXR0cjFH
ZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvciosIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpOworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEV2ZW50Q29uc3RydWN0b3JB
dHRyMUdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RFdmVudENvbnN0cnVjdG9yJiwgVGhyb3dTY29w
ZSYgdGhyb3dTY29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEV2ZW50Q29uc3RydWN0b3JB
dHRyMShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5
TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RFdmVudENvbnN0cnVjdG9y
Pjo6YXR0cmlidXRlPGpzVGVzdEV2ZW50Q29uc3RydWN0b3JBdHRyMUdldHRlcj4oc3RhdGUsIHRo
aXNWYWx1ZSwgImF0dHIxIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RFdmVu
dENvbnN0cnVjdG9yQXR0cjFHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0RXZlbnRDb25z
dHJ1Y3RvciogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RFdmVudENvbnN0cnVjdG9yQXR0cjFHZXR0ZXIoRXhlY1N0YXRlJiBz
dGF0ZSwgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvciYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwotICAg
IEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwuYXR0cjEoKSk7
CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVz
dWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCBpbXBsLmF0dHIxKCkpOwogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RFdmVudENvbnN0cnVj
dG9yQXR0cjJHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvciosIFRocm93
U2NvcGUmIHRocm93U2NvcGUpOworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEV2ZW50Q29u
c3RydWN0b3JBdHRyMkdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RFdmVudENvbnN0cnVjdG9yJiwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEV2ZW50Q29u
c3RydWN0b3JBdHRyMihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RFdmVudENv
bnN0cnVjdG9yPjo6YXR0cmlidXRlPGpzVGVzdEV2ZW50Q29uc3RydWN0b3JBdHRyMkdldHRlcj4o
c3RhdGUsIHRoaXNWYWx1ZSwgImF0dHIyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RFdmVudENvbnN0cnVjdG9yQXR0cjJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0
RXZlbnRDb25zdHJ1Y3RvciogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RFdmVudENvbnN0cnVjdG9yQXR0cjJHZXR0ZXIoRXhl
Y1N0YXRlJiBzdGF0ZSwgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvciYgdGhpc09iamVjdCwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAg
VU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBl
ZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwu
YXR0cjIoKSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIEpT
VmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCBpbXBsLmF0dHIyKCkpOwog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKICNpZiBFTkFCTEUoU1BFQ0lBTF9FVkVOVCkKLXN0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RFdmVudENvbnN0cnVjdG9yQXR0cjNHZXR0ZXIoRXhlY1N0
YXRlKiwgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvciosIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwor
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEV2ZW50Q29uc3RydWN0b3JBdHRyM0dldHRlcihF
eGVjU3RhdGUmLCBKU1Rlc3RFdmVudENvbnN0cnVjdG9yJiwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEV2ZW50Q29uc3RydWN0b3JBdHRyMyhFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAg
ICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RFdmVudENvbnN0cnVjdG9yPjo6YXR0cmlidXRl
PGpzVGVzdEV2ZW50Q29uc3RydWN0b3JBdHRyM0dldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgImF0
dHIzIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RFdmVudENvbnN0cnVjdG9y
QXR0cjNHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvciogdGhp
c09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RFdmVudENvbnN0cnVjdG9yQXR0cjNHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0
RXZlbnRDb25zdHJ1Y3RvciYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsK
ICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsK
LSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVz
dWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwuYXR0cjMoKSk7CisgICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJp
bmdXaXRoQ2FjaGUoJnN0YXRlLCBpbXBsLmF0dHIzKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RFeGNlcHRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdEV4Y2VwdGlvbi5jcHAKaW5kZXggMzFjNmFlOTIxMTJjZDc2YzNmZjAyMGQ0ZTMy
MzA2OTE2YmRkYWJlYS4uYjZhMzAzMWJhNzJmMzJhOTZkOTIxMTJhYzAzNDZhNmNhYjhkNTY0MiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEV4Y2VwdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdEV4Y2VwdGlvbi5jcHAKQEAgLTEzNywxOSArMTM3LDE5IEBAIGlubGluZSBKU1Rl
c3RFeGNlcHRpb24qIEpTVGVzdEV4Y2VwdGlvbjo6Y2FzdEZvckF0dHJpYnV0ZShKU0M6OkV4ZWNT
dGF0ZSosIEVuY29kCiAgICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8SlNUZXN0RXhjZXB0aW9uKj4o
SlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0RXhjZXB0aW9uTmFtZUdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RFeGNlcHRpb24qLCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RFeGNl
cHRpb25OYW1lR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdEV4Y2VwdGlvbiYsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RFeGNlcHRpb25OYW1lKEV4ZWNT
dGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewog
ICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdEV4Y2VwdGlvbj46OmF0dHJpYnV0ZTxqc1Rl
c3RFeGNlcHRpb25OYW1lR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAibmFtZSIpOwogfQogCi1z
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RXhjZXB0aW9uTmFtZUdldHRlcihFeGVjU3RhdGUq
IHN0YXRlLCBKU1Rlc3RFeGNlcHRpb24qIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RXhjZXB0aW9uTmFtZUdldHRlcihFeGVj
U3RhdGUmIHN0YXRlLCBKU1Rlc3RFeGNlcHRpb24mIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKLSAg
ICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLm5hbWUoKSk7
CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVz
dWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCBpbXBsLm5hbWUoKSk7CiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEdsb2JhbE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0LmNwcAppbmRleCAxYWE3ZWJlMTc0
ZDJhMTY2MjU2NTJlNzI3YzQyZDZkOTkwNTM0YjkzLi5lMDAzY2RiYmM4Yzc2NjdmZTcwYjU0MjNh
NzhmODA0ZjllZGU1NGVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0LmNwcApAQCAtMTgyLDcx
ICsxODIsNzEgQEAgaW5saW5lIEpTVGVzdEdsb2JhbE9iamVjdCogSlNUZXN0R2xvYmFsT2JqZWN0
OjpjYXN0Rm9yQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwKICAgICByZXR1cm4ganNEeW5hbWlj
Q2FzdDxKU1Rlc3RHbG9iYWxPYmplY3QqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiB9
CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RSZWd1bGFyQXR0cmli
dXRlR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdEdsb2JhbE9iamVjdCosIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpOworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFJlZ3Vs
YXJBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0R2xvYmFsT2JqZWN0JiwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFJl
Z3VsYXJBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0R2xvYmFs
T2JqZWN0Pjo6YXR0cmlidXRlPGpzVGVzdEdsb2JhbE9iamVjdFJlZ3VsYXJBdHRyaWJ1dGVHZXR0
ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJyZWd1bGFyQXR0cmlidXRlIik7CiB9CiAKLXN0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RSZWd1bGFyQXR0cmlidXRlR2V0dGVyKEV4
ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCogdGhpc09iamVjdCwgVGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RS
ZWd1bGFyQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVj
dCYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdX
aXRoQ2FjaGUoc3RhdGUsIGltcGwucmVndWxhckF0dHJpYnV0ZSgpKTsKKyAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dp
dGhDYWNoZSgmc3RhdGUsIGltcGwucmVndWxhckF0dHJpYnV0ZSgpKTsKICAgICByZXR1cm4gcmVz
dWx0OwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0UHVibGlj
QW5kUHJpdmF0ZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RHbG9iYWxPYmplY3Qq
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RH
bG9iYWxPYmplY3RQdWJsaWNBbmRQcml2YXRlQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSYsIEpT
VGVzdEdsb2JhbE9iamVjdCYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RQdWJsaWNBbmRQcml2YXRlQXR0cmlidXRlKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAg
IHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdEdsb2JhbE9iamVjdD46OmF0dHJpYnV0ZTxqc1Rl
c3RHbG9iYWxPYmplY3RQdWJsaWNBbmRQcml2YXRlQXR0cmlidXRlR2V0dGVyPihzdGF0ZSwgdGhp
c1ZhbHVlLCAicHVibGljQW5kUHJpdmF0ZUF0dHJpYnV0ZSIpOwogfQogCi1zdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0UHVibGljQW5kUHJpdmF0ZUF0dHJpYnV0ZUdldHRl
cihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QqIHRoaXNPYmplY3QsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2Jq
ZWN0UHVibGljQW5kUHJpdmF0ZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rl
c3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0g
ICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3Vs
dCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLnB1YmxpY0FuZFByaXZhdGVBdHRyaWJ1
dGUoKSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIEpTVmFs
dWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCBpbXBsLnB1YmxpY0FuZFByaXZh
dGVBdHRyaWJ1dGUoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogI2lmIEVOQUJMRShURVNU
X0ZFQVRVUkUpCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0UHVibGlj
QW5kUHJpdmF0ZUNvbmRpdGlvbmFsQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdEds
b2JhbE9iamVjdCosIFRocm93U2NvcGUmIHRocm93U2NvcGUpOworc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdEdsb2JhbE9iamVjdFB1YmxpY0FuZFByaXZhdGVDb25kaXRpb25hbEF0dHJpYnV0
ZUdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RHbG9iYWxPYmplY3QmLCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0UHVibGljQW5kUHJp
dmF0ZUNvbmRpdGlvbmFsQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpT
VGVzdEdsb2JhbE9iamVjdD46OmF0dHJpYnV0ZTxqc1Rlc3RHbG9iYWxPYmplY3RQdWJsaWNBbmRQ
cml2YXRlQ29uZGl0aW9uYWxBdHRyaWJ1dGVHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJwdWJs
aWNBbmRQcml2YXRlQ29uZGl0aW9uYWxBdHRyaWJ1dGUiKTsKIH0KIAotc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFB1YmxpY0FuZFByaXZhdGVDb25kaXRpb25hbEF0dHJp
YnV0ZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QqIHRoaXNPYmpl
Y3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
R2xvYmFsT2JqZWN0UHVibGljQW5kUHJpdmF0ZUNvbmRpdGlvbmFsQXR0cmlidXRlR2V0dGVyKEV4
ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgVGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5V
U0VEX1BBUkFNKHN0YXRlKTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgp
OwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwucHVi
bGljQW5kUHJpdmF0ZUNvbmRpdGlvbmFsQXR0cmlidXRlKCkpOworICAgIGF1dG8mIGltcGwgPSB0
aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENh
Y2hlKCZzdGF0ZSwgaW1wbC5wdWJsaWNBbmRQcml2YXRlQ29uZGl0aW9uYWxBdHRyaWJ1dGUoKSk7
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogI2VuZGlmCiAKICNpZiBFTkFCTEUoVEVTVF9GRUFU
VVJFKQotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdEVuYWJsZWRBdFJ1
bnRpbWVBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0R2xvYmFsT2JqZWN0KiwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSk7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFs
T2JqZWN0RW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RH
bG9iYWxPYmplY3QmLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUg
anNUZXN0R2xvYmFsT2JqZWN0RW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1
cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RHbG9iYWxPYmplY3Q+OjphdHRyaWJ1dGU8anNUZXN0R2xv
YmFsT2JqZWN0RW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZUdldHRlcj4oc3RhdGUsIHRoaXNWYWx1
ZSwgImVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGUiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdEdsb2JhbE9iamVjdEVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGVHZXR0ZXIoRXhl
Y1N0YXRlKiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0KiB0aGlzT2JqZWN0LCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdEVu
YWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xv
YmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBq
c1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5lbmFibGVkQXRSdW50aW1lQXR0cmlidXRlKCkp
OworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJl
c3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgaW1wbC5lbmFibGVkQXRSdW50aW1lQXR0
cmlidXRlKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHAK
aW5kZXggZTRiZWRiNTA0YTk5MTVlMjNkOWRiMzZkM2E3ZDY3NWZiYjU5NGI2Yi4uNTgzOGVjMDA0
YTIyNTkwOWQ5NzM1OTQxZmJmMGNjNDg1ZjVhYmI1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHAK
QEAgLTQxNiwxNCArNDE2LDE1IEBAIGlubGluZSBKU1Rlc3RJbnRlcmZhY2UqIEpTVGVzdEludGVy
ZmFjZTo6Y2FzdEZvckF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEVuY29kCiB9CiAKICNpZiBF
TkFCTEUoQ29uZGl0aW9uMjIpIHx8IEVOQUJMRShDb25kaXRpb24yMykKLXN0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvckltcGxlbWVudHNTdGF0aWNSZWFkT25s
eUF0dHJHZXR0ZXIoRXhlY1N0YXRlKik7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SW50
ZXJmYWNlQ29uc3RydWN0b3JJbXBsZW1lbnRzU3RhdGljUmVhZE9ubHlBdHRyR2V0dGVyKEV4ZWNT
dGF0ZSYpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvckltcGxl
bWVudHNTdGF0aWNSZWFkT25seUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUs
IFByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdEludGVy
ZmFjZUNvbnN0cnVjdG9ySW1wbGVtZW50c1N0YXRpY1JlYWRPbmx5QXR0ckdldHRlcihzdGF0ZSkp
OworICAgIEFTU0VSVChzdGF0ZSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RJ
bnRlcmZhY2VDb25zdHJ1Y3RvckltcGxlbWVudHNTdGF0aWNSZWFkT25seUF0dHJHZXR0ZXIoKnN0
YXRlKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1
Y3RvckltcGxlbWVudHNTdGF0aWNSZWFkT25seUF0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSkK
K3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvckltcGxlbWVu
dHNTdGF0aWNSZWFkT25seUF0dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSkKIHsKICAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoVGVzdEludGVy
ZmFjZTo6aW1wbGVtZW50c1N0YXRpY1JlYWRPbmx5QXR0cigpKTsKQEAgLTQzMywxMDUgKzQzNCwx
MDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9ySW1w
bGVtZW50c1N0YXRpY1JlYWRPbmx5QXR0ckdldHQKICNlbmRpZgogCiAjaWYgRU5BQkxFKENvbmRp
dGlvbjIyKSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMpCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JJbXBsZW1lbnRzU3RhdGljQXR0ckdldHRlcihFeGVjU3Rh
dGUqKTsKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3Rvcklt
cGxlbWVudHNTdGF0aWNBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYpOwogCiBFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvckltcGxlbWVudHNTdGF0aWNBdHRyKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvckltcGxlbWVudHNTdGF0aWNBdHRy
R2V0dGVyKHN0YXRlKSk7CisgICAgQVNTRVJUKHN0YXRlKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9ySW1wbGVtZW50c1N0YXRpY0F0dHJHZXR0
ZXIoKnN0YXRlKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VD
b25zdHJ1Y3RvckltcGxlbWVudHNTdGF0aWNBdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUpCitz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JJbXBsZW1lbnRz
U3RhdGljQXR0ckdldHRlcihFeGVjU3RhdGUmIHN0YXRlKQogewogICAgIFVOVVNFRF9QQVJBTShz
dGF0ZSk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgVGVz
dEludGVyZmFjZTo6aW1wbGVtZW50c1N0YXRpY0F0dHIoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQg
PSBqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIFRlc3RJbnRlcmZhY2U6OmltcGxlbWVudHNTdGF0
aWNBdHRyKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKICNlbmRpZgogCiAjaWYgRU5BQkxF
KENvbmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMpCi1zdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjFHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0
SW50ZXJmYWNlKiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CitzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjFHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0
SW50ZXJmYWNlJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpz
VGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIxKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVy
PEpTVGVzdEludGVyZmFjZT46OmF0dHJpYnV0ZTxqc1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3Ry
MUdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgImltcGxlbWVudHNTdHIxIik7CiB9CiAKLXN0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyMUdldHRlcihFeGVj
U3RhdGUqIHN0YXRlLCBKU1Rlc3RJbnRlcmZhY2UqIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SW50ZXJmYWNlSW1wbGVtZW50
c1N0cjFHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0SW50ZXJmYWNlJiB0aGlzT2JqZWN0
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0
ZSwgaW1wbC5pbXBsZW1lbnRzU3RyMSgpKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53
cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUs
IGltcGwuaW1wbGVtZW50c1N0cjEoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogI2VuZGlm
CiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMjIpIHx8IEVOQUJMRShDb25kaXRpb24yMykKLXN0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyMkdldHRlcihFeGVj
U3RhdGUqLCBKU1Rlc3RJbnRlcmZhY2UqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKK3N0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyMkdldHRlcihFeGVj
U3RhdGUmLCBKU1Rlc3RJbnRlcmZhY2UmLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAogRW5j
b2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjIoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJu
IEJpbmRpbmdDYWxsZXI8SlNUZXN0SW50ZXJmYWNlPjo6YXR0cmlidXRlPGpzVGVzdEludGVyZmFj
ZUltcGxlbWVudHNTdHIyR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAiaW1wbGVtZW50c1N0cjIi
KTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUltcGxlbWVudHNT
dHIyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEludGVyZmFjZSogdGhpc09iamVjdCwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RJbnRl
cmZhY2VJbXBsZW1lbnRzU3RyMkdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RJbnRlcmZh
Y2UmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgYXV0byYgaW1w
bCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5n
V2l0aENhY2hlKHN0YXRlLCBpbXBsLmltcGxlbWVudHNTdHIyKCkpOworICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0
aENhY2hlKCZzdGF0ZSwgaW1wbC5pbXBsZW1lbnRzU3RyMigpKTsKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCiAjZW5kaWYKIAogI2lmIEVOQUJMRShDb25kaXRpb24yMikgfHwgRU5BQkxFKENvbmRp
dGlvbjIzKQotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUltcGxlbWVudHNT
dHIzR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdEludGVyZmFjZSosIFRocm93U2NvcGUmIHRocm93
U2NvcGUpOworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUltcGxlbWVudHNT
dHIzR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdEludGVyZmFjZSYsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyMyhF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkK
IHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RJbnRlcmZhY2U+OjphdHRyaWJ1dGU8
anNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjNHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJp
bXBsZW1lbnRzU3RyMyIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SW50ZXJm
YWNlSW1wbGVtZW50c1N0cjNHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0SW50ZXJmYWNl
KiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIzR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUs
IEpTVGVzdEludGVyZmFjZSYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsK
ICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsK
LSAgICByZXR1cm4gdGhpc09iamVjdC0+aW1wbGVtZW50c1N0cjMoKnN0YXRlKTsKKyAgICByZXR1
cm4gdGhpc09iamVjdC5pbXBsZW1lbnRzU3RyMyhzdGF0ZSk7CiB9CiAKICNlbmRpZgogCiAjaWYg
RU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMpCi1zdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c05vZGVHZXR0ZXIoRXhlY1N0YXRlKiwg
SlNUZXN0SW50ZXJmYWNlKiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CitzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c05vZGVHZXR0ZXIoRXhlY1N0YXRlJiwg
SlNUZXN0SW50ZXJmYWNlJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKIEVuY29kZWRKU1Zh
bHVlIGpzVGVzdEludGVyZmFjZUltcGxlbWVudHNOb2RlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5n
Q2FsbGVyPEpTVGVzdEludGVyZmFjZT46OmF0dHJpYnV0ZTxqc1Rlc3RJbnRlcmZhY2VJbXBsZW1l
bnRzTm9kZUdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgImltcGxlbWVudHNOb2RlIik7CiB9CiAK
LXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzTm9kZUdldHRl
cihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RJbnRlcmZhY2UqIHRoaXNPYmplY3QsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SW50ZXJmYWNlSW1w
bGVtZW50c05vZGVHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0SW50ZXJmYWNlJiB0aGlz
T2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIGF1dG8mIGltcGwgPSB0aGlz
T2JqZWN0LT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCB0aGlz
T2JqZWN0LT5nbG9iYWxPYmplY3QoKSwgaW1wbC5pbXBsZW1lbnRzTm9kZSgpKTsKKyAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pT
KCZzdGF0ZSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgaW1wbC5pbXBsZW1lbnRzTm9kZSgp
KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCiAjZW5kaWYKIAogI2lmIEVOQUJMRShDb25kaXRp
b24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKQotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dEludGVyZmFjZUNvbnN0cnVjdG9yU3VwcGxlbWVudGFsU3RhdGljUmVhZE9ubHlBdHRyR2V0dGVy
KEV4ZWNTdGF0ZSopOworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUNvbnN0
cnVjdG9yU3VwcGxlbWVudGFsU3RhdGljUmVhZE9ubHlBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYpOwog
CiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvclN1cHBsZW1lbnRhbFN0
YXRpY1JlYWRPbmx5QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSwgUHJvcGVy
dHlOYW1lKQogewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0SW50ZXJmYWNlQ29u
c3RydWN0b3JTdXBwbGVtZW50YWxTdGF0aWNSZWFkT25seUF0dHJHZXR0ZXIoc3RhdGUpKTsKKyAg
ICBBU1NFUlQoc3RhdGUpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0SW50ZXJm
YWNlQ29uc3RydWN0b3JTdXBwbGVtZW50YWxTdGF0aWNSZWFkT25seUF0dHJHZXR0ZXIoKnN0YXRl
KSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3Rv
clN1cHBsZW1lbnRhbFN0YXRpY1JlYWRPbmx5QXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlKQor
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yU3VwcGxlbWVu
dGFsU3RhdGljUmVhZE9ubHlBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7CiAgICAgVU5V
U0VEX1BBUkFNKHN0YXRlKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKFdlYkNvcmU6
OlRlc3RTdXBwbGVtZW50YWw6OnN1cHBsZW1lbnRhbFN0YXRpY1JlYWRPbmx5QXR0cigpKTsKQEAg
LTU0MSw5MSArNTQ0LDkyIEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VD
b25zdHJ1Y3RvclN1cHBsZW1lbnRhbFN0YXRpY1JlYWRPbmx5QXR0ckdlCiAjZW5kaWYKIAogI2lm
IEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKQotc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yU3VwcGxlbWVudGFsU3RhdGljQXR0
ckdldHRlcihFeGVjU3RhdGUqKTsKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZh
Y2VDb25zdHJ1Y3RvclN1cHBsZW1lbnRhbFN0YXRpY0F0dHJHZXR0ZXIoRXhlY1N0YXRlJik7CiAK
IEVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yU3VwcGxlbWVudGFsU3Rh
dGljQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSwgUHJvcGVydHlOYW1lKQog
ewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JT
dXBwbGVtZW50YWxTdGF0aWNBdHRyR2V0dGVyKHN0YXRlKSk7CisgICAgQVNTRVJUKHN0YXRlKTsK
KyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yU3Vw
cGxlbWVudGFsU3RhdGljQXR0ckdldHRlcigqc3RhdGUpKTsKIH0KIAotc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yU3VwcGxlbWVudGFsU3RhdGljQXR0ckdl
dHRlcihFeGVjU3RhdGUqIHN0YXRlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEludGVy
ZmFjZUNvbnN0cnVjdG9yU3VwcGxlbWVudGFsU3RhdGljQXR0ckdldHRlcihFeGVjU3RhdGUmIHN0
YXRlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBq
c1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgV2ViQ29yZTo6VGVzdFN1cHBsZW1lbnRhbDo6c3VwcGxl
bWVudGFsU3RhdGljQXR0cigpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENh
Y2hlKCZzdGF0ZSwgV2ViQ29yZTo6VGVzdFN1cHBsZW1lbnRhbDo6c3VwcGxlbWVudGFsU3RhdGlj
QXR0cigpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCiAjZW5kaWYKIAogI2lmIEVOQUJMRShD
b25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKQotc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjFHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0
SW50ZXJmYWNlKiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CitzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMUdldHRlcihFeGVjU3RhdGUmLCBKU1Rl
c3RJbnRlcmZhY2UmLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUg
anNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0Nh
bGxlcjxKU1Rlc3RJbnRlcmZhY2U+OjphdHRyaWJ1dGU8anNUZXN0SW50ZXJmYWNlU3VwcGxlbWVu
dGFsU3RyMUdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgInN1cHBsZW1lbnRhbFN0cjEiKTsKIH0K
IAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjFH
ZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0SW50ZXJmYWNlKiB0aGlzT2JqZWN0LCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEludGVyZmFj
ZVN1cHBsZW1lbnRhbFN0cjFHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0SW50ZXJmYWNl
JiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dp
dGhDYWNoZShzdGF0ZSwgV2ViQ29yZTo6VGVzdFN1cHBsZW1lbnRhbDo6c3VwcGxlbWVudGFsU3Ry
MShpbXBsKSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIEpT
VmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCBXZWJDb3JlOjpUZXN0U3Vw
cGxlbWVudGFsOjpzdXBwbGVtZW50YWxTdHIxKGltcGwpKTsKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCiAjZW5kaWYKIAogI2lmIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlv
bjEyKQotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0
cjJHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0SW50ZXJmYWNlKiwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSk7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFs
U3RyMkdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RJbnRlcmZhY2UmLCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3Ry
MihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFt
ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RJbnRlcmZhY2U+OjphdHRyaWJ1
dGU8anNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMkdldHRlcj4oc3RhdGUsIHRoaXNWYWx1
ZSwgInN1cHBsZW1lbnRhbFN0cjIiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0
SW50ZXJmYWNlKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjJHZXR0ZXIoRXhlY1N0
YXRlJiBzdGF0ZSwgSlNUZXN0SW50ZXJmYWNlJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7Ci0gICAg
SlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgV2ViQ29yZTo6VGVzdFN1
cHBsZW1lbnRhbDo6c3VwcGxlbWVudGFsU3RyMihpbXBsKSk7CisgICAgYXV0byYgaW1wbCA9IHRo
aXNPYmplY3Qud3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2Fj
aGUoJnN0YXRlLCBXZWJDb3JlOjpUZXN0U3VwcGxlbWVudGFsOjpzdXBwbGVtZW50YWxTdHIyKGlt
cGwpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCiAjZW5kaWYKIAogI2lmIEVOQUJMRShDb25k
aXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKQotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjNHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0SW50
ZXJmYWNlKiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyM0dldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RJ
bnRlcmZhY2UmLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNU
ZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMyhFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxl
cjxKU1Rlc3RJbnRlcmZhY2U+OjphdHRyaWJ1dGU8anNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFs
U3RyM0dldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgInN1cHBsZW1lbnRhbFN0cjMiKTsKIH0KIAot
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjNHZXR0
ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0SW50ZXJmYWNlKiB0aGlzT2JqZWN0LCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEludGVyZmFjZVN1
cHBsZW1lbnRhbFN0cjNHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0SW50ZXJmYWNlJiB0
aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIHJldHVybiB0aGlzT2Jq
ZWN0LT5zdXBwbGVtZW50YWxTdHIzKCpzdGF0ZSk7CisgICAgcmV0dXJuIHRoaXNPYmplY3Quc3Vw
cGxlbWVudGFsU3RyMyhzdGF0ZSk7CiB9CiAKICNlbmRpZgogCiAjaWYgRU5BQkxFKENvbmRpdGlv
bjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
SW50ZXJmYWNlU3VwcGxlbWVudGFsTm9kZUdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RJbnRlcmZh
Y2UqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RJbnRlcmZhY2VTdXBwbGVtZW50YWxOb2RlR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdEludGVy
ZmFjZSYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJ
bnRlcmZhY2VTdXBwbGVtZW50YWxOb2RlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpT
VGVzdEludGVyZmFjZT46OmF0dHJpYnV0ZTxqc1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxOb2Rl
R2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAic3VwcGxlbWVudGFsTm9kZSIpOwogfQogCi1zdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsTm9kZUdldHRlcihF
eGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RJbnRlcmZhY2UqIHRoaXNPYmplY3QsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SW50ZXJmYWNlU3VwcGxl
bWVudGFsTm9kZUdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RJbnRlcmZhY2UmIHRoaXNP
YmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNP
YmplY3QtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIHRoaXNP
YmplY3QtPmdsb2JhbE9iamVjdCgpLCBXZWJDb3JlOjpUZXN0U3VwcGxlbWVudGFsOjpzdXBwbGVt
ZW50YWxOb2RlKGltcGwpKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7
CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKCZzdGF0ZSwgdGhpc09iamVjdC5nbG9iYWxPYmpl
Y3QoKSwgV2ViQ29yZTo6VGVzdFN1cHBsZW1lbnRhbDo6c3VwcGxlbWVudGFsTm9kZShpbXBsKSk7
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RKU0J1aWx0aW5Db25z
dHJ1Y3Rvci5jcHAKaW5kZXggMTgxZjlmMzE2NjBiZTExZjEwMjg2MWRjNzdjZGY5ZDA4MjFkNTgy
ZC4uMmViOTdmZjI3ZGQyOTgxNjMyY2RmYWJiNDliNTZiN2RiM2RhZmJmNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEpTQnVpbHRpbkNv
bnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IuY3BwCkBAIC0xMzcsMzIgKzEzNywzMiBAQCBp
bmxpbmUgSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IqIEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVj
dG9yOjpjYXN0Rm9yQXR0cmlidXRlKAogICAgIHJldHVybiBqc0R5bmFtaWNDYXN0PEpTVGVzdEpT
QnVpbHRpbkNvbnN0cnVjdG9yKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogfQogCi1z
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JUZXN0QXR0cmli
dXRlQ3VzdG9tR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yKiwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SlNC
dWlsdGluQ29uc3RydWN0b3JUZXN0QXR0cmlidXRlQ3VzdG9tR2V0dGVyKEV4ZWNTdGF0ZSYsIEpT
VGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKIEVu
Y29kZWRKU1ZhbHVlIGpzVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yVGVzdEF0dHJpYnV0ZUN1c3Rv
bShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFt
ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rv
cj46OmF0dHJpYnV0ZTxqc1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvclRlc3RBdHRyaWJ1dGVDdXN0
b21HZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJ0ZXN0QXR0cmlidXRlQ3VzdG9tIik7CiB9CiAK
LXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvclRlc3RBdHRy
aWJ1dGVDdXN0b21HZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0SlNCdWlsdGluQ29uc3Ry
dWN0b3IqIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JUZXN0QXR0cmlidXRlQ3VzdG9tR2V0
dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yJiB0aGlzT2Jq
ZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIHJldHVybiB0aGlzT2JqZWN0LT50
ZXN0QXR0cmlidXRlQ3VzdG9tKCpzdGF0ZSk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QudGVzdEF0
dHJpYnV0ZUN1c3RvbShzdGF0ZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RK
U0J1aWx0aW5Db25zdHJ1Y3RvclRlc3RBdHRyaWJ1dGVSV0N1c3RvbUdldHRlcihFeGVjU3RhdGUq
LCBKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvciosIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwor
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yVGVzdEF0dHJp
YnV0ZVJXQ3VzdG9tR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9y
JiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEpTQnVp
bHRpbkNvbnN0cnVjdG9yVGVzdEF0dHJpYnV0ZVJXQ3VzdG9tKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5k
aW5nQ2FsbGVyPEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yPjo6YXR0cmlidXRlPGpzVGVzdEpT
QnVpbHRpbkNvbnN0cnVjdG9yVGVzdEF0dHJpYnV0ZVJXQ3VzdG9tR2V0dGVyPihzdGF0ZSwgdGhp
c1ZhbHVlLCAidGVzdEF0dHJpYnV0ZVJXQ3VzdG9tIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvclRlc3RBdHRyaWJ1dGVSV0N1c3RvbUdldHRl
cihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvciogdGhpc09iamVj
dCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RK
U0J1aWx0aW5Db25zdHJ1Y3RvclRlc3RBdHRyaWJ1dGVSV0N1c3RvbUdldHRlcihFeGVjU3RhdGUm
IHN0YXRlLCBKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvciYgdGhpc09iamVjdCwgVGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5V
U0VEX1BBUkFNKHN0YXRlKTsKLSAgICByZXR1cm4gdGhpc09iamVjdC0+dGVzdEF0dHJpYnV0ZVJX
Q3VzdG9tKCpzdGF0ZSk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QudGVzdEF0dHJpYnV0ZVJXQ3Vz
dG9tKHN0YXRlKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUganNUZXN0SlNCdWlsdGluQ29uc3RydWN0
b3JDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmNwcAppbmRleCBhYTY3YThiOThhOWE5MGYzYzIwOGVhNWUx
ZDE4NDI2YTdmODY2YjJjLi5iZWVkNzQ4ZTExNzY3YmQ1YTcxZDVmMWY5NzNjYzU3NDIwMGVmYjI0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0Tm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE5vZGUuY3BwCkBAIC0xNzIsMTkgKzE3MiwxOSBAQCBpbmxpbmUgSlNUZXN0Tm9kZSog
SlNUZXN0Tm9kZTo6Y2FzdEZvckF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEVuY29kZWRKU1Zh
bHVlCiAgICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8SlNUZXN0Tm9kZSo+KEpTVmFsdWU6OmRlY29k
ZSh0aGlzVmFsdWUpKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE5vZGVOYW1l
R2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE5vZGUqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsK
K3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3ROb2RlTmFtZUdldHRlcihFeGVjU3RhdGUmLCBK
U1Rlc3ROb2RlJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpz
VGVzdE5vZGVOYW1lKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
UHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE5vZGU+Ojph
dHRyaWJ1dGU8anNUZXN0Tm9kZU5hbWVHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJuYW1lIik7
CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3ROb2RlTmFtZUdldHRlcihFeGVjU3Rh
dGUqIHN0YXRlLCBKU1Rlc3ROb2RlKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE5vZGVOYW1lR2V0dGVyKEV4ZWNTdGF0ZSYg
c3RhdGUsIEpTVGVzdE5vZGUmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7
CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJl
c3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLm5hbWUoKSk7CisgICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJp
bmdXaXRoQ2FjaGUoJnN0YXRlLCBpbXBsLm5hbWUoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5vbmRldGVybWluaXN0aWMuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE5vbmRldGVybWluaXN0aWMuY3BwCmluZGV4IDI2YWM1OGU5ZDA3Yjk5
ODQ5OGViNGM1NDI5NDdiYmFkOTg4MDgxZGQuLjA5YTQwZGUwYTZiZDZkNjI3NGMxOWVjYTNiNjE1
ZDU3ZjBmMTllZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3ROb25kZXRlcm1pbmlzdGljLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYy5jcHAKQEAgLTE0
OCwyMyArMTQ4LDIzIEBAIGlubGluZSBKU1Rlc3ROb25kZXRlcm1pbmlzdGljKiBKU1Rlc3ROb25k
ZXRlcm1pbmlzdGljOjpjYXN0Rm9yQXR0cmlidXRlKEpTQzo6RXhlCiAgICAgcmV0dXJuIGpzRHlu
YW1pY0Nhc3Q8SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFs
dWUpKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE5vbmRldGVybWluaXN0aWNO
b25kZXRlcm1pbmlzdGljUmVhZG9ubHlBdHRyR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE5vbmRl
dGVybWluaXN0aWMqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKK3N0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY1JlYWRvbmx5QXR0ckdl
dHRlcihFeGVjU3RhdGUmLCBKU1Rlc3ROb25kZXRlcm1pbmlzdGljJiwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRl
cm1pbmlzdGljUmVhZG9ubHlBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVz
dE5vbmRldGVybWluaXN0aWM+OjphdHRyaWJ1dGU8anNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRl
dGVybWluaXN0aWNSZWFkb25seUF0dHJHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJub25kZXRl
cm1pbmlzdGljUmVhZG9ubHlBdHRyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY1JlYWRvbmx5QXR0ckdldHRlcihFeGVj
U3RhdGUqIHN0YXRlLCBKU1Rlc3ROb25kZXRlcm1pbmlzdGljKiB0aGlzT2JqZWN0LCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE5vbmRldGVybWlu
aXN0aWNOb25kZXRlcm1pbmlzdGljUmVhZG9ubHlBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUs
IEpTVGVzdE5vbmRldGVybWluaXN0aWMmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShz
dGF0ZSk7CiAjaWYgRU5BQkxFKFdFQl9SRVBMQVkpCi0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCA9IHN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CisgICAgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCA9IHN0YXRlLmxleGljYWxHbG9iYWxPYmplY3QoKTsKICAgICBJbnB1
dEN1cnNvciYgY3Vyc29yID0gZ2xvYmFsT2JqZWN0LT5pbnB1dEN1cnNvcigpOwogICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxjb25zdCBBdG9taWNTdHJpbmc+IGJpbmRpbmdOYW1lKCJUZXN0Tm9u
ZGV0ZXJtaW5pc3RpYy5ub25kZXRlcm1pbmlzdGljUmVhZG9ubHlBdHRyIiwgQXRvbWljU3RyaW5n
OjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CiAgICAgaWYgKGN1cnNvci5pc0NhcHR1cmluZygpKSB7
Ci0gICAgICAgIGludDMyX3QgbWVtb2l6ZWRSZXN1bHQgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCku
bm9uZGV0ZXJtaW5pc3RpY1JlYWRvbmx5QXR0cigpOworICAgICAgICBpbnQzMl90IG1lbW9pemVk
UmVzdWx0ID0gdGhpc09iamVjdC53cmFwcGVkKCkubm9uZGV0ZXJtaW5pc3RpY1JlYWRvbmx5QXR0
cigpOwogICAgICAgICBjdXJzb3IuYXBwZW5kSW5wdXQ8TWVtb2l6ZWRET01SZXN1bHQ8aW50MzJf
dD4+KGJpbmRpbmdOYW1lLmdldCgpLnN0cmluZygpLCBtZW1vaXplZFJlc3VsdCwgMCk7CiAgICAg
ICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIobWVtb2l6ZWRSZXN1bHQpOwogICAgICAgICBy
ZXR1cm4gcmVzdWx0OwpAQCAtMTc5LDMwICsxNzksMzAgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljUmVhZG9ubHlBdHRyR2V0dGVy
KEUKICAgICAgICAgfQogICAgIH0KICNlbmRpZgotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LT53cmFwcGVkKCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAg
IEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5ub25kZXRlcm1pbmlzdGljUmVhZG9ubHlB
dHRyKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY1dyaXRlYWJsZUF0dHJHZXR0ZXIo
RXhlY1N0YXRlKiwgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyosIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpOworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRl
cm1pbmlzdGljV3JpdGVhYmxlQXR0ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3ROb25kZXRlcm1p
bmlzdGljJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVz
dE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljV3JpdGVhYmxlQXR0cihFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBy
ZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3ROb25kZXRlcm1pbmlzdGljPjo6YXR0cmlidXRlPGpz
VGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljV3JpdGVhYmxlQXR0ckdldHRlcj4o
c3RhdGUsIHRoaXNWYWx1ZSwgIm5vbmRldGVybWluaXN0aWNXcml0ZWFibGVBdHRyIik7CiB9CiAK
LXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5p
c3RpY1dyaXRlYWJsZUF0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0Tm9uZGV0ZXJt
aW5pc3RpYyogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY1dyaXRlYWJs
ZUF0dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyYgdGhp
c09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICNpZiBFTkFCTEUoV0VCX1JFUExB
WSkKLSAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc3RhdGUtPmxleGljYWxHbG9i
YWxPYmplY3QoKTsKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc3RhdGUubGV4
aWNhbEdsb2JhbE9iamVjdCgpOwogICAgIElucHV0Q3Vyc29yJiBjdXJzb3IgPSBnbG9iYWxPYmpl
Y3QtPmlucHV0Q3Vyc29yKCk7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21p
Y1N0cmluZz4gYmluZGluZ05hbWUoIlRlc3ROb25kZXRlcm1pbmlzdGljLm5vbmRldGVybWluaXN0
aWNXcml0ZWFibGVBdHRyIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CiAg
ICAgaWYgKGN1cnNvci5pc0NhcHR1cmluZygpKSB7Ci0gICAgICAgIFN0cmluZyBtZW1vaXplZFJl
c3VsdCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKS5ub25kZXRlcm1pbmlzdGljV3JpdGVhYmxlQXR0
cigpOworICAgICAgICBTdHJpbmcgbWVtb2l6ZWRSZXN1bHQgPSB0aGlzT2JqZWN0LndyYXBwZWQo
KS5ub25kZXRlcm1pbmlzdGljV3JpdGVhYmxlQXR0cigpOwogICAgICAgICBjdXJzb3IuYXBwZW5k
SW5wdXQ8TWVtb2l6ZWRET01SZXN1bHQ8U3RyaW5nPj4oYmluZGluZ05hbWUuZ2V0KCkuc3RyaW5n
KCksIG1lbW9pemVkUmVzdWx0LCAwKTsKLSAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmlu
Z1dpdGhDYWNoZShzdGF0ZSwgbWVtb2l6ZWRSZXN1bHQpOworICAgICAgICBKU1ZhbHVlIHJlc3Vs
dCA9IGpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgbWVtb2l6ZWRSZXN1bHQpOwogICAgICAgICBy
ZXR1cm4gcmVzdWx0OwogICAgIH0KIApAQCAtMjEwLDM1ICsyMTAsMzUgQEAgc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljV3JpdGVhYmxl
QXR0ckdldHRlcigKICAgICAgICAgU3RyaW5nIG1lbW9pemVkUmVzdWx0OwogICAgICAgICBNZW1v
aXplZERPTVJlc3VsdEJhc2UqIGlucHV0ID0gY3Vyc29yLmZldGNoSW5wdXQ8TWVtb2l6ZWRET01S
ZXN1bHRCYXNlPigpOwogICAgICAgICBpZiAoaW5wdXQgJiYgaW5wdXQtPmNvbnZlcnRUbzxTdHJp
bmc+KG1lbW9pemVkUmVzdWx0KSkgewotICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0
cmluZ1dpdGhDYWNoZShzdGF0ZSwgbWVtb2l6ZWRSZXN1bHQpOworICAgICAgICAgICAgSlNWYWx1
ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIG1lbW9pemVkUmVzdWx0KTsKICAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KICAgICB9CiAjZW5kaWYKLSAgICBh
dXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0g
anNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwubm9uZGV0ZXJtaW5pc3RpY1dyaXRlYWJsZUF0
dHIoKSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIEpTVmFs
dWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCBpbXBsLm5vbmRldGVybWluaXN0
aWNXcml0ZWFibGVBdHRyKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY0V4Y2VwdGlv
bkF0dHJHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyosIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpOworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE5vbmRldGVybWlu
aXN0aWNOb25kZXRlcm1pbmlzdGljRXhjZXB0aW9uQXR0ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rl
c3ROb25kZXRlcm1pbmlzdGljJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKIEVuY29kZWRK
U1ZhbHVlIGpzVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljRXhjZXB0aW9uQXR0
cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFt
ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3ROb25kZXRlcm1pbmlzdGljPjo6
YXR0cmlidXRlPGpzVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljRXhjZXB0aW9u
QXR0ckdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgIm5vbmRldGVybWluaXN0aWNFeGNlcHRpb25B
dHRyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3ROb25kZXRlcm1pbmlzdGlj
Tm9uZGV0ZXJtaW5pc3RpY0V4Y2VwdGlvbkF0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNU
ZXN0Tm9uZGV0ZXJtaW5pc3RpYyogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
K3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5p
c3RpY0V4Y2VwdGlvbkF0dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0Tm9uZGV0ZXJt
aW5pc3RpYyYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICNpZiBFTkFC
TEUoV0VCX1JFUExBWSkKLSAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc3RhdGUt
PmxleGljYWxHbG9iYWxPYmplY3QoKTsKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
ID0gc3RhdGUubGV4aWNhbEdsb2JhbE9iamVjdCgpOwogICAgIElucHV0Q3Vyc29yJiBjdXJzb3Ig
PSBnbG9iYWxPYmplY3QtPmlucHV0Q3Vyc29yKCk7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PGNvbnN0IEF0b21pY1N0cmluZz4gYmluZGluZ05hbWUoIlRlc3ROb25kZXRlcm1pbmlzdGljLm5v
bmRldGVybWluaXN0aWNFeGNlcHRpb25BdHRyIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9t
TGl0ZXJhbCk7CiAgICAgaWYgKGN1cnNvci5pc0NhcHR1cmluZygpKSB7Ci0gICAgICAgIFN0cmlu
ZyBtZW1vaXplZFJlc3VsdCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKS5ub25kZXRlcm1pbmlzdGlj
RXhjZXB0aW9uQXR0cigpOworICAgICAgICBTdHJpbmcgbWVtb2l6ZWRSZXN1bHQgPSB0aGlzT2Jq
ZWN0LndyYXBwZWQoKS5ub25kZXRlcm1pbmlzdGljRXhjZXB0aW9uQXR0cigpOwogICAgICAgICBj
dXJzb3IuYXBwZW5kSW5wdXQ8TWVtb2l6ZWRET01SZXN1bHQ8U3RyaW5nPj4oYmluZGluZ05hbWUu
Z2V0KCkuc3RyaW5nKCksIG1lbW9pemVkUmVzdWx0LCAwKTsKLSAgICAgICAgSlNWYWx1ZSByZXN1
bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgbWVtb2l6ZWRSZXN1bHQpOworICAgICAgICBK
U1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgbWVtb2l6ZWRSZXN1bHQp
OwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIApAQCAtMjQ2LDM3ICsyNDYsMzcgQEAg
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlz
dGljRXhjZXB0aW9uQXR0ckdldHRlcigKICAgICAgICAgU3RyaW5nIG1lbW9pemVkUmVzdWx0Owog
ICAgICAgICBNZW1vaXplZERPTVJlc3VsdEJhc2UqIGlucHV0ID0gY3Vyc29yLmZldGNoSW5wdXQ8
TWVtb2l6ZWRET01SZXN1bHRCYXNlPigpOwogICAgICAgICBpZiAoaW5wdXQgJiYgaW5wdXQtPmNv
bnZlcnRUbzxTdHJpbmc+KG1lbW9pemVkUmVzdWx0KSkgewotICAgICAgICAgICAgSlNWYWx1ZSBy
ZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgbWVtb2l6ZWRSZXN1bHQpOworICAgICAg
ICAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIG1lbW9pemVk
UmVzdWx0KTsKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KICAgICB9CiAj
ZW5kaWYKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwotICAgIEpTVmFs
dWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwubm9uZGV0ZXJtaW5pc3Rp
Y0V4Y2VwdGlvbkF0dHIoKSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgp
OworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCBpbXBsLm5v
bmRldGVybWluaXN0aWNFeGNlcHRpb25BdHRyKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
LXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5p
c3RpY0dldHRlckV4Y2VwdGlvbkF0dHJHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0Tm9uZGV0ZXJt
aW5pc3RpYyosIFRocm93U2NvcGUmIHRocm93U2NvcGUpOworc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljR2V0dGVyRXhjZXB0aW9uQXR0
ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3ROb25kZXRlcm1pbmlzdGljJiwgVGhyb3dTY29wZSYg
dGhyb3dTY29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE5vbmRldGVybWluaXN0aWNOb25k
ZXRlcm1pbmlzdGljR2V0dGVyRXhjZXB0aW9uQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0Nh
bGxlcjxKU1Rlc3ROb25kZXRlcm1pbmlzdGljPjo6YXR0cmlidXRlPGpzVGVzdE5vbmRldGVybWlu
aXN0aWNOb25kZXRlcm1pbmlzdGljR2V0dGVyRXhjZXB0aW9uQXR0ckdldHRlcj4oc3RhdGUsIHRo
aXNWYWx1ZSwgIm5vbmRldGVybWluaXN0aWNHZXR0ZXJFeGNlcHRpb25BdHRyIik7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3Rp
Y0dldHRlckV4Y2VwdGlvbkF0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0Tm9uZGV0
ZXJtaW5pc3RpYyogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY0dldHRl
ckV4Y2VwdGlvbkF0dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0Tm9uZGV0ZXJtaW5p
c3RpYyYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDsKICNpZiBFTkFCTEUoV0VCX1JFUExBWSkKLSAgICBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0ID0gc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKKyAgICBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc3RhdGUubGV4aWNhbEdsb2JhbE9iamVjdCgpOwog
ICAgIElucHV0Q3Vyc29yJiBjdXJzb3IgPSBnbG9iYWxPYmplY3QtPmlucHV0Q3Vyc29yKCk7CiAg
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21pY1N0cmluZz4gYmluZGluZ05hbWUo
IlRlc3ROb25kZXRlcm1pbmlzdGljLm5vbmRldGVybWluaXN0aWNHZXR0ZXJFeGNlcHRpb25BdHRy
IiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CiAgICAgaWYgKGN1cnNvci5p
c0NhcHR1cmluZygpKSB7Ci0gICAgICAgIFN0cmluZyBtZW1vaXplZFJlc3VsdCA9IHRoaXNPYmpl
Y3QtPndyYXBwZWQoKS5ub25kZXRlcm1pbmlzdGljR2V0dGVyRXhjZXB0aW9uQXR0cihlYyk7Cisg
ICAgICAgIFN0cmluZyBtZW1vaXplZFJlc3VsdCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpLm5vbmRl
dGVybWluaXN0aWNHZXR0ZXJFeGNlcHRpb25BdHRyKGVjKTsKICAgICAgICAgY3Vyc29yLmFwcGVu
ZElucHV0PE1lbW9pemVkRE9NUmVzdWx0PFN0cmluZz4+KGJpbmRpbmdOYW1lLmdldCgpLnN0cmlu
ZygpLCBtZW1vaXplZFJlc3VsdCwgZWMpOwotICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3Ry
aW5nV2l0aENhY2hlKHN0YXRlLCBtZW1vaXplZFJlc3VsdCk7Ci0gICAgICAgIHNldERPTUV4Y2Vw
dGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgZWMpOworICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpz
U3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgbWVtb2l6ZWRSZXN1bHQpOworICAgICAgICBzZXRET01F
eGNlcHRpb24oJnN0YXRlLCB0aHJvd1Njb3BlLCBlYyk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7
CiAgICAgfQogCkBAIC0yODQsMzcgKzI4NCwzNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNHZXR0ZXJFeGNlcHRpb25BdHRyRwog
ICAgICAgICBTdHJpbmcgbWVtb2l6ZWRSZXN1bHQ7CiAgICAgICAgIE1lbW9pemVkRE9NUmVzdWx0
QmFzZSogaW5wdXQgPSBjdXJzb3IuZmV0Y2hJbnB1dDxNZW1vaXplZERPTVJlc3VsdEJhc2U+KCk7
CiAgICAgICAgIGlmIChpbnB1dCAmJiBpbnB1dC0+Y29udmVydFRvPFN0cmluZz4obWVtb2l6ZWRS
ZXN1bHQpKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hl
KHN0YXRlLCBtZW1vaXplZFJlc3VsdCk7Ci0gICAgICAgICAgICBzZXRET01FeGNlcHRpb24oc3Rh
dGUsIHRocm93U2NvcGUsIGlucHV0LT5leGNlcHRpb25Db2RlKCkpOworICAgICAgICAgICAgSlNW
YWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIG1lbW9pemVkUmVzdWx0KTsK
KyAgICAgICAgICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIHRocm93U2NvcGUsIGlucHV0LT5l
eGNlcHRpb25Db2RlKCkpOwogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQog
ICAgIH0KICNlbmRpZgotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7Ci0g
ICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5ub25kZXRl
cm1pbmlzdGljR2V0dGVyRXhjZXB0aW9uQXR0cihlYykpOwotICAgIHNldERPTUV4Y2VwdGlvbihz
dGF0ZSwgdGhyb3dTY29wZSwgZWMpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBw
ZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgaW1w
bC5ub25kZXRlcm1pbmlzdGljR2V0dGVyRXhjZXB0aW9uQXR0cihlYykpOworICAgIHNldERPTUV4
Y2VwdGlvbigmc3RhdGUsIHRocm93U2NvcGUsIGVjKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQog
Ci1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWlu
aXN0aWNTZXR0ZXJFeGNlcHRpb25BdHRyR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE5vbmRldGVy
bWluaXN0aWMqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKK3N0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY1NldHRlckV4Y2VwdGlvbkF0
dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyYsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROb25kZXRlcm1pbmlzdGljTm9u
ZGV0ZXJtaW5pc3RpY1NldHRlckV4Y2VwdGlvbkF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdD
YWxsZXI8SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYz46OmF0dHJpYnV0ZTxqc1Rlc3ROb25kZXRlcm1p
bmlzdGljTm9uZGV0ZXJtaW5pc3RpY1NldHRlckV4Y2VwdGlvbkF0dHJHZXR0ZXI+KHN0YXRlLCB0
aGlzVmFsdWUsICJub25kZXRlcm1pbmlzdGljU2V0dGVyRXhjZXB0aW9uQXR0ciIpOwogfQogCi1z
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0
aWNTZXR0ZXJFeGNlcHRpb25BdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE5vbmRl
dGVybWluaXN0aWMqIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNTZXR0
ZXJFeGNlcHRpb25BdHRyR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE5vbmRldGVybWlu
aXN0aWMmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAjaWYgRU5BQkxF
KFdFQl9SRVBMQVkpCi0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHN0YXRlLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCk7CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9
IHN0YXRlLmxleGljYWxHbG9iYWxPYmplY3QoKTsKICAgICBJbnB1dEN1cnNvciYgY3Vyc29yID0g
Z2xvYmFsT2JqZWN0LT5pbnB1dEN1cnNvcigpOwogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxj
b25zdCBBdG9taWNTdHJpbmc+IGJpbmRpbmdOYW1lKCJUZXN0Tm9uZGV0ZXJtaW5pc3RpYy5ub25k
ZXRlcm1pbmlzdGljU2V0dGVyRXhjZXB0aW9uQXR0ciIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0
RnJvbUxpdGVyYWwpOwogICAgIGlmIChjdXJzb3IuaXNDYXB0dXJpbmcoKSkgewotICAgICAgICBT
dHJpbmcgbWVtb2l6ZWRSZXN1bHQgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCkubm9uZGV0ZXJtaW5p
c3RpY1NldHRlckV4Y2VwdGlvbkF0dHIoKTsKKyAgICAgICAgU3RyaW5nIG1lbW9pemVkUmVzdWx0
ID0gdGhpc09iamVjdC53cmFwcGVkKCkubm9uZGV0ZXJtaW5pc3RpY1NldHRlckV4Y2VwdGlvbkF0
dHIoKTsKICAgICAgICAgY3Vyc29yLmFwcGVuZElucHV0PE1lbW9pemVkRE9NUmVzdWx0PFN0cmlu
Zz4+KGJpbmRpbmdOYW1lLmdldCgpLnN0cmluZygpLCBtZW1vaXplZFJlc3VsdCwgMCk7Ci0gICAg
ICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIG1lbW9pemVkUmVz
dWx0KTsKKyAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUs
IG1lbW9pemVkUmVzdWx0KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKQEAgLTMy
MiwxMyArMzIyLDEzIEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3ROb25kZXRlcm1pbmlz
dGljTm9uZGV0ZXJtaW5pc3RpY1NldHRlckV4Y2VwdGlvbkF0dHJHCiAgICAgICAgIFN0cmluZyBt
ZW1vaXplZFJlc3VsdDsKICAgICAgICAgTWVtb2l6ZWRET01SZXN1bHRCYXNlKiBpbnB1dCA9IGN1
cnNvci5mZXRjaElucHV0PE1lbW9pemVkRE9NUmVzdWx0QmFzZT4oKTsKICAgICAgICAgaWYgKGlu
cHV0ICYmIGlucHV0LT5jb252ZXJ0VG88U3RyaW5nPihtZW1vaXplZFJlc3VsdCkpIHsKLSAgICAg
ICAgICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIG1lbW9pemVk
UmVzdWx0KTsKKyAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUo
JnN0YXRlLCBtZW1vaXplZFJlc3VsdCk7CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAg
ICAgICB9CiAgICAgfQogI2VuZGlmCi0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBw
ZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBs
Lm5vbmRldGVybWluaXN0aWNTZXR0ZXJFeGNlcHRpb25BdHRyKCkpOworICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0
aENhY2hlKCZzdGF0ZSwgaW1wbC5ub25kZXRlcm1pbmlzdGljU2V0dGVyRXhjZXB0aW9uQXR0cigp
KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCmluZGV4IGUwYmY4MTY5MjdkNjBm
MjQ2ZjhmZmYyODYwM2ZkZjIwZjcyNWNiYjUuLjNkN2VmMGQ2NTdjNTE3MmFkOGJhMzZmNzk1ZmQ2
NmZkZDQ1MDNhNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RPYmouY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCkBAIC0xNzQwLDEwMTYgKzE3NDAsMTAxOCBAQCBpbmxp
bmUgSlNUZXN0T2JqKiBKU1Rlc3RPYmo6OmNhc3RGb3JBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUq
LCBFbmNvZGVkSlNWYWx1ZSB0aAogICAgIHJldHVybiBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+
KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdE9ialJlYWRPbmx5TG9uZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2Jq
UmVhZE9ubHlMb25nQXR0ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVhZE9ubHlMb25nQXR0
cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFt
ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNU
ZXN0T2JqUmVhZE9ubHlMb25nQXR0ckdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgInJlYWRPbmx5
TG9uZ0F0dHIiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlYWRPbmx5
TG9uZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0LCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJl
YWRPbmx5TG9uZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2Jq
ZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2Jq
ZWN0LT53cmFwcGVkKCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwog
ICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5yZWFkT25seUxvbmdBdHRyKCkpOwog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpS
ZWFkT25seVN0cmluZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgVGhyb3dTY29w
ZSYgdGhyb3dTY29wZSk7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVhZE9ubHlT
dHJpbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWFkT25seVN0cmluZ0F0dHIoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7
CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9i
alJlYWRPbmx5U3RyaW5nQXR0ckdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgInJlYWRPbmx5U3Ry
aW5nQXR0ciIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVhZE9ubHlT
dHJpbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpS
ZWFkT25seVN0cmluZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlz
T2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIGF1dG8mIGltcGwgPSB0aGlz
T2JqZWN0LT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNo
ZShzdGF0ZSwgaW1wbC5yZWFkT25seVN0cmluZ0F0dHIoKSk7CisgICAgYXV0byYgaW1wbCA9IHRo
aXNPYmplY3Qud3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2Fj
aGUoJnN0YXRlLCBpbXBsLnJlYWRPbmx5U3RyaW5nQXR0cigpKTsKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVhZE9ubHlUZXN0T2JqQXR0
ckdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsK
K3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWFkT25seVRlc3RPYmpBdHRyR2V0dGVy
KEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCiBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWFkT25seVRlc3RPYmpBdHRyKEV4ZWNTdGF0ZSogc3RhdGUs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBC
aW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpSZWFkT25seVRlc3RP
YmpBdHRyR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAicmVhZE9ubHlUZXN0T2JqQXR0ciIpOwog
fQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVhZE9ubHlUZXN0T2JqQXR0ckdl
dHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVhZE9ubHlUZXN0
T2JqQXR0ckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwog
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndy
YXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIHRoaXNPYmplY3QtPmds
b2JhbE9iamVjdCgpLCBpbXBsLnJlYWRPbmx5VGVzdE9iakF0dHIoKSk7CisgICAgYXV0byYgaW1w
bCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUygmc3Rh
dGUsIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIGltcGwucmVhZE9ubHlUZXN0T2JqQXR0cigp
KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
T2JqQ29uc3RydWN0b3JTdGF0aWNSZWFkT25seUxvbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSopOwor
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdG9yU3RhdGljUmVhZE9ubHlM
b25nQXR0ckdldHRlcihFeGVjU3RhdGUmKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29u
c3RydWN0b3JTdGF0aWNSZWFkT25seUxvbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rl
c3RPYmpDb25zdHJ1Y3RvclN0YXRpY1JlYWRPbmx5TG9uZ0F0dHJHZXR0ZXIoc3RhdGUpKTsKKyAg
ICBBU1NFUlQoc3RhdGUpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqQ29u
c3RydWN0b3JTdGF0aWNSZWFkT25seUxvbmdBdHRyR2V0dGVyKCpzdGF0ZSkpOwogfQogCi1zdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JTdGF0aWNSZWFkT25seUxvbmdB
dHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
T2JqQ29uc3RydWN0b3JTdGF0aWNSZWFkT25seUxvbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYgc3Rh
dGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpz
TnVtYmVyKFRlc3RPYmo6OnN0YXRpY1JlYWRPbmx5TG9uZ0F0dHIoKSk7CiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdG9yU3Rh
dGljU3RyaW5nQXR0ckdldHRlcihFeGVjU3RhdGUqKTsKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RPYmpDb25zdHJ1Y3RvclN0YXRpY1N0cmluZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlJik7CiAK
IEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdG9yU3RhdGljU3RyaW5nQXR0cihFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqQ29uc3RydWN0b3JTdGF0aWNTdHJpbmdBdHRyR2V0
dGVyKHN0YXRlKSk7CisgICAgQVNTRVJUKHN0YXRlKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVGVzdE9iakNvbnN0cnVjdG9yU3RhdGljU3RyaW5nQXR0ckdldHRlcigqc3RhdGUpKTsK
IH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdG9yU3RhdGljU3Ry
aW5nQXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdE9iakNvbnN0cnVjdG9yU3RhdGljU3RyaW5nQXR0ckdldHRlcihFeGVjU3RhdGUmIHN0YXRl
KQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0
cmluZ1dpdGhDYWNoZShzdGF0ZSwgVGVzdE9iajo6c3RhdGljU3RyaW5nQXR0cigpKTsKKyAgICBK
U1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgVGVzdE9iajo6c3RhdGlj
U3RyaW5nQXR0cigpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JUZXN0U3ViT2JqR2V0dGVyKEV4ZWNTdGF0ZSosIEpT
VGVzdE9iaiosIFRocm93U2NvcGUmIHRocm93U2NvcGUpOworc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdE9iakNvbnN0cnVjdG9yVGVzdFN1Yk9iakdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RP
YmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
Q29uc3RydWN0b3JUZXN0U3ViT2JqKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVz
dE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpDb25zdHJ1Y3RvclRlc3RTdWJPYmpHZXR0ZXI+KHN0
YXRlLCB0aGlzVmFsdWUsICJUZXN0U3ViT2JqIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RPYmpDb25zdHJ1Y3RvclRlc3RTdWJPYmpHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwg
SlNUZXN0T2JqKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdG9yVGVzdFN1Yk9iakdldHRlcihFeGVjU3Rh
dGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
CiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7Ci0gICAgcmV0dXJuIEpTVGVzdFN1Yk9iajo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCks
IHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpKTsKKyAgICByZXR1cm4gSlNUZXN0U3ViT2JqOjpn
ZXRDb25zdHJ1Y3RvcihzdGF0ZS52bSgpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0K
IAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialRlc3RTdWJPYmpFbmFibGVkQnlTZXR0
aW5nQ29uc3RydWN0b3JHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgVGhyb3dTY29wZSYg
dGhyb3dTY29wZSk7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqVGVzdFN1Yk9iakVu
YWJsZWRCeVNldHRpbmdDb25zdHJ1Y3RvckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqVGVzdFN1
Yk9iakVuYWJsZWRCeVNldHRpbmdDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0Nh
bGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqVGVzdFN1Yk9iakVuYWJsZWRCeVNl
dHRpbmdDb25zdHJ1Y3RvckdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgIlRlc3RTdWJPYmpFbmFi
bGVkQnlTZXR0aW5nIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpUZXN0
U3ViT2JqRW5hYmxlZEJ5U2V0dGluZ0NvbnN0cnVjdG9yR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUs
IEpTVGVzdE9iaiogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpUZXN0U3ViT2JqRW5hYmxlZEJ5U2V0dGluZ0NvbnN0cnVj
dG9yR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAg
VU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoIXRoaXNPYmplY3QtPndyYXBw
ZWQoKS5mcmFtZSgpKSkKKyAgICBpZiAoVU5MSUtFTFkoIXRoaXNPYmplY3Qud3JhcHBlZCgpLmZy
YW1lKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICBTZXR0aW5ncyYgc2V0
dGluZ3MgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCkuZnJhbWUoKS0+c2V0dGluZ3MoKTsKKyAgICBT
ZXR0aW5ncyYgc2V0dGluZ3MgPSB0aGlzT2JqZWN0LndyYXBwZWQoKS5mcmFtZSgpLT5zZXR0aW5n
cygpOwogICAgIGlmICghc2V0dGluZ3MudGVzdFNldHRpbmdFbmFibGVkKCkpCiAgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwotICAgIHJldHVybiBKU1Rlc3RTdWJPYmo6OmdldENvbnN0cnVj
dG9yKHN0YXRlLT52bSgpLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKSk7CisgICAgcmV0dXJu
IEpTVGVzdFN1Yk9iajo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUudm0oKSwgdGhpc09iamVjdC5nbG9i
YWxPYmplY3QoKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpFbnVtQXR0
ckdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsK
K3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpFbnVtQXR0ckdldHRlcihFeGVjU3RhdGUm
LCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqRW51bUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2Jq
Pjo6YXR0cmlidXRlPGpzVGVzdE9iakVudW1BdHRyR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAi
ZW51bUF0dHIiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakVudW1BdHRy
R2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCwgVGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpFbnVtQXR0ckdl
dHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsK
LSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLmVudW1B
dHRyKCkpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBKU1Zh
bHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgaW1wbC5lbnVtQXR0cigpKTsK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2Jq
Qnl0ZUF0dHJHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSk7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQnl0ZUF0dHJHZXR0ZXIoRXhl
Y1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKIEVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9iakJ5dGVBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpT
VGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpCeXRlQXR0ckdldHRlcj4oc3RhdGUsIHRoaXNW
YWx1ZSwgImJ5dGVBdHRyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpC
eXRlQXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQnl0
ZUF0dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFw
cGVkKCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIEpTVmFs
dWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5ieXRlQXR0cigpKTsKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqT2N0ZXRBdHRyR2V0dGVyKEV4
ZWNTdGF0ZSosIEpTVGVzdE9iaiosIFRocm93U2NvcGUmIHRocm93U2NvcGUpOworc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdE9iak9jdGV0QXR0ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RP
YmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
T2N0ZXRBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJp
YnV0ZTxqc1Rlc3RPYmpPY3RldEF0dHJHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJvY3RldEF0
dHIiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iak9jdGV0QXR0ckdldHRl
cihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqT2N0ZXRBdHRyR2V0dGVy
KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOworICAg
IGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9
IGpzTnVtYmVyKGltcGwub2N0ZXRBdHRyKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpTaG9ydEF0dHJHZXR0ZXIoRXhlY1N0YXRlKiwg
SlNUZXN0T2JqKiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CitzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0T2JqU2hvcnRBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpTaG9ydEF0dHIo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
CiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVz
dE9ialNob3J0QXR0ckdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgInNob3J0QXR0ciIpOwogfQog
Ci1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqU2hvcnRBdHRyR2V0dGVyKEV4ZWNTdGF0
ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
K3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpTaG9ydEF0dHJHZXR0ZXIoRXhlY1N0YXRl
JiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQog
ewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CisgICAgYXV0byYgaW1w
bCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIo
aW1wbC5zaG9ydEF0dHIoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdE9iakNsYW1wZWRTaG9ydEF0dHJHZXR0ZXIoRXhlY1N0YXRlKiwgSlNU
ZXN0T2JqKiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0T2JqQ2xhbXBlZFNob3J0QXR0ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ2xhbXBl
ZFNob3J0QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRy
aWJ1dGU8anNUZXN0T2JqQ2xhbXBlZFNob3J0QXR0ckdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwg
ImNsYW1wZWRTaG9ydEF0dHIiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9i
akNsYW1wZWRTaG9ydEF0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlz
T2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdE9iakNsYW1wZWRTaG9ydEF0dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2Jq
JiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3Jh
cHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5jbGFtcGVkU2hvcnRB
dHRyKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RPYmpFbmZvcmNlUmFuZ2VTaG9ydEF0dHJHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2Jq
KiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
T2JqRW5mb3JjZVJhbmdlU2hvcnRBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpFbmZvcmNl
UmFuZ2VTaG9ydEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6
YXR0cmlidXRlPGpzVGVzdE9iakVuZm9yY2VSYW5nZVNob3J0QXR0ckdldHRlcj4oc3RhdGUsIHRo
aXNWYWx1ZSwgImVuZm9yY2VSYW5nZVNob3J0QXR0ciIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0T2JqRW5mb3JjZVJhbmdlU2hvcnRBdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3Rh
dGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpFbmZvcmNlUmFuZ2VTaG9ydEF0dHJHZXR0ZXIoRXhl
Y1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0o
c3RhdGUpOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CisgICAgYXV0
byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNO
dW1iZXIoaW1wbC5lbmZvcmNlUmFuZ2VTaG9ydEF0dHIoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialVuc2lnbmVkU2hvcnRBdHRyR2V0
dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIFRocm93U2NvcGUmIHRocm93U2NvcGUpOworc3Rh
dGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialVuc2lnbmVkU2hvcnRBdHRyR2V0dGVyKEV4ZWNT
dGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpVbnNpZ25lZFNob3J0QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0Nh
bGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqVW5zaWduZWRTaG9ydEF0dHJHZXR0
ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJ1bnNpZ25lZFNob3J0QXR0ciIpOwogfQogCi1zdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0T2JqVW5zaWduZWRTaG9ydEF0dHJHZXR0ZXIoRXhlY1N0YXRl
KiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQor
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialVuc2lnbmVkU2hvcnRBdHRyR2V0dGVyKEV4
ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFN
KHN0YXRlKTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOworICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpz
TnVtYmVyKGltcGwudW5zaWduZWRTaG9ydEF0dHIoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakxvbmdBdHRyR2V0dGVyKEV4ZWNTdGF0
ZSosIEpTVGVzdE9iaiosIFRocm93U2NvcGUmIHRocm93U2NvcGUpOworc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdE9iakxvbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpMb25nQXR0
cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFt
ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNU
ZXN0T2JqTG9uZ0F0dHJHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJsb25nQXR0ciIpOwogfQog
Ci1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqTG9uZ0F0dHJHZXR0ZXIoRXhlY1N0YXRl
KiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQor
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakxvbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYg
c3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsK
ICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsK
LSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOworICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGlt
cGwubG9uZ0F0dHIoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdE9iakxvbmdMb25nQXR0ckdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoq
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RP
YmpMb25nTG9uZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYg
dGhyb3dTY29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakxvbmdMb25nQXR0cihFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsK
ICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2Jq
TG9uZ0xvbmdBdHRyR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAibG9uZ0xvbmdBdHRyIik7CiB9
CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpMb25nTG9uZ0F0dHJHZXR0ZXIoRXhl
Y1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakxvbmdMb25nQXR0ckdldHRlcihF
eGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKKyAgICBh
dXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBq
c051bWJlcihpbXBsLmxvbmdMb25nQXR0cigpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1z
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqVW5zaWduZWRMb25nTG9uZ0F0dHJHZXR0ZXIo
RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CitzdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0T2JqVW5zaWduZWRMb25nTG9uZ0F0dHJHZXR0ZXIoRXhlY1N0
YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKIEVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialVuc2lnbmVkTG9uZ0xvbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5n
Q2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpVbnNpZ25lZExvbmdMb25nQXR0
ckdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgInVuc2lnbmVkTG9uZ0xvbmdBdHRyIik7CiB9CiAK
LXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpVbnNpZ25lZExvbmdMb25nQXR0ckdldHRl
cihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqVW5zaWduZWRMb25nTG9u
Z0F0dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFw
cGVkKCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIEpTVmFs
dWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC51bnNpZ25lZExvbmdMb25nQXR0cigpKTsKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqU3RyaW5n
QXR0ckdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KTsKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdBdHRyR2V0dGVyKEV4ZWNT
dGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpTdHJpbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpT
VGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpTdHJpbmdBdHRyR2V0dGVyPihzdGF0ZSwgdGhp
c1ZhbHVlLCAic3RyaW5nQXR0ciIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
T2JqU3RyaW5nQXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmpl
Y3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
T2JqU3RyaW5nQXR0ckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmpl
Y3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmpl
Y3QtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0
YXRlLCBpbXBsLnN0cmluZ0F0dHIoKSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3Jh
cHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCBp
bXBsLnN0cmluZ0F0dHIoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdE9ialVzdnN0cmluZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0
T2JqKiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0T2JqVXN2c3RyaW5nQXR0ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqVXN2c3RyaW5nQXR0
cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFt
ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNU
ZXN0T2JqVXN2c3RyaW5nQXR0ckdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgInVzdnN0cmluZ0F0
dHIiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialVzdnN0cmluZ0F0dHJH
ZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialVzdnN0cmluZ0F0
dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVk
KCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC51
c3ZzdHJpbmdBdHRyKCkpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsK
KyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgaW1wbC51c3Zz
dHJpbmdBdHRyKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RPYmpUZXN0T2JqQXR0ckdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpU
ZXN0T2JqQXR0ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqVGVzdE9iakF0dHIoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAg
cmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9ialRlc3RP
YmpBdHRyR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAidGVzdE9iakF0dHIiKTsKIH0KIAotc3Rh
dGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialRlc3RPYmpBdHRyR2V0dGVyKEV4ZWNTdGF0ZSog
c3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpUZXN0T2JqQXR0ckdldHRlcihFeGVjU3RhdGUm
IHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7
CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJl
c3VsdCA9IHRvSlMoc3RhdGUsIHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpLCBpbXBsLnRlc3RP
YmpBdHRyKCkpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBK
U1ZhbHVlIHJlc3VsdCA9IHRvSlMoJnN0YXRlLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCBp
bXBsLnRlc3RPYmpBdHRyKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RPYmpUZXN0TnVsbGFibGVPYmpBdHRyR2V0dGVyKEV4ZWNTdGF0ZSos
IEpTVGVzdE9iaiosIFRocm93U2NvcGUmIHRocm93U2NvcGUpOworc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdE9ialRlc3ROdWxsYWJsZU9iakF0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0
T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
alRlc3ROdWxsYWJsZU9iakF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0
T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9ialRlc3ROdWxsYWJsZU9iakF0dHJHZXR0ZXI+KHN0YXRl
LCB0aGlzVmFsdWUsICJ0ZXN0TnVsbGFibGVPYmpBdHRyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3RPYmpUZXN0TnVsbGFibGVPYmpBdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3Rh
dGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpUZXN0TnVsbGFibGVPYmpBdHRyR2V0dGVyKEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwotICAgIEpTVmFs
dWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCksIGltcGwu
dGVzdE51bGxhYmxlT2JqQXR0cigpKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFw
cGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKCZzdGF0ZSwgdGhpc09iamVjdC5nbG9i
YWxPYmplY3QoKSwgaW1wbC50ZXN0TnVsbGFibGVPYmpBdHRyKCkpOwogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpMZW5pZW50VGVzdE9iakF0
dHJHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7
CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqTGVuaWVudFRlc3RPYmpBdHRyR2V0dGVy
KEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCiBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpMZW5pZW50VGVzdE9iakF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJp
bmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9iakxlbmllbnRUZXN0T2Jq
QXR0ckdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OlJldHVybkVhcmx5PihzdGF0ZSwg
dGhpc1ZhbHVlLCAibGVuaWVudFRlc3RPYmpBdHRyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RPYmpMZW5pZW50VGVzdE9iakF0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwg
SlNUZXN0T2JqKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdE9iakxlbmllbnRUZXN0T2JqQXR0ckdldHRlcihFeGVjU3RhdGUm
IHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7
CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJl
c3VsdCA9IHRvSlMoc3RhdGUsIHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpLCBpbXBsLmxlbmll
bnRUZXN0T2JqQXR0cigpKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7
CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKCZzdGF0ZSwgdGhpc09iamVjdC5nbG9iYWxPYmpl
Y3QoKSwgaW1wbC5sZW5pZW50VGVzdE9iakF0dHIoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialVuZm9yZ2VhYmxlQXR0ckdldHRlcihF
eGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKK3N0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpVbmZvcmdlYWJsZUF0dHJHZXR0ZXIoRXhlY1N0YXRlJiwg
SlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9ialVuZm9yZ2VhYmxlQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rl
c3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqVW5mb3JnZWFibGVBdHRyR2V0dGVyPihzdGF0ZSwg
dGhpc1ZhbHVlLCAidW5mb3JnZWFibGVBdHRyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RPYmpVbmZvcmdlYWJsZUF0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0
T2JqKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdE9ialVuZm9yZ2VhYmxlQXR0ckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBK
U1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgYXV0
byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpz
U3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLnVuZm9yZ2VhYmxlQXR0cigpKTsKKyAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0
cmluZ1dpdGhDYWNoZSgmc3RhdGUsIGltcGwudW5mb3JnZWFibGVBdHRyKCkpOwogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdBdHRy
VHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZ0dldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpT
dHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZ0dldHRlcihFeGVjU3RhdGUmLCBKU1Rl
c3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqU3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcoRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJp
bmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9ialN0cmluZ0F0dHJUcmVh
dGluZ051bGxBc0VtcHR5U3RyaW5nR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAic3RyaW5nQXR0
clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmciKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdE9ialN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nR2V0dGVyKEV4ZWNT
dGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdBdHRyVHJlYXRpbmdOdWxs
QXNFbXB0eVN0cmluZ0dldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmpl
Y3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmpl
Y3QtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0
YXRlLCBpbXBsLnN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKCkpOworICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpz
U3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgaW1wbC5zdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0
eVN0cmluZygpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0T2JqVXN2c3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmdHZXR0ZXIo
RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CitzdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0T2JqVXN2c3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlT
dHJpbmdHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialVzdnN0cmluZ0F0dHJUcmVhdGluZ051bGxB
c0VtcHR5U3RyaW5nKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
UHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0
dHJpYnV0ZTxqc1Rlc3RPYmpVc3ZzdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZ0dl
dHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgInVzdnN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5
U3RyaW5nIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpVc3ZzdHJpbmdB
dHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZ0dldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rl
c3RPYmoqIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0T2JqVXN2c3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmdH
ZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7
Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC51c3Zz
dHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZygpKTsKKyAgICBhdXRvJiBpbXBsID0g
dGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhD
YWNoZSgmc3RhdGUsIGltcGwudXN2c3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmco
KSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dE9iakltcGxlbWVudGF0aW9uRW51bUF0dHJHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2Jq
SW1wbGVtZW50YXRpb25FbnVtQXR0ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqSW1wbGVtZW50
YXRpb25FbnVtQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+Ojph
dHRyaWJ1dGU8anNUZXN0T2JqSW1wbGVtZW50YXRpb25FbnVtQXR0ckdldHRlcj4oc3RhdGUsIHRo
aXNWYWx1ZSwgImltcGxlbWVudGF0aW9uRW51bUF0dHIiKTsKIH0KIAotc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdE9iakltcGxlbWVudGF0aW9uRW51bUF0dHJHZXR0ZXIoRXhlY1N0YXRlKiBz
dGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3Rh
dGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakltcGxlbWVudGF0aW9uRW51bUF0dHJHZXR0ZXIo
RXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7Ci0gICAg
SlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5pbXBsZW1lbnRh
dGlvbkVudW1BdHRyKCkpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsK
KyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgaW1wbC5pbXBs
ZW1lbnRhdGlvbkVudW1BdHRyKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpYTUxPYmpBdHRyR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVz
dE9iaiosIFRocm93U2NvcGUmIHRocm93U2NvcGUpOworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdE9ialhNTE9iakF0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29w
ZSYgdGhyb3dTY29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialhNTE9iakF0dHIoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7
CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9i
alhNTE9iakF0dHJHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJYTUxPYmpBdHRyIik7CiB9CiAK
LXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpYTUxPYmpBdHRyR2V0dGVyKEV4ZWNTdGF0
ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
K3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpYTUxPYmpBdHRyR2V0dGVyKEV4ZWNTdGF0
ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
IHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUg
cmVzdWx0ID0gdG9KUyhzdGF0ZSwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCksIGltcGwueG1s
T2JqQXR0cigpKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAg
SlNWYWx1ZSByZXN1bHQgPSB0b0pTKCZzdGF0ZSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwg
aW1wbC54bWxPYmpBdHRyKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RPYmpDcmVhdGVHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2Jq
Q3JlYXRlR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDcmVhdGUoRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJp
bmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9iakNyZWF0ZUdldHRlcj4o
c3RhdGUsIHRoaXNWYWx1ZSwgImNyZWF0ZSIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0T2JqQ3JlYXRlR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09i
amVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RPYmpDcmVhdGVHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LT53cmFwcGVkKCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAg
IEpTVmFsdWUgcmVzdWx0ID0ganNCb29sZWFuKGltcGwuaXNDcmVhdGUoKSk7CiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFN0
cmluZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSk7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0
ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsK
IAogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0cihFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBy
ZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqUmVmbGVj
dGVkU3RyaW5nQXR0ckdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgInJlZmxlY3RlZFN0cmluZ0F0
dHIiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFN0cmlu
Z0F0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0LCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlZmxl
Y3RlZFN0cmluZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2Jq
ZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2Jq
ZWN0LT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShz
dGF0ZSwgaW1wbC5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxO
YW1lczo6cmVmbGVjdGVkc3RyaW5nYXR0ckF0dHIpKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09i
amVjdC53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZSgm
c3RhdGUsIGltcGwuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1M
TmFtZXM6OnJlZmxlY3RlZHN0cmluZ2F0dHJBdHRyKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFVTVlN0cmluZ0F0dHJH
ZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7Citz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkVVNWU3RyaW5nQXR0ckdldHRl
cihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAogRW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkVVNWU3RyaW5nQXR0cihFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1
cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqUmVmbGVjdGVk
VVNWU3RyaW5nQXR0ckdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgInJlZmxlY3RlZFVTVlN0cmlu
Z0F0dHIiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFVT
VlN0cmluZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9i
alJlZmxlY3RlZFVTVlN0cmluZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2Jq
JiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dp
dGhDYWNoZShzdGF0ZSwgaW1wbC5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNv
cmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkdXN2c3RyaW5nYXR0ckF0dHIpKTsKKyAgICBhdXRvJiBp
bXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmlu
Z1dpdGhDYWNoZSgmc3RhdGUsIGltcGwuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihX
ZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZHVzdnN0cmluZ2F0dHJBdHRyKSk7CiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3Rl
ZEludGVncmFsQXR0ckdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKTsKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRJbnRl
Z3JhbEF0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZEludGVncmFsQXR0cihF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkK
IHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0
T2JqUmVmbGVjdGVkSW50ZWdyYWxBdHRyR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAicmVmbGVj
dGVkSW50ZWdyYWxBdHRyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpS
ZWZsZWN0ZWRJbnRlZ3JhbEF0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0
aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdE9ialJlZmxlY3RlZEludGVncmFsQXR0ckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBK
U1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgYXV0
byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09i
amVjdC53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLmdldElu
dGVncmFsQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkaW50ZWdyYWxhdHRy
QXR0cikpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RPYmpSZWZsZWN0ZWRVbnNpZ25lZEludGVncmFsQXR0ckdldHRlcihFeGVjU3RhdGUqLCBK
U1Rlc3RPYmoqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKK3N0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRVbnNpZ25lZEludGVncmFsQXR0ckdldHRlcihFeGVjU3RhdGUm
LCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqUmVmbGVjdGVkVW5zaWduZWRJbnRlZ3JhbEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJp
bmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9ialJlZmxlY3RlZFVuc2ln
bmVkSW50ZWdyYWxBdHRyR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAicmVmbGVjdGVkVW5zaWdu
ZWRJbnRlZ3JhbEF0dHIiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJl
ZmxlY3RlZFVuc2lnbmVkSW50ZWdyYWxBdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVz
dE9iaiogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRVbnNpZ25lZEludGVncmFsQXR0ckdldHRlcihFeGVj
U3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShz
dGF0ZSk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKKyAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051
bWJlcihzdGQ6Om1heCgwLCBpbXBsLmdldEludGVncmFsQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxO
YW1lczo6cmVmbGVjdGVkdW5zaWduZWRpbnRlZ3JhbGF0dHJBdHRyKSkpOwogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRCb29s
ZWFuQXR0ckdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKTsKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRCb29sZWFuQXR0
ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsK
IAogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkQm9vbGVhbkF0dHIoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAg
cmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9ialJlZmxl
Y3RlZEJvb2xlYW5BdHRyR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAicmVmbGVjdGVkQm9vbGVh
bkF0dHIiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZEJv
b2xlYW5BdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpS
ZWZsZWN0ZWRCb29sZWFuQXR0ckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRo
aXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgYXV0byYgaW1wbCA9IHRo
aXNPYmplY3QtPndyYXBwZWQoKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVk
KCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc0Jvb2xlYW4oaW1wbC5oYXNBdHRyaWJ1dGVXaXRo
b3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkYm9vbGVhbmF0
dHJBdHRyKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdE9ialJlZmxlY3RlZFVSTEF0dHJHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2Jq
UmVmbGVjdGVkVVJMQXR0ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkVVJMQXR0
cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFt
ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNU
ZXN0T2JqUmVmbGVjdGVkVVJMQXR0ckdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgInJlZmxlY3Rl
ZFVSTEF0dHIiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3Rl
ZFVSTEF0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0LCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJl
ZmxlY3RlZFVSTEF0dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2Jq
ZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2Jq
ZWN0LT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShz
dGF0ZSwgaW1wbC5nZXRVUkxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWR1
cmxhdHRyQXR0cikpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAg
ICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgaW1wbC5nZXRVUkxB
dHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWR1cmxhdHRyQXR0cikpOwogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWZs
ZWN0ZWRVU1ZVUkxBdHRyR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIFRocm93U2NvcGUm
IHRocm93U2NvcGUpOworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFVT
VlVSTEF0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFVTVlVSTEF0dHIoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7
CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9i
alJlZmxlY3RlZFVTVlVSTEF0dHJHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJyZWZsZWN0ZWRV
U1ZVUkxBdHRyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0
ZWRVU1ZVUkxBdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVj
dCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RP
YmpSZWZsZWN0ZWRVU1ZVUkxBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYg
dGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICBhdXRvJiBpbXBsID0g
dGhpc09iamVjdC0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRo
Q2FjaGUoc3RhdGUsIGltcGwuZ2V0VVJMQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVm
bGVjdGVkdXN2dXJsYXR0ckF0dHIpKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFw
cGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIGlt
cGwuZ2V0VVJMQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkdXN2dXJsYXR0
ckF0dHIpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0ckdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoq
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RP
YmpSZWZsZWN0ZWRTdHJpbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRT
dHJpbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJp
YnV0ZTxqc1Rlc3RPYmpSZWZsZWN0ZWRTdHJpbmdBdHRyR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVl
LCAicmVmbGVjdGVkU3RyaW5nQXR0ciIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RP
YmoqIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0ckdldHRlcihFeGVjU3RhdGUmIHN0YXRl
LCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAg
YXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9
IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6
YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50U3RyaW5nQXR0ckF0dHIpKTsK
KyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1
bHQgPSBqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIGltcGwuYXR0cmlidXRlV2l0aG91dFN5bmNo
cm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRTdHJpbmdBdHRyQXR0
cikpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RPYmpSZWZsZWN0ZWRDdXN0b21JbnRlZ3JhbEF0dHJHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0
T2JqKiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0T2JqUmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWxBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVz
dE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpSZWZsZWN0ZWRDdXN0b21JbnRlZ3JhbEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxs
ZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9ialJlZmxlY3RlZEN1c3RvbUludGVncmFs
QXR0ckdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgInJlZmxlY3RlZEN1c3RvbUludGVncmFsQXR0
ciIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9t
SW50ZWdyYWxBdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVj
dCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RP
YmpSZWZsZWN0ZWRDdXN0b21JbnRlZ3JhbEF0dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNU
ZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIGF1dG8m
IGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmpl
Y3Qud3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5nZXRJbnRl
Z3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRJbnRlZ3JhbEF0
dHJBdHRyKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdE9ialJlZmxlY3RlZEN1c3RvbUJvb2xlYW5BdHRyR2V0dGVyKEV4ZWNTdGF0ZSosIEpT
VGVzdE9iaiosIFRocm93U2NvcGUmIHRocm93U2NvcGUpOworc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdE9ialJlZmxlY3RlZEN1c3RvbUJvb2xlYW5BdHRyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpT
VGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpSZWZsZWN0ZWRDdXN0b21Cb29sZWFuQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0Nh
bGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tQm9vbGVh
bkF0dHJHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJyZWZsZWN0ZWRDdXN0b21Cb29sZWFuQXR0
ciIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9t
Qm9vbGVhbkF0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9i
alJlZmxlY3RlZEN1c3RvbUJvb2xlYW5BdHRyR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVz
dE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICBhdXRvJiBp
bXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzQm9vbGVhbihpbXBsLmhhc0F0dHJp
YnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250
ZW50Qm9vbGVhbkF0dHJBdHRyKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZEN1c3RvbVVSTEF0dHJHZXR0ZXIoRXhlY1N0
YXRlKiwgSlNUZXN0T2JqKiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CitzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tVVJMQXR0ckdldHRlcihFeGVjU3RhdGUm
LCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tVVJMQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0Nh
bGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tVVJMQXR0
ckdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgInJlZmxlY3RlZEN1c3RvbVVSTEF0dHIiKTsKIH0K
IAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZEN1c3RvbVVSTEF0dHJH
ZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZEN1
c3RvbVVSTEF0dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0
ZSwgaW1wbC5nZXRVUkxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50
VVJMQXR0ckF0dHIpKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Cisg
ICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIGltcGwuZ2V0VVJM
QXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudFVSTEF0dHJBdHRyKSk7
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogI2lmIEVOQUJMRShURVNUX0ZFQVRVUkUpCi1zdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqRW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZUdldHRl
cihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKK3N0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpFbmFibGVkQXRSdW50aW1lQXR0cmlidXRlR2V0dGVy
KEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCiBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpFbmFibGVkQXRSdW50aW1lQXR0cmlidXRlKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJl
dHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpFbmFibGVk
QXRSdW50aW1lQXR0cmlidXRlR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAiZW5hYmxlZEF0UnVu
dGltZUF0dHJpYnV0ZSIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqRW5h
YmxlZEF0UnVudGltZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoq
IHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0T2JqRW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmIHN0
YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0g
ICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3Vs
dCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLmVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1
dGUoKSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIEpTVmFs
dWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCBpbXBsLmVuYWJsZWRBdFJ1bnRp
bWVBdHRyaWJ1dGUoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogI2VuZGlmCiAKLXN0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpUeXBlZEFycmF5QXR0ckdldHRlcihFeGVjU3RhdGUq
LCBKU1Rlc3RPYmoqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKK3N0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RPYmpUeXBlZEFycmF5QXR0ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmom
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqVHlw
ZWRBcnJheUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0
cmlidXRlPGpzVGVzdE9ialR5cGVkQXJyYXlBdHRyR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAi
dHlwZWRBcnJheUF0dHIiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialR5
cGVkQXJyYXlBdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVj
dCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RP
YmpUeXBlZEFycmF5QXR0ckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNP
YmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNP
YmplY3QtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIHRoaXNP
YmplY3QtPmdsb2JhbE9iamVjdCgpLCBpbXBsLnR5cGVkQXJyYXlBdHRyKCkpOworICAgIGF1dG8m
IGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMo
JnN0YXRlLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCBpbXBsLnR5cGVkQXJyYXlBdHRyKCkp
OwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RP
YmpBdHRyaWJ1dGVXaXRoR2V0dGVyRXhjZXB0aW9uR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9i
aiosIFRocm93U2NvcGUmIHRocm93U2NvcGUpOworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dE9iakF0dHJpYnV0ZVdpdGhHZXR0ZXJFeGNlcHRpb25HZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0
T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
akF0dHJpYnV0ZVdpdGhHZXR0ZXJFeGNlcHRpb24oRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxs
ZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9iakF0dHJpYnV0ZVdpdGhHZXR0ZXJFeGNl
cHRpb25HZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJhdHRyaWJ1dGVXaXRoR2V0dGVyRXhjZXB0
aW9uIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpBdHRyaWJ1dGVXaXRo
R2V0dGVyRXhjZXB0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09i
amVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RPYmpBdHRyaWJ1dGVXaXRoR2V0dGVyRXhjZXB0aW9uR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUs
IEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICBh
dXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0g
dG9KU051bWJlcigqc3RhdGUsIHRocm93U2NvcGUsIGltcGwuYXR0cmlidXRlV2l0aEdldHRlckV4
Y2VwdGlvbigpKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAg
SlNWYWx1ZSByZXN1bHQgPSB0b0pTTnVtYmVyKHN0YXRlLCB0aHJvd1Njb3BlLCBpbXBsLmF0dHJp
YnV0ZVdpdGhHZXR0ZXJFeGNlcHRpb24oKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3Rh
dGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakF0dHJpYnV0ZVdpdGhHZXR0ZXJMZWdhY3lFeGNl
cHRpb25HZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSk7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQXR0cmlidXRlV2l0aEdldHRlckxl
Z2FjeUV4Y2VwdGlvbkdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQXR0cmlidXRlV2l0aEdldHRl
ckxlZ2FjeUV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+
OjphdHRyaWJ1dGU8anNUZXN0T2JqQXR0cmlidXRlV2l0aEdldHRlckxlZ2FjeUV4Y2VwdGlvbkdl
dHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgImF0dHJpYnV0ZVdpdGhHZXR0ZXJMZWdhY3lFeGNlcHRp
b24iKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakF0dHJpYnV0ZVdpdGhH
ZXR0ZXJMZWdhY3lFeGNlcHRpb25HZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0
aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdE9iakF0dHJpYnV0ZVdpdGhHZXR0ZXJMZWdhY3lFeGNlcHRpb25HZXR0ZXIoRXhlY1N0
YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3Rh
dGUpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2Jq
ZWN0LT53cmFwcGVkKCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwog
ICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5hdHRyaWJ1dGVXaXRoR2V0dGVyTGVn
YWN5RXhjZXB0aW9uKGVjKSk7Ci0gICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3Bl
LCBlYyk7CisgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgdGhyb3dTY29wZSwgZWMpOwogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpBdHRy
V2l0aEdldHRlckV4Y2VwdGlvbldpdGhNZXNzYWdlR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9i
aiosIFRocm93U2NvcGUmIHRocm93U2NvcGUpOworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dE9iakF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uV2l0aE1lc3NhZ2VHZXR0ZXIoRXhlY1N0YXRlJiwg
SlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9iakF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uV2l0aE1lc3NhZ2UoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJu
IEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9iakF0dHJXaXRoR2V0
dGVyRXhjZXB0aW9uV2l0aE1lc3NhZ2VHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJhdHRyV2l0
aEdldHRlckV4Y2VwdGlvbldpdGhNZXNzYWdlIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RPYmpBdHRyV2l0aEdldHRlckV4Y2VwdGlvbldpdGhNZXNzYWdlR2V0dGVyKEV4ZWNT
dGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpBdHRyV2l0aEdldHRlckV4Y2VwdGlv
bldpdGhNZXNzYWdlR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVj
dCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBFeGNlcHRpb25Db2RlV2l0aE1lc3Nh
Z2UgZWM7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKKyAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051
bWJlcihpbXBsLmF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uV2l0aE1lc3NhZ2UoZWMpKTsKLSAgICBz
ZXRET01FeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIGVjKTsKKyAgICBzZXRET01FeGNlcHRp
b24oJnN0YXRlLCB0aHJvd1Njb3BlLCBlYyk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3Rh
dGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakF0dHJpYnV0ZVdpdGhTZXR0ZXJFeGNlcHRpb25H
ZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7Citz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQXR0cmlidXRlV2l0aFNldHRlckV4Y2VwdGlv
bkdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsK
IAogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQXR0cmlidXRlV2l0aFNldHRlckV4Y2VwdGlvbihF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkK
IHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0
T2JqQXR0cmlidXRlV2l0aFNldHRlckV4Y2VwdGlvbkdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwg
ImF0dHJpYnV0ZVdpdGhTZXR0ZXJFeGNlcHRpb24iKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdE9iakF0dHJpYnV0ZVdpdGhTZXR0ZXJFeGNlcHRpb25HZXR0ZXIoRXhlY1N0YXRl
KiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQor
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakF0dHJpYnV0ZVdpdGhTZXR0ZXJFeGNlcHRp
b25HZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVk
KCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIEpTVmFsdWUg
cmVzdWx0ID0ganNOdW1iZXIoaW1wbC5hdHRyaWJ1dGVXaXRoU2V0dGVyRXhjZXB0aW9uKCkpOwog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpB
dHRyaWJ1dGVXaXRoU2V0dGVyTGVnYWN5RXhjZXB0aW9uR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVz
dE9iaiosIFRocm93U2NvcGUmIHRocm93U2NvcGUpOworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdE9iakF0dHJpYnV0ZVdpdGhTZXR0ZXJMZWdhY3lFeGNlcHRpb25HZXR0ZXIoRXhlY1N0YXRl
JiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKIEVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9iakF0dHJpYnV0ZVdpdGhTZXR0ZXJMZWdhY3lFeGNlcHRpb24oRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0
dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9iakF0dHJpYnV0
ZVdpdGhTZXR0ZXJMZWdhY3lFeGNlcHRpb25HZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJhdHRy
aWJ1dGVXaXRoU2V0dGVyTGVnYWN5RXhjZXB0aW9uIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RPYmpBdHRyaWJ1dGVXaXRoU2V0dGVyTGVnYWN5RXhjZXB0aW9uR2V0dGVyKEV4
ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpBdHRyaWJ1dGVXaXRoU2V0dGVy
TGVnYWN5RXhjZXB0aW9uR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09i
amVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09i
amVjdC0+d3JhcHBlZCgpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsK
ICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwuYXR0cmlidXRlV2l0aFNldHRlckxl
Z2FjeUV4Y2VwdGlvbigpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0T2JqQXR0cldpdGhTZXR0ZXJFeGNlcHRpb25XaXRoTWVzc2FnZUdldHRl
cihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKK3N0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpBdHRyV2l0aFNldHRlckV4Y2VwdGlvbldpdGhNZXNz
YWdlR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
OwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpBdHRyV2l0aFNldHRlckV4Y2VwdGlvbldpdGhN
ZXNzYWdlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0
ZTxqc1Rlc3RPYmpBdHRyV2l0aFNldHRlckV4Y2VwdGlvbldpdGhNZXNzYWdlR2V0dGVyPihzdGF0
ZSwgdGhpc1ZhbHVlLCAiYXR0cldpdGhTZXR0ZXJFeGNlcHRpb25XaXRoTWVzc2FnZSIpOwogfQog
Ci1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQXR0cldpdGhTZXR0ZXJFeGNlcHRpb25X
aXRoTWVzc2FnZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3Qs
IFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2Jq
QXR0cldpdGhTZXR0ZXJFeGNlcHRpb25XaXRoTWVzc2FnZUdldHRlcihFeGVjU3RhdGUmIHN0YXRl
LCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAg
YXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKKyAgICBhdXRvJiBpbXBsID0gdGhp
c09iamVjdC53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLmF0
dHJXaXRoU2V0dGVyRXhjZXB0aW9uV2l0aE1lc3NhZ2UoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ0F0dHJXaXRoR2V0dGVy
RXhjZXB0aW9uR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIFRocm93U2NvcGUmIHRocm93
U2NvcGUpOworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ0F0dHJXaXRoR2V0
dGVyRXhjZXB0aW9uR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdBdHRyV2l0aEdldHRl
ckV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRy
aWJ1dGU8anNUZXN0T2JqU3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb25HZXR0ZXI+KHN0YXRl
LCB0aGlzVmFsdWUsICJzdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbiIpOwogfQogCi1zdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqU3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb25H
ZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ0F0dHJX
aXRoR2V0dGVyRXhjZXB0aW9uR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhp
c09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBFeGNlcHRpb25Db2RlIGVj
ID0gMDsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwotICAgIEpTVmFs
dWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwuc3RyaW5nQXR0cldpdGhH
ZXR0ZXJFeGNlcHRpb24oZWMpKTsKLSAgICBzZXRET01FeGNlcHRpb24oc3RhdGUsIHRocm93U2Nv
cGUsIGVjKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgSlNW
YWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIGltcGwuc3RyaW5nQXR0cldp
dGhHZXR0ZXJFeGNlcHRpb24oZWMpKTsKKyAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCB0aHJv
d1Njb3BlLCBlYyk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdE9ialN0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uR2V0dGVyKEV4ZWNTdGF0
ZSosIEpTVGVzdE9iaiosIFRocm93U2NvcGUmIHRocm93U2NvcGUpOworc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdE9ialN0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uR2V0dGVyKEV4ZWNT
dGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpTdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1
cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqU3RyaW5nQXR0
cldpdGhTZXR0ZXJFeGNlcHRpb25HZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJzdHJpbmdBdHRy
V2l0aFNldHRlckV4Y2VwdGlvbiIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
T2JqU3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb25HZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwg
SlNUZXN0T2JqKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uR2V0dGVy
KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwotICAg
IEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwuc3RyaW5nQXR0
cldpdGhTZXR0ZXJFeGNlcHRpb24oKSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3Jh
cHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCBp
bXBsLnN0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKCkpOwogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDdXN0b21BdHRyR2V0dGVyKEV4
ZWNTdGF0ZSosIEpTVGVzdE9iaiosIFRocm93U2NvcGUmIHRocm93U2NvcGUpOworc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdE9iakN1c3RvbUF0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0
T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
akN1c3RvbUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0
cmlidXRlPGpzVGVzdE9iakN1c3RvbUF0dHJHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJjdXN0
b21BdHRyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDdXN0b21BdHRy
R2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCwgVGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDdXN0b21BdHRy
R2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5V
U0VEX1BBUkFNKHN0YXRlKTsKLSAgICByZXR1cm4gdGhpc09iamVjdC0+Y3VzdG9tQXR0cigqc3Rh
dGUpOworICAgIHJldHVybiB0aGlzT2JqZWN0LmN1c3RvbUF0dHIoc3RhdGUpOwogfQogCi1zdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqT25mb29HZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0
T2JqKiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0T2JqT25mb29HZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak9uZm9vKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVy
biBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpPbmZvb0dldHRl
cj4oc3RhdGUsIHRoaXNWYWx1ZSwgIm9uZm9vIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RPYmpPbmZvb0dldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNP
YmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0T2JqT25mb29HZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIHJldHVybiBldmVudEhhbmRsZXJBdHRy
aWJ1dGUodGhpc09iamVjdC0+d3JhcHBlZCgpLCBldmVudE5hbWVzKCkuZm9vRXZlbnQpOworICAg
IHJldHVybiBldmVudEhhbmRsZXJBdHRyaWJ1dGUodGhpc09iamVjdC53cmFwcGVkKCksIGV2ZW50
TmFtZXMoKS5mb29FdmVudCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpP
bndlYmtpdGZvb0dldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKTsKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpPbndlYmtpdGZvb0dldHRl
cihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAogRW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqT253ZWJraXRmb28oRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdD
YWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9iak9ud2Via2l0Zm9vR2V0dGVyPihz
dGF0ZSwgdGhpc1ZhbHVlLCAib253ZWJraXRmb28iKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdE9iak9ud2Via2l0Zm9vR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9i
aiogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RPYmpPbndlYmtpdGZvb0dldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RP
YmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgcmV0dXJuIGV2
ZW50SGFuZGxlckF0dHJpYnV0ZSh0aGlzT2JqZWN0LT53cmFwcGVkKCksIGV2ZW50TmFtZXMoKS5m
b29FdmVudCk7CisgICAgcmV0dXJuIGV2ZW50SGFuZGxlckF0dHJpYnV0ZSh0aGlzT2JqZWN0Lndy
YXBwZWQoKSwgZXZlbnROYW1lcygpLmZvb0V2ZW50KTsKIH0KIAotc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdE9ialdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqLCBK
U1Rlc3RPYmoqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKK3N0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiwgSlNU
ZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxl
cjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqV2l0aFNjcmlwdFN0YXRlQXR0cmlidXRl
R2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAid2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlIik7CiB9
CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1
dGVHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0LCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3Jp
cHRTdGF0ZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNP
YmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNP
YmplY3QtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwud2l0
aFNjcmlwdFN0YXRlQXR0cmlidXRlKCpzdGF0ZSkpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2Jq
ZWN0LndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwud2l0aFNj
cmlwdFN0YXRlQXR0cmlidXRlKHN0YXRlKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3Rh
dGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialdpdGhDYWxsV2l0aEFuZFNldHRlckNhbGxXaXRo
QXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIFRocm93U2NvcGUmIHRocm93
U2NvcGUpOworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialdpdGhDYWxsV2l0aEFuZFNl
dHRlckNhbGxXaXRoQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoQ2FsbFdp
dGhBbmRTZXR0ZXJDYWxsV2l0aEF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxl
cjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqV2l0aENhbGxXaXRoQW5kU2V0dGVyQ2Fs
bFdpdGhBdHRyaWJ1dGVHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJ3aXRoQ2FsbFdpdGhBbmRT
ZXR0ZXJDYWxsV2l0aEF0dHJpYnV0ZSIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0T2JqV2l0aENhbGxXaXRoQW5kU2V0dGVyQ2FsbFdpdGhBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0
YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialdpdGhDYWxsV2l0aEFuZFNldHRlckNh
bGxXaXRoQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09i
amVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09i
amVjdC0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC53aXRo
Q2FsbFdpdGhBbmRTZXR0ZXJDYWxsV2l0aEF0dHJpYnV0ZSgqc3RhdGUpKTsKKyAgICBhdXRvJiBp
bXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJl
cihpbXBsLndpdGhDYWxsV2l0aEFuZFNldHRlckNhbGxXaXRoQXR0cmlidXRlKHN0YXRlKSk7CiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialdp
dGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVz
dE9iaiosIFRocm93U2NvcGUmIHRocm93U2NvcGUpOworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0
ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZShFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBy
ZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqV2l0aFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJ3
aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZSIpOwogfQogCi1zdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVHZXR0
ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVj
dXRpb25Db250ZXh0QXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYg
dGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICBhdXRvKiBjb250ZXh0
ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3Qo
KSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0
PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUubGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIGlmICghY29udGV4dCkKICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKLSAg
ICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgp
LCBpbXBsLndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlKCpjb250ZXh0KSk7Cisg
ICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0
ID0gdG9KUygmc3RhdGUsIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIGltcGwud2l0aFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGUoKmNvbnRleHQpKTsKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdFN0YXRlQXR0
cmlidXRlUmFpc2VzR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpOworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRTdGF0
ZUF0dHJpYnV0ZVJhaXNlc0dldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdFN0YXRl
QXR0cmlidXRlUmFpc2VzKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46
OmF0dHJpYnV0ZTxqc1Rlc3RPYmpXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXNHZXR0ZXI+
KHN0YXRlLCB0aGlzVmFsdWUsICJ3aXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMiKTsKIH0K
IAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0
ZVJhaXNlc0dldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqV2l0
aFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVz
dE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwot
ICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0
KCksIGltcGwud2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzKCpzdGF0ZSwgZWMpKTsKLSAg
ICBzZXRET01FeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIGVjKTsKKyAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKCZzdGF0
ZSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgaW1wbC53aXRoU2NyaXB0U3RhdGVBdHRyaWJ1
dGVSYWlzZXMoc3RhdGUsIGVjKSk7CisgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgdGhyb3dT
Y29wZSwgZWMpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJhaXNlc0dldHRl
cihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKK3N0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJp
YnV0ZVJhaXNlc0dldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHRBdHRyaWJ1dGVSYWlzZXMoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0
T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmli
dXRlUmFpc2VzR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAid2l0aFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHRBdHRyaWJ1dGVSYWlzZXMiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlUmFpc2VzR2V0dGVyKEV4ZWNT
dGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dEF0dHJpYnV0ZVJhaXNlc0dldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRo
aXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgRXhjZXB0aW9uQ29kZSBl
YyA9IDA7Ci0gICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0
YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7Cisg
ICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLmxleGlj
YWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBpZiAoIWNv
bnRleHQpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIGF1dG8mIGltcGwgPSB0
aGlzT2JqZWN0LT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCB0
aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKSwgaW1wbC53aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dEF0dHJpYnV0ZVJhaXNlcygqY29udGV4dCwgZWMpKTsKLSAgICBzZXRET01FeGNlcHRpb24oc3Rh
dGUsIHRocm93U2NvcGUsIGVjKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVk
KCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKCZzdGF0ZSwgdGhpc09iamVjdC5nbG9iYWxP
YmplY3QoKSwgaW1wbC53aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJhaXNlcygq
Y29udGV4dCwgZWMpKTsKKyAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCB0aHJvd1Njb3BlLCBl
Yyk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVHZXR0
ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CitzdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRT
Y3JpcHRTdGF0ZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmlu
ZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZUdldHRlcj4oc3RhdGUsIHRoaXNWYWx1
ZSwgIndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGUiKTsK
IH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25D
b250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNU
ZXN0T2JqKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3Rh
dGVBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8
SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpOworICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9i
YWxPYmplY3QqPihzdGF0ZS5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCk7CiAgICAgaWYgKCFjb250ZXh0KQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUg
cmVzdWx0ID0gdG9KUyhzdGF0ZSwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCksIGltcGwud2l0
aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZSgqc3RhdGUsICpj
b250ZXh0KSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIEpT
VmFsdWUgcmVzdWx0ID0gdG9KUygmc3RhdGUsIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIGlt
cGwud2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZShzdGF0
ZSwgKmNvbnRleHQpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0
dHJpYnV0ZVJhaXNlc0dldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKTsKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzR2V0dGVyKEV4ZWNTdGF0
ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmli
dXRlUmFpc2VzKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJp
YnV0ZTxqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0
cmlidXRlUmFpc2VzR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAid2l0aFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcyIpOwogfQogCi1zdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRT
dGF0ZUF0dHJpYnV0ZVJhaXNlc0dldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRo
aXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0
ZVJhaXNlc0dldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwog
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAg
YXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgYXV0byogY29u
dGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLmxleGljYWxHbG9iYWxPYmpl
Y3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBpZiAoIWNvbnRleHQpCiAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53
cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCB0aGlzT2JqZWN0LT5n
bG9iYWxPYmplY3QoKSwgaW1wbC53aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0
YXRlQXR0cmlidXRlUmFpc2VzKCpzdGF0ZSwgKmNvbnRleHQsIGVjKSk7Ci0gICAgc2V0RE9NRXhj
ZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCBlYyk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmpl
Y3Qud3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUygmc3RhdGUsIHRoaXNPYmpl
Y3QuZ2xvYmFsT2JqZWN0KCksIGltcGwud2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3Jp
cHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcyhzdGF0ZSwgKmNvbnRleHQsIGVjKSk7CisgICAgc2V0RE9N
RXhjZXB0aW9uKCZzdGF0ZSwgdGhyb3dTY29wZSwgZWMpOwogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNlc0F0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqLCBK
U1Rlc3RPYmoqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKK3N0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNw
YWNlc0F0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJu
IEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9ialdpdGhTY3JpcHRF
eGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzQXR0cmlidXRlR2V0dGVyPihz
dGF0ZSwgdGhpc1ZhbHVlLCAid2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0
ZVdpdGhTcGFjZXNBdHRyaWJ1dGUiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzQXR0
cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpXaXRo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNlc0F0dHJpYnV0ZUdl
dHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7Ci0gICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9i
amVjdCo+KHN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250
ZXh0KCk7CisgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0
YXRlLmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAg
ICBpZiAoIWNvbnRleHQpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIGF1dG8m
IGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pT
KHN0YXRlLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKSwgaW1wbC53aXRoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNlc0F0dHJpYnV0ZSgqc3RhdGUsICpjb250
ZXh0KSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIEpTVmFs
dWUgcmVzdWx0ID0gdG9KUygmc3RhdGUsIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIGltcGwu
d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1
dGUoc3RhdGUsICpjb250ZXh0KSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tBdHRy
aWJ1dGVHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSk7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdEFyZ3VtZW50c0Fu
ZENhbGxTdGFja0F0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdEFy
Z3VtZW50c0FuZENhbGxTdGFja0F0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxl
cjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqV2l0aFNjcmlwdEFyZ3VtZW50c0FuZENh
bGxTdGFja0F0dHJpYnV0ZUdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgIndpdGhTY3JpcHRBcmd1
bWVudHNBbmRDYWxsU3RhY2tBdHRyaWJ1dGUiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdE9ialdpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tBdHRyaWJ1dGVHZXR0ZXIo
RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRBcmd1bWVu
dHNBbmRDYWxsU3RhY2tBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2Jq
JiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRl
LCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKSwgaW1wbC53aXRoU2NyaXB0QXJndW1lbnRzQW5k
Q2FsbFN0YWNrQXR0cmlidXRlKCkpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBw
ZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoJnN0YXRlLCB0aGlzT2JqZWN0Lmdsb2Jh
bE9iamVjdCgpLCBpbXBsLndpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tBdHRyaWJ1dGUo
KSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogI2lmIEVOQUJMRShDb25kaXRpb24xKQotc3Rh
dGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjFHZXR0ZXIoRXhlY1N0
YXRlKiwgSlNUZXN0T2JqKiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CitzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMUdldHRlcihFeGVjU3RhdGUmLCBKU1Rl
c3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqQ29uZGl0aW9uYWxBdHRyMShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RP
Ymo+OjphdHRyaWJ1dGU8anNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMUdldHRlcj4oc3RhdGUsIHRo
aXNWYWx1ZSwgImNvbmRpdGlvbmFsQXR0cjEiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjFHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0
T2JqKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjFHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwg
SlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNP
YmplY3Qud3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5jb25k
aXRpb25hbEF0dHIxKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC0yNzU3LDE4ICsyNzU5
LDE4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHIxR2V0
dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iCiAjZW5kaWYKIAogI2lmIEVOQUJMRShDb25k
aXRpb24xKSAmJiBFTkFCTEUoQ29uZGl0aW9uMikKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RPYmpDb25kaXRpb25hbEF0dHIyR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIFRocm93
U2NvcGUmIHRocm93U2NvcGUpOworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNvbmRp
dGlvbmFsQXR0cjJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjIoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7
CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9i
akNvbmRpdGlvbmFsQXR0cjJHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJjb25kaXRpb25hbEF0
dHIyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0
dHIyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRp
b25hbEF0dHIyR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+
d3JhcHBlZCgpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBK
U1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwuY29uZGl0aW9uYWxBdHRyMigpKTsKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQpAQCAtMjc3NiwxOCArMjc3OCwxOCBAQCBzdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMkdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBK
U1Rlc3RPYgogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRp
dGlvbjIpCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyM0dl
dHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKK3N0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHIzR2V0dGVyKEV4ZWNT
dGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHIzKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2Fs
bGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHIzR2V0dGVy
PihzdGF0ZSwgdGhpc1ZhbHVlLCAiY29uZGl0aW9uYWxBdHRyMyIpOwogfQogCi1zdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyM0dldHRlcihFeGVjU3RhdGUqIHN0
YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyM0dldHRlcihFeGVjU3Rh
dGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
CiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKKyAgICBhdXRvJiBp
bXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJl
cihpbXBsLmNvbmRpdGlvbmFsQXR0cjMoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTI3
OTUsNDYwICsyNzk3LDQ2MCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ29uZGl0
aW9uYWxBdHRyM0dldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYgogI2VuZGlmCiAKICNp
ZiBFTkFCTEUoQ29uZGl0aW9uMSkKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDb25k
aXRpb25hbEF0dHI0Q29uc3RydWN0b3JHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSk7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ29u
ZGl0aW9uYWxBdHRyNENvbnN0cnVjdG9yR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRp
b25hbEF0dHI0Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0
T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjRDb25zdHJ1Y3RvckdldHRl
cj4oc3RhdGUsIHRoaXNWYWx1ZSwgImNvbmRpdGlvbmFsQXR0cjQiKTsKIH0KIAotc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjRDb25zdHJ1Y3RvckdldHRlcihF
eGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNENv
bnN0cnVjdG9yR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICByZXR1cm4gSlNUZXN0T2JqZWN0QTo6Z2V0
Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpKTsKKyAg
ICByZXR1cm4gSlNUZXN0T2JqZWN0QTo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUudm0oKSwgdGhpc09i
amVjdC5nbG9iYWxPYmplY3QoKSk7CiB9CiAKICNlbmRpZgogCiAjaWYgRU5BQkxFKENvbmRpdGlv
bjEpICYmIEVOQUJMRShDb25kaXRpb24yKQotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9i
akNvbmRpdGlvbmFsQXR0cjVDb25zdHJ1Y3RvckdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoq
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RP
YmpDb25kaXRpb25hbEF0dHI1Q29uc3RydWN0b3JHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2Jq
JiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNv
bmRpdGlvbmFsQXR0cjVDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxK
U1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNUNvbnN0cnVjdG9y
R2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAiY29uZGl0aW9uYWxBdHRyNSIpOwogfQogCi1zdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNUNvbnN0cnVjdG9yR2V0
dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCwgVGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0
dHI1Q29uc3RydWN0b3JHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2Jq
ZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIHJldHVybiBKU1Rlc3RPYmplY3RC
OjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCkp
OworICAgIHJldHVybiBKU1Rlc3RPYmplY3RCOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS52bSgpLCB0
aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIAogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ29u
ZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0T2JqQ29uZGl0aW9uYWxBdHRyNkNvbnN0cnVjdG9yR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVz
dE9iaiosIFRocm93U2NvcGUmIHRocm93U2NvcGUpOworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdE9iakNvbmRpdGlvbmFsQXR0cjZDb25zdHJ1Y3RvckdldHRlcihFeGVjU3RhdGUmLCBKU1Rl
c3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqQ29uZGl0aW9uYWxBdHRyNkNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2Fs
bGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHI2Q29uc3Ry
dWN0b3JHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJjb25kaXRpb25hbEF0dHI2Iik7CiB9CiAK
LXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHI2Q29uc3RydWN0
b3JHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0LCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlv
bmFsQXR0cjZDb25zdHJ1Y3RvckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRo
aXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgcmV0dXJuIEpTVGVzdE9i
amVjdEM6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmpl
Y3QoKSk7CisgICAgcmV0dXJuIEpTVGVzdE9iamVjdEM6OmdldENvbnN0cnVjdG9yKHN0YXRlLnZt
KCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOwogfQogCiAjZW5kaWYKIAotc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdE9iakNhY2hlZEF0dHJpYnV0ZTFHZXR0ZXIoRXhlY1N0YXRlKiwg
SlNUZXN0T2JqKiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CitzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0T2JqQ2FjaGVkQXR0cmlidXRlMUdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmom
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ2Fj
aGVkQXR0cmlidXRlMShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+Ojph
dHRyaWJ1dGU8anNUZXN0T2JqQ2FjaGVkQXR0cmlidXRlMUdldHRlcj4oc3RhdGUsIHRoaXNWYWx1
ZSwgImNhY2hlZEF0dHJpYnV0ZTEiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dE9iakNhY2hlZEF0dHJpYnV0ZTFHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0
aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdE9iakNhY2hlZEF0dHJpYnV0ZTFHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0
T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIGlmIChKU1Zh
bHVlIGNhY2hlZFZhbHVlID0gdGhpc09iamVjdC0+bV9jYWNoZWRBdHRyaWJ1dGUxLmdldCgpKQor
ICAgIGlmIChKU1ZhbHVlIGNhY2hlZFZhbHVlID0gdGhpc09iamVjdC5tX2NhY2hlZEF0dHJpYnV0
ZTEuZ2V0KCkpCiAgICAgICAgIHJldHVybiBjYWNoZWRWYWx1ZTsKLSAgICBhdXRvJiBpbXBsID0g
dGhpc09iamVjdC0+d3JhcHBlZCgpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBw
ZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGltcGwuY2FjaGVkQXR0cmlidXRlMSgpOwotICAg
IHRoaXNPYmplY3QtPm1fY2FjaGVkQXR0cmlidXRlMS5zZXQoc3RhdGUtPnZtKCksIHRoaXNPYmpl
Y3QsIHJlc3VsdCk7CisgICAgdGhpc09iamVjdC5tX2NhY2hlZEF0dHJpYnV0ZTEuc2V0KHN0YXRl
LnZtKCksICZ0aGlzT2JqZWN0LCByZXN1bHQpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDYWNoZWRBdHRyaWJ1dGUyR2V0dGVyKEV4ZWNT
dGF0ZSosIEpTVGVzdE9iaiosIFRocm93U2NvcGUmIHRocm93U2NvcGUpOworc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdE9iakNhY2hlZEF0dHJpYnV0ZTJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNU
ZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9iakNhY2hlZEF0dHJpYnV0ZTIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0
T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9iakNhY2hlZEF0dHJpYnV0ZTJHZXR0ZXI+KHN0YXRlLCB0
aGlzVmFsdWUsICJjYWNoZWRBdHRyaWJ1dGUyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RPYmpDYWNoZWRBdHRyaWJ1dGUyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVz
dE9iaiogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3RPYmpDYWNoZWRBdHRyaWJ1dGUyR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUs
IEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICBp
ZiAoSlNWYWx1ZSBjYWNoZWRWYWx1ZSA9IHRoaXNPYmplY3QtPm1fY2FjaGVkQXR0cmlidXRlMi5n
ZXQoKSkKKyAgICBpZiAoSlNWYWx1ZSBjYWNoZWRWYWx1ZSA9IHRoaXNPYmplY3QubV9jYWNoZWRB
dHRyaWJ1dGUyLmdldCgpKQogICAgICAgICByZXR1cm4gY2FjaGVkVmFsdWU7Ci0gICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVj
dC53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBpbXBsLmNhY2hlZEF0dHJpYnV0ZTIo
KTsKLSAgICB0aGlzT2JqZWN0LT5tX2NhY2hlZEF0dHJpYnV0ZTIuc2V0KHN0YXRlLT52bSgpLCB0
aGlzT2JqZWN0LCByZXN1bHQpOworICAgIHRoaXNPYmplY3QubV9jYWNoZWRBdHRyaWJ1dGUyLnNl
dChzdGF0ZS52bSgpLCAmdGhpc09iamVjdCwgcmVzdWx0KTsKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQW55QXR0cmlidXRlR2V0dGVyKEV4
ZWNTdGF0ZSosIEpTVGVzdE9iaiosIFRocm93U2NvcGUmIHRocm93U2NvcGUpOworc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdE9iakFueUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmLCBKU1Rl
c3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqQW55QXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46
OmF0dHJpYnV0ZTxqc1Rlc3RPYmpBbnlBdHRyaWJ1dGVHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUs
ICJhbnlBdHRyaWJ1dGUiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakFu
eUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3Qs
IFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2Jq
QW55QXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVj
dCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVj
dC0+d3JhcHBlZCgpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAg
ICBKU1ZhbHVlIHJlc3VsdCA9IGltcGwuYW55QXR0cmlidXRlKCk7CiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNvbnRlbnREb2N1bWVudEdl
dHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKK3N0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDb250ZW50RG9jdW1lbnRHZXR0ZXIoRXhlY1N0
YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKIEVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9iakNvbnRlbnREb2N1bWVudChFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxl
cjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqQ29udGVudERvY3VtZW50R2V0dGVyPihz
dGF0ZSwgdGhpc1ZhbHVlLCAiY29udGVudERvY3VtZW50Iik7CiB9CiAKLXN0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3RPYmpDb250ZW50RG9jdW1lbnRHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwg
SlNUZXN0T2JqKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdE9iakNvbnRlbnREb2N1bWVudEdldHRlcihFeGVjU3RhdGUmIHN0
YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0g
ICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKLSAgICByZXR1cm4gc2hvdWxk
QWxsb3dBY2Nlc3NUb05vZGUoc3RhdGUsIGltcGwuY29udGVudERvY3VtZW50KCkpID8gdG9KUyhz
dGF0ZSwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCksIGltcGwuY29udGVudERvY3VtZW50KCkp
IDoganNOdWxsKCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAg
IHJldHVybiBzaG91bGRBbGxvd0FjY2Vzc1RvTm9kZSgmc3RhdGUsIGltcGwuY29udGVudERvY3Vt
ZW50KCkpID8gdG9KUygmc3RhdGUsIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIGltcGwuY29u
dGVudERvY3VtZW50KCkpIDoganNOdWxsKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RPYmpNdXRhYmxlUG9pbnRHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSk7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqTXV0YWJs
ZVBvaW50R2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpNdXRhYmxlUG9pbnQoRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0
dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9iak11dGFibGVQ
b2ludEdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgIm11dGFibGVQb2ludCIpOwogfQogCi1zdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqTXV0YWJsZVBvaW50R2V0dGVyKEV4ZWNTdGF0ZSog
c3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpNdXRhYmxlUG9pbnRHZXR0ZXIoRXhlY1N0YXRl
JiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQog
ewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSBy
ZXN1bHQgPSB0b0pTKHN0YXRlLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKSwgU1ZHU3RhdGlj
UHJvcGVydHlUZWFyT2ZmPFRlc3RPYmosIFNWR1BvaW50Pjo6Y3JlYXRlKGltcGwsIGltcGwubXV0
YWJsZVBvaW50KCksICZUZXN0T2JqOjp1cGRhdGVNdXRhYmxlUG9pbnQpKTsKKyAgICBhdXRvJiBp
bXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKCZz
dGF0ZSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgU1ZHU3RhdGljUHJvcGVydHlUZWFyT2Zm
PFRlc3RPYmosIFNWR1BvaW50Pjo6Y3JlYXRlKGltcGwsIGltcGwubXV0YWJsZVBvaW50KCksICZU
ZXN0T2JqOjp1cGRhdGVNdXRhYmxlUG9pbnQpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1z
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqSW1tdXRhYmxlUG9pbnRHZXR0ZXIoRXhlY1N0
YXRlKiwgSlNUZXN0T2JqKiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CitzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0T2JqSW1tdXRhYmxlUG9pbnRHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0
T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
akltbXV0YWJsZVBvaW50KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46
OmF0dHJpYnV0ZTxqc1Rlc3RPYmpJbW11dGFibGVQb2ludEdldHRlcj4oc3RhdGUsIHRoaXNWYWx1
ZSwgImltbXV0YWJsZVBvaW50Iik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RP
YmpJbW11dGFibGVQb2ludEdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNP
YmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0T2JqSW1tdXRhYmxlUG9pbnRHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0
aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIGF1dG8mIGltcGwgPSB0
aGlzT2JqZWN0LT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCB0
aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKSwgU1ZHUHJvcGVydHlUZWFyT2ZmPFNWR1BvaW50Pjo6
Y3JlYXRlKGltcGwuaW1tdXRhYmxlUG9pbnQoKSkpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2Jq
ZWN0LndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoJnN0YXRlLCB0aGlzT2Jq
ZWN0Lmdsb2JhbE9iamVjdCgpLCBTVkdQcm9wZXJ0eVRlYXJPZmY8U1ZHUG9pbnQ+OjpjcmVhdGUo
aW1wbC5pbW11dGFibGVQb2ludCgpKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialN0cmF3YmVycnlHZXR0ZXIoRXhlY1N0YXRlKiwgSlNU
ZXN0T2JqKiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0T2JqU3RyYXdiZXJyeUdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqU3RyYXdiZXJyeShF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkK
IHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0
T2JqU3RyYXdiZXJyeUdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgInN0cmF3YmVycnkiKTsKIH0K
IAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialN0cmF3YmVycnlHZXR0ZXIoRXhlY1N0
YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialN0cmF3YmVycnlHZXR0ZXIoRXhlY1N0
YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3Rh
dGUpOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CisgICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1i
ZXIoaW1wbC5ibHVlYmVycnkoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdE9iakRlc2NyaXB0aW9uR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVz
dE9iaiosIFRocm93U2NvcGUmIHRocm93U2NvcGUpOworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdE9iakRlc2NyaXB0aW9uR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpEZXNjcmlwdGlvbihF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkK
IHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0
T2JqRGVzY3JpcHRpb25HZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJkZXNjcmlwdGlvbiIpOwog
fQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqRGVzY3JpcHRpb25HZXR0ZXIoRXhl
Y1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakRlc2NyaXB0aW9uR2V0dGVyKEV4
ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFN
KHN0YXRlKTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOworICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpz
TnVtYmVyKGltcGwuZGVzY3JpcHRpb24oKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3Rh
dGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iaklkR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9i
aiosIFRocm93U2NvcGUmIHRocm93U2NvcGUpOworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dE9iaklkR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpJZChFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGlu
Z0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqSWRHZXR0ZXI+KHN0YXRlLCB0
aGlzVmFsdWUsICJpZCIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqSWRH
ZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iaklkR2V0dGVyKEV4
ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFN
KHN0YXRlKTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOworICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpz
TnVtYmVyKGltcGwuaWQoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdE9iakhhc2hHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSk7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqSGFz
aEdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsK
IAogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqSGFzaChFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0Nh
bGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqSGFzaEdldHRlcj4oc3RhdGUsIHRo
aXNWYWx1ZSwgImhhc2giKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakhh
c2hHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0LCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakhhc2hHZXR0
ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7Ci0g
ICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5oYXNoKCkp
OworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJl
c3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgaW1wbC5oYXNoKCkpOwogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZXBsYWNlYWJs
ZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKTsKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZXBsYWNlYWJsZUF0dHJp
YnV0ZUdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVwbGFjZWFibGVBdHRyaWJ1dGUoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAg
ICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9ialJl
cGxhY2VhYmxlQXR0cmlidXRlR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAicmVwbGFjZWFibGVB
dHRyaWJ1dGUiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlcGxhY2Vh
YmxlQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVj
dCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RP
YmpSZXBsYWNlYWJsZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmom
IHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgYXV0byYgaW1wbCA9
IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFw
cGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLnJlcGxhY2VhYmxlQXR0
cmlidXRlKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RPYmpOdWxsYWJsZURvdWJsZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqLCBKU1Rl
c3RPYmoqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RPYmpOdWxsYWJsZURvdWJsZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RP
YmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
TnVsbGFibGVEb3VibGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNU
ZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9iak51bGxhYmxlRG91YmxlQXR0cmlidXRlR2V0dGVy
PihzdGF0ZSwgdGhpc1ZhbHVlLCAibnVsbGFibGVEb3VibGVBdHRyaWJ1dGUiKTsKIH0KIAotc3Rh
dGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlRG91YmxlQXR0cmlidXRlR2V0dGVy
KEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZURvdWJsZUF0
dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwog
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndy
YXBwZWQoKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgSlNW
YWx1ZSByZXN1bHQgPSB0b051bGxhYmxlSlNOdW1iZXIoaW1wbC5udWxsYWJsZURvdWJsZUF0dHJp
YnV0ZSgpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0T2JqTnVsbGFibGVMb25nQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9i
aiosIFRocm93U2NvcGUmIHRocm93U2NvcGUpOworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dE9iak51bGxhYmxlTG9uZ0F0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTnVsbGFi
bGVMb25nQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46
OmF0dHJpYnV0ZTxqc1Rlc3RPYmpOdWxsYWJsZUxvbmdBdHRyaWJ1dGVHZXR0ZXI+KHN0YXRlLCB0
aGlzVmFsdWUsICJudWxsYWJsZUxvbmdBdHRyaWJ1dGUiKTsKIH0KIAotc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlTG9uZ0F0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqIHN0
YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVMb25nQXR0cmlidXRlR2V0dGVyKEV4
ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFN
KHN0YXRlKTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOworICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IHRv
TnVsbGFibGVKU051bWJlcihpbXBsLm51bGxhYmxlTG9uZ0F0dHJpYnV0ZSgpKTsKICAgICByZXR1
cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVC
b29sZWFuQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIFRocm93U2NvcGUm
IHRocm93U2NvcGUpOworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlQm9v
bGVhbkF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVCb29sZWFuQXR0
cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0
ZTxqc1Rlc3RPYmpOdWxsYWJsZUJvb2xlYW5BdHRyaWJ1dGVHZXR0ZXI+KHN0YXRlLCB0aGlzVmFs
dWUsICJudWxsYWJsZUJvb2xlYW5BdHRyaWJ1dGUiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdE9iak51bGxhYmxlQm9vbGVhbkF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqIHN0
YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVCb29sZWFuQXR0cmlidXRlR2V0dGVy
KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOworICAg
IGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9
IGpzQm9vbGVhbihpbXBsLm51bGxhYmxlQm9vbGVhbkF0dHJpYnV0ZSgpKTsKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVTdHJp
bmdBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSk7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVTdHJpbmdB
dHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlU3RyaW5nQXR0cmlidXRl
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rl
c3RPYmpOdWxsYWJsZVN0cmluZ0F0dHJpYnV0ZUdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgIm51
bGxhYmxlU3RyaW5nQXR0cmlidXRlIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RPYmpOdWxsYWJsZVN0cmluZ0F0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rl
c3RPYmoqIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVTdHJpbmdBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRl
JiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQog
ewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSBy
ZXN1bHQgPSBqc1N0cmluZ09yTnVsbChzdGF0ZSwgaW1wbC5udWxsYWJsZVN0cmluZ0F0dHJpYnV0
ZSgpKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgSlNWYWx1
ZSByZXN1bHQgPSBqc1N0cmluZ09yTnVsbCgmc3RhdGUsIGltcGwubnVsbGFibGVTdHJpbmdBdHRy
aWJ1dGUoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdE9iak51bGxhYmxlTG9uZ1NldHRhYmxlQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSos
IEpTVGVzdE9iaiosIFRocm93U2NvcGUmIHRocm93U2NvcGUpOworc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdE9iak51bGxhYmxlTG9uZ1NldHRhYmxlQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0
ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpOdWxsYWJsZUxvbmdTZXR0YWJsZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4g
QmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqTnVsbGFibGVMb25n
U2V0dGFibGVBdHRyaWJ1dGVHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJudWxsYWJsZUxvbmdT
ZXR0YWJsZUF0dHJpYnV0ZSIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2Jq
TnVsbGFibGVMb25nU2V0dGFibGVBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNU
ZXN0T2JqKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlTG9uZ1NldHRhYmxlQXR0cmlidXRlR2V0dGVyKEV4
ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFN
KHN0YXRlKTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOworICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IHRv
TnVsbGFibGVKU051bWJlcihpbXBsLm51bGxhYmxlTG9uZ1NldHRhYmxlQXR0cmlidXRlKCkpOwog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpO
dWxsYWJsZVN0cmluZ1NldHRhYmxlQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9i
aiosIFRocm93U2NvcGUmIHRocm93U2NvcGUpOworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dE9iak51bGxhYmxlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiwgSlNU
ZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9iak51bGxhYmxlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRp
bmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9iak51bGxhYmxlU3RyaW5nU2V0
dGFibGVBdHRyaWJ1dGVHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJudWxsYWJsZVN0cmluZ1Nl
dHRhYmxlQXR0cmlidXRlIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpO
dWxsYWJsZVN0cmluZ1NldHRhYmxlQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpT
VGVzdE9iaiogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZVN0cmluZ1NldHRhYmxlQXR0cmlidXRlR2V0dGVy
KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwotICAg
IEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdPck51bGwoc3RhdGUsIGltcGwubnVsbGFibGVTdHJp
bmdTZXR0YWJsZUF0dHJpYnV0ZSgpKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFw
cGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ09yTnVsbCgmc3RhdGUsIGltcGwu
bnVsbGFibGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZSgpKTsKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVVU1ZTdHJpbmdTZXR0
YWJsZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKTsKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZVVTVlN0
cmluZ1NldHRhYmxlQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZVVT
VlN0cmluZ1NldHRhYmxlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpT
VGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpOdWxsYWJsZVVTVlN0cmluZ1NldHRhYmxlQXR0
cmlidXRlR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAibnVsbGFibGVVU1ZTdHJpbmdTZXR0YWJs
ZUF0dHJpYnV0ZSIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqTnVsbGFi
bGVVU1ZTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rl
c3RPYmoqIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVVU1ZTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZUdldHRl
cihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKLSAg
ICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nT3JOdWxsKHN0YXRlLCBpbXBsLm51bGxhYmxlVVNW
U3RyaW5nU2V0dGFibGVBdHRyaWJ1dGUoKSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdPck51bGwoJnN0YXRlLCBp
bXBsLm51bGxhYmxlVVNWU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGUoKSk7CiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlU3RyaW5n
VmFsdWVHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSk7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVTdHJpbmdWYWx1ZUdl
dHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAog
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVTdHJpbmdWYWx1ZShFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1
cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqTnVsbGFibGVT
dHJpbmdWYWx1ZUdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgIm51bGxhYmxlU3RyaW5nVmFsdWUi
KTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlU3RyaW5nVmFs
dWVHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0LCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxl
U3RyaW5nVmFsdWVHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwot
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CisgICAgYXV0byYgaW1wbCA9
IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9OdWxsYWJsZUpT
TnVtYmVyKGltcGwubnVsbGFibGVTdHJpbmdWYWx1ZShlYykpOwotICAgIHNldERPTUV4Y2VwdGlv
bihzdGF0ZSwgdGhyb3dTY29wZSwgZWMpOworICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIHRo
cm93U2NvcGUsIGVjKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0T2JqQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpOworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakF0
dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVy
biBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpBdHRyaWJ1dGVH
ZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJhdHRyaWJ1dGUiKTsKIH0KIAotc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdE9iakF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rl
c3RPYmoqIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0T2JqQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVz
dE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICBhdXRvJiBp
bXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJp
bmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwuYXR0cmlidXRlKCkpOworICAgIGF1dG8mIGltcGwgPSB0
aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENh
Y2hlKCZzdGF0ZSwgaW1wbC5hdHRyaWJ1dGUoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAot
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakF0dHJpYnV0ZVdpdGhSZXNlcnZlZEVudW1U
eXBlR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIFRocm93U2NvcGUmIHRocm93U2NvcGUp
Oworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakF0dHJpYnV0ZVdpdGhSZXNlcnZlZEVu
dW1UeXBlR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpBdHRyaWJ1dGVXaXRoUmVzZXJ2ZWRFbnVt
VHlwZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5
TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8
anNUZXN0T2JqQXR0cmlidXRlV2l0aFJlc2VydmVkRW51bVR5cGVHZXR0ZXI+KHN0YXRlLCB0aGlz
VmFsdWUsICJhdHRyaWJ1dGVXaXRoUmVzZXJ2ZWRFbnVtVHlwZSIpOwogfQogCi1zdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0T2JqQXR0cmlidXRlV2l0aFJlc2VydmVkRW51bVR5cGVHZXR0ZXIo
RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakF0dHJpYnV0ZVdpdGhSZXNl
cnZlZEVudW1UeXBlR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVj
dCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVj
dC0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3Rh
dGUsIGltcGwuYXR0cmlidXRlV2l0aFJlc2VydmVkRW51bVR5cGUoKSk7CisgICAgYXV0byYgaW1w
bCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdX
aXRoQ2FjaGUoJnN0YXRlLCBpbXBsLmF0dHJpYnV0ZVdpdGhSZXNlcnZlZEVudW1UeXBlKCkpOwog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpU
ZXN0UmVhZE9ubHlQcm9taXNlQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaios
IFRocm93U2NvcGUmIHRocm93U2NvcGUpOworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9i
alRlc3RSZWFkT25seVByb21pc2VBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2Jq
JiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialRl
c3RSZWFkT25seVByb21pc2VBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8
SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9ialRlc3RSZWFkT25seVByb21pc2VBdHRyaWJ1
dGVHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpSZWplY3RQcm9taXNlPihzdGF0ZSwg
dGhpc1ZhbHVlLCAidGVzdFJlYWRPbmx5UHJvbWlzZUF0dHJpYnV0ZSIpOwogfQogCi1zdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0T2JqVGVzdFJlYWRPbmx5UHJvbWlzZUF0dHJpYnV0ZUdldHRl
cihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqVGVzdFJlYWRPbmx5UHJv
bWlzZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmpl
Y3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmpl
Y3QtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIHRoaXNPYmpl
Y3QtPmdsb2JhbE9iamVjdCgpLCBpbXBsLnRlc3RSZWFkT25seVByb21pc2VBdHRyaWJ1dGUoKSk7
CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVz
dWx0ID0gdG9KUygmc3RhdGUsIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIGltcGwudGVzdFJl
YWRPbmx5UHJvbWlzZUF0dHJpYnV0ZSgpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUHV0Rm9yd2FyZHNBdHRyaWJ1dGVHZXR0ZXIoRXhl
Y1N0YXRlKiwgSlNUZXN0T2JqKiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CitzdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0T2JqUHV0Rm9yd2FyZHNBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRl
JiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKIEVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9ialB1dEZvcndhcmRzQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2Fs
bGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpQdXRGb3J3YXJkc0F0dHJpYnV0ZUdl
dHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgInB1dEZvcndhcmRzQXR0cmlidXRlIik7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpQdXRGb3J3YXJkc0F0dHJpYnV0ZUdldHRlcihF
eGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUHV0Rm9yd2FyZHNBdHRyaWJ1
dGVHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVk
KCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCB0aGlzT2JqZWN0LT5nbG9iYWxP
YmplY3QoKSwgaW1wbC5wdXRGb3J3YXJkc0F0dHJpYnV0ZSgpKTsKKyAgICBhdXRvJiBpbXBsID0g
dGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKCZzdGF0ZSwg
dGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgaW1wbC5wdXRGb3J3YXJkc0F0dHJpYnV0ZSgpKTsK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2Jq
UHV0Rm9yd2FyZHNOdWxsYWJsZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoq
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RP
YmpQdXRGb3J3YXJkc051bGxhYmxlQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9i
aiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQ
dXRGb3J3YXJkc051bGxhYmxlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVy
PEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpQdXRGb3J3YXJkc051bGxhYmxlQXR0cmli
dXRlR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAicHV0Rm9yd2FyZHNOdWxsYWJsZUF0dHJpYnV0
ZSIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUHV0Rm9yd2FyZHNOdWxs
YWJsZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmpl
Y3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
T2JqUHV0Rm9yd2FyZHNOdWxsYWJsZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBK
U1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgYXV0
byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRv
SlMoc3RhdGUsIHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpLCBpbXBsLnB1dEZvcndhcmRzTnVs
bGFibGVBdHRyaWJ1dGUoKSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgp
OworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUygmc3RhdGUsIHRoaXNPYmplY3QuZ2xvYmFsT2Jq
ZWN0KCksIGltcGwucHV0Rm9yd2FyZHNOdWxsYWJsZUF0dHJpYnV0ZSgpKTsKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqU3RyaW5naWZpZXJB
dHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSk7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqU3RyaW5naWZpZXJBdHRyaWJ1
dGVHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7
CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ2lmaWVyQXR0cmlidXRlKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAg
IHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpTdHJp
bmdpZmllckF0dHJpYnV0ZUdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgInN0cmluZ2lmaWVyQXR0
cmlidXRlIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdpZmll
ckF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3Qs
IFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2Jq
U3RyaW5naWZpZXJBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0
aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIGF1dG8mIGltcGwgPSB0
aGlzT2JqZWN0LT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhD
YWNoZShzdGF0ZSwgaW1wbC5zdHJpbmdpZmllckF0dHJpYnV0ZSgpKTsKKyAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dp
dGhDYWNoZSgmc3RhdGUsIGltcGwuc3RyaW5naWZpZXJBdHRyaWJ1dGUoKSk7CiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIApAQCAtNDEzMSw3ICs0MTMzLDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpXaXRo
U2NyaXB0U3RhdGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1YKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0
aXZlVmFsdWUgPSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNp
b24pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwotICAgIGlt
cGwuc2V0V2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlKCpzdGF0ZSwgV1RGTW92ZShuYXRpdmVWYWx1
ZSkpOworICAgIGltcGwuc2V0V2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlKCgqc3RhdGUpLCBXVEZN
b3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTQxNDksNyArNDE1
MSw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqV2l0aENhbGxXaXRoQW5kU2V0dGVyQ2FsbFdpdGhBdHRy
aWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlCiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxpbnQzMl90Pigq
c3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIGZhbHNlKTsKLSAgICBpbXBsLnNldFdpdGhDYWxsV2l0aEFuZFNldHRlckNh
bGxXaXRoQXR0cmlidXRlKCpzdGF0ZSwgYWN0aXZlRE9NV2luZG93KHN0YXRlKSwgZmlyc3RET01X
aW5kb3coc3RhdGUpLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CisgICAgaW1wbC5zZXRXaXRoQ2Fs
bFdpdGhBbmRTZXR0ZXJDYWxsV2l0aEF0dHJpYnV0ZSgoKnN0YXRlKSwgYWN0aXZlRE9NV2luZG93
KHN0YXRlKSwgZmlyc3RET01XaW5kb3coc3RhdGUpLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTQxOTQsNyArNDE5Niw3IEBAIGJvb2wgc2V0SlNUZXN0
T2JqV2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlCiAgICAgICAgIHRocm93QXR0cmlidXRlVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dT
Y29wZSwgIlRlc3RPYmplY3QiLCAid2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzIiwgIlRl
c3RPYmoiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBpbXBsLnNldFdpdGhT
Y3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcygqc3RhdGUsICpuYXRpdmVWYWx1ZSk7CisgICAgaW1w
bC5zZXRXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMoKCpzdGF0ZSksICpuYXRpdmVWYWx1
ZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTQyNDIsNyArNDI0NCw3IEBAIGJvb2wgc2V0
SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0
ZShFeGVjU3RhdGUqIHN0CiAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9i
amVjdCo+KHN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250
ZXh0KCk7CiAgICAgaWYgKCFjb250ZXh0KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaW1w
bC5zZXRXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlKCpz
dGF0ZSwgKmNvbnRleHQsICpuYXRpdmVWYWx1ZSk7CisgICAgaW1wbC5zZXRXaXRoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlKCgqc3RhdGUpLCAqY29udGV4dCwg
Km5hdGl2ZVZhbHVlKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtNDI2Niw3ICs0MjY4LDcg
QEAgYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0
YXRlQXR0cmlidXRlUmFpc2VzKEV4ZWNTdGEKICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpT
RE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKTsKICAgICBpZiAoIWNvbnRleHQpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBpbXBsLnNldFdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVB
dHRyaWJ1dGVSYWlzZXMoKnN0YXRlLCAqY29udGV4dCwgKm5hdGl2ZVZhbHVlKTsKKyAgICBpbXBs
LnNldFdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlz
ZXMoKCpzdGF0ZSksICpjb250ZXh0LCAqbmF0aXZlVmFsdWUpOwogICAgIHJldHVybiB0cnVlOwog
fQogCkBAIC00MjkwLDcgKzQyOTIsNyBAQCBib29sIHNldEpTVGVzdE9ialdpdGhTY3JpcHRFeGVj
dXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzQXR0cmlidXRlKEV4ZQogICAgIGF1
dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS0+bGV4aWNhbEds
b2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIGlmICghY29udGV4
dCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGltcGwuc2V0V2l0aFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1dGUoKnN0YXRlLCAqY29udGV4
dCwgKm5hdGl2ZVZhbHVlKTsKKyAgICBpbXBsLnNldFdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0
QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzQXR0cmlidXRlKCgqc3RhdGUpLCAqY29udGV4dCwgKm5h
dGl2ZVZhbHVlKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtNTQ2MCw3ICs1NDYyLDcgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldp
dGhTY3JpcHRTdGF0ZVZvaWQoRXhlY1MKICAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJv
cigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0T2JqZWN0IiwgIndpdGhTY3JpcHRTdGF0ZVZvaWQi
KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6
aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGlt
cGwud2l0aFNjcmlwdFN0YXRlVm9pZCgqc3RhdGUpOworICAgIGltcGwud2l0aFNjcmlwdFN0YXRl
Vm9pZCgoKnN0YXRlKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKIH0KIApAQCAtNTQ3NSw3ICs1NDc3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRTdGF0ZU9iaihFeGVjU3QKICAg
ICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0
T2JqZWN0IiwgIndpdGhTY3JpcHRTdGF0ZU9iaiIpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCBj
YXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC53aXRoU2NyaXB0U3RhdGVPYmooKnN0YXRl
KSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxP
YmplY3QoKSwgaW1wbC53aXRoU2NyaXB0U3RhdGVPYmooKCpzdGF0ZSkpKTsKICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KQEAgLTU0OTIsNyArNTQ5NCw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0
U3RhdGVWb2lkRXhjZXB0CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlz
LCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBw
ZWQoKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBpbXBsLndpdGhTY3JpcHRTdGF0
ZVZvaWRFeGNlcHRpb24oKnN0YXRlLCBlYyk7CisgICAgaW1wbC53aXRoU2NyaXB0U3RhdGVWb2lk
RXhjZXB0aW9uKCgqc3RhdGUpLCBlYyk7CiAgICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCB0aHJv
d1Njb3BlLCBlYyk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
IH0KQEAgLTU1MDksNyArNTUxMSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0U3RhdGVPYmpFeGNlcHRpCiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAg
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBFeGNlcHRpb25Db2Rl
IGVjID0gMDsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmds
b2JhbE9iamVjdCgpLCBpbXBsLndpdGhTY3JpcHRTdGF0ZU9iakV4Y2VwdGlvbigqc3RhdGUsIGVj
KSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxP
YmplY3QoKSwgaW1wbC53aXRoU2NyaXB0U3RhdGVPYmpFeGNlcHRpb24oKCpzdGF0ZSksIGVjKSk7
CiAKICAgICBzZXRET01FeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIGVjKTsKICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwpAQCAtNTU0OCw3
ICs1NTUwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbldpdGhTY3JpcHRFeGVjdXRpb25Db250ZXgKICAgICBhdXRvKiBjb250ZXh0ID0g
anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSkt
PnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBpZiAoIWNvbnRleHQpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgaW1wbC53aXRoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlKCpzdGF0ZSwgKmNvbnRleHQpOworICAgIGlt
cGwud2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZSgoKnN0YXRlKSwgKmNv
bnRleHQpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAK
QEAgLTU1NjcsNyArNTU2OSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4CiAgICAgYXV0byog
Y29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgaWYgKCFjb250ZXh0KQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIEpTVmFs
dWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwu
d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZU9iakV4Y2VwdGlvbigqc3Rh
dGUsICpjb250ZXh0LCBlYykpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2Fz
dGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwud2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRB
bmRTY3JpcHRTdGF0ZU9iakV4Y2VwdGlvbigoKnN0YXRlKSwgKmNvbnRleHQsIGVjKSk7CiAKICAg
ICBzZXRET01FeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIGVjKTsKICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwpAQCAtNTU4OCw3ICs1NTkw
LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbldpdGhTY3JpcHRFeGVjdXRpb25Db250ZXgKICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0
PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBpZiAoIWNvbnRleHQpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pT
KHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC53aXRoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNlcygqc3RhdGUsICpjb250ZXh0KSk7Cisg
ICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3Qo
KSwgaW1wbC53aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNl
cygoKnN0YXRlKSwgKmNvbnRleHQpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0
KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZS5jcHAKaW5kZXggYWUxOGY4ZGE5NjBlZmQwOTU3MzMyNjA4ZWI5YTU2NGE2ODZjZTBj
Mi4uZjE0ZjFiNTg4OWM3YTVmNDIxOGY0MGUxODIwYmZhYzIxNWQxNzhjZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAKQEAg
LTEzNyw4OSArMTM3LDg5IEBAIGlubGluZSBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2UqIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjCiAgICAgcmV0dXJuIGpz
RHluYW1pY0Nhc3Q8SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKj4oSlNWYWx1
ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlVmFsdWVHZXR0ZXIoRXhlY1N0YXRlKiwgSlNU
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSk7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlVmFsdWVHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpz
VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVZhbHVlKEV4ZWNTdGF0ZSogc3RhdGUs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBC
aW5kaW5nQ2FsbGVyPEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZT46OmF0dHJp
YnV0ZTxqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VWYWx1ZUdldHRlcj4oc3Rh
dGUsIHRoaXNWYWx1ZSwgInZhbHVlIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VWYWx1ZUdldHRlcihFeGVjU3RhdGUqIHN0
YXRlLCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIHRoaXNPYmplY3QsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlVmFsdWVHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNU
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7
Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBpbXBsLnZhbHVlKCkgPyBpbXBsLnZhbHVlKCktPmRlc2Vy
aWFsaXplKHN0YXRlLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKSwgMCkgOiBqc051bGwoKTsK
KyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1
bHQgPSBpbXBsLnZhbHVlKCkgPyBpbXBsLnZhbHVlKCktPmRlc2VyaWFsaXplKCZzdGF0ZSwgdGhp
c09iamVjdC5nbG9iYWxPYmplY3QoKSwgMCkgOiBqc051bGwoKTsKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlUmVhZG9ubHlWYWx1ZUdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2UqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKK3N0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VSZWFkb25s
eVZhbHVlR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZSYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VSZWFkb25seVZhbHVlKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVy
biBCaW5kaW5nQ2FsbGVyPEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZT46OmF0
dHJpYnV0ZTxqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VSZWFkb25seVZhbHVl
R2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAicmVhZG9ubHlWYWx1ZSIpOwogfQogCi1zdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUmVhZG9u
bHlWYWx1ZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2UqIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUmVhZG9u
bHlWYWx1ZUdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2UmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAg
YXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9
IGltcGwucmVhZG9ubHlWYWx1ZSgpID8gaW1wbC5yZWFkb25seVZhbHVlKCktPmRlc2VyaWFsaXpl
KHN0YXRlLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKSwgMCkgOiBqc051bGwoKTsKKyAgICBh
dXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBp
bXBsLnJlYWRvbmx5VmFsdWUoKSA/IGltcGwucmVhZG9ubHlWYWx1ZSgpLT5kZXNlcmlhbGl6ZSgm
c3RhdGUsIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIDApIDoganNOdWxsKCk7CiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZUNhY2hlZFZhbHVlR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSosIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwor
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFj
ZUNhY2hlZFZhbHVlR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZSYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDYWNoZWRWYWx1ZShFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBy
ZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U+
OjphdHRyaWJ1dGU8anNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ2FjaGVkVmFs
dWVHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJjYWNoZWRWYWx1ZSIpOwogfQogCi1zdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ2FjaGVk
VmFsdWVHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNhY2hlZFZh
bHVlR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZSYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICBpZiAo
SlNWYWx1ZSBjYWNoZWRWYWx1ZSA9IHRoaXNPYmplY3QtPm1fY2FjaGVkVmFsdWUuZ2V0KCkpCisg
ICAgaWYgKEpTVmFsdWUgY2FjaGVkVmFsdWUgPSB0aGlzT2JqZWN0Lm1fY2FjaGVkVmFsdWUuZ2V0
KCkpCiAgICAgICAgIHJldHVybiBjYWNoZWRWYWx1ZTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09i
amVjdC0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gaW1wbC5jYWNoZWRWYWx1ZSgp
ID8gaW1wbC5jYWNoZWRWYWx1ZSgpLT5kZXNlcmlhbGl6ZShzdGF0ZSwgdGhpc09iamVjdC0+Z2xv
YmFsT2JqZWN0KCksIDApIDoganNOdWxsKCk7Ci0gICAgdGhpc09iamVjdC0+bV9jYWNoZWRWYWx1
ZS5zZXQoc3RhdGUtPnZtKCksIHRoaXNPYmplY3QsIHJlc3VsdCk7CisgICAgYXV0byYgaW1wbCA9
IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gaW1wbC5jYWNoZWRW
YWx1ZSgpID8gaW1wbC5jYWNoZWRWYWx1ZSgpLT5kZXNlcmlhbGl6ZSgmc3RhdGUsIHRoaXNPYmpl
Y3QuZ2xvYmFsT2JqZWN0KCksIDApIDoganNOdWxsKCk7CisgICAgdGhpc09iamVjdC5tX2NhY2hl
ZFZhbHVlLnNldChzdGF0ZS52bSgpLCAmdGhpc09iamVjdCwgcmVzdWx0KTsKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlUG9ydHNHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlKiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CitzdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUG9ydHNHZXR0
ZXIoRXhlY1N0YXRlJiwgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlJiwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZVBvcnRzKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpT
VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZT46OmF0dHJpYnV0ZTxqc1Rlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQb3J0c0dldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwg
InBvcnRzIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2VQb3J0c0dldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlUG9ydHNHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQog
ewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSBy
ZXN1bHQgPSBqc0FycmF5KHN0YXRlLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKSwgaW1wbC5w
b3J0cygpKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgSlNW
YWx1ZSByZXN1bHQgPSBqc0FycmF5KCZzdGF0ZSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwg
aW1wbC5wb3J0cygpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ2FjaGVkUmVhZG9ubHlW
YWx1ZUdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2UqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDYWNoZWRSZWFkb25seVZhbHVlR2V0dGVy
KEV4ZWNTdGF0ZSYsIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSYsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2VDYWNoZWRSZWFkb25seVZhbHVlKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5k
aW5nQ2FsbGVyPEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZT46OmF0dHJpYnV0
ZTxqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDYWNoZWRSZWFkb25seVZhbHVl
R2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAiY2FjaGVkUmVhZG9ubHlWYWx1ZSIpOwogfQogCi1z
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
Q2FjaGVkUmVhZG9ubHlWYWx1ZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlQ2FjaGVkUmVhZG9ubHlWYWx1ZUdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7Ci0gICAgaWYgKEpTVmFsdWUgY2FjaGVkVmFsdWUgPSB0aGlzT2JqZWN0LT5t
X2NhY2hlZFJlYWRvbmx5VmFsdWUuZ2V0KCkpCisgICAgaWYgKEpTVmFsdWUgY2FjaGVkVmFsdWUg
PSB0aGlzT2JqZWN0Lm1fY2FjaGVkUmVhZG9ubHlWYWx1ZS5nZXQoKSkKICAgICAgICAgcmV0dXJu
IGNhY2hlZFZhbHVlOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7Ci0g
ICAgSlNWYWx1ZSByZXN1bHQgPSBpbXBsLmNhY2hlZFJlYWRvbmx5VmFsdWUoKSA/IGltcGwuY2Fj
aGVkUmVhZG9ubHlWYWx1ZSgpLT5kZXNlcmlhbGl6ZShzdGF0ZSwgdGhpc09iamVjdC0+Z2xvYmFs
T2JqZWN0KCksIDApIDoganNOdWxsKCk7Ci0gICAgdGhpc09iamVjdC0+bV9jYWNoZWRSZWFkb25s
eVZhbHVlLnNldChzdGF0ZS0+dm0oKSwgdGhpc09iamVjdCwgcmVzdWx0KTsKKyAgICBhdXRvJiBp
bXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBpbXBsLmNh
Y2hlZFJlYWRvbmx5VmFsdWUoKSA/IGltcGwuY2FjaGVkUmVhZG9ubHlWYWx1ZSgpLT5kZXNlcmlh
bGl6ZSgmc3RhdGUsIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIDApIDoganNOdWxsKCk7Cisg
ICAgdGhpc09iamVjdC5tX2NhY2hlZFJlYWRvbmx5VmFsdWUuc2V0KHN0YXRlLnZtKCksICZ0aGlz
T2JqZWN0LCByZXN1bHQpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMu
Y3BwCmluZGV4IDgxMTE0OGY0NWJkYTM2YWI1NDlmODRjYzU3MjI2YWNkZjhhMWJmMWUuLmU1MzY3
NDFlN2VkZjZjZThlZDU5YzU4M2FmZjdjYzA0Yjg0ZWFmYzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmNw
cApAQCAtMjE1LDExNyArMjE1LDExNyBAQCBpbmxpbmUgSlNUZXN0VHlwZWRlZnMqIEpTVGVzdFR5
cGVkZWZzOjpjYXN0Rm9yQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgRW5jb2RlZAogICAgIHJl
dHVybiBqc0R5bmFtaWNDYXN0PEpTVGVzdFR5cGVkZWZzKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNW
YWx1ZSkpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0VHlwZWRlZnNVbnNpZ25l
ZExvbmdMb25nQXR0ckdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RUeXBlZGVmcyosIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpOworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzVW5z
aWduZWRMb25nTG9uZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0VHlwZWRlZnMmLCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNVbnNp
Z25lZExvbmdMb25nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RUeXBl
ZGVmcz46OmF0dHJpYnV0ZTxqc1Rlc3RUeXBlZGVmc1Vuc2lnbmVkTG9uZ0xvbmdBdHRyR2V0dGVy
PihzdGF0ZSwgdGhpc1ZhbHVlLCAidW5zaWduZWRMb25nTG9uZ0F0dHIiKTsKIH0KIAotc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzVW5zaWduZWRMb25nTG9uZ0F0dHJHZXR0ZXIo
RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0VHlwZWRlZnMqIHRoaXNPYmplY3QsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0VHlwZWRlZnNVbnNpZ25l
ZExvbmdMb25nQXR0ckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RUeXBlZGVmcyYgdGhp
c09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICBhdXRvJiBpbXBsID0gdGhp
c09iamVjdC0+d3JhcHBlZCgpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQo
KTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwudW5zaWduZWRMb25nTG9uZ0F0
dHIoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdFR5cGVkZWZzSW1tdXRhYmxlU2VyaWFsaXplZFNjcmlwdFZhbHVlR2V0dGVyKEV4ZWNTdGF0
ZSosIEpTVGVzdFR5cGVkZWZzKiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CitzdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0VHlwZWRlZnNJbW11dGFibGVTZXJpYWxpemVkU2NyaXB0VmFsdWVH
ZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0VHlwZWRlZnMmLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNJbW11dGFibGVTZXJpYWxpemVkU2Ny
aXB0VmFsdWUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9w
ZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0VHlwZWRlZnM+Ojph
dHRyaWJ1dGU8anNUZXN0VHlwZWRlZnNJbW11dGFibGVTZXJpYWxpemVkU2NyaXB0VmFsdWVHZXR0
ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJpbW11dGFibGVTZXJpYWxpemVkU2NyaXB0VmFsdWUiKTsK
IH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzSW1tdXRhYmxlU2VyaWFs
aXplZFNjcmlwdFZhbHVlR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdFR5cGVkZWZzKiB0
aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdFR5cGVkZWZzSW1tdXRhYmxlU2VyaWFsaXplZFNjcmlwdFZhbHVlR2V0dGVyKEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTVGVzdFR5cGVkZWZzJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7Ci0gICAg
SlNWYWx1ZSByZXN1bHQgPSBpbXBsLmltbXV0YWJsZVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSgpID8g
aW1wbC5pbW11dGFibGVTZXJpYWxpemVkU2NyaXB0VmFsdWUoKS0+ZGVzZXJpYWxpemUoc3RhdGUs
IHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpLCAwKSA6IGpzTnVsbCgpOworICAgIGF1dG8mIGlt
cGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGltcGwuaW1t
dXRhYmxlU2VyaWFsaXplZFNjcmlwdFZhbHVlKCkgPyBpbXBsLmltbXV0YWJsZVNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZSgpLT5kZXNlcmlhbGl6ZSgmc3RhdGUsIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0
KCksIDApIDoganNOdWxsKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzQ29uc3RydWN0b3JUZXN0U3ViT2JqR2V0dGVyKEV4ZWNT
dGF0ZSosIEpTVGVzdFR5cGVkZWZzKiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CitzdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0VHlwZWRlZnNDb25zdHJ1Y3RvclRlc3RTdWJPYmpHZXR0ZXIo
RXhlY1N0YXRlJiwgSlNUZXN0VHlwZWRlZnMmLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAog
RW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNDb25zdHJ1Y3RvclRlc3RTdWJPYmooRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAg
ICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0VHlwZWRlZnM+OjphdHRyaWJ1dGU8anNUZXN0
VHlwZWRlZnNDb25zdHJ1Y3RvclRlc3RTdWJPYmpHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJU
ZXN0U3ViT2JqIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc0Nv
bnN0cnVjdG9yVGVzdFN1Yk9iakdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RUeXBlZGVm
cyogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yVGVzdFN1Yk9iakdldHRlcihFeGVjU3RhdGUm
IHN0YXRlLCBKU1Rlc3RUeXBlZGVmcyYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKLSAgICByZXR1cm4gSlNUZXN0U3ViT2JqOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0o
KSwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCkpOworICAgIHJldHVybiBKU1Rlc3RTdWJPYmo6
OmdldENvbnN0cnVjdG9yKHN0YXRlLnZtKCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOwog
fQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0VHlwZWRlZnNBdHRyV2l0aEdldHRlckV4
Y2VwdGlvbkdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RUeXBlZGVmcyosIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpOworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzQXR0cldpdGhH
ZXR0ZXJFeGNlcHRpb25HZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0VHlwZWRlZnMmLCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNBdHRyV2l0
aEdldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RUeXBl
ZGVmcz46OmF0dHJpYnV0ZTxqc1Rlc3RUeXBlZGVmc0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uR2V0
dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAiYXR0cldpdGhHZXR0ZXJFeGNlcHRpb24iKTsKIH0KIAot
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzQXR0cldpdGhHZXR0ZXJFeGNlcHRp
b25HZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0VHlwZWRlZnMqIHRoaXNPYmplY3QsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0VHlwZWRl
ZnNBdHRyV2l0aEdldHRlckV4Y2VwdGlvbkdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RU
eXBlZGVmcyYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBFeGNl
cHRpb25Db2RlIGVjID0gMDsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgp
OworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJl
c3VsdCA9IGpzTnVtYmVyKGltcGwuYXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oZWMpKTsKLSAgICBz
ZXRET01FeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIGVjKTsKKyAgICBzZXRET01FeGNlcHRp
b24oJnN0YXRlLCB0aHJvd1Njb3BlLCBlYyk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3Rh
dGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzQXR0cldpdGhTZXR0ZXJFeGNlcHRpb25H
ZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0VHlwZWRlZnMqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KTsKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc0F0dHJXaXRoU2V0dGVyRXhj
ZXB0aW9uR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdFR5cGVkZWZzJiwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzQXR0cldpdGhTZXR0ZXJF
eGNlcHRpb24oRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9w
ZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0VHlwZWRlZnM+Ojph
dHRyaWJ1dGU8anNUZXN0VHlwZWRlZnNBdHRyV2l0aFNldHRlckV4Y2VwdGlvbkdldHRlcj4oc3Rh
dGUsIHRoaXNWYWx1ZSwgImF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uIik7CiB9CiAKLXN0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uR2V0dGVy
KEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdFR5cGVkZWZzKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzQXR0cldp
dGhTZXR0ZXJFeGNlcHRpb25HZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0VHlwZWRlZnMm
IHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgYXV0byYgaW1wbCA9
IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFw
cGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLmF0dHJXaXRoU2V0dGVy
RXhjZXB0aW9uKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RUeXBlZGVmc1N0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uR2V0dGVyKEV4
ZWNTdGF0ZSosIEpTVGVzdFR5cGVkZWZzKiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CitzdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0VHlwZWRlZnNTdHJpbmdBdHRyV2l0aEdldHRlckV4Y2Vw
dGlvbkdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RUeXBlZGVmcyYsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1N0cmluZ0F0dHJXaXRoR2V0
dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
UHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdFR5cGVkZWZz
Pjo6YXR0cmlidXRlPGpzVGVzdFR5cGVkZWZzU3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb25H
ZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJzdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbiIp
OwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0VHlwZWRlZnNTdHJpbmdBdHRyV2l0
aEdldHRlckV4Y2VwdGlvbkdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RUeXBlZGVmcyog
dGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RUeXBlZGVmc1N0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uR2V0dGVyKEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTVGVzdFR5cGVkZWZzJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGF1dG8mIGltcGwgPSB0
aGlzT2JqZWN0LT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhD
YWNoZShzdGF0ZSwgaW1wbC5zdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbihlYykpOwotICAg
IHNldERPTUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgZWMpOworICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0
aENhY2hlKCZzdGF0ZSwgaW1wbC5zdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbihlYykpOwor
ICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIHRocm93U2NvcGUsIGVjKTsKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0VHlwZWRlZnNTdHJpbmdB
dHRyV2l0aFNldHRlckV4Y2VwdGlvbkdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RUeXBlZGVmcyos
IFRocm93U2NvcGUmIHRocm93U2NvcGUpOworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFR5
cGVkZWZzU3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb25HZXR0ZXIoRXhlY1N0YXRlJiwgSlNU
ZXN0VHlwZWRlZnMmLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUg
anNUZXN0VHlwZWRlZnNTdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1
cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RUeXBlZGVmcz46OmF0dHJpYnV0ZTxqc1Rlc3RUeXBlZGVm
c1N0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAi
c3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24iKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdFR5cGVkZWZzU3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb25HZXR0ZXIoRXhl
Y1N0YXRlKiBzdGF0ZSwgSlNUZXN0VHlwZWRlZnMqIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0VHlwZWRlZnNTdHJpbmdBdHRy
V2l0aFNldHRlckV4Y2VwdGlvbkdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RUeXBlZGVm
cyYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdX
aXRoQ2FjaGUoc3RhdGUsIGltcGwuc3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oKSk7Cisg
ICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0
ID0ganNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCBpbXBsLnN0cmluZ0F0dHJXaXRoU2V0dGVyRXhj
ZXB0aW9uKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU2F0dHJpYnV0ZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNhdHRyaWJ1dGUuY3BwCmluZGV4IDUy
OGQ2YzQwZTBhOGVlMDA4MDA3OGQ3NDM3NzZiZjQxYmQ5OThiNzkuLjQ5Y2JlZTBmY2U3NTEyYmIz
ZTc3YmU4NDA1NzIyYmI1MDUxODYwMjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU2F0dHJpYnV0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTYXR0cmlidXRlLmNwcApAQCAtMTM3LDE5ICsxMzcs
MTkgQEAgaW5saW5lIEpTYXR0cmlidXRlKiBKU2F0dHJpYnV0ZTo6Y2FzdEZvckF0dHJpYnV0ZShK
U0M6OkV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHUKICAgICByZXR1cm4ganNEeW5hbWljQ2FzdDxK
U2F0dHJpYnV0ZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKIH0KIAotc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzYXR0cmlidXRlUmVhZG9ubHlHZXR0ZXIoRXhlY1N0YXRlKiwgSlNhdHRy
aWJ1dGUqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c2F0dHJpYnV0ZVJlYWRvbmx5R2V0dGVyKEV4ZWNTdGF0ZSYsIEpTYXR0cmlidXRlJiwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzYXR0cmlidXRlUmVhZG9ubHko
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
CiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNhdHRyaWJ1dGU+OjphdHRyaWJ1dGU8anNh
dHRyaWJ1dGVSZWFkb25seUdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgInJlYWRvbmx5Iik7CiB9
CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc2F0dHJpYnV0ZVJlYWRvbmx5R2V0dGVyKEV4ZWNT
dGF0ZSogc3RhdGUsIEpTYXR0cmlidXRlKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzYXR0cmlidXRlUmVhZG9ubHlHZXR0ZXIoRXhl
Y1N0YXRlJiBzdGF0ZSwgSlNhdHRyaWJ1dGUmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKLSAgICBK
U1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLnJlYWRvbmx5KCkp
OworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJl
c3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgaW1wbC5yZWFkb25seSgpKTsKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>291077</attachid>
            <date>2016-10-10 01:28:26 -0700</date>
            <delta_ts>2016-10-10 01:30:27 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-163179-20161010102503.patch</filename>
            <type>text/plain</type>
            <size>194034</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA2OTg2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzBlYjg1MWIzYzU4NTZk
MzEwOGQ0ZDUwMWVkOTc5ZWNiNmJjNzA2YS4uMmVlMGQ5YzU1YmEyYmQ5YWNkYjc4ODhlZDllOWEw
YzgyOTZiM2RhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDM5IEBACiAyMDE2LTEwLTEwICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAorICAgICAgICBBdHRyaWJ1dGUgZ2V0dGVy
IGJpbmRpbmcgZ2VuZXJhdGVkIGNvZGUgc2hvdWxkIHVzZSBtb3JlIHJlZmVyZW5jZXMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzE3OQorCisgICAg
ICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgIE5vIGNoYW5nZSBvZiBiZWhh
dmlvci4KKworICAgICAgICBVc2luZyBtb3JlIHJlZmVyZW5jZXMgaW4gYXR0cmlidXRlIGdldHRl
ciBnZW5lcmF0ZWQgY29kZSBzaW5jZSBCaW5kaW5nQ2FsbGVyOjphdHRyaWJ1dGUgY2FuIGRvIHRo
ZQorICAgICAgICBwb2ludGVyLXRvLXJlZmVyZW5jZXMgY2hlY2tzIG9uY2UgZm9yIGFsbC4KKwor
ICAgICAgICBOZWVkZWQgdG8gdXBkYXRlIEdlbmVyYXRlQ2FsbFdpdGggYW5kIE5hdGl2ZVRvSlNW
YWx1ZSB0byBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgcmVmZXJlbmNlcyAoYXR0cmlidXRlIGdldHRl
cnMpIG9yCisgICAgICAgIHBvaW50ZXJzIChtZXRob2RzIGFuZCBhdHRyaWJ1dGUgc2V0dGVycykg
YXJlIHRvIGJlIHVzZWQuCisgICAgICAgIEZ1dHVyZSByZWZhY3RvcmluZyBzaG91bGQgYWxsaWdu
IG1ldGhvZHMvYXR0cmlidXRlIHNldHRlcnMgdG8gYXR0cmlidXRlIGdldHRlcnMuCisKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaDoKKyAgICAgICAgKFdlYkNvcmU6OkJpbmRp
bmdDYWxsZXI6OmF0dHJpYnV0ZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9ySlMucG06CisgICAgICAgIChHZW5lcmF0ZUltcGxlbWVudGF0aW9uKToKKyAgICAgICAg
KEdlbmVyYXRlQ2FsbFdpdGgpOgorICAgICAgICAoTmF0aXZlVG9KU1ZhbHVlKToKKyAgICAgICAg
KEpTVmFsdWVUb05hdGl2ZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdEFjdGl2ZURPTU9iamVjdC5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RFeGNlcHRpb24uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RHbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHA6CisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuY3BwOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb25kZXRlcm1pbmlzdGljLmNwcDoKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcDoKKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNhdHRyaWJ1dGUuY3BwOgorCisyMDE2LTEwLTEwICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKwogICAgICAgICBSZWZhY3RvciBiaW5kaW5n
IGdlbmVyYXRlZCBjYXN0ZWQtdGhpcyBjaGVja3MgZm9yIGF0dHJpYnV0ZSBzZXR0ZXJzCiAgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjMxODEKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaAppbmRleCA1YTJjZWU1MGNkNmZm
YWMzZDU1NjZjYjVlMzgwMGQ0Y2U0MTQ1YTk4Li5hZTc2ZjQ1ZGNmMWIxM2VmYjdmMzc3Y2I1YjI0
NDNlMDYwZDJlOTc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TUJpbmRpbmcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcu
aApAQCAtMzM0LDcgKzMzNCw3IEBAIGVudW0gY2xhc3MgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3Ig
eyBUaHJvdywgUmV0dXJuRWFybHksIFJlamVjdFByb21pc2UgfTsKIHRlbXBsYXRlPHR5cGVuYW1l
IEpTQ2xhc3M+CiBzdHJ1Y3QgQmluZGluZ0NhbGxlciB7CiAgICAgdXNpbmcgQXR0cmlidXRlU2V0
dGVyRnVuY3Rpb24gPSBib29sKEpTQzo6RXhlY1N0YXRlKiwgSlNDbGFzcyosIEpTQzo6SlNWYWx1
ZSwgSlNDOjpUaHJvd1Njb3BlJik7Ci0gICAgdXNpbmcgQXR0cmlidXRlR2V0dGVyRnVuY3Rpb24g
PSBKU0M6OkpTVmFsdWUoSlNDOjpFeGVjU3RhdGUqLCBKU0NsYXNzKiwgSlNDOjpUaHJvd1Njb3Bl
Jik7CisgICAgdXNpbmcgQXR0cmlidXRlR2V0dGVyRnVuY3Rpb24gPSBKU0M6OkpTVmFsdWUoSlND
OjpFeGVjU3RhdGUmLCBKU0NsYXNzJiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKICAgICB0ZW1wbGF0
ZTxBdHRyaWJ1dGVTZXR0ZXJGdW5jdGlvbiBzZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9y
IHNob3VsZFRocm93ID0gQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OlRocm93PgogICAgIHN0YXRp
YyBib29sIHNldEF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTQzo6RW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgY29uc3Qg
Y2hhciogYXR0cmlidXRlTmFtZSkKQEAgLTM2NCw4ICszNjQsNyBAQCBzdHJ1Y3QgQmluZGluZ0Nh
bGxlciB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdFByb21pc2VXaXRoR2V0dGVyVHlw
ZUVycm9yKCpzdGF0ZSwgSlNDbGFzczo6aW5mbygpLT5jbGFzc05hbWUsIGF0dHJpYnV0ZU5hbWUp
OwogICAgICAgICAgICAgcmV0dXJuIEpTQzo6SlNWYWx1ZTo6ZW5jb2RlKEpTQzo6anNVbmRlZmlu
ZWQoKSk7CiAgICAgICAgIH0KLSAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCByZWZhY3RvciB0
aGUgYmluZGluZyBnZW5lcmF0ZWQgY29kZSB0byB1c2UgcmVmZXJlbmNlcyBmb3Igc3RhdGUgYW5k
IHRoaXNPYmplY3QuCi0gICAgICAgIHJldHVybiBKU0M6OkpTVmFsdWU6OmVuY29kZShnZXR0ZXIo
c3RhdGUsIHRoaXNPYmplY3QsIHRocm93U2NvcGUpKTsKKyAgICAgICAgcmV0dXJuIEpTQzo6SlNW
YWx1ZTo6ZW5jb2RlKGdldHRlcigqc3RhdGUsICp0aGlzT2JqZWN0LCB0aHJvd1Njb3BlKSk7CiAg
ICAgfQogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9D
b2RlR2VuZXJhdG9ySlMucG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JKUy5wbQppbmRleCBiYmI2NmFkOGY3MWRhMTU2MjRkNGQ2NGVlMzZkYzcyODUwNmU2
ZWFjLi45MjAzY2UzMjIzMjM3NTY1ODI1YzNmMDA1ZjE4OWRlNjdhZGZiMDM5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQpAQCAt
MjkxMSwyNSArMjkxMSwyNiBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAg
ICAgICAgICAgICAkdGVtcGxhdGVQYXJhbWV0ZXJzIC49ICIsIENhc3RlZFRoaXNFcnJvckJlaGF2
aW9yOjpSZWplY3RQcm9taXNlIjsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgInN0YXRpYyBpbmxpbmUgSlNWYWx1ZSAke2dldEZ1bmN0aW9u
TmFtZX1HZXR0ZXIoRXhlY1N0YXRlKiwgJHtjbGFzc05hbWV9KiwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSk7XG5cbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAic3RhdGlj
IGlubGluZSBKU1ZhbHVlICR7Z2V0RnVuY3Rpb25OYW1lfUdldHRlcihFeGVjU3RhdGUmLCAke2Ns
YXNzTmFtZX0mLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTtcblxuIik7CiAKICAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIkVuY29kZWRKU1ZhbHVlICR7Z2V0RnVuY3Rpb25OYW1l
fShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFt
ZSlcbiIpOwogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CiAgICAg
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8
JHtjbGFzc05hbWV9Pjo6YXR0cmlidXRlPCR7dGVtcGxhdGVQYXJhbWV0ZXJzfT4oc3RhdGUsIHRo
aXNWYWx1ZSwgXCIkbmFtZVwiKTtcbiIpOwogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAifVxuXG4iKTsKIAotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAic3Rh
dGljIGlubGluZSBKU1ZhbHVlICR7Z2V0RnVuY3Rpb25OYW1lfUdldHRlcihFeGVjU3RhdGUqIHN0
YXRlLCAke2NsYXNzTmFtZX0qIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpXG4i
KTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgInN0YXRpYyBpbmxpbmUgSlNW
YWx1ZSAke2dldEZ1bmN0aW9uTmFtZX1HZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgJHtjbGFzc05h
bWV9JiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKVxuIik7CiAgICAgICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKICAgICAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7XG4iKTsKICAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJzdGF0aWMg
aW5saW5lIEpTVmFsdWUgJHtnZXRGdW5jdGlvbk5hbWV9R2V0dGVyKEV4ZWNTdGF0ZSopO1xuXG4i
KTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgInN0YXRpYyBpbmxpbmUgSlNW
YWx1ZSAke2dldEZ1bmN0aW9uTmFtZX1HZXR0ZXIoRXhlY1N0YXRlJik7XG5cbiIpOwogCiAgICAg
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJFbmNvZGVkSlNWYWx1ZSAke2dldEZ1bmN0
aW9uTmFtZX0oRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUsIFByb3BlcnR5TmFtZSlc
biIpOwogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7Ci0gICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSgk
e2dldEZ1bmN0aW9uTmFtZX1HZXR0ZXIoc3RhdGUpKTtcbiIpOworICAgICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIEFTU0VSVChzdGF0ZSk7XG4iKTsKKyAgICAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKCR7Z2V0RnVu
Y3Rpb25OYW1lfUdldHRlcigqc3RhdGUpKTtcbiIpOwogICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAifVxuXG4iKTsKIAotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAic3RhdGljIGlubGluZSBKU1ZhbHVlICR7Z2V0RnVuY3Rpb25OYW1lfUdldHRlcihFeGVjU3Rh
dGUqIHN0YXRlKVxuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJzdGF0
aWMgaW5saW5lIEpTVmFsdWUgJHtnZXRGdW5jdGlvbk5hbWV9R2V0dGVyKEV4ZWNTdGF0ZSYgc3Rh
dGUpXG4iKTsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTtcbiIpOwpAQCAtMjk0Niw5ICsyOTQ3LDkgQEAgc3ViIEdlbmVyYXRlSW1wbGVt
ZW50YXRpb24KICAgICAgICAgICAgICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkZyYW1lLmgi
KTsKICAgICAgICAgICAgICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIlNldHRpbmdzLmgiKTsK
ICAgICAgICAgICAgICAgICAgICAgbXkgJGVuYWJsZV9mdW5jdGlvbiA9IFRvTWV0aG9kTmFtZSgk
YXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0VuYWJsZWRCeVNldHRp
bmd9KSAuICJFbmFibGVkIjsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgaWYgKFVOTElLRUxZKCF0aGlzT2JqZWN0LT53cmFwcGVkKCkuZnJhbWUoKSkpXG4iKTsK
KyAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKFVOTElLRUxZ
KCF0aGlzT2JqZWN0LndyYXBwZWQoKS5mcmFtZSgpKSlcbiIpOwogICAgICAgICAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7XG4iKTsK
LSAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgU2V0dGluZ3MmIHNl
dHRpbmdzID0gdGhpc09iamVjdC0+d3JhcHBlZCgpLmZyYW1lKCktPnNldHRpbmdzKCk7XG4iKTsK
KyAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgU2V0dGluZ3MmIHNl
dHRpbmdzID0gdGhpc09iamVjdC53cmFwcGVkKCkuZnJhbWUoKS0+c2V0dGluZ3MoKTtcbiIpOwog
ICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoIXNldHRpbmdz
LiRlbmFibGVfZnVuY3Rpb24oKSlcbiIpOwogICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7XG4iKTsKICAgICAgICAgICAg
ICAgICB9CkBAIC0yOTYwLDkgKzI5NjEsOSBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgog
ICAgICAgICAgICAgICAgICEkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRl
cy0+e0RvTm90Q2hlY2tTZWN1cml0eX0gJiYKICAgICAgICAgICAgICAgICAhJGF0dHJpYnV0ZS0+
c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntEb05vdENoZWNrU2VjdXJpdHlPbkdldHRl
cn0pIHsKICAgICAgICAgICAgICAgICBpZiAoJGludGVyZmFjZU5hbWUgZXEgIkRPTVdpbmRvdyIp
IHsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKCFCaW5k
aW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coc3RhdGUsIHRoaXNPYmpl
Y3QtPndyYXBwZWQoKSwgVGhyb3dTZWN1cml0eUVycm9yKSlcbiIpOworICAgICAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoIUJpbmRpbmdTZWN1cml0eTo6c2hvdWxk
QWxsb3dBY2Nlc3NUb0RPTVdpbmRvdygmc3RhdGUsIHRoaXNPYmplY3Qud3JhcHBlZCgpLCBUaHJv
d1NlY3VyaXR5RXJyb3IpKVxuIik7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKCFCaW5kaW5nU2VjdXJpdHk6
OnNob3VsZEFsbG93QWNjZXNzVG9GcmFtZShzdGF0ZSwgdGhpc09iamVjdC0+d3JhcHBlZCgpLmZy
YW1lKCksIFRocm93U2VjdXJpdHlFcnJvcikpXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgaWYgKCFCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNj
ZXNzVG9GcmFtZSgmc3RhdGUsIHRoaXNPYmplY3Qud3JhcHBlZCgpLmZyYW1lKCksIFRocm93U2Vj
dXJpdHlFcnJvcikpXG4iKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpO1xuIik7CiAgICAg
ICAgICAgICB9CkBAIC0yOTczLDcgKzI5NzQsNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlv
bgogICAgICAgICAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCI8d3RmL05ldmVyRGVzdHJveWVk
Lmg+IiwgIldFQl9SRVBMQVkiKTsKIAogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiI2lmIEVOQUJMRShXRUJfUkVQTEFZKVxuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHN0YXRlLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCk7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc3RhdGUubGV4aWNhbEdsb2Jh
bE9iamVjdCgpO1xuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
SW5wdXRDdXJzb3ImIGN1cnNvciA9IGdsb2JhbE9iamVjdC0+aW5wdXRDdXJzb3IoKTtcbiIpOwog
CiAgICAgICAgICAgICAgICAgbXkgJG5hdGl2ZVR5cGUgPSBHZXROYXRpdmVUeXBlKCRpbnRlcmZh
Y2UsICR0eXBlKTsKQEAgLTI5ODEsMTAgKzI5ODIsMTAgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50
YXRpb24KICAgICAgICAgICAgICAgICBteSAkZXhjZXB0aW9uQ29kZSA9ICRnZXR0ZXJNYXlUaHJv
d0xlZ2FjeUV4Y2VwdGlvbiA/ICJlYyIgOiAiMCI7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21pY1N0cmluZz4g
YmluZGluZ05hbWUoXCIkaW50ZXJmYWNlTmFtZS4kbmFtZVwiLCBBdG9taWNTdHJpbmc6OkNvbnN0
cnVjdEZyb21MaXRlcmFsKTtcbiIpOwogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIGlmIChjdXJzb3IuaXNDYXB0dXJpbmcoKSkge1xuIik7Ci0gICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgICRtZW1vaXplZFR5cGUgbWVtb2l6ZWRSZXN1bHQg
PSB0aGlzT2JqZWN0LT53cmFwcGVkKCkuJGltcGxHZXR0ZXJGdW5jdGlvbk5hbWUoIiAuIGpvaW4o
IiwgIiwgQGFyZ3VtZW50cykgLiAiKTtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgICAgICAkbWVtb2l6ZWRUeXBlIG1lbW9pemVkUmVzdWx0ID0gdGhpc09iamVj
dC53cmFwcGVkKCkuJGltcGxHZXR0ZXJGdW5jdGlvbk5hbWUoIiAuIGpvaW4oIiwgIiwgQGFyZ3Vt
ZW50cykgLiAiKTtcbiIpOwogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
ICAgICBjdXJzb3IuYXBwZW5kSW5wdXQ8TWVtb2l6ZWRET01SZXN1bHQ8JG1lbW9pemVkVHlwZT4+
KGJpbmRpbmdOYW1lLmdldCgpLnN0cmluZygpLCBtZW1vaXplZFJlc3VsdCwgJGV4Y2VwdGlvbkNv
ZGUpO1xuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIEpT
VmFsdWUgcmVzdWx0ID0gIiAuIE5hdGl2ZVRvSlNWYWx1ZSgkYXR0cmlidXRlLT5zaWduYXR1cmUs
IDAsICRpbnRlcmZhY2UsICJtZW1vaXplZFJlc3VsdCIsICJ0aGlzT2JqZWN0IikgLiAiO1xuIik7
Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHNldERPTUV4Y2Vw
dGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgZWMpO1xuIikgaWYgJGdldHRlck1heVRocm93TGVnYWN5
RXhjZXB0aW9uOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBK
U1ZhbHVlIHJlc3VsdCA9ICIgLiBOYXRpdmVUb0pTVmFsdWVVc2luZ1JlZmVyZW5jZXMoJGF0dHJp
YnV0ZS0+c2lnbmF0dXJlLCAwLCAkaW50ZXJmYWNlLCAibWVtb2l6ZWRSZXN1bHQiLCAidGhpc09i
amVjdCIpIC4gIjtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
ICAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCB0aHJvd1Njb3BlLCBlYyk7XG4iKSBpZiAkZ2V0
dGVyTWF5VGhyb3dMZWdhY3lFeGNlcHRpb247CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgICAgIHJldHVybiByZXN1bHQ7XG4iKTsKICAgICAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICB9XG4iKTsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIlxuIik7CkBAIC0yOTkzLDggKzI5OTQsOCBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRh
dGlvbgogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBNZW1vaXpl
ZERPTVJlc3VsdEJhc2UqIGlucHV0ID0gY3Vyc29yLmZldGNoSW5wdXQ8TWVtb2l6ZWRET01SZXN1
bHRCYXNlPigpO1xuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
ICAgIGlmIChpbnB1dCAmJiBpbnB1dC0+Y29udmVydFRvPCRtZW1vaXplZFR5cGU+KG1lbW9pemVk
UmVzdWx0KSkge1xuIik7CiAgICAgICAgICAgICAgICAgIyBGSVhNRTogdGhlIGdlbmVyYXRlZCBj
b2RlIHNob3VsZCByZXBvcnQgYW4gZXJyb3IgaWYgYW4gaW5wdXQgY2Fubm90IGJlIGZldGNoZWQg
b3IgY29udmVydGVkLgotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAg
ICAgICAgSlNWYWx1ZSByZXN1bHQgPSAiIC4gTmF0aXZlVG9KU1ZhbHVlKCRhdHRyaWJ1dGUtPnNp
Z25hdHVyZSwgMCwgJGludGVyZmFjZSwgIm1lbW9pemVkUmVzdWx0IiwgInRoaXNPYmplY3QiKSAu
ICI7XG4iKTsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgICAg
IHNldERPTUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgaW5wdXQtPmV4Y2VwdGlvbkNvZGUo
KSk7XG4iKSBpZiAkZ2V0dGVyTWF5VGhyb3dMZWdhY3lFeGNlcHRpb247CisgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9ICIgLiBO
YXRpdmVUb0pTVmFsdWVVc2luZ1JlZmVyZW5jZXMoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLCAwLCAk
aW50ZXJmYWNlLCAibWVtb2l6ZWRSZXN1bHQiLCAidGhpc09iamVjdCIpIC4gIjtcbiIpOworICAg
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICAgICAgc2V0RE9NRXhjZXB0
aW9uKCZzdGF0ZSwgdGhyb3dTY29wZSwgaW5wdXQtPmV4Y2VwdGlvbkNvZGUoKSk7XG4iKSBpZiAk
Z2V0dGVyTWF5VGhyb3dMZWdhY3lFeGNlcHRpb247CiAgICAgICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuIik7CiAgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIH1cbiIpOwogICAgICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIH1cbiIpOwpAQCAtMzAwMiwxOCArMzAwMywxOCBAQCBzdWIg
R2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgfSAjIGF0dHJpYnV0ZSBOb25kZXRl
cm1pbmlzdGljCiAKICAgICAgICAgICAgIGlmIChIYXNDdXN0b21HZXR0ZXIoJGF0dHJpYnV0ZS0+
c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMpKSB7Ci0gICAgICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgcmV0dXJuIHRoaXNPYmplY3QtPiRpbXBsR2V0dGVyRnVuY3Rpb25O
YW1lKCpzdGF0ZSk7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICByZXR1cm4gdGhpc09iamVjdC4kaW1wbEdldHRlckZ1bmN0aW9uTmFtZShzdGF0ZSk7XG4iKTsK
ICAgICAgICAgICAgIH0gZWxzaWYgKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57Q2hlY2tTZWN1cml0eUZvck5vZGV9KSB7CiAgICAgICAgICAgICAgICAgJGltcGxJ
bmNsdWRlc3siSlNET01CaW5kaW5nLmgifSA9IDE7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTtcbiIpOwot
ICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBzaG91bGRBbGxv
d0FjY2Vzc1RvTm9kZShzdGF0ZSwgaW1wbC4iIC4gJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5uYW1l
IC4gIigpKSA/ICIgLiBOYXRpdmVUb0pTVmFsdWUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLCAwLCAk
aW50ZXJmYWNlLCAiaW1wbC4kaW1wbEdldHRlckZ1bmN0aW9uTmFtZSgpIiwgInRoaXNPYmplY3Qi
KSAuICIgOiBqc051bGwoKTtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTtcbiIpOworICAgICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBzaG91bGRBbGxvd0FjY2Vzc1Rv
Tm9kZSgmc3RhdGUsIGltcGwuIiAuICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+bmFtZSAuICIoKSkg
PyAiIC4gTmF0aXZlVG9KU1ZhbHVlVXNpbmdSZWZlcmVuY2VzKCRhdHRyaWJ1dGUtPnNpZ25hdHVy
ZSwgMCwgJGludGVyZmFjZSwgImltcGwuJGltcGxHZXR0ZXJGdW5jdGlvbk5hbWUoKSIsICJ0aGlz
T2JqZWN0IikgLiAiIDoganNOdWxsKCk7XG4iKTsKICAgICAgICAgICAgIH0gZWxzaWYgKCR0eXBl
IGVxICJFdmVudEhhbmRsZXIiKSB7CiAgICAgICAgICAgICAgICAgJGltcGxJbmNsdWRlc3siRXZl
bnROYW1lcy5oIn0gPSAxOwogICAgICAgICAgICAgICAgIG15ICRnZXR0ZXIgPSAkYXR0cmlidXRl
LT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e1dpbmRvd0V2ZW50SGFuZGxlcn0gPyAi
d2luZG93RXZlbnRIYW5kbGVyQXR0cmlidXRlIgogICAgICAgICAgICAgICAgICAgICA6ICRhdHRy
aWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57RG9jdW1lbnRFdmVudEhhbmRs
ZXJ9ID8gImRvY3VtZW50RXZlbnRIYW5kbGVyQXR0cmlidXRlIgogICAgICAgICAgICAgICAgICAg
ICA6ICJldmVudEhhbmRsZXJBdHRyaWJ1dGUiOwogICAgICAgICAgICAgICAgIG15ICRldmVudE5h
bWUgPSBFdmVudEhhbmRsZXJBdHRyaWJ1dGVFdmVudE5hbWUoJGF0dHJpYnV0ZSk7Ci0gICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuICRnZXR0ZXIodGhpc09iamVj
dC0+d3JhcHBlZCgpLCAkZXZlbnROYW1lKTtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIHJldHVybiAkZ2V0dGVyKHRoaXNPYmplY3Qud3JhcHBlZCgpLCAkZXZl
bnROYW1lKTtcbiIpOwogICAgICAgICAgICAgfSBlbHNpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJl
LT50eXBlID1+IC9Db25zdHJ1Y3RvciQvKSB7CiAgICAgICAgICAgICAgICAgbXkgJGNvbnN0cnVj
dG9yVHlwZSA9ICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+dHlwZTsKICAgICAgICAgICAgICAgICAk
Y29uc3RydWN0b3JUeXBlID1+IHMvQ29uc3RydWN0b3IkLy87CkBAIC0zMDIyLDMwICszMDIzLDMw
IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICAgICAgaWYgKCRpbnRl
cmZhY2VOYW1lIGVxICJET01XaW5kb3ciKSB7CiAgICAgICAgICAgICAgICAgICAgIG15ICRuYW1l
ZCA9ICgkY29uc3RydWN0b3JUeXBlID1+IC9OYW1lZCQvKSA/ICJOYW1lZCIgOiAiIjsKICAgICAg
ICAgICAgICAgICAgICAgJGNvbnN0cnVjdG9yVHlwZSA9fiBzL05hbWVkJC8vOwotICAgICAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gSlMiIC4gJGNvbnN0cnVj
dG9yVHlwZSAuICI6OmdldCR7bmFtZWR9Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIHRoaXNPYmpl
Y3QpO1xuIik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJl
dHVybiBKUyIgLiAkY29uc3RydWN0b3JUeXBlIC4gIjo6Z2V0JHtuYW1lZH1Db25zdHJ1Y3Rvcihz
dGF0ZS52bSgpLCAmdGhpc09iamVjdCk7XG4iKTsKICAgICAgICAgICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiSlMiIC4gJGNvbnN0cnVjdG9y
VHlwZSAuICIuaCIsICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
Q29uZGl0aW9uYWx9KTsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgcmV0dXJuIEpTIiAuICRjb25zdHJ1Y3RvclR5cGUgLiAiOjpnZXRDb25zdHJ1Y3RvcihzdGF0
ZS0+dm0oKSwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCkpO1xuIik7CisgICAgICAgICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBKUyIgLiAkY29uc3RydWN0b3JU
eXBlIC4gIjo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUudm0oKSwgdGhpc09iamVjdC5nbG9iYWxPYmpl
Y3QoKSk7XG4iKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2lmICghJGF0
dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntHZXR0ZXJNYXlUaHJvd0xl
Z2FjeUV4Y2VwdGlvbn0pIHsKICAgICAgICAgICAgICAgICBteSAkY2FjaGVJbmRleCA9IDA7CiAg
ICAgICAgICAgICAgICAgaWYgKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57Q2FjaGVkQXR0cmlidXRlfSkgewogICAgICAgICAgICAgICAgICAgICAkY2FjaGVJbmRl
eCA9ICRjdXJyZW50Q2FjaGVkQXR0cmlidXRlOwogICAgICAgICAgICAgICAgICAgICAkY3VycmVu
dENhY2hlZEF0dHJpYnV0ZSsrOwotICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICBpZiAoSlNWYWx1ZSBjYWNoZWRWYWx1ZSA9IHRoaXNPYmplY3QtPm1fIiAuICRhdHRy
aWJ1dGUtPnNpZ25hdHVyZS0+bmFtZSAuICIuZ2V0KCkpXG4iKTsKKyAgICAgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKEpTVmFsdWUgY2FjaGVkVmFsdWUgPSB0aGlz
T2JqZWN0Lm1fIiAuICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+bmFtZSAuICIuZ2V0KCkpXG4iKTsK
ICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiBj
YWNoZWRWYWx1ZTtcbiIpOwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIG15
IEBjYWxsV2l0aEFyZ3MgPSBHZW5lcmF0ZUNhbGxXaXRoKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q2FsbFdpdGh9LCBcQGltcGxDb250ZW50LCAianNVbmRlZmlu
ZWQoKSIpOworICAgICAgICAgICAgICAgIG15IEBjYWxsV2l0aEFyZ3MgPSBHZW5lcmF0ZUNhbGxX
aXRoVXNpbmdSZWZlcmVuY2VzKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57Q2FsbFdpdGh9LCBcQGltcGxDb250ZW50LCAianNVbmRlZmluZWQoKSIpOwogCiAgICAg
ICAgICAgICAgICAgaWYgKCRzdmdMaXN0UHJvcGVydHlUeXBlKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEpTVmFsdWUgcmVzdWx0ID0gICIgLiBOYXRpdmVU
b0pTVmFsdWUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLCAwLCAkaW50ZXJmYWNlLCAidGhpc09iamVj
dC0+d3JhcHBlZCgpLiRpbXBsR2V0dGVyRnVuY3Rpb25OYW1lKCIgLiAoam9pbiAiLCAiLCBAY2Fs
bFdpdGhBcmdzKSAuICIpIiwgInRoaXNPYmplY3QiKSAuICI7XG4iKTsKKyAgICAgICAgICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgSlNWYWx1ZSByZXN1bHQgPSAgIiAuIE5hdGl2
ZVRvSlNWYWx1ZVVzaW5nUmVmZXJlbmNlcygkYXR0cmlidXRlLT5zaWduYXR1cmUsIDAsICRpbnRl
cmZhY2UsICJ0aGlzT2JqZWN0LndyYXBwZWQoKS4kaW1wbEdldHRlckZ1bmN0aW9uTmFtZSgiIC4g
KGpvaW4gIiwgIiwgQGNhbGxXaXRoQXJncykgLiAiKSIsICJ0aGlzT2JqZWN0IikgLiAiO1xuIik7
CiAgICAgICAgICAgICAgICAgfSBlbHNpZiAoJHN2Z1Byb3BlcnR5T3JMaXN0UHJvcGVydHlUeXBl
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICRzdmdQcm9w
ZXJ0eU9yTGlzdFByb3BlcnR5VHlwZSYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKS5wcm9w
ZXJ0eVJlZmVyZW5jZSgpO1xuIik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgICRzdmdQcm9wZXJ0eU9yTGlzdFByb3BlcnR5VHlwZSYgaW1wbCA9IHRoaXNPYmpl
Y3Qud3JhcHBlZCgpLnByb3BlcnR5UmVmZXJlbmNlKCk7XG4iKTsKICAgICAgICAgICAgICAgICAg
ICAgaWYgKCRzdmdQcm9wZXJ0eU9yTGlzdFByb3BlcnR5VHlwZSBlcSAiZmxvYXQiKSB7ICMgU3Bl
Y2lhbCBjYXNlIGZvciBKU1NWR051bWJlcgotICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgSlNWYWx1ZSByZXN1bHQgPSAiIC4gTmF0aXZlVG9KU1ZhbHVlKCRh
dHRyaWJ1dGUtPnNpZ25hdHVyZSwgMCwgJGludGVyZmFjZSwgImltcGwiLCAidGhpc09iamVjdCIp
IC4gIjtcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgSlNWYWx1ZSByZXN1bHQgPSAiIC4gTmF0aXZlVG9KU1ZhbHVlVXNpbmdSZWZlcmVuY2VzKCRh
dHRyaWJ1dGUtPnNpZ25hdHVyZSwgMCwgJGludGVyZmFjZSwgImltcGwiLCAidGhpc09iamVjdCIp
IC4gIjtcbiIpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgSlNWYWx1ZSByZXN1bHQgPSAiIC4gTmF0
aXZlVG9KU1ZhbHVlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgMCwgJGludGVyZmFjZSwgImltcGwu
JGltcGxHZXR0ZXJGdW5jdGlvbk5hbWUoIiAuIChqb2luICIsICIsIEBjYWxsV2l0aEFyZ3MpIC4g
IikiLCAidGhpc09iamVjdCIpIC4gIjtcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgSlNWYWx1ZSByZXN1bHQgPSAiIC4gTmF0aXZlVG9KU1ZhbHVl
VXNpbmdSZWZlcmVuY2VzKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgMCwgJGludGVyZmFjZSwgImlt
cGwuJGltcGxHZXR0ZXJGdW5jdGlvbk5hbWUoIiAuIChqb2luICIsICIsIEBjYWxsV2l0aEFyZ3Mp
IC4gIikiLCAidGhpc09iamVjdCIpIC4gIjtcbiIpOwogCiAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICB9IGVsc2UgewpAQCAtMzA2MiwzMSArMzA2MywzMSBAQCBzdWIgR2Vu
ZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAg
ICAgICAgICAgdW5zaGlmdChAYXJndW1lbnRzLCBAY2FsbFdpdGhBcmdzKTsKLSAgICAgICAgICAg
ICAgICAgICAgbXkgJGpzVHlwZSA9IE5hdGl2ZVRvSlNWYWx1ZSgkYXR0cmlidXRlLT5zaWduYXR1
cmUsIDAsICRpbnRlcmZhY2UsICIke2Z1bmN0aW9uTmFtZX0oIiAuIGpvaW4oIiwgIiwgQGFyZ3Vt
ZW50cykgLiAiKSIsICJ0aGlzT2JqZWN0Iik7Ci0gICAgICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7XG4iKSBp
ZiAhJGF0dHJpYnV0ZS0+aXNTdGF0aWM7CisgICAgICAgICAgICAgICAgICAgIG15ICRqc1R5cGUg
PSBOYXRpdmVUb0pTVmFsdWVVc2luZ1JlZmVyZW5jZXMoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLCAw
LCAkaW50ZXJmYWNlLCAiJHtmdW5jdGlvbk5hbWV9KCIgLiBqb2luKCIsICIsIEBhcmd1bWVudHMp
IC4gIikiLCAidGhpc09iamVjdCIpOworICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7XG4iKSBpZiAhJGF0
dHJpYnV0ZS0+aXNTdGF0aWM7CiAgICAgICAgICAgICAgICAgICAgIGlmICgkY29kZUdlbmVyYXRv
ci0+SXNTVkdBbmltYXRlZFR5cGUoJHR5cGUpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvIG9iaiA9ICRqc1R5cGU7XG4iKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEpTVmFsdWUgcmVzdWx0ID0g
dG9KUyhzdGF0ZSwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCksIG9iai5nZXQoKSk7XG4iKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEpTVmFsdWUg
cmVzdWx0ID0gdG9KUygmc3RhdGUsIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIG9iai5nZXQo
KSk7XG4iKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEpTVmFsdWUgcmVzdWx0ID0gJGpzVHlwZTtc
biIpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgdGhpc09iamVjdC0+bV8iIC4gJGF0dHJp
YnV0ZS0+c2lnbmF0dXJlLT5uYW1lIC4gIi5zZXQoc3RhdGUtPnZtKCksIHRoaXNPYmplY3QsIHJl
c3VsdCk7XG4iKSBpZiAkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+
e0NhY2hlZEF0dHJpYnV0ZX07CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgdGhpc09iamVjdC5tXyIgLiAkYXR0cmlidXRlLT5zaWduYXR1cmUtPm5hbWUgLiAiLnNldChz
dGF0ZS52bSgpLCAmdGhpc09iamVjdCwgcmVzdWx0KTtcbiIpIGlmICRhdHRyaWJ1dGUtPnNpZ25h
dHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q2FjaGVkQXR0cmlidXRlfTsKICAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gcmVzdWx0O1xuIik7CiAKICAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgdW5zaGlmdChAYXJndW1lbnRzLCBHZW5l
cmF0ZUNhbGxXaXRoKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
Q2FsbFdpdGh9LCBcQGltcGxDb250ZW50LCAianNVbmRlZmluZWQoKSIpKTsKKyAgICAgICAgICAg
ICAgICB1bnNoaWZ0KEBhcmd1bWVudHMsIEdlbmVyYXRlQ2FsbFdpdGhVc2luZ1JlZmVyZW5jZXMo
JGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDYWxsV2l0aH0sIFxA
aW1wbENvbnRlbnQsICJqc1VuZGVmaW5lZCgpIiwgMCkpOwogCiAgICAgICAgICAgICAgICAgaWYg
KCRzdmdQcm9wZXJ0eU9yTGlzdFByb3BlcnR5VHlwZSkgewotICAgICAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICAkc3ZnUHJvcGVydHlPckxpc3RQcm9wZXJ0eVR5cGUgaW1w
bCgqdGhpc09iamVjdC0+d3JhcHBlZCgpKTtcbiIpOwotICAgICAgICAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICBKU1ZhbHVlIHJlc3VsdCA9ICIgLiBOYXRpdmVUb0pTVmFsdWUo
JGF0dHJpYnV0ZS0+c2lnbmF0dXJlLCAwLCAkaW50ZXJmYWNlLCAiaW1wbC4kaW1wbEdldHRlckZ1
bmN0aW9uTmFtZSgiIC4gam9pbigiLCAiLCBAYXJndW1lbnRzKSAuICIpIiwgInRoaXNPYmplY3Qi
KSAuICI7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
JHN2Z1Byb3BlcnR5T3JMaXN0UHJvcGVydHlUeXBlIGltcGwoKnRoaXNPYmplY3Qud3JhcHBlZCgp
KTtcbiIpOworICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBKU1Zh
bHVlIHJlc3VsdCA9ICIgLiBOYXRpdmVUb0pTVmFsdWVVc2luZ1JlZmVyZW5jZXMoJGF0dHJpYnV0
ZS0+c2lnbmF0dXJlLCAwLCAkaW50ZXJmYWNlLCAiaW1wbC4kaW1wbEdldHRlckZ1bmN0aW9uTmFt
ZSgiIC4gam9pbigiLCAiLCBAYXJndW1lbnRzKSAuICIpIiwgInRoaXNPYmplY3QiKSAuICI7XG4i
KTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpO1xuIik7
Ci0gICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEpTVmFsdWUgcmVz
dWx0ID0gIiAuIE5hdGl2ZVRvSlNWYWx1ZSgkYXR0cmlidXRlLT5zaWduYXR1cmUsIDAsICRpbnRl
cmZhY2UsICJpbXBsLiRpbXBsR2V0dGVyRnVuY3Rpb25OYW1lKCIgLiBqb2luKCIsICIsIEBhcmd1
bWVudHMpIC4gIikiLCAidGhpc09iamVjdCIpIC4gIjtcbiIpOworICAgICAgICAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVk
KCk7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgSlNW
YWx1ZSByZXN1bHQgPSAiIC4gTmF0aXZlVG9KU1ZhbHVlVXNpbmdSZWZlcmVuY2VzKCRhdHRyaWJ1
dGUtPnNpZ25hdHVyZSwgMCwgJGludGVyZmFjZSwgImltcGwuJGltcGxHZXR0ZXJGdW5jdGlvbk5h
bWUoIiAuIGpvaW4oIiwgIiwgQGFyZ3VtZW50cykgLiAiKSIsICJ0aGlzT2JqZWN0IikgLiAiO1xu
Iik7CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCBlYyk7XG4iKTsKKyAg
ICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBzZXRET01FeGNlcHRpb24oJnN0
YXRlLCB0aHJvd1Njb3BlLCBlYyk7XG4iKTsKIAogICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIHJldHVybiByZXN1bHQ7XG4iKTsKICAgICAgICAgICAgIH0KQEAgLTMzNzAs
OCArMzM3MSw4IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICAgICAg
ICAgICAgICAkZnVuY3Rpb25OYW1lID0gImltcGwuJHtmdW5jdGlvbk5hbWV9IjsKICAgICAgICAg
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgIHVuc2hpZnQoQGFyZ3VtZW50cywg
R2VuZXJhdGVDYWxsV2l0aCgkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRl
cy0+e1NldHRlckNhbGxXaXRofSwgXEBpbXBsQ29udGVudCwgImZhbHNlIikpOwotICAgICAgICAg
ICAgICAgICAgICB1bnNoaWZ0KEBhcmd1bWVudHMsIEdlbmVyYXRlQ2FsbFdpdGgoJGF0dHJpYnV0
ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDYWxsV2l0aH0sIFxAaW1wbENvbnRl
bnQsICJmYWxzZSIpKTsKKyAgICAgICAgICAgICAgICAgICAgdW5zaGlmdChAYXJndW1lbnRzLCBH
ZW5lcmF0ZUNhbGxXaXRoVXNpbmdQb2ludGVycygkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVu
ZGVkQXR0cmlidXRlcy0+e1NldHRlckNhbGxXaXRofSwgXEBpbXBsQ29udGVudCwgImZhbHNlIikp
OworICAgICAgICAgICAgICAgICAgICB1bnNoaWZ0KEBhcmd1bWVudHMsIEdlbmVyYXRlQ2FsbFdp
dGhVc2luZ1BvaW50ZXJzKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57Q2FsbFdpdGh9LCBcQGltcGxDb250ZW50LCAiZmFsc2UiKSk7CiAKICAgICAgICAgICAgICAg
ICAgICAgcHVzaChAYXJndW1lbnRzLCAiZWMiKSBpZiAkc2V0dGVyTWF5VGhyb3dMZWdhY3lFeGNl
cHRpb247CiAKQEAgLTM4NTcsNiArMzg1OCwyOCBAQCBzdWIgR2VuZXJhdGVGdW5jdGlvbkNhc3Rl
ZFRoaXMKICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKGNhc3RlZFRoaXMsICR7Y2xhc3NOYW1lfTo6aW5mbygpKTtcbiIpIHVubGVzcyAkaW50ZXJm
YWNlLT5uYW1lIGVxICJFdmVudFRhcmdldCI7CiB9CiAKK3N1YiBHZW5lcmF0ZUNhbGxXaXRoVXNp
bmdSZWZlcmVuY2VzCit7CisgICAgbXkgKCRjYWxsV2l0aCwgJG91dHB1dEFycmF5LCAkcmV0dXJu
VmFsdWUsICRmdW5jdGlvbikgPSBAXzsKKworICAgIG15ICRzdGF0ZVBvaW50ZXIgPSAiJnN0YXRl
IjsKKyAgICBteSAkc3RhdGVSZWZlcmVuY2UgPSAic3RhdGUiOworICAgIG15ICRnbG9iYWxPYmpl
Y3QgPSAianNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUubGV4aWNhbEdsb2JhbE9iamVj
dCgpKSI7CisKKyAgICByZXR1cm4gR2VuZXJhdGVDYWxsV2l0aCgkY2FsbFdpdGgsICRvdXRwdXRB
cnJheSwgJHJldHVyblZhbHVlLCAkZnVuY3Rpb24sICRzdGF0ZVBvaW50ZXIsICRzdGF0ZVJlZmVy
ZW5jZSwgJGdsb2JhbE9iamVjdCk7Cit9CisKK3N1YiBHZW5lcmF0ZUNhbGxXaXRoVXNpbmdQb2lu
dGVycworeworICAgIG15ICgkY2FsbFdpdGgsICRvdXRwdXRBcnJheSwgJHJldHVyblZhbHVlLCAk
ZnVuY3Rpb24pID0gQF87CisKKyAgICBteSAkc3RhdGVQb2ludGVyID0gInN0YXRlIjsKKyAgICBt
eSAkc3RhdGVSZWZlcmVuY2UgPSAiKnN0YXRlIjsKKyAgICBteSAkZ2xvYmFsT2JqZWN0ID0gImpz
Q2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpIjsK
KworICAgIHJldHVybiBHZW5lcmF0ZUNhbGxXaXRoKCRjYWxsV2l0aCwgJG91dHB1dEFycmF5LCAk
cmV0dXJuVmFsdWUsICRmdW5jdGlvbiwgJHN0YXRlUG9pbnRlciwgJHN0YXRlUmVmZXJlbmNlLCAk
Z2xvYmFsT2JqZWN0KTsKK30KKwogc3ViIEdlbmVyYXRlQ2FsbFdpdGgKIHsKICAgICBteSAkY2Fs
bFdpdGggPSBzaGlmdDsKQEAgLTM4NjQsMTggKzM4ODcsMjEgQEAgc3ViIEdlbmVyYXRlQ2FsbFdp
dGgKICAgICBteSAkb3V0cHV0QXJyYXkgPSBzaGlmdDsKICAgICBteSAkcmV0dXJuVmFsdWUgPSBz
aGlmdDsKICAgICBteSAkZnVuY3Rpb24gPSBzaGlmdDsKKyAgICBteSAkc3RhdGVQb2ludGVyID0g
c2hpZnQ7CisgICAgbXkgJHN0YXRlUmVmZXJlbmNlID0gc2hpZnQ7CisgICAgbXkgJGdsb2JhbE9i
amVjdCA9IHNoaWZ0OwogCiAgICAgbXkgQGNhbGxXaXRoQXJnczsKLSAgICBwdXNoKEBjYWxsV2l0
aEFyZ3MsICIqc3RhdGUiKSBpZiAkY29kZUdlbmVyYXRvci0+RXh0ZW5kZWRBdHRyaWJ1dGVDb250
YWlucygkY2FsbFdpdGgsICJTY3JpcHRTdGF0ZSIpOworICAgIHB1c2goQGNhbGxXaXRoQXJncywg
JHN0YXRlUmVmZXJlbmNlKSBpZiAkY29kZUdlbmVyYXRvci0+RXh0ZW5kZWRBdHRyaWJ1dGVDb250
YWlucygkY2FsbFdpdGgsICJTY3JpcHRTdGF0ZSIpOwogICAgIGlmICgkY29kZUdlbmVyYXRvci0+
RXh0ZW5kZWRBdHRyaWJ1dGVDb250YWlucygkY2FsbFdpdGgsICJTY3JpcHRFeGVjdXRpb25Db250
ZXh0IikpIHsKLSAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGF1dG8qIGNvbnRleHQg
PSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpO1xuIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRB
cnJheSwgIiAgICBhdXRvKiBjb250ZXh0ID0gJGdsb2JhbE9iamVjdC0+c2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpO1xuIik7CiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAoIWNv
bnRleHQpXG4iKTsKICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICByZXR1cm4i
IC4gKCRyZXR1cm5WYWx1ZSA/ICIgIiAuICRyZXR1cm5WYWx1ZSA6ICIiKSAuICI7XG4iKTsKICAg
ICAgICAgcHVzaChAY2FsbFdpdGhBcmdzLCAiKmNvbnRleHQiKTsKICAgICB9CiAgICAgaWYgKCRj
b2RlR2VuZXJhdG9yLT5FeHRlbmRlZEF0dHJpYnV0ZUNvbnRhaW5zKCRjYWxsV2l0aCwgIkRvY3Vt
ZW50IikpIHsKICAgICAgICAgJGltcGxJbmNsdWRlc3siRG9jdW1lbnQuaCJ9ID0gMTsKLSAgICAg
ICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01H
bG9iYWxPYmplY3QqPihzdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpO1xuIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBhdXRv
KiBjb250ZXh0ID0gJGdsb2JhbE9iamVjdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpO1xuIik7
CiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAoIWNvbnRleHQpXG4iKTsKICAg
ICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICByZXR1cm4iIC4gKCRyZXR1cm5WYWx1
ZSA/ICIgIiAuICRyZXR1cm5WYWx1ZSA6ICIiKSAuICI7XG4iKTsKICAgICAgICAgcHVzaChAJG91
dHB1dEFycmF5LCAiICAgIEFTU0VSVChjb250ZXh0LT5pc0RvY3VtZW50KCkpO1xuIik7CkBAIC0z
ODg0LDIwICszOTEwLDIwIEBAIHN1YiBHZW5lcmF0ZUNhbGxXaXRoCiAgICAgfQogICAgIGlmICgk
Y29kZUdlbmVyYXRvci0+RXh0ZW5kZWRBdHRyaWJ1dGVDb250YWlucygkY2FsbFdpdGgsICJDYWxs
ZXJEb2N1bWVudCIpKSB7CiAgICAgICAgICRpbXBsSW5jbHVkZXN7IkRvY3VtZW50LmgifSA9IDE7
Ci0gICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBhdXRvKiBkb2N1bWVudCA9IGNhbGxl
ckRPTVdpbmRvdyhzdGF0ZSkuZG9jdW1lbnQoKTtcbiIpOworICAgICAgICBwdXNoKEAkb3V0cHV0
QXJyYXksICIgICAgYXV0byogZG9jdW1lbnQgPSBjYWxsZXJET01XaW5kb3coJHN0YXRlUG9pbnRl
cikuZG9jdW1lbnQoKTtcbiIpOwogICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgaWYg
KCFkb2N1bWVudClcbiIpOwogICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIHJl
dHVybiIgLiAoJHJldHVyblZhbHVlID8gIiAiIC4gJHJldHVyblZhbHVlIDogIiIpIC4gIjtcbiIp
OwogICAgICAgICBwdXNoKEBjYWxsV2l0aEFyZ3MsICIqZG9jdW1lbnQiKTsKICAgICB9CiAgICAg
aWYgKCRmdW5jdGlvbiBhbmQgJGNvZGVHZW5lcmF0b3ItPkV4dGVuZGVkQXR0cmlidXRlQ29udGFp
bnMoJGNhbGxXaXRoLCAiU2NyaXB0QXJndW1lbnRzIikpIHsKLSAgICAgICAgcHVzaChAJG91dHB1
dEFycmF5LCAiICAgIFJlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4gc2NyaXB0QXJn
dW1lbnRzKEluc3BlY3Rvcjo6Y3JlYXRlU2NyaXB0QXJndW1lbnRzKHN0YXRlLCAiIC4gQHskZnVu
Y3Rpb24tPnBhcmFtZXRlcnN9IC4gIikpO1xuIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJh
eSwgIiAgICBSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+IHNjcmlwdEFyZ3VtZW50
cyhJbnNwZWN0b3I6OmNyZWF0ZVNjcmlwdEFyZ3VtZW50cygkc3RhdGVQb2ludGVyLCAiIC4gQHsk
ZnVuY3Rpb24tPnBhcmFtZXRlcnN9IC4gIikpO1xuIik7CiAgICAgICAgICRpbXBsSW5jbHVkZXN7
IjxpbnNwZWN0b3IvU2NyaXB0QXJndW1lbnRzLmg+In0gPSAxOwogICAgICAgICAkaW1wbEluY2x1
ZGVzeyI8aW5zcGVjdG9yL1NjcmlwdENhbGxTdGFja0ZhY3RvcnkuaD4ifSA9IDE7CiAgICAgICAg
IHB1c2goQGNhbGxXaXRoQXJncywgIldURk1vdmUoc2NyaXB0QXJndW1lbnRzKSIpOwogICAgIH0K
LSAgICBwdXNoKEBjYWxsV2l0aEFyZ3MsICJhY3RpdmVET01XaW5kb3coc3RhdGUpIikgaWYgJGNv
ZGVHZW5lcmF0b3ItPkV4dGVuZGVkQXR0cmlidXRlQ29udGFpbnMoJGNhbGxXaXRoLCAiQWN0aXZl
V2luZG93Iik7Ci0gICAgcHVzaChAY2FsbFdpdGhBcmdzLCAiZmlyc3RET01XaW5kb3coc3RhdGUp
IikgaWYgJGNvZGVHZW5lcmF0b3ItPkV4dGVuZGVkQXR0cmlidXRlQ29udGFpbnMoJGNhbGxXaXRo
LCAiRmlyc3RXaW5kb3ciKTsKLSAgICBwdXNoKEBjYWxsV2l0aEFyZ3MsICJjYWxsZXJET01XaW5k
b3coc3RhdGUpIikgaWYgJGNvZGVHZW5lcmF0b3ItPkV4dGVuZGVkQXR0cmlidXRlQ29udGFpbnMo
JGNhbGxXaXRoLCAiQ2FsbGVyV2luZG93Iik7CisgICAgcHVzaChAY2FsbFdpdGhBcmdzLCAiYWN0
aXZlRE9NV2luZG93KCRzdGF0ZVBvaW50ZXIpIikgaWYgJGNvZGVHZW5lcmF0b3ItPkV4dGVuZGVk
QXR0cmlidXRlQ29udGFpbnMoJGNhbGxXaXRoLCAiQWN0aXZlV2luZG93Iik7CisgICAgcHVzaChA
Y2FsbFdpdGhBcmdzLCAiZmlyc3RET01XaW5kb3coJHN0YXRlUG9pbnRlcikiKSBpZiAkY29kZUdl
bmVyYXRvci0+RXh0ZW5kZWRBdHRyaWJ1dGVDb250YWlucygkY2FsbFdpdGgsICJGaXJzdFdpbmRv
dyIpOworICAgIHB1c2goQGNhbGxXaXRoQXJncywgImNhbGxlckRPTVdpbmRvdygkc3RhdGVQb2lu
dGVyKSIpIGlmICRjb2RlR2VuZXJhdG9yLT5FeHRlbmRlZEF0dHJpYnV0ZUNvbnRhaW5zKCRjYWxs
V2l0aCwgIkNhbGxlcldpbmRvdyIpOwogCiAgICAgcmV0dXJuIEBjYWxsV2l0aEFyZ3M7CiB9CkBA
IC0zOTk1LDcgKzQwMjEsNyBAQCBzdWIgR2VuZXJhdGVQYXJhbWV0ZXJzQ2hlY2sKICAgICBpZiAo
ISRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDb25zdHJ1Y3Rvcn0p
IHsKICAgICAgICAgbXkgJG5hbWUgPSAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZTsKICAgICAg
ICAgJHF1b3RlZEZ1bmN0aW9uTmFtZSA9ICJcIiRuYW1lXCIiOwotICAgICAgICBwdXNoKEBhcmd1
bWVudHMsIEdlbmVyYXRlQ2FsbFdpdGgoJGZ1bmN0aW9uLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0
cmlidXRlcy0+e0NhbGxXaXRofSwgXEAkb3V0cHV0QXJyYXksICJKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSkiLCAkZnVuY3Rpb24pKTsKKyAgICAgICAgcHVzaChAYXJndW1lbnRzLCBHZW5l
cmF0ZUNhbGxXaXRoVXNpbmdQb2ludGVycygkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57Q2FsbFdpdGh9LCBcQCRvdXRwdXRBcnJheSwgIkpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKSIsICRmdW5jdGlvbikpOwogICAgIH0gZWxzZSB7CiAgICAgICAgICRxdW90
ZWRGdW5jdGlvbk5hbWUgPSAibnVsbHB0ciI7CiAgICAgfQpAQCAtNDQ0NSw3ICs0NDcxLDcgQEAg
c3ViIEdlbmVyYXRlQ2FsbGJhY2tJbXBsZW1lbnRhdGlvbgogCiAgICAgICAgICAgICBmb3JlYWNo
IG15ICRwYXJhbSAoQHBhcmFtcykgewogICAgICAgICAgICAgICAgIG15ICRwYXJhbU5hbWUgPSAk
cGFyYW0tPm5hbWU7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXJn
cy5hcHBlbmQoIiAuIE5hdGl2ZVRvSlNWYWx1ZSgkcGFyYW0sIDEsICRpbnRlcmZhY2UsICRwYXJh
bU5hbWUsICJtX2RhdGEiKSAuICIpO1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgYXJncy5hcHBlbmQoIiAuIE5hdGl2ZVRvSlNWYWx1ZVVzaW5nUG9pbnRlcnMo
JHBhcmFtLCAxLCAkaW50ZXJmYWNlLCAkcGFyYW1OYW1lLCAibV9kYXRhIikgLiAiKTtcbiIpOwog
ICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuICAgIE5h
a2VkUHRyPEpTQzo6RXhjZXB0aW9uPiByZXR1cm5lZEV4Y2VwdGlvbjtcbiIpOwpAQCAtNDU0Mywy
MyArNDU2OSwyMyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbkZ1bmN0aW9uQ2FsbCgpCiAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgJGluZGVudCAuICIgICAgJG5hdGl2ZVR5cGUg
bWVtb2l6ZWRSZXN1bHQgPSAkZnVuY3Rpb25TdHJpbmc7XG4iKTsKICAgICAgICAgICAgIG15ICRl
eGNlcHRpb25Db2RlID0gJG1heVRocm93TGVnYWN5RXhjZXB0aW9uID8gImVjIiA6ICIwIjsKICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAkaW5kZW50IC4gIiAgICBjdXJzb3IuYXBwZW5k
SW5wdXQ8TWVtb2l6ZWRET01SZXN1bHQ8JG1lbW9pemVkVHlwZT4+KGJpbmRpbmdOYW1lLmdldCgp
LnN0cmluZygpLCBtZW1vaXplZFJlc3VsdCwgJGV4Y2VwdGlvbkNvZGUpO1xuIik7Ci0gICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgJGluZGVudCAuICIgICAgcmVzdWx0ID0gIiAuIE5hdGl2
ZVRvSlNWYWx1ZSgkZnVuY3Rpb24tPnNpZ25hdHVyZSwgMSwgJGludGVyZmFjZSwgIm1lbW9pemVk
UmVzdWx0IiwgJHRoaXNPYmplY3QpIC4gIjtcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICRpbmRlbnQgLiAiICAgIHJlc3VsdCA9ICIgLiBOYXRpdmVUb0pTVmFsdWVVc2luZ1Bv
aW50ZXJzKCRmdW5jdGlvbi0+c2lnbmF0dXJlLCAxLCAkaW50ZXJmYWNlLCAibWVtb2l6ZWRSZXN1
bHQiLCAkdGhpc09iamVjdCkgLiAiO1xuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgJGluZGVudCAuICJ9IGVsc2UgaWYgKGN1cnNvci5pc1JlcGxheWluZygpKSB7XG4iKTsKICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAkaW5kZW50IC4gIiAgICBNZW1vaXplZERPTVJl
c3VsdEJhc2UqIGlucHV0ID0gY3Vyc29yLmZldGNoSW5wdXQ8TWVtb2l6ZWRET01SZXN1bHRCYXNl
PigpO1xuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgJGluZGVudCAuICIgICAg
JG1lbW9pemVkVHlwZSBtZW1vaXplZFJlc3VsdDtcbiIpOwogICAgICAgICAgICAgIyBGSVhNRTog
dGhlIGdlbmVyYXRlZCBjb2RlIHNob3VsZCByZXBvcnQgYW4gZXJyb3IgaWYgYW4gaW5wdXQgY2Fu
bm90IGJlIGZldGNoZWQgb3IgY29udmVydGVkLgogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICRpbmRlbnQgLiAiICAgIGlmIChpbnB1dCAmJiBpbnB1dC0+Y29udmVydFRvPCRtZW1vaXpl
ZFR5cGU+KG1lbW9pemVkUmVzdWx0KSkge1xuIik7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgJGluZGVudCAuICIgICAgICAgIHJlc3VsdCA9ICIgLiBOYXRpdmVUb0pTVmFsdWUoJGZ1
bmN0aW9uLT5zaWduYXR1cmUsIDEsICRpbnRlcmZhY2UsICJtZW1vaXplZFJlc3VsdCIsICR0aGlz
T2JqZWN0KSAuICI7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAkaW5kZW50
IC4gIiAgICAgICAgcmVzdWx0ID0gIiAuIE5hdGl2ZVRvSlNWYWx1ZVVzaW5nUG9pbnRlcnMoJGZ1
bmN0aW9uLT5zaWduYXR1cmUsIDEsICRpbnRlcmZhY2UsICJtZW1vaXplZFJlc3VsdCIsICR0aGlz
T2JqZWN0KSAuICI7XG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAkaW5kZW50
IC4gIiAgICAgICAgZWMgPSBpbnB1dC0+ZXhjZXB0aW9uQ29kZSgpO1xuIikgaWYgJG1heVRocm93
TGVnYWN5RXhjZXB0aW9uOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICRpbmRlbnQg
LiAiICAgIH0gZWxzZVxuIik7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgJGluZGVu
dCAuICIgICAgICAgIHJlc3VsdCA9ICIgLiBOYXRpdmVUb0pTVmFsdWUoJGZ1bmN0aW9uLT5zaWdu
YXR1cmUsIDEsICRpbnRlcmZhY2UsICRmdW5jdGlvblN0cmluZywgJHRoaXNPYmplY3QpIC4gIjtc
biIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICRpbmRlbnQgLiAiICAgICAgICBy
ZXN1bHQgPSAiIC4gTmF0aXZlVG9KU1ZhbHVlVXNpbmdQb2ludGVycygkZnVuY3Rpb24tPnNpZ25h
dHVyZSwgMSwgJGludGVyZmFjZSwgJGZ1bmN0aW9uU3RyaW5nLCAkdGhpc09iamVjdCkgLiAiO1xu
Iik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgJGluZGVudCAuICJ9IGVsc2VcbiIp
OwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICRpbmRlbnQgLiAiICAgIHJlc3VsdCA9
ICIgLiBOYXRpdmVUb0pTVmFsdWUoJGZ1bmN0aW9uLT5zaWduYXR1cmUsIDEsICRpbnRlcmZhY2Us
ICRmdW5jdGlvblN0cmluZywgJHRoaXNPYmplY3QpIC4gIjtcbiIpOworICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICRpbmRlbnQgLiAiICAgIHJlc3VsdCA9ICIgLiBOYXRpdmVUb0pTVmFs
dWVVc2luZ1BvaW50ZXJzKCRmdW5jdGlvbi0+c2lnbmF0dXJlLCAxLCAkaW50ZXJmYWNlLCAkZnVu
Y3Rpb25TdHJpbmcsICR0aGlzT2JqZWN0KSAuICI7XG4iKTsKICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiI2Vsc2VcbiIpOwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICRp
bmRlbnQgLiAicmVzdWx0ID0gIiAuIE5hdGl2ZVRvSlNWYWx1ZSgkZnVuY3Rpb24tPnNpZ25hdHVy
ZSwgMSwgJGludGVyZmFjZSwgJGZ1bmN0aW9uU3RyaW5nLCAkdGhpc09iamVjdCkgLiAiO1xuIik7
CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgJGluZGVudCAuICJyZXN1bHQgPSAiIC4g
TmF0aXZlVG9KU1ZhbHVlVXNpbmdQb2ludGVycygkZnVuY3Rpb24tPnNpZ25hdHVyZSwgMSwgJGlu
dGVyZmFjZSwgJGZ1bmN0aW9uU3RyaW5nLCAkdGhpc09iamVjdCkgLiAiO1xuIik7CiAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiNlbmRpZlxuIik7CiAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgJGluZGVudCAuICJKU1ZhbHVlIHJlc3VsdCA9
ICIgLiBOYXRpdmVUb0pTVmFsdWUoJGZ1bmN0aW9uLT5zaWduYXR1cmUsIDEsICRpbnRlcmZhY2Us
ICRmdW5jdGlvblN0cmluZywgJHRoaXNPYmplY3QpIC4gIjtcbiIpOworICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICRpbmRlbnQgLiAiSlNWYWx1ZSByZXN1bHQgPSAiIC4gTmF0aXZlVG9K
U1ZhbHVlVXNpbmdQb2ludGVycygkZnVuY3Rpb24tPnNpZ25hdHVyZSwgMSwgJGludGVyZmFjZSwg
JGZ1bmN0aW9uU3RyaW5nLCAkdGhpc09iamVjdCkgLiAiO1xuIik7CiAgICAgICAgIH0KIAogICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuIiAuICRpbmRlbnQgLiAic2V0RE9NRXhjZXB0aW9u
KHN0YXRlLCB0aHJvd1Njb3BlLCBlYyk7XG4iKSBpZiAkbWF5VGhyb3dMZWdhY3lFeGNlcHRpb247
CkBAIC00ODg3LDIzICs0OTEzLDQ0IEBAIHN1YiBKU1ZhbHVlVG9OYXRpdmUKICAgICByZXR1cm4g
KCJKUyR7dHlwZX06OnRvV3JhcHBlZCgkdmFsdWUpIiwgMCk7CiB9CiAKLXN1YiBOYXRpdmVUb0pT
VmFsdWUKK3N1YiBOYXRpdmVUb0pTVmFsdWVVc2luZ1JlZmVyZW5jZXMKK3sKKyAgICBteSAoJHNp
Z25hdHVyZSwgJGluRnVuY3Rpb25DYWxsLCAkaW50ZXJmYWNlLCAkdmFsdWUsICR0aGlzVmFsdWUp
ID0gQF87CisgICAgbXkgJHN0YXRlUG9pbnRlciA9ICImc3RhdGUiOworICAgIG15ICRzdGF0ZVJl
ZmVyZW5jZSA9ICJzdGF0ZSI7CisgICAgbXkgJHdyYXBwZWQgPSAiJHRoaXNWYWx1ZS53cmFwcGVk
KCkiOworICAgIG15ICRnbG9iYWxPYmplY3QgPSAkdGhpc1ZhbHVlID8gIiR0aGlzVmFsdWUuZ2xv
YmFsT2JqZWN0KCkiIDogImpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLmxleGljYWxH
bG9iYWxPYmplY3QoKSkiOworCisgICAgcmV0dXJuIE5hdGl2ZVRvSlNWYWx1ZSgkc2lnbmF0dXJl
LCAkaW5GdW5jdGlvbkNhbGwsICRpbnRlcmZhY2UsICR2YWx1ZSwgJHN0YXRlUG9pbnRlciwgJHN0
YXRlUmVmZXJlbmNlLCAkd3JhcHBlZCwgJGdsb2JhbE9iamVjdCk7Cit9CisKKyMgRklYTkU6IFdl
IHNob3VsZCByZW1vdmUgTmF0aXZlVG9KU1ZhbHVlVXNpbmdQb2ludGVycyBhbmQgY29tYmluZSBO
YXRpdmVUb0pTVmFsdWVVc2luZ1JlZmVyZW5jZXMgYW5kIE5hdGl2ZVRvSlNWYWx1ZQorc3ViIE5h
dGl2ZVRvSlNWYWx1ZVVzaW5nUG9pbnRlcnMKIHsKICAgICBteSAoJHNpZ25hdHVyZSwgJGluRnVu
Y3Rpb25DYWxsLCAkaW50ZXJmYWNlLCAkdmFsdWUsICR0aGlzVmFsdWUpID0gQF87CisgICAgbXkg
JHN0YXRlUG9pbnRlciA9ICJzdGF0ZSI7CisgICAgbXkgJHN0YXRlUmVmZXJlbmNlID0gIipzdGF0
ZSI7CisgICAgbXkgJHdyYXBwZWQgPSAiJHRoaXNWYWx1ZS0+d3JhcHBlZCgpIjsKKyAgICBteSAk
Z2xvYmFsT2JqZWN0ID0gJHRoaXNWYWx1ZSA/ICIkdGhpc1ZhbHVlLT5nbG9iYWxPYmplY3QoKSIg
OiAianNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3Qo
KSkiOworCisgICAgcmV0dXJuIE5hdGl2ZVRvSlNWYWx1ZSgkc2lnbmF0dXJlLCAkaW5GdW5jdGlv
bkNhbGwsICRpbnRlcmZhY2UsICR2YWx1ZSwgJHN0YXRlUG9pbnRlciwgJHN0YXRlUmVmZXJlbmNl
LCAkd3JhcHBlZCwgJGdsb2JhbE9iamVjdCk7Cit9CisKK3N1YiBOYXRpdmVUb0pTVmFsdWUKK3sK
KyAgICBteSAoJHNpZ25hdHVyZSwgJGluRnVuY3Rpb25DYWxsLCAkaW50ZXJmYWNlLCAkdmFsdWUs
ICRzdGF0ZVBvaW50ZXIsICRzdGF0ZVJlZmVyZW5jZSwgJHdyYXBwZWQsICRnbG9iYWxPYmplY3Qp
ID0gQF87CiAKICAgICBteSAkY29uZGl0aW9uYWwgPSAkc2lnbmF0dXJlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPntDb25kaXRpb25hbH07CiAgICAgbXkgJHR5cGUgPSAkc2lnbmF0dXJlLT50eXBlOwog
ICAgIG15ICRpc051bGxhYmxlID0gJHNpZ25hdHVyZS0+aXNOdWxsYWJsZTsKICAgICBteSAkbWF5
VGhyb3dFeGNlcHRpb24gPSAkc2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntHZXR0ZXJN
YXlUaHJvd0V4Y2VwdGlvbn0gfHwgJHNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57TWF5
VGhyb3dFeGNlcHRpb259OwogCi0gICAgbXkgJGdsb2JhbE9iamVjdCA9ICR0aGlzVmFsdWUgPyAi
JHRoaXNWYWx1ZS0+Z2xvYmFsT2JqZWN0KCkiIDogImpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+
KHN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpIjsKLQotICAgIHJldHVybiAidG9KU0Jvb2xl
YW4oKnN0YXRlLCB0aHJvd1Njb3BlLCAkdmFsdWUpIiBpZiAkdHlwZSBlcSAiYm9vbGVhbiIgJiYg
JG1heVRocm93RXhjZXB0aW9uOworICAgIHJldHVybiAidG9KU0Jvb2xlYW4oJHN0YXRlUmVmZXJl
bmNlLCB0aHJvd1Njb3BlLCAkdmFsdWUpIiBpZiAkdHlwZSBlcSAiYm9vbGVhbiIgJiYgJG1heVRo
cm93RXhjZXB0aW9uOwogICAgIHJldHVybiAianNCb29sZWFuKCR2YWx1ZSkiIGlmICR0eXBlIGVx
ICJib29sZWFuIjsKLSAgICByZXR1cm4gInRvSlNOdWxsYWJsZURhdGUoKnN0YXRlLCB0aHJvd1Nj
b3BlLCAkdmFsdWUpIiBpZiAkdHlwZSBlcSAiRGF0ZSIgJiYgJGlzTnVsbGFibGUgJiYgJG1heVRo
cm93RXhjZXB0aW9uOwotICAgIHJldHVybiAianNEYXRlT3JOdWxsKHN0YXRlLCAkdmFsdWUpIiBp
ZiAkdHlwZSBlcSAiRGF0ZSIgJiYgJGlzTnVsbGFibGU7Ci0gICAgcmV0dXJuICJ0b0pTRGF0ZSgq
c3RhdGUsIHRocm93U2NvcGUsICR2YWx1ZSkiIGlmICR0eXBlIGVxICJEYXRlIiAmJiAkbWF5VGhy
b3dFeGNlcHRpb247Ci0gICAgcmV0dXJuICJqc0RhdGUoc3RhdGUsICR2YWx1ZSkiIGlmICR0eXBl
IGVxICJEYXRlIjsKKyAgICByZXR1cm4gInRvSlNOdWxsYWJsZURhdGUoJHN0YXRlUmVmZXJlbmNl
LCB0aHJvd1Njb3BlLCAkdmFsdWUpIiBpZiAkdHlwZSBlcSAiRGF0ZSIgJiYgJGlzTnVsbGFibGUg
JiYgJG1heVRocm93RXhjZXB0aW9uOworICAgIHJldHVybiAianNEYXRlT3JOdWxsKCRzdGF0ZVBv
aW50ZXIsICR2YWx1ZSkiIGlmICR0eXBlIGVxICJEYXRlIiAmJiAkaXNOdWxsYWJsZTsKKyAgICBy
ZXR1cm4gInRvSlNEYXRlKCRzdGF0ZVJlZmVyZW5jZSwgdGhyb3dTY29wZSwgJHZhbHVlKSIgaWYg
JHR5cGUgZXEgIkRhdGUiICYmICRtYXlUaHJvd0V4Y2VwdGlvbjsKKyAgICByZXR1cm4gImpzRGF0
ZSgkc3RhdGVQb2ludGVyLCAkdmFsdWUpIiBpZiAkdHlwZSBlcSAiRGF0ZSI7CiAKICAgICBpZiAo
JGNvZGVHZW5lcmF0b3ItPklzTnVtZXJpY1R5cGUoJHR5cGUpIG9yICR0eXBlIGVxICJET01UaW1l
U3RhbXAiKSB7CiAgICAgICAgICMgV2UgY291bGQgaW5zdGVhZCBvdmVybG9hZCBhIGZ1bmN0aW9u
IHRvIHdvcmsgd2l0aCBvcHRpb25hbCBhcyB3ZWxsIGFzIG5vbi1vcHRpb25hbCBudW1iZXJzLCBi
dXQgdGhpcwpAQCAtNDkxMiw0MyArNDk1OSw0MyBAQCBzdWIgTmF0aXZlVG9KU1ZhbHVlCiAgICAg
ICAgICAgICAkdmFsdWUgPX4gcy9nZXRVbnNpZ25lZEludGVncmFsQXR0cmlidXRlL2dldEludGVn
cmFsQXR0cmlidXRlL2c7CiAgICAgICAgICAgICAkdmFsdWUgPSAic3RkOjptYXgoMCwgJHZhbHVl
KSI7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuICJ0b0pTTnVsbGFibGVOdW1iZXIoKnN0YXRl
LCB0aHJvd1Njb3BlLCAkdmFsdWUpIiBpZiAkaXNOdWxsYWJsZSAmJiAkbWF5VGhyb3dFeGNlcHRp
b247CisgICAgICAgIHJldHVybiAidG9KU051bGxhYmxlTnVtYmVyKCRzdGF0ZVJlZmVyZW5jZSwg
dGhyb3dTY29wZSwgJHZhbHVlKSIgaWYgJGlzTnVsbGFibGUgJiYgJG1heVRocm93RXhjZXB0aW9u
OwogICAgICAgICByZXR1cm4gInRvTnVsbGFibGVKU051bWJlcigkdmFsdWUpIiBpZiAkaXNOdWxs
YWJsZTsKLSAgICAgICAgcmV0dXJuICJ0b0pTTnVtYmVyKCpzdGF0ZSwgdGhyb3dTY29wZSwgJHZh
bHVlKSIgaWYgJG1heVRocm93RXhjZXB0aW9uOworICAgICAgICByZXR1cm4gInRvSlNOdW1iZXIo
JHN0YXRlUmVmZXJlbmNlLCB0aHJvd1Njb3BlLCAkdmFsdWUpIiBpZiAkbWF5VGhyb3dFeGNlcHRp
b247CiAgICAgICAgIHJldHVybiAianNOdW1iZXIoJHZhbHVlKSI7CiAgICAgfQogCiAgICAgaWYg
KCRjb2RlR2VuZXJhdG9yLT5Jc0VudW1UeXBlKCR0eXBlKSkgewogICAgICAgICBBZGRUb0ltcGxJ
bmNsdWRlcygiPHJ1bnRpbWUvSlNTdHJpbmcuaD4iLCAkY29uZGl0aW9uYWwpOwotICAgICAgICBy
ZXR1cm4gImpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCAkdmFsdWUpIjsKKyAgICAgICAgcmV0dXJu
ICJqc1N0cmluZ1dpdGhDYWNoZSgkc3RhdGVQb2ludGVyLCAkdmFsdWUpIjsKICAgICB9CiAKICAg
ICBpZiAoJGNvZGVHZW5lcmF0b3ItPklzU3RyaW5nVHlwZSgkdHlwZSkpIHsKICAgICAgICAgQWRk
VG9JbXBsSW5jbHVkZXMoIlVSTC5oIiwgJGNvbmRpdGlvbmFsKTsKLSAgICAgICAgcmV0dXJuICJq
c1N0cmluZ09yTnVsbChzdGF0ZSwgJHZhbHVlKSIgaWYgJGlzTnVsbGFibGU7CisgICAgICAgIHJl
dHVybiAianNTdHJpbmdPck51bGwoJHN0YXRlUG9pbnRlciwgJHZhbHVlKSIgaWYgJGlzTnVsbGFi
bGU7CiAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCI8cnVudGltZS9KU1N0cmluZy5oPiIsICRj
b25kaXRpb25hbCk7Ci0gICAgICAgIHJldHVybiAianNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsICR2
YWx1ZSkiOworICAgICAgICByZXR1cm4gImpzU3RyaW5nV2l0aENhY2hlKCRzdGF0ZVBvaW50ZXIs
ICR2YWx1ZSkiOwogICAgIH0KIAogICAgIGlmICgkY29kZUdlbmVyYXRvci0+SXNTZXF1ZW5jZU9y
RnJvemVuQXJyYXlUeXBlKCR0eXBlKSkgewogICAgICAgICBteSAkaW5uZXJUeXBlID0gJGNvZGVH
ZW5lcmF0b3ItPkdldFNlcXVlbmNlT3JGcm96ZW5BcnJheUlubmVyVHlwZSgkdHlwZSk7CiAgICAg
ICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJKUyR7aW5uZXJUeXBlfS5oIiwgJGNvbmRpdGlvbmFsKSBp
ZiAkY29kZUdlbmVyYXRvci0+SXNSZWZQdHJUeXBlKCRpbm5lclR5cGUpOwotICAgICAgICByZXR1
cm4gImpzQXJyYXkoc3RhdGUsICRnbG9iYWxPYmplY3QsICR2YWx1ZSkiIGlmICRjb2RlR2VuZXJh
dG9yLT5Jc1NlcXVlbmNlVHlwZSgkdHlwZSk7Ci0gICAgICAgIHJldHVybiAianNGcm96ZW5BcnJh
eShzdGF0ZSwgJGdsb2JhbE9iamVjdCwgJHZhbHVlKSIgaWYgJGNvZGVHZW5lcmF0b3ItPklzRnJv
emVuQXJyYXlUeXBlKCR0eXBlKTsKKyAgICAgICAgcmV0dXJuICJqc0FycmF5KCRzdGF0ZVBvaW50
ZXIsICRnbG9iYWxPYmplY3QsICR2YWx1ZSkiIGlmICRjb2RlR2VuZXJhdG9yLT5Jc1NlcXVlbmNl
VHlwZSgkdHlwZSk7CisgICAgICAgIHJldHVybiAianNGcm96ZW5BcnJheSgkc3RhdGVQb2ludGVy
LCAkZ2xvYmFsT2JqZWN0LCAkdmFsdWUpIiBpZiAkY29kZUdlbmVyYXRvci0+SXNGcm96ZW5BcnJh
eVR5cGUoJHR5cGUpOwogICAgIH0KIAogICAgIGlmICgkdHlwZSBlcSAiYW55IikgewogICAgICAg
ICBteSAkcmV0dXJuVHlwZSA9ICRzaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0ltcGxl
bWVudGF0aW9uUmV0dXJuVHlwZX07CiAgICAgICAgIGlmIChkZWZpbmVkICRyZXR1cm5UeXBlIGFu
ZCAoJHJldHVyblR5cGUgZXEgIklEQktleVBhdGgiIG9yICRyZXR1cm5UeXBlIGVxICJJREJLZXki
KSkgewogICAgICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIklEQkJpbmRpbmdVdGlsaXRpZXMu
aCIsICRjb25kaXRpb25hbCk7Ci0gICAgICAgICAgICByZXR1cm4gInRvSlMoKnN0YXRlLCAqJGds
b2JhbE9iamVjdCwgJHZhbHVlKSI7CisgICAgICAgICAgICByZXR1cm4gInRvSlMoJHN0YXRlUmVm
ZXJlbmNlLCAqJGdsb2JhbE9iamVjdCwgJHZhbHVlKSI7CiAgICAgICAgIH0KICAgICAgICAgcmV0
dXJuICR2YWx1ZTsKICAgICB9CiAKICAgICBpZiAoJHR5cGUgZXEgIlNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZSIpIHsKICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIlNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZS5oIiwgJGNvbmRpdGlvbmFsKTsKLSAgICAgICAgcmV0dXJuICIkdmFsdWUgPyAkdmFsdWUtPmRl
c2VyaWFsaXplKHN0YXRlLCAkdGhpc1ZhbHVlLT5nbG9iYWxPYmplY3QoKSwgMCkgOiBqc051bGwo
KSI7CisgICAgICAgIHJldHVybiAiJHZhbHVlID8gJHZhbHVlLT5kZXNlcmlhbGl6ZSgkc3RhdGVQ
b2ludGVyLCAkZ2xvYmFsT2JqZWN0LCAwKSA6IGpzTnVsbCgpIjsKICAgICB9CiAKICAgICBBZGRU
b0ltcGxJbmNsdWRlcygiU3R5bGVQcm9wZXJ0aWVzLmgiLCAkY29uZGl0aW9uYWwpIGlmICR0eXBl
IGVxICJDU1NTdHlsZURlY2xhcmF0aW9uIjsKQEAgLTQ5NzYsNyArNTAyMyw3IEBAIHN1YiBOYXRp
dmVUb0pTVmFsdWUKICAgICAgICAgICAgIGlmICgkc2VsZklzVGVhck9mZlR5cGUpIHsKICAgICAg
ICAgICAgICAgICAjIEZJWE1FOiBXaHkgU1ZHTWF0cml4IHNwZWNpZmljYWxseT8KICAgICAgICAg
ICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiU1ZHTWF0cml4VGVhck9mZi5oIiwgJGNvbmRpdGlv
bmFsKTsKLSAgICAgICAgICAgICAgICAkdmFsdWUgPSAiU1ZHTWF0cml4VGVhck9mZjo6Y3JlYXRl
KCR0aGlzVmFsdWUtPndyYXBwZWQoKSwgJHZhbHVlKSI7CisgICAgICAgICAgICAgICAgJHZhbHVl
ID0gIlNWR01hdHJpeFRlYXJPZmY6OmNyZWF0ZSgkd3JhcHBlZCwgJHZhbHVlKSI7CiAgICAgICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJTVkdTdGF0
aWNQcm9wZXJ0eVRlYXJPZmYuaCIsICRjb25kaXRpb25hbCk7CiAgICAgICAgICAgICAgICAgbXkg
JGludGVyZmFjZU5hbWUgPSAkaW50ZXJmYWNlLT5uYW1lOwpAQCAtNDk5Myw4ICs1MDQwLDggQEAg
c3ViIE5hdGl2ZVRvSlNWYWx1ZQogICAgIG15ICRmdW5jdGlvbk5hbWUgPSAidG9KUyI7CiAgICAg
JGZ1bmN0aW9uTmFtZSA9ICJ0b0pTTmV3bHlDcmVhdGVkIiBpZiAkc2lnbmF0dXJlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPntOZXdPYmplY3R9OwogCi0gICAgbXkgJGFyZ3VtZW50cyA9ICJzdGF0ZSwg
JGdsb2JhbE9iamVjdCwgJHZhbHVlIjsKLSAgICAkYXJndW1lbnRzID0gIipzdGF0ZSwgKiRnbG9i
YWxPYmplY3QsIHRocm93U2NvcGUsICR2YWx1ZSIgaWYgJG1heVRocm93RXhjZXB0aW9uOworICAg
IG15ICRhcmd1bWVudHMgPSAiJHN0YXRlUG9pbnRlciwgJGdsb2JhbE9iamVjdCwgJHZhbHVlIjsK
KyAgICAkYXJndW1lbnRzID0gIiRzdGF0ZVJlZmVyZW5jZSwgKiRnbG9iYWxPYmplY3QsIHRocm93
U2NvcGUsICR2YWx1ZSIgaWYgJG1heVRocm93RXhjZXB0aW9uOwogCiAgICAgcmV0dXJuICIkZnVu
Y3Rpb25OYW1lKCRhcmd1bWVudHMpIjsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RBY3RpdmVET01PYmplY3QuY3BwIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEFjdGl2ZURPTU9iamVjdC5j
cHAKaW5kZXggZDIxOGQwZTU4NjdkYTUxNjg1ZjkwN2QxYzcwODJlZmFhMjYxZTM0OC4uZjAyYjM5
YzhlNmMyMmU3MGYwYzIzNGNiZWMyZDBjYjQ5NDcwNzMxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEFjdGl2ZURPTU9iamVjdC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEFjdGl2
ZURPTU9iamVjdC5jcHAKQEAgLTE0NSwyMCArMTQ1LDIwIEBAIGlubGluZSBKU1Rlc3RBY3RpdmVE
T01PYmplY3QqIEpTVGVzdEFjdGl2ZURPTU9iamVjdDo6Y2FzdEZvckF0dHJpYnV0ZShKU0M6OkV4
ZWNTCiAgICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8SlNUZXN0QWN0aXZlRE9NT2JqZWN0Kj4oSlNW
YWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0QWN0aXZlRE9NT2JqZWN0RXhjaXRpbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdEFj
dGl2ZURPTU9iamVjdCosIFRocm93U2NvcGUmIHRocm93U2NvcGUpOworc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdEFjdGl2ZURPTU9iamVjdEV4Y2l0aW5nQXR0ckdldHRlcihFeGVjU3RhdGUm
LCBKU1Rlc3RBY3RpdmVET01PYmplY3QmLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAogRW5j
b2RlZEpTVmFsdWUganNUZXN0QWN0aXZlRE9NT2JqZWN0RXhjaXRpbmdBdHRyKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJl
dHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdEFjdGl2ZURPTU9iamVjdD46OmF0dHJpYnV0ZTxqc1Rl
c3RBY3RpdmVET01PYmplY3RFeGNpdGluZ0F0dHJHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJl
eGNpdGluZ0F0dHIiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEFjdGl2ZURP
TU9iamVjdEV4Y2l0aW5nQXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RBY3RpdmVE
T01PYmplY3QqIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0QWN0aXZlRE9NT2JqZWN0RXhjaXRpbmdBdHRyR2V0dGVyKEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTVGVzdEFjdGl2ZURPTU9iamVjdCYgdGhpc09iamVjdCwgVGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5V
U0VEX1BBUkFNKHN0YXRlKTsKLSAgICBpZiAoIUJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dB
Y2Nlc3NUb0ZyYW1lKHN0YXRlLCB0aGlzT2JqZWN0LT53cmFwcGVkKCkuZnJhbWUoKSwgVGhyb3dT
ZWN1cml0eUVycm9yKSkKKyAgICBpZiAoIUJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nl
c3NUb0ZyYW1lKCZzdGF0ZSwgdGhpc09iamVjdC53cmFwcGVkKCkuZnJhbWUoKSwgVGhyb3dTZWN1
cml0eUVycm9yKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgYXV0byYgaW1w
bCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53
cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLmV4Y2l0aW5nQXR0
cigpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3RydWN0
b3IuY3BwCmluZGV4IDNhNDVjMjg4NjI1ZmYzZDM3MmI4ODVlZjFhNDQxYTc1ZmUzMzRmZjguLjQ5
YWRhZGJlYjk0ZjQ2ZjI3ZmNhMDEyYjZkODY4NTM4NDUyMmRhZGIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudENvbnN0cnVjdG9y
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
RXZlbnRDb25zdHJ1Y3Rvci5jcHAKQEAgLTE4Myw1MiArMTgzLDUyIEBAIGlubGluZSBKU1Rlc3RF
dmVudENvbnN0cnVjdG9yKiBKU1Rlc3RFdmVudENvbnN0cnVjdG9yOjpjYXN0Rm9yQXR0cmlidXRl
KEpTQzo6RXhlCiAgICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8SlNUZXN0RXZlbnRDb25zdHJ1Y3Rv
cio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdEV2ZW50Q29uc3RydWN0b3JBdHRyMUdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RF
dmVudENvbnN0cnVjdG9yKiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CitzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0RXZlbnRDb25zdHJ1Y3RvckF0dHIxR2V0dGVyKEV4ZWNTdGF0ZSYsIEpT
VGVzdEV2ZW50Q29uc3RydWN0b3ImLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2Rl
ZEpTVmFsdWUganNUZXN0RXZlbnRDb25zdHJ1Y3RvckF0dHIxKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5k
aW5nQ2FsbGVyPEpTVGVzdEV2ZW50Q29uc3RydWN0b3I+OjphdHRyaWJ1dGU8anNUZXN0RXZlbnRD
b25zdHJ1Y3RvckF0dHIxR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAiYXR0cjEiKTsKIH0KIAot
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEV2ZW50Q29uc3RydWN0b3JBdHRyMUdldHRlcihF
eGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RFdmVudENvbnN0cnVjdG9yKiB0aGlzT2JqZWN0LCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEV2ZW50Q29u
c3RydWN0b3JBdHRyMUdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RFdmVudENvbnN0cnVj
dG9yJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIGF1dG8mIGlt
cGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmlu
Z1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5hdHRyMSgpKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09i
amVjdC53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZSgm
c3RhdGUsIGltcGwuYXR0cjEoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdEV2ZW50Q29uc3RydWN0b3JBdHRyMkdldHRlcihFeGVjU3RhdGUq
LCBKU1Rlc3RFdmVudENvbnN0cnVjdG9yKiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CitzdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RXZlbnRDb25zdHJ1Y3RvckF0dHIyR2V0dGVyKEV4ZWNT
dGF0ZSYsIEpTVGVzdEV2ZW50Q29uc3RydWN0b3ImLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsK
IAogRW5jb2RlZEpTVmFsdWUganNUZXN0RXZlbnRDb25zdHJ1Y3RvckF0dHIyKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJl
dHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdEV2ZW50Q29uc3RydWN0b3I+OjphdHRyaWJ1dGU8anNU
ZXN0RXZlbnRDb25zdHJ1Y3RvckF0dHIyR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAiYXR0cjIi
KTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEV2ZW50Q29uc3RydWN0b3JBdHRy
MkdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RFdmVudENvbnN0cnVjdG9yKiB0aGlzT2Jq
ZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dEV2ZW50Q29uc3RydWN0b3JBdHRyMkdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RFdmVu
dENvbnN0cnVjdG9yJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAg
IGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQg
PSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5hdHRyMigpKTsKKyAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dp
dGhDYWNoZSgmc3RhdGUsIGltcGwuYXR0cjIoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAog
I2lmIEVOQUJMRShTUEVDSUFMX0VWRU5UKQotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEV2
ZW50Q29uc3RydWN0b3JBdHRyM0dldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RFdmVudENvbnN0cnVj
dG9yKiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0RXZlbnRDb25zdHJ1Y3RvckF0dHIzR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdEV2ZW50Q29u
c3RydWN0b3ImLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNU
ZXN0RXZlbnRDb25zdHJ1Y3RvckF0dHIzKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpT
VGVzdEV2ZW50Q29uc3RydWN0b3I+OjphdHRyaWJ1dGU8anNUZXN0RXZlbnRDb25zdHJ1Y3RvckF0
dHIzR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAiYXR0cjMiKTsKIH0KIAotc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdEV2ZW50Q29uc3RydWN0b3JBdHRyM0dldHRlcihFeGVjU3RhdGUqIHN0
YXRlLCBKU1Rlc3RFdmVudENvbnN0cnVjdG9yKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEV2ZW50Q29uc3RydWN0b3JBdHRy
M0dldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RFdmVudENvbnN0cnVjdG9yJiB0aGlzT2Jq
ZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2Jq
ZWN0LT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShz
dGF0ZSwgaW1wbC5hdHRyMygpKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVk
KCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIGltcGwu
YXR0cjMoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV4Y2VwdGlvbi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXhjZXB0aW9uLmNwcApp
bmRleCAzMWM2YWU5MjExMmNkNzZjM2ZmMDIwZDRlMzIzMDY5MTZiZGRhYmVhLi5iNmEzMDMxYmE3
MmYzMmE5NmQ5MjExMmFjMDM0NmE2Y2FiOGQ1NjQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXhjZXB0aW9uLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXhjZXB0aW9uLmNwcApA
QCAtMTM3LDE5ICsxMzcsMTkgQEAgaW5saW5lIEpTVGVzdEV4Y2VwdGlvbiogSlNUZXN0RXhjZXB0
aW9uOjpjYXN0Rm9yQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgRW5jb2QKICAgICByZXR1cm4g
anNEeW5hbWljQ2FzdDxKU1Rlc3RFeGNlcHRpb24qPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVl
KSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RFeGNlcHRpb25OYW1lR2V0dGVy
KEV4ZWNTdGF0ZSosIEpTVGVzdEV4Y2VwdGlvbiosIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwor
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEV4Y2VwdGlvbk5hbWVHZXR0ZXIoRXhlY1N0YXRl
JiwgSlNUZXN0RXhjZXB0aW9uJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKIEVuY29kZWRK
U1ZhbHVlIGpzVGVzdEV4Y2VwdGlvbk5hbWUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8
SlNUZXN0RXhjZXB0aW9uPjo6YXR0cmlidXRlPGpzVGVzdEV4Y2VwdGlvbk5hbWVHZXR0ZXI+KHN0
YXRlLCB0aGlzVmFsdWUsICJuYW1lIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RFeGNlcHRpb25OYW1lR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEV4Y2VwdGlvbiog
dGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RFeGNlcHRpb25OYW1lR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEV4Y2Vw
dGlvbiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICBhdXRvJiBp
bXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJp
bmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwubmFtZSgpKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09i
amVjdC53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZSgm
c3RhdGUsIGltcGwubmFtZSgpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2Jq
ZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RH
bG9iYWxPYmplY3QuY3BwCmluZGV4IDZjMzhkY2FjYWIxYjEzODRjNDhlZThmMWEwNTZmMWI3MDA4
YWU5NzQuLmUwODRmMTJkYjM3NzhkODQ0NDZkMjM5ZmZiYzQwMjEzMzFiOGI0ZjYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHbG9iYWxP
YmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RHbG9iYWxPYmplY3QuY3BwCkBAIC0xODIsNzEgKzE4Miw3MSBAQCBpbmxpbmUgSlNUZXN0
R2xvYmFsT2JqZWN0KiBKU1Rlc3RHbG9iYWxPYmplY3Q6OmNhc3RGb3JBdHRyaWJ1dGUoSlNDOjpF
eGVjU3RhdGUqLAogICAgIHJldHVybiBqc0R5bmFtaWNDYXN0PEpTVGVzdEdsb2JhbE9iamVjdCo+
KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdEdsb2JhbE9iamVjdFJlZ3VsYXJBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlKiwgSlNU
ZXN0R2xvYmFsT2JqZWN0KiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CitzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0UmVndWxhckF0dHJpYnV0ZUdldHRlcihFeGVjU3Rh
dGUmLCBKU1Rlc3RHbG9iYWxPYmplY3QmLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAogRW5j
b2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0UmVndWxhckF0dHJpYnV0ZShFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBy
ZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RHbG9iYWxPYmplY3Q+OjphdHRyaWJ1dGU8anNUZXN0
R2xvYmFsT2JqZWN0UmVndWxhckF0dHJpYnV0ZUdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgInJl
Z3VsYXJBdHRyaWJ1dGUiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2Jh
bE9iamVjdFJlZ3VsYXJBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0R2xv
YmFsT2JqZWN0KiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFJlZ3VsYXJBdHRyaWJ1dGVHZXR0ZXIoRXhl
Y1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7
Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5yZWd1
bGFyQXR0cmlidXRlKCkpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsK
KyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgaW1wbC5yZWd1
bGFyQXR0cmlidXRlKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RQdWJsaWNBbmRQcml2YXRlQXR0cmlidXRlR2V0dGVy
KEV4ZWNTdGF0ZSosIEpTVGVzdEdsb2JhbE9iamVjdCosIFRocm93U2NvcGUmIHRocm93U2NvcGUp
Oworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFB1YmxpY0FuZFByaXZh
dGVBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0R2xvYmFsT2JqZWN0JiwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFB1
YmxpY0FuZFByaXZhdGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNU
ZXN0R2xvYmFsT2JqZWN0Pjo6YXR0cmlidXRlPGpzVGVzdEdsb2JhbE9iamVjdFB1YmxpY0FuZFBy
aXZhdGVBdHRyaWJ1dGVHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJwdWJsaWNBbmRQcml2YXRl
QXR0cmlidXRlIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmpl
Y3RQdWJsaWNBbmRQcml2YXRlQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVz
dEdsb2JhbE9iamVjdCogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RQdWJsaWNBbmRQcml2YXRlQXR0cmli
dXRlR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVj
dCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVj
dC0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3Rh
dGUsIGltcGwucHVibGljQW5kUHJpdmF0ZUF0dHJpYnV0ZSgpKTsKKyAgICBhdXRvJiBpbXBsID0g
dGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhD
YWNoZSgmc3RhdGUsIGltcGwucHVibGljQW5kUHJpdmF0ZUF0dHJpYnV0ZSgpKTsKICAgICByZXR1
cm4gcmVzdWx0OwogfQogCiAjaWYgRU5BQkxFKFRFU1RfRkVBVFVSRSkKLXN0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RQdWJsaWNBbmRQcml2YXRlQ29uZGl0aW9uYWxBdHRy
aWJ1dGVHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0R2xvYmFsT2JqZWN0KiwgVGhyb3dTY29wZSYg
dGhyb3dTY29wZSk7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0UHVi
bGljQW5kUHJpdmF0ZUNvbmRpdGlvbmFsQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVz
dEdsb2JhbE9iamVjdCYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RHbG9iYWxPYmplY3RQdWJsaWNBbmRQcml2YXRlQ29uZGl0aW9uYWxBdHRyaWJ1dGUo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
CiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6YXR0cmli
dXRlPGpzVGVzdEdsb2JhbE9iamVjdFB1YmxpY0FuZFByaXZhdGVDb25kaXRpb25hbEF0dHJpYnV0
ZUdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgInB1YmxpY0FuZFByaXZhdGVDb25kaXRpb25hbEF0
dHJpYnV0ZSIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0
UHVibGljQW5kUHJpdmF0ZUNvbmRpdGlvbmFsQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSogc3Rh
dGUsIEpTVGVzdEdsb2JhbE9iamVjdCogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RQdWJsaWNBbmRQcml2
YXRlQ29uZGl0aW9uYWxBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xv
YmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBq
c1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5wdWJsaWNBbmRQcml2YXRlQ29uZGl0aW9uYWxB
dHRyaWJ1dGUoKSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAg
IEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCBpbXBsLnB1YmxpY0Fu
ZFByaXZhdGVDb25kaXRpb25hbEF0dHJpYnV0ZSgpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQog
CiAjZW5kaWYKIAogI2lmIEVOQUJMRShURVNUX0ZFQVRVUkUpCi1zdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0R2xvYmFsT2JqZWN0RW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZUdldHRlcihFeGVj
U3RhdGUqLCBKU1Rlc3RHbG9iYWxPYmplY3QqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKK3N0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RFbmFibGVkQXRSdW50aW1lQXR0
cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdEdsb2JhbE9iamVjdCYsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RFbmFibGVk
QXRSdW50aW1lQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdEds
b2JhbE9iamVjdD46OmF0dHJpYnV0ZTxqc1Rlc3RHbG9iYWxPYmplY3RFbmFibGVkQXRSdW50aW1l
QXR0cmlidXRlR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAiZW5hYmxlZEF0UnVudGltZUF0dHJp
YnV0ZSIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0RW5h
YmxlZEF0UnVudGltZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RHbG9i
YWxPYmplY3QqIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0RW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZUdl
dHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwog
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndy
YXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBp
bXBsLmVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGUoKSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNP
YmplY3Qud3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUo
JnN0YXRlLCBpbXBsLmVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGUoKSk7CiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcAppbmRleCBmMWI4MTBiYTZiMDI2NWY5NWU5
YTZjMjIwZWJmNDI5YjdlODY1MDQyLi41YzYzNTIzMWI3OTVjMjQwZWFiMjAxZDllMjBhNzVhMzFi
MjQyNDI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0SW50ZXJmYWNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcApAQCAtNDE2LDE0ICs0MTYsMTUgQEAgaW5s
aW5lIEpTVGVzdEludGVyZmFjZSogSlNUZXN0SW50ZXJmYWNlOjpjYXN0Rm9yQXR0cmlidXRlKEpT
Qzo6RXhlY1N0YXRlKiwgRW5jb2QKIH0KIAogI2lmIEVOQUJMRShDb25kaXRpb24yMikgfHwgRU5B
QkxFKENvbmRpdGlvbjIzKQotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUNv
bnN0cnVjdG9ySW1wbGVtZW50c1N0YXRpY1JlYWRPbmx5QXR0ckdldHRlcihFeGVjU3RhdGUqKTsK
K3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvckltcGxlbWVu
dHNTdGF0aWNSZWFkT25seUF0dHJHZXR0ZXIoRXhlY1N0YXRlJik7CiAKIEVuY29kZWRKU1ZhbHVl
IGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9ySW1wbGVtZW50c1N0YXRpY1JlYWRPbmx5QXR0cihF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JJbXBsZW1lbnRz
U3RhdGljUmVhZE9ubHlBdHRyR2V0dGVyKHN0YXRlKSk7CisgICAgQVNTRVJUKHN0YXRlKTsKKyAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9ySW1wbGVt
ZW50c1N0YXRpY1JlYWRPbmx5QXR0ckdldHRlcigqc3RhdGUpKTsKIH0KIAotc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9ySW1wbGVtZW50c1N0YXRpY1JlYWRP
bmx5QXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdEludGVyZmFjZUNvbnN0cnVjdG9ySW1wbGVtZW50c1N0YXRpY1JlYWRPbmx5QXR0ckdldHRl
cihFeGVjU3RhdGUmIHN0YXRlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgSlNW
YWx1ZSByZXN1bHQgPSBqc051bWJlcihUZXN0SW50ZXJmYWNlOjppbXBsZW1lbnRzU3RhdGljUmVh
ZE9ubHlBdHRyKCkpOwpAQCAtNDMzLDEwNSArNDM0LDEwNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JJbXBsZW1lbnRzU3RhdGljUmVhZE9ubHlBdHRy
R2V0dAogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMjIpIHx8IEVOQUJMRShDb25kaXRp
b24yMykKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3Rvcklt
cGxlbWVudHNTdGF0aWNBdHRyR2V0dGVyKEV4ZWNTdGF0ZSopOworc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9ySW1wbGVtZW50c1N0YXRpY0F0dHJHZXR0ZXIo
RXhlY1N0YXRlJik7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9y
SW1wbGVtZW50c1N0YXRpY0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUsIFBy
b3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdEludGVyZmFj
ZUNvbnN0cnVjdG9ySW1wbGVtZW50c1N0YXRpY0F0dHJHZXR0ZXIoc3RhdGUpKTsKKyAgICBBU1NF
UlQoc3RhdGUpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0SW50ZXJmYWNlQ29u
c3RydWN0b3JJbXBsZW1lbnRzU3RhdGljQXR0ckdldHRlcigqc3RhdGUpKTsKIH0KIAotc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9ySW1wbGVtZW50c1N0YXRp
Y0F0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RJbnRlcmZhY2VDb25zdHJ1Y3RvckltcGxlbWVudHNTdGF0aWNBdHRyR2V0dGVyKEV4ZWNTdGF0
ZSYgc3RhdGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICBKU1ZhbHVlIHJlc3Vs
dCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBUZXN0SW50ZXJmYWNlOjppbXBsZW1lbnRzU3Rh
dGljQXR0cigpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKCZzdGF0
ZSwgVGVzdEludGVyZmFjZTo6aW1wbGVtZW50c1N0YXRpY0F0dHIoKSk7CiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMjIpIHx8IEVOQUJMRShD
b25kaXRpb24yMykKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VJbXBsZW1l
bnRzU3RyMUdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RJbnRlcmZhY2UqLCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKTsKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VJbXBsZW1l
bnRzU3RyMUdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RJbnRlcmZhY2UmLCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0
cjEoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5h
bWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0SW50ZXJmYWNlPjo6YXR0cmli
dXRlPGpzVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIxR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVl
LCAiaW1wbGVtZW50c1N0cjEiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdElu
dGVyZmFjZUltcGxlbWVudHNTdHIxR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEludGVy
ZmFjZSogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyMUdldHRlcihFeGVjU3RhdGUmIHN0
YXRlLCBKU1Rlc3RJbnRlcmZhY2UmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
CiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVl
IHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLmltcGxlbWVudHNTdHIxKCkp
OworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJl
c3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgaW1wbC5pbXBsZW1lbnRzU3RyMSgpKTsK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCiAjZW5kaWYKIAogI2lmIEVOQUJMRShDb25kaXRpb24y
MikgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdElu
dGVyZmFjZUltcGxlbWVudHNTdHIyR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdEludGVyZmFjZSos
IFRocm93U2NvcGUmIHRocm93U2NvcGUpOworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdElu
dGVyZmFjZUltcGxlbWVudHNTdHIyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdEludGVyZmFjZSYs
IFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZh
Y2VJbXBsZW1lbnRzU3RyMihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RJbnRl
cmZhY2U+OjphdHRyaWJ1dGU8anNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjJHZXR0ZXI+KHN0
YXRlLCB0aGlzVmFsdWUsICJpbXBsZW1lbnRzU3RyMiIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0
ZSwgSlNUZXN0SW50ZXJmYWNlKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQor
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIyR2V0dGVy
KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEludGVyZmFjZSYgdGhpc09iamVjdCwgVGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5V
U0VEX1BBUkFNKHN0YXRlKTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgp
OwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwuaW1w
bGVtZW50c1N0cjIoKSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwor
ICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCBpbXBsLmltcGxl
bWVudHNTdHIyKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKICNlbmRpZgogCiAjaWYgRU5B
QkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMpCi1zdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjNHZXR0ZXIoRXhlY1N0YXRlKiwgSlNU
ZXN0SW50ZXJmYWNlKiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CitzdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjNHZXR0ZXIoRXhlY1N0YXRlJiwgSlNU
ZXN0SW50ZXJmYWNlJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKIEVuY29kZWRKU1ZhbHVl
IGpzVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIzKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2Fs
bGVyPEpTVGVzdEludGVyZmFjZT46OmF0dHJpYnV0ZTxqc1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRz
U3RyM0dldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgImltcGxlbWVudHNTdHIzIik7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyM0dldHRlcihF
eGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RJbnRlcmZhY2UqIHRoaXNPYmplY3QsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SW50ZXJmYWNlSW1wbGVt
ZW50c1N0cjNHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0SW50ZXJmYWNlJiB0aGlzT2Jq
ZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIHJldHVybiB0aGlzT2JqZWN0LT5p
bXBsZW1lbnRzU3RyMygqc3RhdGUpOworICAgIHJldHVybiB0aGlzT2JqZWN0LmltcGxlbWVudHNT
dHIzKHN0YXRlKTsKIH0KIAogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMjIpIHx8IEVO
QUJMRShDb25kaXRpb24yMykKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VJ
bXBsZW1lbnRzTm9kZUdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RJbnRlcmZhY2UqLCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKTsKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VJ
bXBsZW1lbnRzTm9kZUdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RJbnRlcmZhY2UmLCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlSW1wbGVt
ZW50c05vZGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9w
ZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0SW50ZXJmYWNlPjo6
YXR0cmlidXRlPGpzVGVzdEludGVyZmFjZUltcGxlbWVudHNOb2RlR2V0dGVyPihzdGF0ZSwgdGhp
c1ZhbHVlLCAiaW1wbGVtZW50c05vZGUiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdEludGVyZmFjZUltcGxlbWVudHNOb2RlR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVz
dEludGVyZmFjZSogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzTm9kZUdldHRlcihFeGVjU3Rh
dGUmIHN0YXRlLCBKU1Rlc3RJbnRlcmZhY2UmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKLSAgICBK
U1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpLCBp
bXBsLmltcGxlbWVudHNOb2RlKCkpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBw
ZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoJnN0YXRlLCB0aGlzT2JqZWN0Lmdsb2Jh
bE9iamVjdCgpLCBpbXBsLmltcGxlbWVudHNOb2RlKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKICNlbmRpZgogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9u
MTIpCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JTdXBw
bGVtZW50YWxTdGF0aWNSZWFkT25seUF0dHJHZXR0ZXIoRXhlY1N0YXRlKik7CitzdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JTdXBwbGVtZW50YWxTdGF0aWNS
ZWFkT25seUF0dHJHZXR0ZXIoRXhlY1N0YXRlJik7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdElu
dGVyZmFjZUNvbnN0cnVjdG9yU3VwcGxlbWVudGFsU3RhdGljUmVhZE9ubHlBdHRyKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvclN1cHBsZW1lbnRhbFN0YXRp
Y1JlYWRPbmx5QXR0ckdldHRlcihzdGF0ZSkpOworICAgIEFTU0VSVChzdGF0ZSk7CisgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvclN1cHBsZW1lbnRh
bFN0YXRpY1JlYWRPbmx5QXR0ckdldHRlcigqc3RhdGUpKTsKIH0KIAotc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yU3VwcGxlbWVudGFsU3RhdGljUmVhZE9u
bHlBdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JTdXBwbGVtZW50YWxTdGF0aWNSZWFkT25seUF0dHJHZXR0
ZXIoRXhlY1N0YXRlJiBzdGF0ZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIEpT
VmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoV2ViQ29yZTo6VGVzdFN1cHBsZW1lbnRhbDo6c3VwcGxl
bWVudGFsU3RhdGljUmVhZE9ubHlBdHRyKCkpOwpAQCAtNTQxLDkxICs1NDQsOTIgQEAgc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yU3VwcGxlbWVudGFsU3Rh
dGljUmVhZE9ubHlBdHRyR2UKICNlbmRpZgogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBF
TkFCTEUoQ29uZGl0aW9uMTIpCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SW50ZXJmYWNl
Q29uc3RydWN0b3JTdXBwbGVtZW50YWxTdGF0aWNBdHRyR2V0dGVyKEV4ZWNTdGF0ZSopOworc3Rh
dGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yU3VwcGxlbWVudGFs
U3RhdGljQXR0ckdldHRlcihFeGVjU3RhdGUmKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0SW50
ZXJmYWNlQ29uc3RydWN0b3JTdXBwbGVtZW50YWxTdGF0aWNBdHRyKEV4ZWNTdGF0ZSogc3RhdGUs
IEVuY29kZWRKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvclN1cHBsZW1lbnRhbFN0YXRpY0F0dHJHZXR0
ZXIoc3RhdGUpKTsKKyAgICBBU1NFUlQoc3RhdGUpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JTdXBwbGVtZW50YWxTdGF0aWNBdHRyR2V0dGVy
KCpzdGF0ZSkpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SW50ZXJmYWNlQ29u
c3RydWN0b3JTdXBwbGVtZW50YWxTdGF0aWNBdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUpCitz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JTdXBwbGVtZW50
YWxTdGF0aWNBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7CiAgICAgVU5VU0VEX1BBUkFN
KHN0YXRlKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBX
ZWJDb3JlOjpUZXN0U3VwcGxlbWVudGFsOjpzdXBwbGVtZW50YWxTdGF0aWNBdHRyKCkpOworICAg
IEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCBXZWJDb3JlOjpUZXN0
U3VwcGxlbWVudGFsOjpzdXBwbGVtZW50YWxTdGF0aWNBdHRyKCkpOwogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKICNlbmRpZgogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29u
ZGl0aW9uMTIpCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SW50ZXJmYWNlU3VwcGxlbWVu
dGFsU3RyMUdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RJbnRlcmZhY2UqLCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKTsKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VTdXBwbGVt
ZW50YWxTdHIxR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdEludGVyZmFjZSYsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50
YWxTdHIxKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdEludGVyZmFjZT46OmF0
dHJpYnV0ZTxqc1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIxR2V0dGVyPihzdGF0ZSwgdGhp
c1ZhbHVlLCAic3VwcGxlbWVudGFsU3RyMSIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBK
U1Rlc3RJbnRlcmZhY2UqIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMUdldHRlcihF
eGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RJbnRlcmZhY2UmIHRoaXNPYmplY3QsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsK
LSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBXZWJDb3JlOjpU
ZXN0U3VwcGxlbWVudGFsOjpzdXBwbGVtZW50YWxTdHIxKGltcGwpKTsKKyAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dp
dGhDYWNoZSgmc3RhdGUsIFdlYkNvcmU6OlRlc3RTdXBwbGVtZW50YWw6OnN1cHBsZW1lbnRhbFN0
cjEoaW1wbCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKICNlbmRpZgogCiAjaWYgRU5BQkxF
KENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCi1zdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMkdldHRlcihFeGVjU3RhdGUqLCBKU1Rl
c3RJbnRlcmZhY2UqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKK3N0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpT
VGVzdEludGVyZmFjZSYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5n
Q2FsbGVyPEpTVGVzdEludGVyZmFjZT46OmF0dHJpYnV0ZTxqc1Rlc3RJbnRlcmZhY2VTdXBwbGVt
ZW50YWxTdHIyR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAic3VwcGxlbWVudGFsU3RyMiIpOwog
fQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3Ry
MkdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RJbnRlcmZhY2UqIHRoaXNPYmplY3QsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SW50ZXJm
YWNlU3VwcGxlbWVudGFsU3RyMkdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RJbnRlcmZh
Y2UmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgYXV0byYgaW1w
bCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5n
V2l0aENhY2hlKHN0YXRlLCBXZWJDb3JlOjpUZXN0U3VwcGxlbWVudGFsOjpzdXBwbGVtZW50YWxT
dHIyKGltcGwpKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAg
SlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIFdlYkNvcmU6OlRlc3RT
dXBwbGVtZW50YWw6OnN1cHBsZW1lbnRhbFN0cjIoaW1wbCkpOwogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKICNlbmRpZgogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0
aW9uMTIpCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFs
U3RyM0dldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RJbnRlcmZhY2UqLCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKTsKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50
YWxTdHIzR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdEludGVyZmFjZSYsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxT
dHIzKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdEludGVyZmFjZT46OmF0dHJp
YnV0ZTxqc1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIzR2V0dGVyPihzdGF0ZSwgdGhpc1Zh
bHVlLCAic3VwcGxlbWVudGFsU3RyMyIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyM0dldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rl
c3RJbnRlcmZhY2UqIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyM0dldHRlcihFeGVj
U3RhdGUmIHN0YXRlLCBKU1Rlc3RJbnRlcmZhY2UmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7Ci0gICAgcmV0dXJuIHRoaXNPYmplY3QtPnN1cHBsZW1lbnRhbFN0cjMoKnN0
YXRlKTsKKyAgICByZXR1cm4gdGhpc09iamVjdC5zdXBwbGVtZW50YWxTdHIzKHN0YXRlKTsKIH0K
IAogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24x
MikKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxOb2Rl
R2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdEludGVyZmFjZSosIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpOworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbE5v
ZGVHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0SW50ZXJmYWNlJiwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbE5vZGUo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
CiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0SW50ZXJmYWNlPjo6YXR0cmlidXRl
PGpzVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbE5vZGVHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUs
ICJzdXBwbGVtZW50YWxOb2RlIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RJ
bnRlcmZhY2VTdXBwbGVtZW50YWxOb2RlR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdElu
dGVyZmFjZSogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxOb2RlR2V0dGVyKEV4ZWNTdGF0
ZSYgc3RhdGUsIEpTVGVzdEludGVyZmFjZSYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFN
KHN0YXRlKTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwotICAgIEpT
VmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCksIFdl
YkNvcmU6OlRlc3RTdXBwbGVtZW50YWw6OnN1cHBsZW1lbnRhbE5vZGUoaW1wbCkpOworICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRv
SlMoJnN0YXRlLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCBXZWJDb3JlOjpUZXN0U3VwcGxl
bWVudGFsOjpzdXBwbGVtZW50YWxOb2RlKGltcGwpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0SlNCdWlsdGluQ29uc3RydWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yLmNwcAppbmRleCA1ZGMwYWE3
YjY4YmEzYjU0ZmQxNGNkZGFmMzlmNzgzY2ZiYzhlOGI4Li5hZGVjMTk5ZTQ5NzI5NDdkNDQ3Y2E3
YmRmNTFkMDRiMzFiM2IzYzc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RKU0J1aWx0aW5Db25zdHJ1
Y3Rvci5jcHAKQEAgLTEzNywzMiArMTM3LDMyIEBAIGlubGluZSBKU1Rlc3RKU0J1aWx0aW5Db25z
dHJ1Y3RvciogSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3I6OmNhc3RGb3JBdHRyaWJ1dGUoCiAg
ICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8SlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IqPihKU1Zh
bHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RKU0J1aWx0aW5Db25zdHJ1Y3RvclRlc3RBdHRyaWJ1dGVDdXN0b21HZXR0ZXIoRXhlY1N0YXRl
KiwgSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsK
K3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvclRlc3RBdHRy
aWJ1dGVDdXN0b21HZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3Im
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0SlNCdWls
dGluQ29uc3RydWN0b3JUZXN0QXR0cmlidXRlQ3VzdG9tKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5n
Q2FsbGVyPEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yPjo6YXR0cmlidXRlPGpzVGVzdEpTQnVp
bHRpbkNvbnN0cnVjdG9yVGVzdEF0dHJpYnV0ZUN1c3RvbUdldHRlcj4oc3RhdGUsIHRoaXNWYWx1
ZSwgInRlc3RBdHRyaWJ1dGVDdXN0b20iKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yVGVzdEF0dHJpYnV0ZUN1c3RvbUdldHRlcihFeGVjU3Rh
dGUqIHN0YXRlLCBKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvciogdGhpc09iamVjdCwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RKU0J1aWx0aW5D
b25zdHJ1Y3RvclRlc3RBdHRyaWJ1dGVDdXN0b21HZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNU
ZXN0SlNCdWlsdGluQ29uc3RydWN0b3ImIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShz
dGF0ZSk7Ci0gICAgcmV0dXJuIHRoaXNPYmplY3QtPnRlc3RBdHRyaWJ1dGVDdXN0b20oKnN0YXRl
KTsKKyAgICByZXR1cm4gdGhpc09iamVjdC50ZXN0QXR0cmlidXRlQ3VzdG9tKHN0YXRlKTsKIH0K
IAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yVGVzdEF0
dHJpYnV0ZVJXQ3VzdG9tR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVj
dG9yKiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0SlNCdWlsdGluQ29uc3RydWN0b3JUZXN0QXR0cmlidXRlUldDdXN0b21HZXR0ZXIoRXhlY1N0
YXRlJiwgSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3ImLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JUZXN0QXR0cmli
dXRlUldDdXN0b20oRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0SlNCdWlsdGlu
Q29uc3RydWN0b3I+OjphdHRyaWJ1dGU8anNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JUZXN0QXR0
cmlidXRlUldDdXN0b21HZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJ0ZXN0QXR0cmlidXRlUldD
dXN0b20iKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEpTQnVpbHRpbkNvbnN0
cnVjdG9yVGVzdEF0dHJpYnV0ZVJXQ3VzdG9tR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVz
dEpTQnVpbHRpbkNvbnN0cnVjdG9yKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yVGVzdEF0
dHJpYnV0ZVJXQ3VzdG9tR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEpTQnVpbHRpbkNv
bnN0cnVjdG9yJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIHJl
dHVybiB0aGlzT2JqZWN0LT50ZXN0QXR0cmlidXRlUldDdXN0b20oKnN0YXRlKTsKKyAgICByZXR1
cm4gdGhpc09iamVjdC50ZXN0QXR0cmlidXRlUldDdXN0b20oc3RhdGUpOwogfQogCiBFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuY3Bw
CmluZGV4IGUzNTQxNGQ0MjgwN2I2NTIyMzkxMzY2OTBlNDkxYjM0ZGJkYzMzODEuLjA5YWMxMTU2
NDUxZDQ5YWRlMWM3OWE2NDRkMGM0YTA3MDZlOTFmNmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHAKQEAgLTE3Miwx
OSArMTcyLDE5IEBAIGlubGluZSBKU1Rlc3ROb2RlKiBKU1Rlc3ROb2RlOjpjYXN0Rm9yQXR0cmli
dXRlKEpTQzo6RXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUKICAgICByZXR1cm4ganNEeW5hbWlj
Q2FzdDxKU1Rlc3ROb2RlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogfQogCi1zdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0Tm9kZU5hbWVHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0
Tm9kZSosIFRocm93U2NvcGUmIHRocm93U2NvcGUpOworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdE5vZGVOYW1lR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE5vZGUmLCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0Tm9kZU5hbWUoRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0
dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0Tm9kZT46OmF0dHJpYnV0ZTxqc1Rlc3ROb2RlTmFtZUdl
dHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgIm5hbWUiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdE5vZGVOYW1lR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE5vZGUqIHRo
aXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0Tm9kZU5hbWVHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0Tm9kZSYgdGhpc09i
amVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09i
amVjdC0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUo
c3RhdGUsIGltcGwubmFtZSgpKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVk
KCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIGltcGwu
bmFtZSgpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9uZGV0ZXJt
aW5pc3RpYy5jcHAKaW5kZXggNjQzNzI5ODhiNjI4MzEyNDgwMjkwMjEzNmMxZmViMThkOTJmYTM1
NS4uOGY5NDAxOGMyMTVlY2I3NTkwNTU5Y2NmYjJhNGI1YmI2ZWNlMzNkOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vbmRldGVybWlu
aXN0aWMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3ROb25kZXRlcm1pbmlzdGljLmNwcApAQCAtMTQ4LDIzICsxNDgsMjMgQEAgaW5saW5lIEpT
VGVzdE5vbmRldGVybWluaXN0aWMqIEpTVGVzdE5vbmRldGVybWluaXN0aWM6OmNhc3RGb3JBdHRy
aWJ1dGUoSlNDOjpFeGUKICAgICByZXR1cm4ganNEeW5hbWljQ2FzdDxKU1Rlc3ROb25kZXRlcm1p
bmlzdGljKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogfQogCi1zdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNSZWFkb25seUF0
dHJHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyosIFRocm93U2NvcGUm
IHRocm93U2NvcGUpOworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE5vbmRldGVybWluaXN0
aWNOb25kZXRlcm1pbmlzdGljUmVhZG9ubHlBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE5v
bmRldGVybWluaXN0aWMmLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFs
dWUganNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNSZWFkb25seUF0dHIoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7
CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYz46OmF0dHJp
YnV0ZTxqc1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY1JlYWRvbmx5QXR0ckdl
dHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgIm5vbmRldGVybWluaXN0aWNSZWFkb25seUF0dHIiKTsK
IH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRl
cm1pbmlzdGljUmVhZG9ubHlBdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE5vbmRl
dGVybWluaXN0aWMqIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNSZWFk
b25seUF0dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyYg
dGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICNpZiBFTkFCTEUoV0VCX1JF
UExBWSkKLSAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc3RhdGUtPmxleGljYWxH
bG9iYWxPYmplY3QoKTsKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc3RhdGUu
bGV4aWNhbEdsb2JhbE9iamVjdCgpOwogICAgIElucHV0Q3Vyc29yJiBjdXJzb3IgPSBnbG9iYWxP
YmplY3QtPmlucHV0Q3Vyc29yKCk7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0
b21pY1N0cmluZz4gYmluZGluZ05hbWUoIlRlc3ROb25kZXRlcm1pbmlzdGljLm5vbmRldGVybWlu
aXN0aWNSZWFkb25seUF0dHIiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsK
ICAgICBpZiAoY3Vyc29yLmlzQ2FwdHVyaW5nKCkpIHsKLSAgICAgICAgaW50MzJfdCBtZW1vaXpl
ZFJlc3VsdCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKS5ub25kZXRlcm1pbmlzdGljUmVhZG9ubHlB
dHRyKCk7CisgICAgICAgIGludDMyX3QgbWVtb2l6ZWRSZXN1bHQgPSB0aGlzT2JqZWN0LndyYXBw
ZWQoKS5ub25kZXRlcm1pbmlzdGljUmVhZG9ubHlBdHRyKCk7CiAgICAgICAgIGN1cnNvci5hcHBl
bmRJbnB1dDxNZW1vaXplZERPTVJlc3VsdDxpbnQzMl90Pj4oYmluZGluZ05hbWUuZ2V0KCkuc3Ry
aW5nKCksIG1lbW9pemVkUmVzdWx0LCAwKTsKICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051
bWJlcihtZW1vaXplZFJlc3VsdCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC0xNzksMzAg
KzE3OSwzMCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05v
bmRldGVybWluaXN0aWNSZWFkb25seUF0dHJHZXR0ZXIoRQogICAgICAgICB9CiAgICAgfQogI2Vu
ZGlmCi0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKKyAgICBhdXRvJiBp
bXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJl
cihpbXBsLm5vbmRldGVybWluaXN0aWNSZWFkb25seUF0dHIoKSk7CiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE5vbmRldGVybWluaXN0aWNOb25k
ZXRlcm1pbmlzdGljV3JpdGVhYmxlQXR0ckdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3ROb25kZXRl
cm1pbmlzdGljKiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CitzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNXcml0ZWFibGVBdHRyR2V0
dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE5vbmRldGVybWluaXN0aWMmLCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVy
bWluaXN0aWNXcml0ZWFibGVBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVz
dE5vbmRldGVybWluaXN0aWM+OjphdHRyaWJ1dGU8anNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRl
dGVybWluaXN0aWNXcml0ZWFibGVBdHRyR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAibm9uZGV0
ZXJtaW5pc3RpY1dyaXRlYWJsZUF0dHIiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljV3JpdGVhYmxlQXR0ckdldHRlcihF
eGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3ROb25kZXRlcm1pbmlzdGljKiB0aGlzT2JqZWN0LCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE5vbmRldGVy
bWluaXN0aWNOb25kZXRlcm1pbmlzdGljV3JpdGVhYmxlQXR0ckdldHRlcihFeGVjU3RhdGUmIHN0
YXRlLCBKU1Rlc3ROb25kZXRlcm1pbmlzdGljJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOwogI2lmIEVOQUJMRShXRUJfUkVQTEFZKQotICAgIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QgPSBzdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOworICAgIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzdGF0ZS5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CiAgICAg
SW5wdXRDdXJzb3ImIGN1cnNvciA9IGdsb2JhbE9iamVjdC0+aW5wdXRDdXJzb3IoKTsKICAgICBz
dGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbWljU3RyaW5nPiBiaW5kaW5nTmFtZSgiVGVz
dE5vbmRldGVybWluaXN0aWMubm9uZGV0ZXJtaW5pc3RpY1dyaXRlYWJsZUF0dHIiLCBBdG9taWNT
dHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKICAgICBpZiAoY3Vyc29yLmlzQ2FwdHVyaW5n
KCkpIHsKLSAgICAgICAgU3RyaW5nIG1lbW9pemVkUmVzdWx0ID0gdGhpc09iamVjdC0+d3JhcHBl
ZCgpLm5vbmRldGVybWluaXN0aWNXcml0ZWFibGVBdHRyKCk7CisgICAgICAgIFN0cmluZyBtZW1v
aXplZFJlc3VsdCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpLm5vbmRldGVybWluaXN0aWNXcml0ZWFi
bGVBdHRyKCk7CiAgICAgICAgIGN1cnNvci5hcHBlbmRJbnB1dDxNZW1vaXplZERPTVJlc3VsdDxT
dHJpbmc+PihiaW5kaW5nTmFtZS5nZXQoKS5zdHJpbmcoKSwgbWVtb2l6ZWRSZXN1bHQsIDApOwot
ICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBtZW1vaXpl
ZFJlc3VsdCk7CisgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoJnN0
YXRlLCBtZW1vaXplZFJlc3VsdCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCkBA
IC0yMTAsMzUgKzIxMCwzNSBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0Tm9uZGV0ZXJt
aW5pc3RpY05vbmRldGVybWluaXN0aWNXcml0ZWFibGVBdHRyR2V0dGVyKAogICAgICAgICBTdHJp
bmcgbWVtb2l6ZWRSZXN1bHQ7CiAgICAgICAgIE1lbW9pemVkRE9NUmVzdWx0QmFzZSogaW5wdXQg
PSBjdXJzb3IuZmV0Y2hJbnB1dDxNZW1vaXplZERPTVJlc3VsdEJhc2U+KCk7CiAgICAgICAgIGlm
IChpbnB1dCAmJiBpbnB1dC0+Y29udmVydFRvPFN0cmluZz4obWVtb2l6ZWRSZXN1bHQpKSB7Ci0g
ICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBtZW1v
aXplZFJlc3VsdCk7CisgICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENh
Y2hlKCZzdGF0ZSwgbWVtb2l6ZWRSZXN1bHQpOwogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
ICAgICAgICAgfQogICAgIH0KICNlbmRpZgotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53
cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwg
aW1wbC5ub25kZXRlcm1pbmlzdGljV3JpdGVhYmxlQXR0cigpKTsKKyAgICBhdXRvJiBpbXBsID0g
dGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhD
YWNoZSgmc3RhdGUsIGltcGwubm9uZGV0ZXJtaW5pc3RpY1dyaXRlYWJsZUF0dHIoKSk7CiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE5vbmRldGVy
bWluaXN0aWNOb25kZXRlcm1pbmlzdGljRXhjZXB0aW9uQXR0ckdldHRlcihFeGVjU3RhdGUqLCBK
U1Rlc3ROb25kZXRlcm1pbmlzdGljKiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CitzdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNFeGNl
cHRpb25BdHRyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE5vbmRldGVybWluaXN0aWMmLCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0Tm9uZGV0ZXJtaW5p
c3RpY05vbmRldGVybWluaXN0aWNFeGNlcHRpb25BdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5n
Q2FsbGVyPEpTVGVzdE5vbmRldGVybWluaXN0aWM+OjphdHRyaWJ1dGU8anNUZXN0Tm9uZGV0ZXJt
aW5pc3RpY05vbmRldGVybWluaXN0aWNFeGNlcHRpb25BdHRyR2V0dGVyPihzdGF0ZSwgdGhpc1Zh
bHVlLCAibm9uZGV0ZXJtaW5pc3RpY0V4Y2VwdGlvbkF0dHIiKTsKIH0KIAotc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljRXhjZXB0aW9u
QXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3ROb25kZXRlcm1pbmlzdGljKiB0aGlz
T2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljRXhjZXB0aW9uQXR0ckdldHRlcihF
eGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3ROb25kZXRlcm1pbmlzdGljJiB0aGlzT2JqZWN0LCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOwogI2lmIEVOQUJMRShXRUJfUkVQTEFZKQotICAgIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwor
ICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzdGF0ZS5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCk7CiAgICAgSW5wdXRDdXJzb3ImIGN1cnNvciA9IGdsb2JhbE9iamVjdC0+aW5wdXRDdXJz
b3IoKTsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbWljU3RyaW5nPiBiaW5k
aW5nTmFtZSgiVGVzdE5vbmRldGVybWluaXN0aWMubm9uZGV0ZXJtaW5pc3RpY0V4Y2VwdGlvbkF0
dHIiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKICAgICBpZiAoY3Vyc29y
LmlzQ2FwdHVyaW5nKCkpIHsKLSAgICAgICAgU3RyaW5nIG1lbW9pemVkUmVzdWx0ID0gdGhpc09i
amVjdC0+d3JhcHBlZCgpLm5vbmRldGVybWluaXN0aWNFeGNlcHRpb25BdHRyKCk7CisgICAgICAg
IFN0cmluZyBtZW1vaXplZFJlc3VsdCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpLm5vbmRldGVybWlu
aXN0aWNFeGNlcHRpb25BdHRyKCk7CiAgICAgICAgIGN1cnNvci5hcHBlbmRJbnB1dDxNZW1vaXpl
ZERPTVJlc3VsdDxTdHJpbmc+PihiaW5kaW5nTmFtZS5nZXQoKS5zdHJpbmcoKSwgbWVtb2l6ZWRS
ZXN1bHQsIDApOwotICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0
YXRlLCBtZW1vaXplZFJlc3VsdCk7CisgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdX
aXRoQ2FjaGUoJnN0YXRlLCBtZW1vaXplZFJlc3VsdCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7
CiAgICAgfQogCkBAIC0yNDYsMzcgKzI0NiwzNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNFeGNlcHRpb25BdHRyR2V0dGVyKAog
ICAgICAgICBTdHJpbmcgbWVtb2l6ZWRSZXN1bHQ7CiAgICAgICAgIE1lbW9pemVkRE9NUmVzdWx0
QmFzZSogaW5wdXQgPSBjdXJzb3IuZmV0Y2hJbnB1dDxNZW1vaXplZERPTVJlc3VsdEJhc2U+KCk7
CiAgICAgICAgIGlmIChpbnB1dCAmJiBpbnB1dC0+Y29udmVydFRvPFN0cmluZz4obWVtb2l6ZWRS
ZXN1bHQpKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hl
KHN0YXRlLCBtZW1vaXplZFJlc3VsdCk7CisgICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpz
U3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgbWVtb2l6ZWRSZXN1bHQpOwogICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKICAgICAgICAgfQogICAgIH0KICNlbmRpZgotICAgIGF1dG8mIGltcGwgPSB0
aGlzT2JqZWN0LT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhD
YWNoZShzdGF0ZSwgaW1wbC5ub25kZXRlcm1pbmlzdGljRXhjZXB0aW9uQXR0cigpKTsKKyAgICBh
dXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBq
c1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIGltcGwubm9uZGV0ZXJtaW5pc3RpY0V4Y2VwdGlvbkF0
dHIoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljR2V0dGVyRXhjZXB0aW9uQXR0ckdl
dHRlcihFeGVjU3RhdGUqLCBKU1Rlc3ROb25kZXRlcm1pbmlzdGljKiwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSk7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05v
bmRldGVybWluaXN0aWNHZXR0ZXJFeGNlcHRpb25BdHRyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVz
dE5vbmRldGVybWluaXN0aWMmLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpT
VmFsdWUganNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNHZXR0ZXJFeGNlcHRp
b25BdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE5vbmRldGVybWluaXN0
aWM+OjphdHRyaWJ1dGU8anNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNHZXR0
ZXJFeGNlcHRpb25BdHRyR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAibm9uZGV0ZXJtaW5pc3Rp
Y0dldHRlckV4Y2VwdGlvbkF0dHIiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljR2V0dGVyRXhjZXB0aW9uQXR0ckdldHRl
cihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3ROb25kZXRlcm1pbmlzdGljKiB0aGlzT2JqZWN0LCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE5vbmRl
dGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljR2V0dGVyRXhjZXB0aW9uQXR0ckdldHRlcihFeGVj
U3RhdGUmIHN0YXRlLCBKU1Rlc3ROb25kZXRlcm1pbmlzdGljJiB0aGlzT2JqZWN0LCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogI2lmIEVOQUJM
RShXRUJfUkVQTEFZKQotICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzdGF0ZS0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpOworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qg
PSBzdGF0ZS5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CiAgICAgSW5wdXRDdXJzb3ImIGN1cnNvciA9
IGdsb2JhbE9iamVjdC0+aW5wdXRDdXJzb3IoKTsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
Y29uc3QgQXRvbWljU3RyaW5nPiBiaW5kaW5nTmFtZSgiVGVzdE5vbmRldGVybWluaXN0aWMubm9u
ZGV0ZXJtaW5pc3RpY0dldHRlckV4Y2VwdGlvbkF0dHIiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVj
dEZyb21MaXRlcmFsKTsKICAgICBpZiAoY3Vyc29yLmlzQ2FwdHVyaW5nKCkpIHsKLSAgICAgICAg
U3RyaW5nIG1lbW9pemVkUmVzdWx0ID0gdGhpc09iamVjdC0+d3JhcHBlZCgpLm5vbmRldGVybWlu
aXN0aWNHZXR0ZXJFeGNlcHRpb25BdHRyKGVjKTsKKyAgICAgICAgU3RyaW5nIG1lbW9pemVkUmVz
dWx0ID0gdGhpc09iamVjdC53cmFwcGVkKCkubm9uZGV0ZXJtaW5pc3RpY0dldHRlckV4Y2VwdGlv
bkF0dHIoZWMpOwogICAgICAgICBjdXJzb3IuYXBwZW5kSW5wdXQ8TWVtb2l6ZWRET01SZXN1bHQ8
U3RyaW5nPj4oYmluZGluZ05hbWUuZ2V0KCkuc3RyaW5nKCksIG1lbW9pemVkUmVzdWx0LCBlYyk7
Ci0gICAgICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIG1lbW9p
emVkUmVzdWx0KTsKLSAgICAgICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCBl
Yyk7CisgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCBt
ZW1vaXplZFJlc3VsdCk7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIHRocm93U2Nv
cGUsIGVjKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKQEAgLTI4NCwzNyArMjg0
LDM3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0
ZXJtaW5pc3RpY0dldHRlckV4Y2VwdGlvbkF0dHJHCiAgICAgICAgIFN0cmluZyBtZW1vaXplZFJl
c3VsdDsKICAgICAgICAgTWVtb2l6ZWRET01SZXN1bHRCYXNlKiBpbnB1dCA9IGN1cnNvci5mZXRj
aElucHV0PE1lbW9pemVkRE9NUmVzdWx0QmFzZT4oKTsKICAgICAgICAgaWYgKGlucHV0ICYmIGlu
cHV0LT5jb252ZXJ0VG88U3RyaW5nPihtZW1vaXplZFJlc3VsdCkpIHsKLSAgICAgICAgICAgIEpT
VmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIG1lbW9pemVkUmVzdWx0KTsK
LSAgICAgICAgICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgaW5wdXQtPmV4
Y2VwdGlvbkNvZGUoKSk7CisgICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0
aENhY2hlKCZzdGF0ZSwgbWVtb2l6ZWRSZXN1bHQpOworICAgICAgICAgICAgc2V0RE9NRXhjZXB0
aW9uKCZzdGF0ZSwgdGhyb3dTY29wZSwgaW5wdXQtPmV4Y2VwdGlvbkNvZGUoKSk7CiAgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9CiAgICAgfQogI2VuZGlmCi0gICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3Ry
aW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLm5vbmRldGVybWluaXN0aWNHZXR0ZXJFeGNlcHRpb25B
dHRyKGVjKSk7Ci0gICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCBlYyk7Cisg
ICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0
ID0ganNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCBpbXBsLm5vbmRldGVybWluaXN0aWNHZXR0ZXJF
eGNlcHRpb25BdHRyKGVjKSk7CisgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgdGhyb3dTY29w
ZSwgZWMpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY1NldHRlckV4Y2VwdGlvbkF0dHJH
ZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyosIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpOworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE5vbmRldGVybWluaXN0aWNO
b25kZXRlcm1pbmlzdGljU2V0dGVyRXhjZXB0aW9uQXR0ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rl
c3ROb25kZXRlcm1pbmlzdGljJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKIEVuY29kZWRK
U1ZhbHVlIGpzVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljU2V0dGVyRXhjZXB0
aW9uQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3ROb25kZXRlcm1pbmlz
dGljPjo6YXR0cmlidXRlPGpzVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljU2V0
dGVyRXhjZXB0aW9uQXR0ckdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgIm5vbmRldGVybWluaXN0
aWNTZXR0ZXJFeGNlcHRpb25BdHRyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY1NldHRlckV4Y2VwdGlvbkF0dHJHZXR0
ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyogdGhpc09iamVjdCwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3ROb25k
ZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY1NldHRlckV4Y2VwdGlvbkF0dHJHZXR0ZXIoRXhl
Y1N0YXRlJiBzdGF0ZSwgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyYgdGhpc09iamVjdCwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAg
VU5VU0VEX1BBUkFNKHN0YXRlKTsKICNpZiBFTkFCTEUoV0VCX1JFUExBWSkKLSAgICBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKKyAg
ICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc3RhdGUubGV4aWNhbEdsb2JhbE9iamVj
dCgpOwogICAgIElucHV0Q3Vyc29yJiBjdXJzb3IgPSBnbG9iYWxPYmplY3QtPmlucHV0Q3Vyc29y
KCk7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21pY1N0cmluZz4gYmluZGlu
Z05hbWUoIlRlc3ROb25kZXRlcm1pbmlzdGljLm5vbmRldGVybWluaXN0aWNTZXR0ZXJFeGNlcHRp
b25BdHRyIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CiAgICAgaWYgKGN1
cnNvci5pc0NhcHR1cmluZygpKSB7Ci0gICAgICAgIFN0cmluZyBtZW1vaXplZFJlc3VsdCA9IHRo
aXNPYmplY3QtPndyYXBwZWQoKS5ub25kZXRlcm1pbmlzdGljU2V0dGVyRXhjZXB0aW9uQXR0cigp
OworICAgICAgICBTdHJpbmcgbWVtb2l6ZWRSZXN1bHQgPSB0aGlzT2JqZWN0LndyYXBwZWQoKS5u
b25kZXRlcm1pbmlzdGljU2V0dGVyRXhjZXB0aW9uQXR0cigpOwogICAgICAgICBjdXJzb3IuYXBw
ZW5kSW5wdXQ8TWVtb2l6ZWRET01SZXN1bHQ8U3RyaW5nPj4oYmluZGluZ05hbWUuZ2V0KCkuc3Ry
aW5nKCksIG1lbW9pemVkUmVzdWx0LCAwKTsKLSAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0
cmluZ1dpdGhDYWNoZShzdGF0ZSwgbWVtb2l6ZWRSZXN1bHQpOworICAgICAgICBKU1ZhbHVlIHJl
c3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgbWVtb2l6ZWRSZXN1bHQpOwogICAgICAg
ICByZXR1cm4gcmVzdWx0OwogICAgIH0KIApAQCAtMzIyLDEzICszMjIsMTMgQEAgc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljU2V0dGVy
RXhjZXB0aW9uQXR0ckcKICAgICAgICAgU3RyaW5nIG1lbW9pemVkUmVzdWx0OwogICAgICAgICBN
ZW1vaXplZERPTVJlc3VsdEJhc2UqIGlucHV0ID0gY3Vyc29yLmZldGNoSW5wdXQ8TWVtb2l6ZWRE
T01SZXN1bHRCYXNlPigpOwogICAgICAgICBpZiAoaW5wdXQgJiYgaW5wdXQtPmNvbnZlcnRUbzxT
dHJpbmc+KG1lbW9pemVkUmVzdWx0KSkgewotICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBq
c1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgbWVtb2l6ZWRSZXN1bHQpOworICAgICAgICAgICAgSlNW
YWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIG1lbW9pemVkUmVzdWx0KTsK
ICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KICAgICB9CiAjZW5kaWYKLSAg
ICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0
ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwubm9uZGV0ZXJtaW5pc3RpY1NldHRlckV4
Y2VwdGlvbkF0dHIoKSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwor
ICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCBpbXBsLm5vbmRl
dGVybWluaXN0aWNTZXR0ZXJFeGNlcHRpb25BdHRyKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RPYmouY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE9iai5jcHAKaW5kZXggY2Y4MWExY2NhMDAxMTM0MmYxMzk0N2Q5OWYyN2EzM2M5OGM2ZDg4
MS4uOWE4NjZhOGUyNmUzZTU1MjNjYTk0ODIwZjZmMjYzNWUwZDY2YzAwOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAK
QEAgLTE2OTMsOTgyICsxNjkzLDk4NCBAQCBpbmxpbmUgSlNUZXN0T2JqKiBKU1Rlc3RPYmo6OmNh
c3RGb3JBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSB0aAogICAgIHJl
dHVybiBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUp
KTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlYWRPbmx5TG9uZ0F0dHJH
ZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7Citz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVhZE9ubHlMb25nQXR0ckdldHRlcihFeGVj
U3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqUmVhZE9ubHlMb25nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0Nh
bGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqUmVhZE9ubHlMb25nQXR0ckdldHRl
cj4oc3RhdGUsIHRoaXNWYWx1ZSwgInJlYWRPbmx5TG9uZ0F0dHIiKTsKIH0KIAotc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlYWRPbmx5TG9uZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlKiBz
dGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3Rh
dGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlYWRPbmx5TG9uZ0F0dHJHZXR0ZXIoRXhlY1N0
YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3Rh
dGUpOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CisgICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1i
ZXIoaW1wbC5yZWFkT25seUxvbmdBdHRyKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWFkT25seVN0cmluZ0F0dHJHZXR0ZXIoRXhl
Y1N0YXRlKiwgSlNUZXN0T2JqKiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CitzdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0T2JqUmVhZE9ubHlTdHJpbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYs
IEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpSZWFkT25seVN0cmluZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8
SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9ialJlYWRPbmx5U3RyaW5nQXR0ckdldHRlcj4o
c3RhdGUsIHRoaXNWYWx1ZSwgInJlYWRPbmx5U3RyaW5nQXR0ciIpOwogfQogCi1zdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0T2JqUmVhZE9ubHlTdHJpbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSog
c3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWFkT25seVN0cmluZ0F0dHJHZXR0ZXIoRXhl
Y1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0o
c3RhdGUpOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7Ci0gICAgSlNW
YWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5yZWFkT25seVN0cmlu
Z0F0dHIoKSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIEpT
VmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCBpbXBsLnJlYWRPbmx5U3Ry
aW5nQXR0cigpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0T2JqUmVhZE9ubHlUZXN0T2JqQXR0ckdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RP
YmoqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RPYmpSZWFkT25seVRlc3RPYmpBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWFkT25s
eVRlc3RPYmpBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
UHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0
dHJpYnV0ZTxqc1Rlc3RPYmpSZWFkT25seVRlc3RPYmpBdHRyR2V0dGVyPihzdGF0ZSwgdGhpc1Zh
bHVlLCAicmVhZE9ubHlUZXN0T2JqQXR0ciIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0T2JqUmVhZE9ubHlUZXN0T2JqQXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rl
c3RPYmoqIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0T2JqUmVhZE9ubHlUZXN0T2JqQXR0ckdldHRlcihFeGVjU3RhdGUmIHN0
YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0g
ICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3Vs
dCA9IHRvSlMoc3RhdGUsIHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpLCBpbXBsLnJlYWRPbmx5
VGVzdE9iakF0dHIoKSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwor
ICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUygmc3RhdGUsIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0
KCksIGltcGwucmVhZE9ubHlUZXN0T2JqQXR0cigpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQog
Ci1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JTdGF0aWNSZWFkT25s
eUxvbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSopOworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dE9iakNvbnN0cnVjdG9yU3RhdGljUmVhZE9ubHlMb25nQXR0ckdldHRlcihFeGVjU3RhdGUmKTsK
IAogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JTdGF0aWNSZWFkT25seUxvbmdB
dHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpDb25zdHJ1Y3RvclN0YXRpY1JlYWRP
bmx5TG9uZ0F0dHJHZXR0ZXIoc3RhdGUpKTsKKyAgICBBU1NFUlQoc3RhdGUpOworICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqQ29uc3RydWN0b3JTdGF0aWNSZWFkT25seUxvbmdB
dHRyR2V0dGVyKCpzdGF0ZSkpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2Jq
Q29uc3RydWN0b3JTdGF0aWNSZWFkT25seUxvbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUp
CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JTdGF0aWNSZWFkT25s
eUxvbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKFRlc3RPYmo6OnN0YXRpY1JlYWRP
bmx5TG9uZ0F0dHIoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdG9yU3RhdGljU3RyaW5nQXR0ckdldHRlcihFeGVjU3Rh
dGUqKTsKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3RvclN0YXRpY1N0
cmluZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlJik7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNv
bnN0cnVjdG9yU3RhdGljU3RyaW5nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2Jq
Q29uc3RydWN0b3JTdGF0aWNTdHJpbmdBdHRyR2V0dGVyKHN0YXRlKSk7CisgICAgQVNTRVJUKHN0
YXRlKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9iakNvbnN0cnVjdG9yU3Rh
dGljU3RyaW5nQXR0ckdldHRlcigqc3RhdGUpKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdE9iakNvbnN0cnVjdG9yU3RhdGljU3RyaW5nQXR0ckdldHRlcihFeGVjU3RhdGUqIHN0
YXRlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdG9yU3RhdGljU3Ry
aW5nQXR0ckdldHRlcihFeGVjU3RhdGUmIHN0YXRlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgVGVzdE9i
ajo6c3RhdGljU3RyaW5nQXR0cigpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0
aENhY2hlKCZzdGF0ZSwgVGVzdE9iajo6c3RhdGljU3RyaW5nQXR0cigpKTsKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JU
ZXN0U3ViT2JqR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIFRocm93U2NvcGUmIHRocm93
U2NvcGUpOworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdG9yVGVzdFN1
Yk9iakdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JUZXN0U3ViT2JqKEV4ZWNT
dGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewog
ICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpD
b25zdHJ1Y3RvclRlc3RTdWJPYmpHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJUZXN0U3ViT2Jq
Iik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3RvclRlc3RT
dWJPYmpHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0LCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNvbnN0
cnVjdG9yVGVzdFN1Yk9iakdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNP
YmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgcmV0dXJuIEpTVGVzdFN1Yk9i
ajo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgp
KTsKKyAgICByZXR1cm4gSlNUZXN0U3ViT2JqOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS52bSgpLCB0
aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdE9ialRlc3RTdWJPYmpFbmFibGVkQnlTZXR0aW5nQ29uc3RydWN0b3JHZXR0ZXIoRXhlY1N0
YXRlKiwgSlNUZXN0T2JqKiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CitzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0T2JqVGVzdFN1Yk9iakVuYWJsZWRCeVNldHRpbmdDb25zdHJ1Y3Rvckdl
dHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAog
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqVGVzdFN1Yk9iakVuYWJsZWRCeVNldHRpbmdDb25zdHJ1
Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5
TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8
anNUZXN0T2JqVGVzdFN1Yk9iakVuYWJsZWRCeVNldHRpbmdDb25zdHJ1Y3RvckdldHRlcj4oc3Rh
dGUsIHRoaXNWYWx1ZSwgIlRlc3RTdWJPYmpFbmFibGVkQnlTZXR0aW5nIik7CiB9CiAKLXN0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpUZXN0U3ViT2JqRW5hYmxlZEJ5U2V0dGluZ0NvbnN0
cnVjdG9yR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpUZXN0
U3ViT2JqRW5hYmxlZEJ5U2V0dGluZ0NvbnN0cnVjdG9yR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUs
IEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICBp
ZiAoVU5MSUtFTFkoIXRoaXNPYmplY3QtPndyYXBwZWQoKS5mcmFtZSgpKSkKKyAgICBpZiAoVU5M
SUtFTFkoIXRoaXNPYmplY3Qud3JhcHBlZCgpLmZyYW1lKCkpKQogICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKLSAgICBTZXR0aW5ncyYgc2V0dGluZ3MgPSB0aGlzT2JqZWN0LT53cmFwcGVk
KCkuZnJhbWUoKS0+c2V0dGluZ3MoKTsKKyAgICBTZXR0aW5ncyYgc2V0dGluZ3MgPSB0aGlzT2Jq
ZWN0LndyYXBwZWQoKS5mcmFtZSgpLT5zZXR0aW5ncygpOwogICAgIGlmICghc2V0dGluZ3MudGVz
dFNldHRpbmdFbmFibGVkKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIHJl
dHVybiBKU1Rlc3RTdWJPYmo6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCB0aGlzT2JqZWN0
LT5nbG9iYWxPYmplY3QoKSk7CisgICAgcmV0dXJuIEpTVGVzdFN1Yk9iajo6Z2V0Q29uc3RydWN0
b3Ioc3RhdGUudm0oKSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7CiB9CiAKLXN0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpFbnVtQXR0ckdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RP
YmoqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RPYmpFbnVtQXR0ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqRW51bUF0dHIoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAg
cmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9iakVudW1B
dHRyR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAiZW51bUF0dHIiKTsKIH0KIAotc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdE9iakVudW1BdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpT
VGVzdE9iaiogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RPYmpFbnVtQXR0ckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rl
c3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3Ry
aW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLmVudW1BdHRyKCkpOworICAgIGF1dG8mIGltcGwgPSB0
aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENh
Y2hlKCZzdGF0ZSwgaW1wbC5lbnVtQXR0cigpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1z
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQnl0ZUF0dHJHZXR0ZXIoRXhlY1N0YXRlKiwg
SlNUZXN0T2JqKiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CitzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0T2JqQnl0ZUF0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakJ5dGVBdHRyKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQog
ewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RP
YmpCeXRlQXR0ckdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgImJ5dGVBdHRyIik7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpCeXRlQXR0ckdldHRlcihFeGVjU3RhdGUqIHN0
YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQnl0ZUF0dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0
ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAg
IGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CisgICAgYXV0byYgaW1wbCA9IHRo
aXNPYmplY3Qud3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5i
eXRlQXR0cigpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0T2JqT2N0ZXRBdHRyR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIFRocm93
U2NvcGUmIHRocm93U2NvcGUpOworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iak9jdGV0
QXR0ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqT2N0ZXRBdHRyKEV4ZWNTdGF0ZSogc3RhdGUs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBC
aW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpPY3RldEF0dHJHZXR0
ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJvY3RldEF0dHIiKTsKIH0KIAotc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdE9iak9jdGV0QXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RP
YmoqIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0T2JqT2N0ZXRBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9i
aiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0Lndy
YXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwub2N0ZXRBdHRyKCkp
OwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RP
YmpTaG9ydEF0dHJHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSk7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqU2hvcnRBdHRyR2V0dGVy
KEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCiBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpTaG9ydEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxs
ZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9ialNob3J0QXR0ckdldHRlcj4oc3RhdGUs
IHRoaXNWYWx1ZSwgInNob3J0QXR0ciIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0T2JqU2hvcnRBdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09i
amVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RPYmpTaG9ydEF0dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2Jq
ZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2Jq
ZWN0LT53cmFwcGVkKCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwog
ICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5zaG9ydEF0dHIoKSk7CiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNsYW1wZWRT
aG9ydEF0dHJHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSk7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ2xhbXBlZFNob3J0QXR0ckdl
dHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAog
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ2xhbXBlZFNob3J0QXR0cihFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4g
QmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqQ2xhbXBlZFNob3J0
QXR0ckdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgImNsYW1wZWRTaG9ydEF0dHIiKTsKIH0KIAot
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNsYW1wZWRTaG9ydEF0dHJHZXR0ZXIoRXhl
Y1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNsYW1wZWRTaG9ydEF0dHJHZXR0
ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7Cisg
ICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0
ID0ganNOdW1iZXIoaW1wbC5jbGFtcGVkU2hvcnRBdHRyKCkpOwogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpFbmZvcmNlUmFuZ2VTaG9ydEF0
dHJHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7
CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqRW5mb3JjZVJhbmdlU2hvcnRBdHRyR2V0
dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCiBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpFbmZvcmNlUmFuZ2VTaG9ydEF0dHIoRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0
dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9iakVuZm9yY2VS
YW5nZVNob3J0QXR0ckdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgImVuZm9yY2VSYW5nZVNob3J0
QXR0ciIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqRW5mb3JjZVJhbmdl
U2hvcnRBdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpF
bmZvcmNlUmFuZ2VTaG9ydEF0dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0
aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIGF1dG8mIGltcGwgPSB0
aGlzT2JqZWN0LT53cmFwcGVkKCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBl
ZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5lbmZvcmNlUmFuZ2VTaG9y
dEF0dHIoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdE9ialVuc2lnbmVkU2hvcnRBdHRyR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaios
IFRocm93U2NvcGUmIHRocm93U2NvcGUpOworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9i
alVuc2lnbmVkU2hvcnRBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpVbnNpZ25lZFNob3J0
QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5
TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8
anNUZXN0T2JqVW5zaWduZWRTaG9ydEF0dHJHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJ1bnNp
Z25lZFNob3J0QXR0ciIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqVW5z
aWduZWRTaG9ydEF0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2Jq
ZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dE9ialVuc2lnbmVkU2hvcnRBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYg
dGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICBhdXRvJiBpbXBsID0g
dGhpc09iamVjdC0+d3JhcHBlZCgpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBw
ZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwudW5zaWduZWRTaG9ydEF0
dHIoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdE9iakxvbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIFRocm93U2NvcGUm
IHRocm93U2NvcGUpOworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakxvbmdBdHRyR2V0
dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCiBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpMb25nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0Nh
bGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqTG9uZ0F0dHJHZXR0ZXI+KHN0YXRl
LCB0aGlzVmFsdWUsICJsb25nQXR0ciIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0T2JqTG9uZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2Jq
ZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dE9iakxvbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVj
dCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVj
dC0+d3JhcHBlZCgpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAg
ICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwubG9uZ0F0dHIoKSk7CiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakxvbmdMb25nQXR0
ckdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsK
K3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpMb25nTG9uZ0F0dHJHZXR0ZXIoRXhlY1N0
YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKIEVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9iakxvbmdMb25nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxK
U1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqTG9uZ0xvbmdBdHRyR2V0dGVyPihzdGF0ZSwg
dGhpc1ZhbHVlLCAibG9uZ0xvbmdBdHRyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RPYmpMb25nTG9uZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0
aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdE9iakxvbmdMb25nQXR0ckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmom
IHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgYXV0byYgaW1wbCA9
IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFw
cGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLmxvbmdMb25nQXR0cigp
KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
T2JqVW5zaWduZWRMb25nTG9uZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSk7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqVW5z
aWduZWRMb25nTG9uZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29w
ZSYgdGhyb3dTY29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialVuc2lnbmVkTG9uZ0xv
bmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0
ZTxqc1Rlc3RPYmpVbnNpZ25lZExvbmdMb25nQXR0ckdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwg
InVuc2lnbmVkTG9uZ0xvbmdBdHRyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RPYmpVbnNpZ25lZExvbmdMb25nQXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RP
YmoqIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0T2JqVW5zaWduZWRMb25nTG9uZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0
ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAg
IGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CisgICAgYXV0byYgaW1wbCA9IHRo
aXNPYmplY3Qud3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC51
bnNpZ25lZExvbmdMb25nQXR0cigpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0T2JqU3RyaW5nQXR0ckdldHRlcihFeGVjU3RhdGUqLCBKU1Rl
c3RPYmoqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RPYmpTdHJpbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdBdHRyKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQog
ewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RP
YmpTdHJpbmdBdHRyR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAic3RyaW5nQXR0ciIpOwogfQog
Ci1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqU3RyaW5nQXR0ckdldHRlcihFeGVjU3Rh
dGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqU3RyaW5nQXR0ckdldHRlcihFeGVjU3Rh
dGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
CiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVl
IHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLnN0cmluZ0F0dHIoKSk7Cisg
ICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0
ID0ganNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCBpbXBsLnN0cmluZ0F0dHIoKSk7CiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialVzdnN0cmlu
Z0F0dHJHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSk7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqVXN2c3RyaW5nQXR0ckdldHRlcihF
eGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqVXN2c3RyaW5nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0Nh
bGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqVXN2c3RyaW5nQXR0ckdldHRlcj4o
c3RhdGUsIHRoaXNWYWx1ZSwgInVzdnN0cmluZ0F0dHIiKTsKIH0KIAotc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdE9ialVzdnN0cmluZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNU
ZXN0T2JqKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdE9ialVzdnN0cmluZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwg
SlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBq
c1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC51c3ZzdHJpbmdBdHRyKCkpOworICAgIGF1dG8m
IGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3Ry
aW5nV2l0aENhY2hlKCZzdGF0ZSwgaW1wbC51c3ZzdHJpbmdBdHRyKCkpOwogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpUZXN0T2JqQXR0ckdl
dHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKK3N0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpUZXN0T2JqQXR0ckdldHRlcihFeGVjU3RhdGUm
LCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqVGVzdE9iakF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0
T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9ialRlc3RPYmpBdHRyR2V0dGVyPihzdGF0ZSwgdGhpc1Zh
bHVlLCAidGVzdE9iakF0dHIiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9i
alRlc3RPYmpBdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVj
dCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RP
YmpUZXN0T2JqQXR0ckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmpl
Y3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmpl
Y3QtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIHRoaXNPYmpl
Y3QtPmdsb2JhbE9iamVjdCgpLCBpbXBsLnRlc3RPYmpBdHRyKCkpOworICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoJnN0YXRl
LCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCBpbXBsLnRlc3RPYmpBdHRyKCkpOwogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpUZXN0TnVs
bGFibGVPYmpBdHRyR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpOworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialRlc3ROdWxsYWJsZU9i
akF0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialRlc3ROdWxsYWJsZU9iakF0dHIoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAg
ICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9ialRl
c3ROdWxsYWJsZU9iakF0dHJHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJ0ZXN0TnVsbGFibGVP
YmpBdHRyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpUZXN0TnVsbGFi
bGVPYmpBdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpU
ZXN0TnVsbGFibGVPYmpBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhp
c09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICBhdXRvJiBpbXBsID0gdGhp
c09iamVjdC0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgdGhp
c09iamVjdC0+Z2xvYmFsT2JqZWN0KCksIGltcGwudGVzdE51bGxhYmxlT2JqQXR0cigpKTsKKyAg
ICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQg
PSB0b0pTKCZzdGF0ZSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgaW1wbC50ZXN0TnVsbGFi
bGVPYmpBdHRyKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RPYmpMZW5pZW50VGVzdE9iakF0dHJHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0
T2JqKiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0T2JqTGVuaWVudFRlc3RPYmpBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpMZW5pZW50
VGVzdE9iakF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0
cmlidXRlPGpzVGVzdE9iakxlbmllbnRUZXN0T2JqQXR0ckdldHRlciwgQ2FzdGVkVGhpc0Vycm9y
QmVoYXZpb3I6OlJldHVybkVhcmx5PihzdGF0ZSwgdGhpc1ZhbHVlLCAibGVuaWVudFRlc3RPYmpB
dHRyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpMZW5pZW50VGVzdE9i
akF0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0LCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakxlbmll
bnRUZXN0T2JqQXR0ckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmpl
Y3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmpl
Y3QtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIHRoaXNPYmpl
Y3QtPmdsb2JhbE9iamVjdCgpLCBpbXBsLmxlbmllbnRUZXN0T2JqQXR0cigpKTsKKyAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pT
KCZzdGF0ZSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgaW1wbC5sZW5pZW50VGVzdE9iakF0
dHIoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdE9ialVuZm9yZ2VhYmxlQXR0ckdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKTsKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpVbmZv
cmdlYWJsZUF0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialVuZm9yZ2VhYmxlQXR0cihFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsK
ICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2Jq
VW5mb3JnZWFibGVBdHRyR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAidW5mb3JnZWFibGVBdHRy
Iik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpVbmZvcmdlYWJsZUF0dHJH
ZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialVuZm9yZ2VhYmxl
QXR0ckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBw
ZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBs
LnVuZm9yZ2VhYmxlQXR0cigpKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVk
KCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIGltcGwu
dW5mb3JnZWFibGVBdHRyKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZ0dl
dHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKK3N0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0
eVN0cmluZ0dldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqU3RyaW5nQXR0clRyZWF0aW5nTnVsbEFz
RW1wdHlTdHJpbmcoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0
cmlidXRlPGpzVGVzdE9ialN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nR2V0dGVy
PihzdGF0ZSwgdGhpc1ZhbHVlLCAic3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmci
KTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ0F0dHJUcmVhdGlu
Z051bGxBc0VtcHR5U3RyaW5nR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhp
c09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RPYmpTdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZ0dldHRlcihFeGVjU3Rh
dGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
CiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVl
IHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLnN0cmluZ0F0dHJUcmVhdGlu
Z051bGxBc0VtcHR5U3RyaW5nKCkpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBw
ZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgaW1w
bC5zdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZygpKTsKICAgICByZXR1cm4gcmVz
dWx0OwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqVXN2c3RyaW5nQXR0clRy
ZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmdHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSk7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqVXN2
c3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmdHZXR0ZXIoRXhlY1N0YXRlJiwgSlNU
ZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialVzdnN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVy
biBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpVc3ZzdHJpbmdB
dHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZ0dldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgInVz
dnN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nIik7CiB9CiAKLXN0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RPYmpVc3ZzdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmlu
Z0dldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqVXN2c3RyaW5n
QXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmdHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNU
ZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIGF1dG8m
IGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0
cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC51c3ZzdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0
eVN0cmluZygpKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAg
SlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIGltcGwudXN2c3RyaW5n
QXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakltcGxlbWVudGF0aW9uRW51bUF0dHJH
ZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7Citz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqSW1wbGVtZW50YXRpb25FbnVtQXR0ckdldHRl
cihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAogRW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqSW1wbGVtZW50YXRpb25FbnVtQXR0cihFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1
cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqSW1wbGVtZW50
YXRpb25FbnVtQXR0ckdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgImltcGxlbWVudGF0aW9uRW51
bUF0dHIiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakltcGxlbWVudGF0
aW9uRW51bUF0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9i
akltcGxlbWVudGF0aW9uRW51bUF0dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2Jq
JiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dp
dGhDYWNoZShzdGF0ZSwgaW1wbC5pbXBsZW1lbnRhdGlvbkVudW1BdHRyKCkpOworICAgIGF1dG8m
IGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3Ry
aW5nV2l0aENhY2hlKCZzdGF0ZSwgaW1wbC5pbXBsZW1lbnRhdGlvbkVudW1BdHRyKCkpOwogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpYTUxP
YmpBdHRyR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpOworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialhNTE9iakF0dHJHZXR0ZXIoRXhl
Y1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKIEVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9ialhNTE9iakF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8
SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9ialhNTE9iakF0dHJHZXR0ZXI+KHN0YXRlLCB0
aGlzVmFsdWUsICJYTUxPYmpBdHRyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RPYmpYTUxPYmpBdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09i
amVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RPYmpYTUxPYmpBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09i
amVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09i
amVjdC0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgdGhpc09i
amVjdC0+Z2xvYmFsT2JqZWN0KCksIGltcGwueG1sT2JqQXR0cigpKTsKKyAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKCZzdGF0
ZSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgaW1wbC54bWxPYmpBdHRyKCkpOwogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDcmVhdGVH
ZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7Citz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ3JlYXRlR2V0dGVyKEV4ZWNTdGF0ZSYsIEpT
VGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpDcmVhdGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0
cmlidXRlPGpzVGVzdE9iakNyZWF0ZUdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgImNyZWF0ZSIp
OwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ3JlYXRlR2V0dGVyKEV4ZWNT
dGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDcmVhdGVHZXR0ZXIoRXhlY1N0YXRl
JiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQog
ewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CisgICAgYXV0byYgaW1w
bCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNCb29sZWFu
KGltcGwuaXNDcmVhdGUoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlKiwg
SlNUZXN0T2JqKiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CitzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RP
YmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
UmVmbGVjdGVkU3RyaW5nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RP
Ymo+OjphdHRyaWJ1dGU8anNUZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0ckdldHRlcj4oc3RhdGUs
IHRoaXNWYWx1ZSwgInJlZmxlY3RlZFN0cmluZ0F0dHIiKTsKIH0KIAotc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0
ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0dHJHZXR0ZXIoRXhlY1N0
YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3Rh
dGUpOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1
ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5hdHRyaWJ1dGVXaXRob3V0
U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkc3RyaW5nYXR0ckF0
dHIpKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgSlNWYWx1
ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIGltcGwuYXR0cmlidXRlV2l0aG91
dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZHN0cmluZ2F0dHJB
dHRyKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdE9ialJlZmxlY3RlZFVTVlN0cmluZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2Jq
KiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
T2JqUmVmbGVjdGVkVVNWU3RyaW5nQXR0ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVmbGVj
dGVkVVNWU3RyaW5nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+
OjphdHRyaWJ1dGU8anNUZXN0T2JqUmVmbGVjdGVkVVNWU3RyaW5nQXR0ckdldHRlcj4oc3RhdGUs
IHRoaXNWYWx1ZSwgInJlZmxlY3RlZFVTVlN0cmluZ0F0dHIiKTsKIH0KIAotc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFVTVlN0cmluZ0F0dHJHZXR0ZXIoRXhlY1N0YXRl
KiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQor
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFVTVlN0cmluZ0F0dHJHZXR0
ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7Ci0g
ICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5hdHRyaWJ1
dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkdXN2
c3RyaW5nYXR0ckF0dHIpKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7
CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIGltcGwuYXR0
cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3Rl
ZHVzdnN0cmluZ2F0dHJBdHRyKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZEludGVncmFsQXR0ckdldHRlcihFeGVjU3Rh
dGUqLCBKU1Rlc3RPYmoqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKK3N0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRJbnRlZ3JhbEF0dHJHZXR0ZXIoRXhlY1N0YXRlJiwg
SlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9ialJlZmxlY3RlZEludGVncmFsQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxl
cjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqUmVmbGVjdGVkSW50ZWdyYWxBdHRyR2V0
dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAicmVmbGVjdGVkSW50ZWdyYWxBdHRyIik7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRJbnRlZ3JhbEF0dHJHZXR0ZXIo
RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZEludGVncmFs
QXR0ckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBw
ZWQoKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgSlNWYWx1
ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLmdldEludGVncmFsQXR0cmlidXRlKFdlYkNvcmU6OkhU
TUxOYW1lczo6cmVmbGVjdGVkaW50ZWdyYWxhdHRyQXR0cikpOwogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRVbnNpZ25lZElu
dGVncmFsQXR0ckdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKTsKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRVbnNpZ25l
ZEludGVncmFsQXR0ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkVW5zaWduZWRJ
bnRlZ3JhbEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0
cmlidXRlPGpzVGVzdE9ialJlZmxlY3RlZFVuc2lnbmVkSW50ZWdyYWxBdHRyR2V0dGVyPihzdGF0
ZSwgdGhpc1ZhbHVlLCAicmVmbGVjdGVkVW5zaWduZWRJbnRlZ3JhbEF0dHIiKTsKIH0KIAotc3Rh
dGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFVuc2lnbmVkSW50ZWdyYWxBdHRy
R2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCwgVGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRV
bnNpZ25lZEludGVncmFsQXR0ckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRo
aXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgYXV0byYgaW1wbCA9IHRo
aXNPYmplY3QtPndyYXBwZWQoKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVk
KCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihzdGQ6Om1heCgwLCBpbXBsLmdldElu
dGVncmFsQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkdW5zaWduZWRpbnRl
Z3JhbGF0dHJBdHRyKSkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRCb29sZWFuQXR0ckdldHRlcihFeGVjU3RhdGUqLCBK
U1Rlc3RPYmoqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKK3N0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRCb29sZWFuQXR0ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RP
YmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
UmVmbGVjdGVkQm9vbGVhbkF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0
T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9ialJlZmxlY3RlZEJvb2xlYW5BdHRyR2V0dGVyPihzdGF0
ZSwgdGhpc1ZhbHVlLCAicmVmbGVjdGVkQm9vbGVhbkF0dHIiKTsKIH0KIAotc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZEJvb2xlYW5BdHRyR2V0dGVyKEV4ZWNTdGF0ZSog
c3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRCb29sZWFuQXR0ckdldHRlcihF
eGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKKyAgICBh
dXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBq
c0Jvb2xlYW4oaW1wbC5oYXNBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6
OkhUTUxOYW1lczo6cmVmbGVjdGVkYm9vbGVhbmF0dHJBdHRyKSk7CiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFVSTEF0dHJH
ZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7Citz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkVVJMQXR0ckdldHRlcihFeGVj
U3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqUmVmbGVjdGVkVVJMQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0Nh
bGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqUmVmbGVjdGVkVVJMQXR0ckdldHRl
cj4oc3RhdGUsIHRoaXNWYWx1ZSwgInJlZmxlY3RlZFVSTEF0dHIiKTsKIH0KIAotc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFVSTEF0dHJHZXR0ZXIoRXhlY1N0YXRlKiBz
dGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3Rh
dGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFVSTEF0dHJHZXR0ZXIoRXhlY1N0
YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3Rh
dGUpOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1
ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5nZXRVUkxBdHRyaWJ1dGUo
V2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWR1cmxhdHRyQXR0cikpOworICAgIGF1dG8mIGlt
cGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5n
V2l0aENhY2hlKCZzdGF0ZSwgaW1wbC5nZXRVUkxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVz
OjpyZWZsZWN0ZWR1cmxhdHRyQXR0cikpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRVU1ZVUkxBdHRyR2V0dGVyKEV4ZWNT
dGF0ZSosIEpTVGVzdE9iaiosIFRocm93U2NvcGUmIHRocm93U2NvcGUpOworc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFVTVlVSTEF0dHJHZXR0ZXIoRXhlY1N0YXRlJiwg
SlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9ialJlZmxlY3RlZFVTVlVSTEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8
SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9ialJlZmxlY3RlZFVTVlVSTEF0dHJHZXR0ZXI+
KHN0YXRlLCB0aGlzVmFsdWUsICJyZWZsZWN0ZWRVU1ZVUkxBdHRyIik7CiB9CiAKLXN0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRVU1ZVUkxBdHRyR2V0dGVyKEV4ZWNTdGF0
ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
K3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRVU1ZVUkxBdHRyR2V0dGVy
KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwotICAg
IEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwuZ2V0VVJMQXR0
cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkdXN2dXJsYXR0ckF0dHIpKTsKKyAg
ICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQg
PSBqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIGltcGwuZ2V0VVJMQXR0cmlidXRlKFdlYkNvcmU6
OkhUTUxOYW1lczo6cmVmbGVjdGVkdXN2dXJsYXR0ckF0dHIpKTsKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0
ckdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsK
K3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRTdHJpbmdBdHRyR2V0dGVy
KEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCiBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRTdHJpbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBC
aW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpSZWZsZWN0ZWRTdHJp
bmdBdHRyR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAicmVmbGVjdGVkU3RyaW5nQXR0ciIpOwog
fQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0ckdl
dHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkU3Ry
aW5nQXR0ckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwog
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndy
YXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBp
bXBsLmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpj
dXN0b21Db250ZW50U3RyaW5nQXR0ckF0dHIpKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVj
dC53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZSgmc3Rh
dGUsIGltcGwuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFt
ZXM6OmN1c3RvbUNvbnRlbnRTdHJpbmdBdHRyQXR0cikpOwogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21JbnRlZ3Jh
bEF0dHJHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSk7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tSW50ZWdy
YWxBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21JbnRlZ3JhbEF0
dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5h
bWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpz
VGVzdE9ialJlZmxlY3RlZEN1c3RvbUludGVncmFsQXR0ckdldHRlcj4oc3RhdGUsIHRoaXNWYWx1
ZSwgInJlZmxlY3RlZEN1c3RvbUludGVncmFsQXR0ciIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWxBdHRyR2V0dGVyKEV4ZWNTdGF0
ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
K3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21JbnRlZ3JhbEF0
dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVk
KCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIEpTVmFsdWUg
cmVzdWx0ID0ganNOdW1iZXIoaW1wbC5nZXRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1M
TmFtZXM6OmN1c3RvbUNvbnRlbnRJbnRlZ3JhbEF0dHJBdHRyKSk7CiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZEN1c3RvbUJv
b2xlYW5BdHRyR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIFRocm93U2NvcGUmIHRocm93
U2NvcGUpOworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZEN1c3RvbUJv
b2xlYW5BdHRyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21Cb29sZWFu
QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5
TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8
anNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tQm9vbGVhbkF0dHJHZXR0ZXI+KHN0YXRlLCB0aGlzVmFs
dWUsICJyZWZsZWN0ZWRDdXN0b21Cb29sZWFuQXR0ciIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tQm9vbGVhbkF0dHJHZXR0ZXIoRXhlY1N0YXRl
KiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQor
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZEN1c3RvbUJvb2xlYW5BdHRy
R2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5V
U0VEX1BBUkFNKHN0YXRlKTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgp
OworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJl
c3VsdCA9IGpzQm9vbGVhbihpbXBsLmhhc0F0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24o
V2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50Qm9vbGVhbkF0dHJBdHRyKSk7CiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlZmxl
Y3RlZEN1c3RvbVVSTEF0dHJHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgVGhyb3dTY29w
ZSYgdGhyb3dTY29wZSk7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVk
Q3VzdG9tVVJMQXR0ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tVVJM
QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5
TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8
anNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tVVJMQXR0ckdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwg
InJlZmxlY3RlZEN1c3RvbVVSTEF0dHIiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdE9ialJlZmxlY3RlZEN1c3RvbVVSTEF0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNU
ZXN0T2JqKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZEN1c3RvbVVSTEF0dHJHZXR0ZXIoRXhlY1N0YXRl
JiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQog
ewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSBy
ZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5nZXRVUkxBdHRyaWJ1dGUoV2Vi
Q29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50VVJMQXR0ckF0dHIpKTsKKyAgICBhdXRvJiBp
bXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmlu
Z1dpdGhDYWNoZSgmc3RhdGUsIGltcGwuZ2V0VVJMQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1l
czo6Y3VzdG9tQ29udGVudFVSTEF0dHJBdHRyKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAog
I2lmIEVOQUJMRShURVNUX0ZFQVRVUkUpCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2Jq
RW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpF
bmFibGVkQXRSdW50aW1lQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpFbmFibGVk
QXRSdW50aW1lQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9i
aj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpFbmFibGVkQXRSdW50aW1lQXR0cmlidXRlR2V0dGVyPihz
dGF0ZSwgdGhpc1ZhbHVlLCAiZW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZSIpOwogfQogCi1zdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqRW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZUdldHRl
cihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqRW5hYmxlZEF0UnVudGlt
ZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3Qs
IFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qt
PndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRl
LCBpbXBsLmVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGUoKSk7CisgICAgYXV0byYgaW1wbCA9IHRo
aXNPYmplY3Qud3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2Fj
aGUoJnN0YXRlLCBpbXBsLmVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGUoKSk7CiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAogI2VuZGlmCiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpU
eXBlZEFycmF5QXR0ckdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKTsKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpUeXBlZEFycmF5QXR0
ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsK
IAogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqVHlwZWRBcnJheUF0dHIoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJu
IEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9ialR5cGVkQXJyYXlB
dHRyR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAidHlwZWRBcnJheUF0dHIiKTsKIH0KIAotc3Rh
dGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialR5cGVkQXJyYXlBdHRyR2V0dGVyKEV4ZWNTdGF0
ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
K3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpUeXBlZEFycmF5QXR0ckdldHRlcihFeGVj
U3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShz
dGF0ZSk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKLSAgICBKU1Zh
bHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpLCBpbXBs
LnR5cGVkQXJyYXlBdHRyKCkpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQo
KTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoJnN0YXRlLCB0aGlzT2JqZWN0Lmdsb2JhbE9i
amVjdCgpLCBpbXBsLnR5cGVkQXJyYXlBdHRyKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
LXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpBdHRyaWJ1dGVXaXRoR2V0dGVyRXhjZXB0
aW9uR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIFRocm93U2NvcGUmIHRocm93U2NvcGUp
Oworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakF0dHJpYnV0ZVdpdGhHZXR0ZXJFeGNl
cHRpb25HZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakF0dHJpYnV0ZVdpdGhHZXR0ZXJFeGNlcHRp
b24oRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5h
bWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpz
VGVzdE9iakF0dHJpYnV0ZVdpdGhHZXR0ZXJFeGNlcHRpb25HZXR0ZXI+KHN0YXRlLCB0aGlzVmFs
dWUsICJhdHRyaWJ1dGVXaXRoR2V0dGVyRXhjZXB0aW9uIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3RPYmpBdHRyaWJ1dGVXaXRoR2V0dGVyRXhjZXB0aW9uR2V0dGVyKEV4ZWNT
dGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpBdHRyaWJ1dGVXaXRoR2V0dGVyRXhj
ZXB0aW9uR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3Jh
cHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KU051bWJlcigqc3RhdGUsIHRocm93U2Nv
cGUsIGltcGwuYXR0cmlidXRlV2l0aEdldHRlckV4Y2VwdGlvbigpKTsKKyAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTTnVtYmVy
KHN0YXRlLCB0aHJvd1Njb3BlLCBpbXBsLmF0dHJpYnV0ZVdpdGhHZXR0ZXJFeGNlcHRpb24oKSk7
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9i
akF0dHJpYnV0ZVdpdGhHZXR0ZXJMZWdhY3lFeGNlcHRpb25HZXR0ZXIoRXhlY1N0YXRlKiwgSlNU
ZXN0T2JqKiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0T2JqQXR0cmlidXRlV2l0aEdldHRlckxlZ2FjeUV4Y2VwdGlvbkdldHRlcihFeGVjU3Rh
dGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqQXR0cmlidXRlV2l0aEdldHRlckxlZ2FjeUV4Y2VwdGlvbihFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBy
ZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqQXR0cmli
dXRlV2l0aEdldHRlckxlZ2FjeUV4Y2VwdGlvbkdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgImF0
dHJpYnV0ZVdpdGhHZXR0ZXJMZWdhY3lFeGNlcHRpb24iKTsKIH0KIAotc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdE9iakF0dHJpYnV0ZVdpdGhHZXR0ZXJMZWdhY3lFeGNlcHRpb25HZXR0ZXIo
RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakF0dHJpYnV0ZVdpdGhHZXR0
ZXJMZWdhY3lFeGNlcHRpb25HZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlz
T2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMg
PSAwOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CisgICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1i
ZXIoaW1wbC5hdHRyaWJ1dGVXaXRoR2V0dGVyTGVnYWN5RXhjZXB0aW9uKGVjKSk7Ci0gICAgc2V0
RE9NRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCBlYyk7CisgICAgc2V0RE9NRXhjZXB0aW9u
KCZzdGF0ZSwgdGhyb3dTY29wZSwgZWMpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpBdHRyaWJ1dGVXaXRoU2V0dGVyRXhjZXB0aW9uR2V0
dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIFRocm93U2NvcGUmIHRocm93U2NvcGUpOworc3Rh
dGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakF0dHJpYnV0ZVdpdGhTZXR0ZXJFeGNlcHRpb25H
ZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAK
IEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakF0dHJpYnV0ZVdpdGhTZXR0ZXJFeGNlcHRpb24oRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7
CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9i
akF0dHJpYnV0ZVdpdGhTZXR0ZXJFeGNlcHRpb25HZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJh
dHRyaWJ1dGVXaXRoU2V0dGVyRXhjZXB0aW9uIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RPYmpBdHRyaWJ1dGVXaXRoU2V0dGVyRXhjZXB0aW9uR2V0dGVyKEV4ZWNTdGF0ZSog
c3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpBdHRyaWJ1dGVXaXRoU2V0dGVyRXhjZXB0aW9u
R2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5V
U0VEX1BBUkFNKHN0YXRlKTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgp
OworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJl
c3VsdCA9IGpzTnVtYmVyKGltcGwuYXR0cmlidXRlV2l0aFNldHRlckV4Y2VwdGlvbigpKTsKICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQXR0
cmlidXRlV2l0aFNldHRlckxlZ2FjeUV4Y2VwdGlvbkdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RP
YmoqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RPYmpBdHRyaWJ1dGVXaXRoU2V0dGVyTGVnYWN5RXhjZXB0aW9uR2V0dGVyKEV4ZWNTdGF0ZSYs
IEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpBdHRyaWJ1dGVXaXRoU2V0dGVyTGVnYWN5RXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVy
biBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpBdHRyaWJ1dGVX
aXRoU2V0dGVyTGVnYWN5RXhjZXB0aW9uR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAiYXR0cmli
dXRlV2l0aFNldHRlckxlZ2FjeUV4Y2VwdGlvbiIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0T2JqQXR0cmlidXRlV2l0aFNldHRlckxlZ2FjeUV4Y2VwdGlvbkdldHRlcihFeGVj
U3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQXR0cmlidXRlV2l0aFNldHRlckxl
Z2FjeUV4Y2VwdGlvbkdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmpl
Y3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmpl
Y3QtPndyYXBwZWQoKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAg
ICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLmF0dHJpYnV0ZVdpdGhTZXR0ZXJMZWdh
Y3lFeGNlcHRpb24oKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdE9ialN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uR2V0dGVyKEV4ZWNT
dGF0ZSosIEpTVGVzdE9iaiosIFRocm93U2NvcGUmIHRocm93U2NvcGUpOworc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uR2V0dGVyKEV4
ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCiBFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBy
ZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqU3RyaW5n
QXR0cldpdGhHZXR0ZXJFeGNlcHRpb25HZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJzdHJpbmdB
dHRyV2l0aEdldHRlckV4Y2VwdGlvbiIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0T2JqU3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb25HZXR0ZXIoRXhlY1N0YXRlKiBzdGF0
ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uR2V0
dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdX
aXRoQ2FjaGUoc3RhdGUsIGltcGwuc3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oZWMpKTsK
LSAgICBzZXRET01FeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIGVjKTsKKyAgICBhdXRvJiBp
bXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmlu
Z1dpdGhDYWNoZSgmc3RhdGUsIGltcGwuc3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oZWMp
KTsKKyAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCB0aHJvd1Njb3BlLCBlYyk7CiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ0F0
dHJXaXRoU2V0dGVyRXhjZXB0aW9uR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIFRocm93
U2NvcGUmIHRocm93U2NvcGUpOworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialN0cmlu
Z0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdB
dHRyV2l0aFNldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rl
c3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqU3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb25H
ZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJzdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbiIp
OwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqU3RyaW5nQXR0cldpdGhTZXR0
ZXJFeGNlcHRpb25HZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9i
alN0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpT
VGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNT
dHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwuc3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24o
KSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIEpTVmFsdWUg
cmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCBpbXBsLnN0cmluZ0F0dHJXaXRoU2V0
dGVyRXhjZXB0aW9uKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3RPYmpDdXN0b21BdHRyR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaios
IFRocm93U2NvcGUmIHRocm93U2NvcGUpOworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9i
akN1c3RvbUF0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakN1c3RvbUF0dHIoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAg
cmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9iakN1c3Rv
bUF0dHJHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJjdXN0b21BdHRyIik7CiB9CiAKLXN0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDdXN0b21BdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3Rh
dGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDdXN0b21BdHRyR2V0dGVyKEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAg
ICByZXR1cm4gdGhpc09iamVjdC0+Y3VzdG9tQXR0cigqc3RhdGUpOworICAgIHJldHVybiB0aGlz
T2JqZWN0LmN1c3RvbUF0dHIoc3RhdGUpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0T2JqT25mb29HZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSk7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqT25mb29HZXR0ZXIoRXhl
Y1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKIEVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9iak9uZm9vKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVz
dE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpPbmZvb0dldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwg
Im9uZm9vIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpPbmZvb0dldHRl
cihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqT25mb29HZXR0ZXIoRXhl
Y1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0o
c3RhdGUpOwotICAgIHJldHVybiBldmVudEhhbmRsZXJBdHRyaWJ1dGUodGhpc09iamVjdC0+d3Jh
cHBlZCgpLCBldmVudE5hbWVzKCkuZm9vRXZlbnQpOworICAgIHJldHVybiBldmVudEhhbmRsZXJB
dHRyaWJ1dGUodGhpc09iamVjdC53cmFwcGVkKCksIGV2ZW50TmFtZXMoKS5mb29FdmVudCk7CiB9
CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpPbndlYmtpdGZvb0dldHRlcihFeGVj
U3RhdGUqLCBKU1Rlc3RPYmoqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKK3N0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RPYmpPbndlYmtpdGZvb0dldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RP
YmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
T253ZWJraXRmb28oRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0
cmlidXRlPGpzVGVzdE9iak9ud2Via2l0Zm9vR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAib253
ZWJraXRmb28iKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iak9ud2Via2l0
Zm9vR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpPbndlYmtp
dGZvb0dldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgcmV0dXJuIGV2ZW50SGFuZGxlckF0dHJpYnV0ZSh0
aGlzT2JqZWN0LT53cmFwcGVkKCksIGV2ZW50TmFtZXMoKS5mb29FdmVudCk7CisgICAgcmV0dXJu
IGV2ZW50SGFuZGxlckF0dHJpYnV0ZSh0aGlzT2JqZWN0LndyYXBwZWQoKSwgZXZlbnROYW1lcygp
LmZvb0V2ZW50KTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3Jp
cHRTdGF0ZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKTsKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0
U3RhdGVBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYg
dGhyb3dTY29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRTdGF0ZUF0
dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1
dGU8anNUZXN0T2JqV2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlR2V0dGVyPihzdGF0ZSwgdGhpc1Zh
bHVlLCAid2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlKiBz
dGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3Rh
dGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZUdldHRl
cihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKLSAg
ICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwud2l0aFNjcmlwdFN0YXRlQXR0cmlidXRl
KCpzdGF0ZSkpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBK
U1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwud2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlKHN0
YXRlKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdE9ialdpdGhDYWxsV2l0aEFuZFNldHRlckNhbGxXaXRoQXR0cmlidXRlR2V0dGVyKEV4ZWNT
dGF0ZSosIEpTVGVzdE9iaiosIFRocm93U2NvcGUmIHRocm93U2NvcGUpOworc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdE9ialdpdGhDYWxsV2l0aEFuZFNldHRlckNhbGxXaXRoQXR0cmlidXRl
R2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwog
CiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoQ2FsbFdpdGhBbmRTZXR0ZXJDYWxsV2l0aEF0
dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1
dGU8anNUZXN0T2JqV2l0aENhbGxXaXRoQW5kU2V0dGVyQ2FsbFdpdGhBdHRyaWJ1dGVHZXR0ZXI+
KHN0YXRlLCB0aGlzVmFsdWUsICJ3aXRoQ2FsbFdpdGhBbmRTZXR0ZXJDYWxsV2l0aEF0dHJpYnV0
ZSIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqV2l0aENhbGxXaXRoQW5k
U2V0dGVyQ2FsbFdpdGhBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2Jq
KiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdE9ialdpdGhDYWxsV2l0aEFuZFNldHRlckNhbGxXaXRoQXR0cmlidXRlR2V0dGVy
KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwotICAg
IEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC53aXRoQ2FsbFdpdGhBbmRTZXR0ZXJDYWxs
V2l0aEF0dHJpYnV0ZSgqc3RhdGUpKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFw
cGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLndpdGhDYWxsV2l0aEFu
ZFNldHRlckNhbGxXaXRoQXR0cmlidXRlKHN0YXRlKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250
ZXh0QXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpOworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVj
dXRpb25Db250ZXh0QXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxK
U1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRB
dHRyaWJ1dGVHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dEF0dHJpYnV0ZSIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqV2l0
aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwg
SlNUZXN0T2JqKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRl
R2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5V
U0VEX1BBUkFNKHN0YXRlKTsKLSAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFs
T2JqZWN0Kj4oc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKTsKKyAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4o
c3RhdGUubGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwog
ICAgIGlmICghY29udGV4dCkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgYXV0
byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRv
SlMoc3RhdGUsIHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpLCBpbXBsLndpdGhTY3JpcHRFeGVj
dXRpb25Db250ZXh0QXR0cmlidXRlKCpjb250ZXh0KSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNP
YmplY3Qud3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUygmc3RhdGUsIHRoaXNP
YmplY3QuZ2xvYmFsT2JqZWN0KCksIGltcGwud2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRy
aWJ1dGUoKmNvbnRleHQpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzR2V0dGVyKEV4
ZWNTdGF0ZSosIEpTVGVzdE9iaiosIFRocm93U2NvcGUmIHRocm93U2NvcGUpOworc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlc0dldHRl
cihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAogRW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzKEV4ZWNT
dGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewog
ICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpX
aXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXNHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJ3
aXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdE9ialdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlc0dldHRlcihFeGVjU3Rh
dGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdFN0YXRlQXR0cmlidXRl
UmFpc2VzR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBh
dXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0g
dG9KUyhzdGF0ZSwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCksIGltcGwud2l0aFNjcmlwdFN0
YXRlQXR0cmlidXRlUmFpc2VzKCpzdGF0ZSwgZWMpKTsKLSAgICBzZXRET01FeGNlcHRpb24oc3Rh
dGUsIHRocm93U2NvcGUsIGVjKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVk
KCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKCZzdGF0ZSwgdGhpc09iamVjdC5nbG9iYWxP
YmplY3QoKSwgaW1wbC53aXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMoc3RhdGUsIGVjKSk7
CisgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgdGhyb3dTY29wZSwgZWMpOwogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJhaXNlc0dldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RP
YmoqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJhaXNlc0dldHRlcihFeGVj
U3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVSYWlzZXMo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
CiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVz
dE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlUmFpc2VzR2V0dGVyPihzdGF0
ZSwgdGhpc1ZhbHVlLCAid2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVSYWlzZXMi
KTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRp
b25Db250ZXh0QXR0cmlidXRlUmFpc2VzR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9i
aiogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJhaXNlc0dl
dHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgYXV0byogY29u
dGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgYXV0byogY29udGV4dCA9IGpz
Q2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBpZiAoIWNvbnRleHQpCiAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7
Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmpl
Y3QoKSwgaW1wbC53aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJhaXNlcygqY29u
dGV4dCwgZWMpKTsKLSAgICBzZXRET01FeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIGVjKTsK
KyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1
bHQgPSB0b0pTKCZzdGF0ZSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgaW1wbC53aXRoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJhaXNlcygqY29udGV4dCwgZWMpKTsKKyAgICBz
ZXRET01FeGNlcHRpb24oJnN0YXRlLCB0aHJvd1Njb3BlLCBlYyk7CiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRp
b25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0
T2JqKiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZUdl
dHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAog
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3Jp
cHRTdGF0ZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+
OjphdHRyaWJ1dGU8anNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRT
dGF0ZUF0dHJpYnV0ZUdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgIndpdGhTY3JpcHRFeGVjdXRp
b25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGUiKTsKIH0KIAotc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVB
dHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0LCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialdp
dGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVHZXR0ZXIoRXhl
Y1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0o
c3RhdGUpOwotICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihz
dGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwor
ICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgaWYgKCFj
b250ZXh0KQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICBhdXRvJiBpbXBsID0g
dGhpc09iamVjdC0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwg
dGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCksIGltcGwud2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZSgqc3RhdGUsICpjb250ZXh0KSk7CisgICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUygm
c3RhdGUsIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIGltcGwud2l0aFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZShzdGF0ZSwgKmNvbnRleHQpKTsKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqV2l0aFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlc0dldHRlcihF
eGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKK3N0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlw
dFN0YXRlQXR0cmlidXRlUmFpc2VzR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJl
dHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpXaXRoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzR2V0dGVyPihz
dGF0ZSwgdGhpc1ZhbHVlLCAid2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0
ZUF0dHJpYnV0ZVJhaXNlcyIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2Jq
V2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlc0dl
dHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlc0dldHRlcihFeGVjU3Rh
dGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
CiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgYXV0byogY29udGV4dCA9IGpzQ2Fz
dDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUds
b2JhbE9iamVjdCo+KHN0YXRlLmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKTsKICAgICBpZiAoIWNvbnRleHQpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1
ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKSwgaW1wbC53
aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzKCpz
dGF0ZSwgKmNvbnRleHQsIGVjKSk7Ci0gICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Nj
b3BlLCBlYyk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIEpT
VmFsdWUgcmVzdWx0ID0gdG9KUygmc3RhdGUsIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIGlt
cGwud2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNl
cyhzdGF0ZSwgKmNvbnRleHQsIGVjKSk7CisgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgdGhy
b3dTY29wZSwgZWMpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlV2l0
aFNwYWNlc0F0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKTsKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNlc0F0dHJpYnV0ZUdldHRlcihF
eGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0
ZVdpdGhTcGFjZXNBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0
T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2Ny
aXB0U3RhdGVXaXRoU3BhY2VzQXR0cmlidXRlR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAid2l0
aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1dGUi
KTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRp
b25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0
ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
K3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNlc0F0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmIHN0YXRl
LCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAg
YXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgYXV0byogY29u
dGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLmxleGljYWxHbG9iYWxPYmpl
Y3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBpZiAoIWNvbnRleHQpCiAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53
cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCB0aGlzT2JqZWN0LT5n
bG9iYWxPYmplY3QoKSwgaW1wbC53aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0
YXRlV2l0aFNwYWNlc0F0dHJpYnV0ZSgqc3RhdGUsICpjb250ZXh0KSk7CisgICAgYXV0byYgaW1w
bCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUygmc3Rh
dGUsIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIGltcGwud2l0aFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1dGUoc3RhdGUsICpjb250ZXh0KSk7
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9i
aldpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRl
KiwgSlNUZXN0T2JqKiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CitzdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdEFyZ3VtZW50c0FuZENhbGxTdGFja0F0dHJpYnV0ZUdl
dHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAog
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdEFyZ3VtZW50c0FuZENhbGxTdGFja0F0
dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1
dGU8anNUZXN0T2JqV2l0aFNjcmlwdEFyZ3VtZW50c0FuZENhbGxTdGFja0F0dHJpYnV0ZUdldHRl
cj4oc3RhdGUsIHRoaXNWYWx1ZSwgIndpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tBdHRy
aWJ1dGUiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRB
cmd1bWVudHNBbmRDYWxsU3RhY2tBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNU
ZXN0T2JqKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tBdHRyaWJ1
dGVHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVk
KCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCB0aGlzT2JqZWN0LT5nbG9iYWxP
YmplY3QoKSwgaW1wbC53aXRoU2NyaXB0QXJndW1lbnRzQW5kQ2FsbFN0YWNrQXR0cmlidXRlKCkp
OworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJl
c3VsdCA9IHRvSlMoJnN0YXRlLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCBpbXBsLndpdGhT
Y3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tBdHRyaWJ1dGUoKSk7CiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAogI2lmIEVOQUJMRShDb25kaXRpb24xKQotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdE9iakNvbmRpdGlvbmFsQXR0cjFHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSk7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ29u
ZGl0aW9uYWxBdHRyMUdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMShF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkK
IHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0
T2JqQ29uZGl0aW9uYWxBdHRyMUdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgImNvbmRpdGlvbmFs
QXR0cjEiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFs
QXR0cjFHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0LCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNvbmRp
dGlvbmFsQXR0cjFHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LT53cmFwcGVkKCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAg
IEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5jb25kaXRpb25hbEF0dHIxKCkpOwogICAg
IHJldHVybiByZXN1bHQ7CiB9CkBAIC0yNjc2LDE4ICsyNjc4LDE4IEBAIHN0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHIxR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUs
IEpTVGVzdE9iCiAjZW5kaWYKIAogI2lmIEVOQUJMRShDb25kaXRpb24xKSAmJiBFTkFCTEUoQ29u
ZGl0aW9uMikKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHIy
R2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwor
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjJHZXR0ZXIoRXhl
Y1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKIEVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdD
YWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjJHZXR0
ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJjb25kaXRpb25hbEF0dHIyIik7CiB9CiAKLXN0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHIyR2V0dGVyKEV4ZWNTdGF0ZSog
c3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHIyR2V0dGVyKEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOworICAgIGF1dG8m
IGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVt
YmVyKGltcGwuY29uZGl0aW9uYWxBdHRyMigpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAt
MjY5NSwxOCArMjY5NywxOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ29uZGl0
aW9uYWxBdHRyMkdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYgogI2VuZGlmCiAKICNp
ZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCi1zdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyM0dldHRlcihFeGVjU3RhdGUqLCBKU1Rl
c3RPYmoqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RPYmpDb25kaXRpb25hbEF0dHIzR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRp
b25hbEF0dHIzKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJp
YnV0ZTxqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHIzR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAi
Y29uZGl0aW9uYWxBdHRyMyIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2Jq
Q29uZGl0aW9uYWxBdHRyM0dldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNP
YmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0T2JqQ29uZGl0aW9uYWxBdHRyM0dldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmom
IHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgYXV0byYgaW1wbCA9
IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFw
cGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLmNvbmRpdGlvbmFsQXR0
cjMoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTI3MTQsNDYwICsyNzE2LDQ2MCBAQCBz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyM0dldHRlcihFeGVj
U3RhdGUqIHN0YXRlLCBKU1Rlc3RPYgogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMSkK
LXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHI0Q29uc3RydWN0
b3JHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7
CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNENvbnN0cnVj
dG9yR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
OwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHI0Q29uc3RydWN0b3Io
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
CiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVz
dE9iakNvbmRpdGlvbmFsQXR0cjRDb25zdHJ1Y3RvckdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwg
ImNvbmRpdGlvbmFsQXR0cjQiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9i
akNvbmRpdGlvbmFsQXR0cjRDb25zdHJ1Y3RvckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rl
c3RPYmoqIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNENvbnN0cnVjdG9yR2V0dGVyKEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKLSAgICByZXR1cm4gSlNUZXN0T2JqZWN0QTo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZt
KCksIHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpKTsKKyAgICByZXR1cm4gSlNUZXN0T2JqZWN0
QTo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUudm0oKSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7
CiB9CiAKICNlbmRpZgogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjEpICYmIEVOQUJMRShDb25kaXRp
b24yKQotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjVDb25z
dHJ1Y3RvckdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKTsKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHI1Q29u
c3RydWN0b3JHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjVDb25zdHJ1
Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5
TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8
anNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNUNvbnN0cnVjdG9yR2V0dGVyPihzdGF0ZSwgdGhpc1Zh
bHVlLCAiY29uZGl0aW9uYWxBdHRyNSIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0T2JqQ29uZGl0aW9uYWxBdHRyNUNvbnN0cnVjdG9yR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUs
IEpTVGVzdE9iaiogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHI1Q29uc3RydWN0b3JHZXR0ZXIo
RXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOwotICAgIHJldHVybiBKU1Rlc3RPYmplY3RCOjpnZXRDb25zdHJ1Y3RvcihzdGF0
ZS0+dm0oKSwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCkpOworICAgIHJldHVybiBKU1Rlc3RP
YmplY3RCOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS52bSgpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVj
dCgpKTsKIH0KIAogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENv
bmRpdGlvbjIpCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRy
NkNvbnN0cnVjdG9yR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpOworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0
cjZDb25zdHJ1Y3RvckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNkNv
bnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJp
YnV0ZTxqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHI2Q29uc3RydWN0b3JHZXR0ZXI+KHN0YXRlLCB0
aGlzVmFsdWUsICJjb25kaXRpb25hbEF0dHI2Iik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHI2Q29uc3RydWN0b3JHZXR0ZXIoRXhlY1N0YXRlKiBz
dGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3Rh
dGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjZDb25zdHJ1Y3Rvckdl
dHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7Ci0gICAgcmV0dXJuIEpTVGVzdE9iamVjdEM6OmdldENvbnN0cnVjdG9y
KHN0YXRlLT52bSgpLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKSk7CisgICAgcmV0dXJuIEpT
VGVzdE9iamVjdEM6OmdldENvbnN0cnVjdG9yKHN0YXRlLnZtKCksIHRoaXNPYmplY3QuZ2xvYmFs
T2JqZWN0KCkpOwogfQogCiAjZW5kaWYKIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9i
akNhY2hlZEF0dHJpYnV0ZTFHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgVGhyb3dTY29w
ZSYgdGhyb3dTY29wZSk7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ2FjaGVkQXR0
cmlidXRlMUdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ2FjaGVkQXR0cmlidXRlMShFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAg
ICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqQ2Fj
aGVkQXR0cmlidXRlMUdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgImNhY2hlZEF0dHJpYnV0ZTEi
KTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNhY2hlZEF0dHJpYnV0ZTFH
ZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNhY2hlZEF0dHJp
YnV0ZTFHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIGlmIChKU1ZhbHVlIGNhY2hlZFZhbHVlID0gdGhp
c09iamVjdC0+bV9jYWNoZWRBdHRyaWJ1dGUxLmdldCgpKQorICAgIGlmIChKU1ZhbHVlIGNhY2hl
ZFZhbHVlID0gdGhpc09iamVjdC5tX2NhY2hlZEF0dHJpYnV0ZTEuZ2V0KCkpCiAgICAgICAgIHJl
dHVybiBjYWNoZWRWYWx1ZTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgp
OworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJl
c3VsdCA9IGltcGwuY2FjaGVkQXR0cmlidXRlMSgpOwotICAgIHRoaXNPYmplY3QtPm1fY2FjaGVk
QXR0cmlidXRlMS5zZXQoc3RhdGUtPnZtKCksIHRoaXNPYmplY3QsIHJlc3VsdCk7CisgICAgdGhp
c09iamVjdC5tX2NhY2hlZEF0dHJpYnV0ZTEuc2V0KHN0YXRlLnZtKCksICZ0aGlzT2JqZWN0LCBy
ZXN1bHQpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RPYmpDYWNoZWRBdHRyaWJ1dGUyR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpOworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNh
Y2hlZEF0dHJpYnV0ZTJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYg
dGhyb3dTY29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNhY2hlZEF0dHJpYnV0ZTIo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
CiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVz
dE9iakNhY2hlZEF0dHJpYnV0ZTJHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJjYWNoZWRBdHRy
aWJ1dGUyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDYWNoZWRBdHRy
aWJ1dGUyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDYWNo
ZWRBdHRyaWJ1dGUyR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVj
dCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICBpZiAoSlNWYWx1ZSBjYWNoZWRWYWx1
ZSA9IHRoaXNPYmplY3QtPm1fY2FjaGVkQXR0cmlidXRlMi5nZXQoKSkKKyAgICBpZiAoSlNWYWx1
ZSBjYWNoZWRWYWx1ZSA9IHRoaXNPYmplY3QubV9jYWNoZWRBdHRyaWJ1dGUyLmdldCgpKQogICAg
ICAgICByZXR1cm4gY2FjaGVkVmFsdWU7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndy
YXBwZWQoKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgSlNW
YWx1ZSByZXN1bHQgPSBpbXBsLmNhY2hlZEF0dHJpYnV0ZTIoKTsKLSAgICB0aGlzT2JqZWN0LT5t
X2NhY2hlZEF0dHJpYnV0ZTIuc2V0KHN0YXRlLT52bSgpLCB0aGlzT2JqZWN0LCByZXN1bHQpOwor
ICAgIHRoaXNPYmplY3QubV9jYWNoZWRBdHRyaWJ1dGUyLnNldChzdGF0ZS52bSgpLCAmdGhpc09i
amVjdCwgcmVzdWx0KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0T2JqQW55QXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaios
IFRocm93U2NvcGUmIHRocm93U2NvcGUpOworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9i
akFueUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQW55QXR0cmlidXRlKEV4ZWNT
dGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewog
ICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpB
bnlBdHRyaWJ1dGVHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJhbnlBdHRyaWJ1dGUiKTsKIH0K
IAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakFueUF0dHJpYnV0ZUdldHRlcihFeGVj
U3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQW55QXR0cmlidXRlR2V0dGVyKEV4
ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFN
KHN0YXRlKTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOworICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGlt
cGwuYW55QXR0cmlidXRlKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdE9iakNvbnRlbnREb2N1bWVudEdldHRlcihFeGVjU3RhdGUqLCBKU1Rl
c3RPYmoqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RPYmpDb250ZW50RG9jdW1lbnRHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbnRlbnRE
b2N1bWVudChFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1
dGU8anNUZXN0T2JqQ29udGVudERvY3VtZW50R2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAiY29u
dGVudERvY3VtZW50Iik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDb250
ZW50RG9jdW1lbnRHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9i
akNvbnRlbnREb2N1bWVudEdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNP
YmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNP
YmplY3QtPndyYXBwZWQoKTsKLSAgICByZXR1cm4gc2hvdWxkQWxsb3dBY2Nlc3NUb05vZGUoc3Rh
dGUsIGltcGwuY29udGVudERvY3VtZW50KCkpID8gdG9KUyhzdGF0ZSwgdGhpc09iamVjdC0+Z2xv
YmFsT2JqZWN0KCksIGltcGwuY29udGVudERvY3VtZW50KCkpIDoganNOdWxsKCk7CisgICAgYXV0
byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIHJldHVybiBzaG91bGRBbGxvd0Fj
Y2Vzc1RvTm9kZSgmc3RhdGUsIGltcGwuY29udGVudERvY3VtZW50KCkpID8gdG9KUygmc3RhdGUs
IHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIGltcGwuY29udGVudERvY3VtZW50KCkpIDoganNO
dWxsKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpNdXRhYmxlUG9pbnRH
ZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7Citz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqTXV0YWJsZVBvaW50R2V0dGVyKEV4ZWNTdGF0
ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpNdXRhYmxlUG9pbnQoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNU
ZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9iak11dGFibGVQb2ludEdldHRlcj4oc3RhdGUsIHRo
aXNWYWx1ZSwgIm11dGFibGVQb2ludCIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0T2JqTXV0YWJsZVBvaW50R2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhp
c09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RPYmpNdXRhYmxlUG9pbnRHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0
aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIGF1dG8mIGltcGwgPSB0
aGlzT2JqZWN0LT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCB0
aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKSwgU1ZHU3RhdGljUHJvcGVydHlUZWFyT2ZmPFRlc3RP
YmosIFNWR1BvaW50Pjo6Y3JlYXRlKGltcGwsIGltcGwubXV0YWJsZVBvaW50KCksICZUZXN0T2Jq
Ojp1cGRhdGVNdXRhYmxlUG9pbnQpKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFw
cGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKCZzdGF0ZSwgdGhpc09iamVjdC5nbG9i
YWxPYmplY3QoKSwgU1ZHU3RhdGljUHJvcGVydHlUZWFyT2ZmPFRlc3RPYmosIFNWR1BvaW50Pjo6
Y3JlYXRlKGltcGwsIGltcGwubXV0YWJsZVBvaW50KCksICZUZXN0T2JqOjp1cGRhdGVNdXRhYmxl
UG9pbnQpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0T2JqSW1tdXRhYmxlUG9pbnRHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSk7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqSW1t
dXRhYmxlUG9pbnRHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakltbXV0YWJsZVBvaW50KEV4ZWNT
dGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewog
ICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpJ
bW11dGFibGVQb2ludEdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgImltbXV0YWJsZVBvaW50Iik7
CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpJbW11dGFibGVQb2ludEdldHRl
cihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqSW1tdXRhYmxlUG9pbnRH
ZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7
Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmpl
Y3QoKSwgU1ZHUHJvcGVydHlUZWFyT2ZmPFNWR1BvaW50Pjo6Y3JlYXRlKGltcGwuaW1tdXRhYmxl
UG9pbnQoKSkpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBK
U1ZhbHVlIHJlc3VsdCA9IHRvSlMoJnN0YXRlLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCBT
VkdQcm9wZXJ0eVRlYXJPZmY8U1ZHUG9pbnQ+OjpjcmVhdGUoaW1wbC5pbW11dGFibGVQb2ludCgp
KSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dE9ialN0cmF3YmVycnlHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgVGhyb3dTY29wZSYg
dGhyb3dTY29wZSk7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqU3RyYXdiZXJyeUdl
dHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAog
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqU3RyYXdiZXJyeShFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGlu
Z0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqU3RyYXdiZXJyeUdldHRlcj4o
c3RhdGUsIHRoaXNWYWx1ZSwgInN0cmF3YmVycnkiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdE9ialN0cmF3YmVycnlHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2Jq
KiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdE9ialN0cmF3YmVycnlHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2Jq
JiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3Jh
cHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5ibHVlYmVycnkoKSk7
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9i
akRlc2NyaXB0aW9uR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpOworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakRlc2NyaXB0aW9uR2V0
dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCiBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpEZXNjcmlwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGlu
Z0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqRGVzY3JpcHRpb25HZXR0ZXI+
KHN0YXRlLCB0aGlzVmFsdWUsICJkZXNjcmlwdGlvbiIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0T2JqRGVzY3JpcHRpb25HZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0
T2JqKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdE9iakRlc2NyaXB0aW9uR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVz
dE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICBhdXRvJiBp
bXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwuZGVzY3JpcHRp
b24oKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdE9iaklkR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIFRocm93U2NvcGUmIHRocm93
U2NvcGUpOworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iaklkR2V0dGVyKEV4ZWNTdGF0
ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpJZChFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+Ojph
dHRyaWJ1dGU8anNUZXN0T2JqSWRHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJpZCIpOwogfQog
Ci1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqSWRHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0
ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iaklkR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVz
dE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICBhdXRvJiBp
bXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwuaWQoKSk7CiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakhh
c2hHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7
CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqSGFzaEdldHRlcihFeGVjU3RhdGUmLCBK
U1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqSGFzaChFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRy
aWJ1dGU8anNUZXN0T2JqSGFzaEdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgImhhc2giKTsKIH0K
IAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakhhc2hHZXR0ZXIoRXhlY1N0YXRlKiBz
dGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3Rh
dGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakhhc2hHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwg
SlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBq
c1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5oYXNoKCkpOworICAgIGF1dG8mIGltcGwgPSB0
aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENh
Y2hlKCZzdGF0ZSwgaW1wbC5oYXNoKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZXBsYWNlYWJsZUF0dHJpYnV0ZUdldHRlcihFeGVj
U3RhdGUqLCBKU1Rlc3RPYmoqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKK3N0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZXBsYWNlYWJsZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUm
LCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqUmVwbGFjZWFibGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxs
ZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9ialJlcGxhY2VhYmxlQXR0cmlidXRlR2V0
dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAicmVwbGFjZWFibGVBdHRyaWJ1dGUiKTsKIH0KIAotc3Rh
dGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlcGxhY2VhYmxlQXR0cmlidXRlR2V0dGVyKEV4
ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZXBsYWNlYWJsZUF0dHJpYnV0
ZUdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQo
KTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSBy
ZXN1bHQgPSBqc051bWJlcihpbXBsLnJlcGxhY2VhYmxlQXR0cmlidXRlKCkpOwogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZURv
dWJsZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKTsKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZURvdWJs
ZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVEb3VibGVBdHRyaWJ1
dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5h
bWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpz
VGVzdE9iak51bGxhYmxlRG91YmxlQXR0cmlidXRlR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAi
bnVsbGFibGVEb3VibGVBdHRyaWJ1dGUiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdE9iak51bGxhYmxlRG91YmxlQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpT
VGVzdE9iaiogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZURvdWJsZUF0dHJpYnV0ZUdldHRlcihFeGVjU3Rh
dGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
CiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKKyAgICBhdXRvJiBp
bXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSB0b051bGxh
YmxlSlNOdW1iZXIoaW1wbC5udWxsYWJsZURvdWJsZUF0dHJpYnV0ZSgpKTsKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVMb25n
QXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIFRocm93U2NvcGUmIHRocm93
U2NvcGUpOworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlTG9uZ0F0dHJp
YnV0ZUdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVMb25nQXR0cmlidXRlKEV4ZWNT
dGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewog
ICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpO
dWxsYWJsZUxvbmdBdHRyaWJ1dGVHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJudWxsYWJsZUxv
bmdBdHRyaWJ1dGUiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iak51bGxh
YmxlTG9uZ0F0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNP
YmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0T2JqTnVsbGFibGVMb25nQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVz
dE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICBhdXRvJiBp
bXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvTnVsbGFibGVKU051bWJlcihpbXBs
Lm51bGxhYmxlTG9uZ0F0dHJpYnV0ZSgpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVCb29sZWFuQXR0cmlidXRlR2V0dGVy
KEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIFRocm93U2NvcGUmIHRocm93U2NvcGUpOworc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlQm9vbGVhbkF0dHJpYnV0ZUdldHRlcihF
eGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVCb29sZWFuQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVy
biBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpOdWxsYWJsZUJv
b2xlYW5BdHRyaWJ1dGVHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJudWxsYWJsZUJvb2xlYW5B
dHRyaWJ1dGUiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxl
Qm9vbGVhbkF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNP
YmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0T2JqTnVsbGFibGVCb29sZWFuQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpT
VGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2Jq
ZWN0LndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzQm9vbGVhbihpbXBsLm51bGxh
YmxlQm9vbGVhbkF0dHJpYnV0ZSgpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVTdHJpbmdBdHRyaWJ1dGVHZXR0ZXIoRXhl
Y1N0YXRlKiwgSlNUZXN0T2JqKiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CitzdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVTdHJpbmdBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0
YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKIEVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9iak51bGxhYmxlU3RyaW5nQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5k
aW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpOdWxsYWJsZVN0cmluZ0F0
dHJpYnV0ZUdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgIm51bGxhYmxlU3RyaW5nQXR0cmlidXRl
Iik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZVN0cmluZ0F0
dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqTnVs
bGFibGVTdHJpbmdBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0
aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIGF1dG8mIGltcGwgPSB0
aGlzT2JqZWN0LT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ09yTnVs
bChzdGF0ZSwgaW1wbC5udWxsYWJsZVN0cmluZ0F0dHJpYnV0ZSgpKTsKKyAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ09y
TnVsbCgmc3RhdGUsIGltcGwubnVsbGFibGVTdHJpbmdBdHRyaWJ1dGUoKSk7CiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlTG9u
Z1NldHRhYmxlQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpOworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxl
TG9uZ1NldHRhYmxlQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZUxv
bmdTZXR0YWJsZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RP
Ymo+OjphdHRyaWJ1dGU8anNUZXN0T2JqTnVsbGFibGVMb25nU2V0dGFibGVBdHRyaWJ1dGVHZXR0
ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJudWxsYWJsZUxvbmdTZXR0YWJsZUF0dHJpYnV0ZSIpOwog
fQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVMb25nU2V0dGFibGVB
dHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0LCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iak51
bGxhYmxlTG9uZ1NldHRhYmxlQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVz
dE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICBhdXRvJiBp
bXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvTnVsbGFibGVKU051bWJlcihpbXBs
Lm51bGxhYmxlTG9uZ1NldHRhYmxlQXR0cmlidXRlKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZVN0cmluZ1NldHRhYmxl
QXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIFRocm93U2NvcGUmIHRocm93
U2NvcGUpOworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlU3RyaW5nU2V0
dGFibGVBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYg
dGhyb3dTY29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlU3RyaW5nU2V0
dGFibGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6
YXR0cmlidXRlPGpzVGVzdE9iak51bGxhYmxlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGVHZXR0ZXI+
KHN0YXRlLCB0aGlzVmFsdWUsICJudWxsYWJsZVN0cmluZ1NldHRhYmxlQXR0cmlidXRlIik7CiB9
CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZVN0cmluZ1NldHRhYmxl
QXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpO
dWxsYWJsZVN0cmluZ1NldHRhYmxlQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpT
VGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNT
dHJpbmdPck51bGwoc3RhdGUsIGltcGwubnVsbGFibGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZSgp
KTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSBy
ZXN1bHQgPSBqc1N0cmluZ09yTnVsbCgmc3RhdGUsIGltcGwubnVsbGFibGVTdHJpbmdTZXR0YWJs
ZUF0dHJpYnV0ZSgpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0T2JqTnVsbGFibGVVU1ZTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZUdldHRlcihF
eGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKK3N0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZVVTVlN0cmluZ1NldHRhYmxlQXR0cmlidXRl
R2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwog
CiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZVVTVlN0cmluZ1NldHRhYmxlQXR0cmli
dXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxq
c1Rlc3RPYmpOdWxsYWJsZVVTVlN0cmluZ1NldHRhYmxlQXR0cmlidXRlR2V0dGVyPihzdGF0ZSwg
dGhpc1ZhbHVlLCAibnVsbGFibGVVU1ZTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZSIpOwogfQogCi1z
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVVU1ZTdHJpbmdTZXR0YWJsZUF0
dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqTnVs
bGFibGVVU1ZTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBK
U1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgYXV0
byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpz
U3RyaW5nT3JOdWxsKHN0YXRlLCBpbXBsLm51bGxhYmxlVVNWU3RyaW5nU2V0dGFibGVBdHRyaWJ1
dGUoKSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIEpTVmFs
dWUgcmVzdWx0ID0ganNTdHJpbmdPck51bGwoJnN0YXRlLCBpbXBsLm51bGxhYmxlVVNWU3RyaW5n
U2V0dGFibGVBdHRyaWJ1dGUoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlU3RyaW5nVmFsdWVHZXR0ZXIoRXhlY1N0YXRl
KiwgSlNUZXN0T2JqKiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CitzdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0T2JqTnVsbGFibGVTdHJpbmdWYWx1ZUdldHRlcihFeGVjU3RhdGUmLCBKU1Rl
c3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqTnVsbGFibGVTdHJpbmdWYWx1ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rl
c3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqTnVsbGFibGVTdHJpbmdWYWx1ZUdldHRlcj4oc3Rh
dGUsIHRoaXNWYWx1ZSwgIm51bGxhYmxlU3RyaW5nVmFsdWUiKTsKIH0KIAotc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlU3RyaW5nVmFsdWVHZXR0ZXIoRXhlY1N0YXRlKiBz
dGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3Rh
dGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlU3RyaW5nVmFsdWVHZXR0ZXIoRXhl
Y1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0o
c3RhdGUpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGF1dG8mIGltcGwgPSB0aGlz
T2JqZWN0LT53cmFwcGVkKCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgp
OwogICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9OdWxsYWJsZUpTTnVtYmVyKGltcGwubnVsbGFibGVT
dHJpbmdWYWx1ZShlYykpOwotICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwg
ZWMpOworICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIHRocm93U2NvcGUsIGVjKTsKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQXR0cmli
dXRlR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIFRocm93U2NvcGUmIHRocm93U2NvcGUp
Oworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakF0dHJpYnV0ZUdldHRlcihFeGVjU3Rh
dGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVz
dE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpBdHRyaWJ1dGVHZXR0ZXI+KHN0YXRlLCB0aGlzVmFs
dWUsICJhdHRyaWJ1dGUiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakF0
dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQXR0
cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3Jh
cHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGlt
cGwuYXR0cmlidXRlKCkpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsK
KyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgaW1wbC5hdHRy
aWJ1dGUoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdE9iakF0dHJpYnV0ZVdpdGhSZXNlcnZlZEVudW1UeXBlR2V0dGVyKEV4ZWNTdGF0ZSos
IEpTVGVzdE9iaiosIFRocm93U2NvcGUmIHRocm93U2NvcGUpOworc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdE9iakF0dHJpYnV0ZVdpdGhSZXNlcnZlZEVudW1UeXBlR2V0dGVyKEV4ZWNTdGF0
ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpBdHRyaWJ1dGVXaXRoUmVzZXJ2ZWRFbnVtVHlwZShFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4g
QmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqQXR0cmlidXRlV2l0
aFJlc2VydmVkRW51bVR5cGVHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJhdHRyaWJ1dGVXaXRo
UmVzZXJ2ZWRFbnVtVHlwZSIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2Jq
QXR0cmlidXRlV2l0aFJlc2VydmVkRW51bVR5cGVHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNU
ZXN0T2JqKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdE9iakF0dHJpYnV0ZVdpdGhSZXNlcnZlZEVudW1UeXBlR2V0dGVyKEV4
ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFN
KHN0YXRlKTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwotICAgIEpT
VmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwuYXR0cmlidXRlV2l0
aFJlc2VydmVkRW51bVR5cGUoKSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBl
ZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCBpbXBs
LmF0dHJpYnV0ZVdpdGhSZXNlcnZlZEVudW1UeXBlKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpUZXN0UmVhZE9ubHlQcm9taXNlQXR0
cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpOworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialRlc3RSZWFkT25seVByb21pc2VB
dHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialRlc3RSZWFkT25seVByb21pc2VBdHRy
aWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0
eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRl
PGpzVGVzdE9ialRlc3RSZWFkT25seVByb21pc2VBdHRyaWJ1dGVHZXR0ZXIsIENhc3RlZFRoaXNF
cnJvckJlaGF2aW9yOjpSZWplY3RQcm9taXNlPihzdGF0ZSwgdGhpc1ZhbHVlLCAidGVzdFJlYWRP
bmx5UHJvbWlzZUF0dHJpYnV0ZSIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
T2JqVGVzdFJlYWRPbmx5UHJvbWlzZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBK
U1Rlc3RPYmoqIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0T2JqVGVzdFJlYWRPbmx5UHJvbWlzZUF0dHJpYnV0ZUdldHRlcihF
eGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKLSAgICBK
U1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpLCBp
bXBsLnRlc3RSZWFkT25seVByb21pc2VBdHRyaWJ1dGUoKSk7CisgICAgYXV0byYgaW1wbCA9IHRo
aXNPYmplY3Qud3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUygmc3RhdGUsIHRo
aXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIGltcGwudGVzdFJlYWRPbmx5UHJvbWlzZUF0dHJpYnV0
ZSgpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0T2JqUHV0Rm9yd2FyZHNBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2Jq
UHV0Rm9yd2FyZHNBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialB1dEZvcndhcmRz
QXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJp
YnV0ZTxqc1Rlc3RPYmpQdXRGb3J3YXJkc0F0dHJpYnV0ZUdldHRlcj4oc3RhdGUsIHRoaXNWYWx1
ZSwgInB1dEZvcndhcmRzQXR0cmlidXRlIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RPYmpQdXRGb3J3YXJkc0F0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rl
c3RPYmoqIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0T2JqUHV0Rm9yd2FyZHNBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiBz
dGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewog
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwot
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1
bHQgPSB0b0pTKHN0YXRlLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKSwgaW1wbC5wdXRGb3J3
YXJkc0F0dHJpYnV0ZSgpKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7
CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKCZzdGF0ZSwgdGhpc09iamVjdC5nbG9iYWxPYmpl
Y3QoKSwgaW1wbC5wdXRGb3J3YXJkc0F0dHJpYnV0ZSgpKTsKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUHV0Rm9yd2FyZHNOdWxsYWJsZUF0
dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKTsKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpQdXRGb3J3YXJkc051bGxhYmxl
QXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQdXRGb3J3YXJkc051bGxhYmxlQXR0
cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0
ZTxqc1Rlc3RPYmpQdXRGb3J3YXJkc051bGxhYmxlQXR0cmlidXRlR2V0dGVyPihzdGF0ZSwgdGhp
c1ZhbHVlLCAicHV0Rm9yd2FyZHNOdWxsYWJsZUF0dHJpYnV0ZSIpOwogfQogCi1zdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0T2JqUHV0Rm9yd2FyZHNOdWxsYWJsZUF0dHJpYnV0ZUdldHRlcihF
eGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUHV0Rm9yd2FyZHNOdWxsYWJs
ZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3Qs
IFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qt
PndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIHRoaXNPYmplY3Qt
Pmdsb2JhbE9iamVjdCgpLCBpbXBsLnB1dEZvcndhcmRzTnVsbGFibGVBdHRyaWJ1dGUoKSk7Cisg
ICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0
ID0gdG9KUygmc3RhdGUsIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIGltcGwucHV0Rm9yd2Fy
ZHNOdWxsYWJsZUF0dHJpYnV0ZSgpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0T2JqU3RyaW5naWZpZXJBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0
YXRlKiwgSlNUZXN0T2JqKiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CitzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0T2JqU3RyaW5naWZpZXJBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiwg
SlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9ialN0cmluZ2lmaWVyQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVy
PEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpTdHJpbmdpZmllckF0dHJpYnV0ZUdldHRl
cj4oc3RhdGUsIHRoaXNWYWx1ZSwgInN0cmluZ2lmaWVyQXR0cmlidXRlIik7CiB9CiAKLXN0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdpZmllckF0dHJpYnV0ZUdldHRlcihFeGVj
U3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqU3RyaW5naWZpZXJBdHRyaWJ1dGVH
ZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7
Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5zdHJp
bmdpZmllckF0dHJpYnV0ZSgpKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVk
KCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIGltcGwu
c3RyaW5naWZpZXJBdHRyaWJ1dGUoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcApp
bmRleCAxNzJlZTE4NDFkZDQ5NDhiOTJkYTZmNjZlN2FlMzE0NTU4MTdlM2VjLi45NjQ3NmRmOThl
NTU2NjliNzBjZTgyZjBlYmJhZGI0MmRkZTI2OTY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcApAQCAtMTM3LDg5ICsxMzcs
ODkgQEAgaW5saW5lIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogSlNUZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWMKICAgICByZXR1cm4ganNEeW5hbWljQ2FzdDxK
U1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqPihKU1ZhbHVlOjpkZWNvZGUodGhp
c1ZhbHVlKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2VWYWx1ZUdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2UqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKK3N0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VWYWx1ZUdl
dHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UmLCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlVmFsdWUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8
SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlPjo6YXR0cmlidXRlPGpzVGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVZhbHVlR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVl
LCAidmFsdWUiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZVZhbHVlR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2VWYWx1ZUdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2UmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
CiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVl
IHJlc3VsdCA9IGltcGwudmFsdWUoKSA/IGltcGwudmFsdWUoKS0+ZGVzZXJpYWxpemUoc3RhdGUs
IHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpLCAwKSA6IGpzTnVsbCgpOworICAgIGF1dG8mIGlt
cGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGltcGwudmFs
dWUoKSA/IGltcGwudmFsdWUoKS0+ZGVzZXJpYWxpemUoJnN0YXRlLCB0aGlzT2JqZWN0Lmdsb2Jh
bE9iamVjdCgpLCAwKSA6IGpzTnVsbCgpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VSZWFk
b25seVZhbHVlR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZSosIFRocm93U2NvcGUmIHRocm93U2NvcGUpOworc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVJlYWRvbmx5VmFsdWVHZXR0ZXIo
RXhlY1N0YXRlJiwgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlJiwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZVJlYWRvbmx5VmFsdWUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxs
ZXI8SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlPjo6YXR0cmlidXRlPGpzVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVJlYWRvbmx5VmFsdWVHZXR0ZXI+KHN0YXRl
LCB0aGlzVmFsdWUsICJyZWFkb25seVZhbHVlIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VSZWFkb25seVZhbHVlR2V0dGVy
KEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSog
dGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VSZWFkb25seVZhbHVlR2V0dGVy
KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSYg
dGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICBhdXRvJiBpbXBsID0g
dGhpc09iamVjdC0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gaW1wbC5yZWFkb25s
eVZhbHVlKCkgPyBpbXBsLnJlYWRvbmx5VmFsdWUoKS0+ZGVzZXJpYWxpemUoc3RhdGUsIHRoaXNP
YmplY3QtPmdsb2JhbE9iamVjdCgpLCAwKSA6IGpzTnVsbCgpOworICAgIGF1dG8mIGltcGwgPSB0
aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGltcGwucmVhZG9ubHlW
YWx1ZSgpID8gaW1wbC5yZWFkb25seVZhbHVlKCktPmRlc2VyaWFsaXplKCZzdGF0ZSwgdGhpc09i
amVjdC5nbG9iYWxPYmplY3QoKSwgMCkgOiBqc051bGwoKTsKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlQ2FjaGVkVmFsdWVHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlKiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CitzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ2FjaGVkVmFsdWVH
ZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlJiwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNhY2hlZFZhbHVlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5n
Q2FsbGVyPEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZT46OmF0dHJpYnV0ZTxq
c1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDYWNoZWRWYWx1ZUdldHRlcj4oc3Rh
dGUsIHRoaXNWYWx1ZSwgImNhY2hlZFZhbHVlIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDYWNoZWRWYWx1ZUdldHRlcihF
eGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIHRo
aXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ2FjaGVkVmFsdWVHZXR0ZXIoRXhl
Y1N0YXRlJiBzdGF0ZSwgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlJiB0aGlz
T2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIGlmIChKU1ZhbHVlIGNhY2hl
ZFZhbHVlID0gdGhpc09iamVjdC0+bV9jYWNoZWRWYWx1ZS5nZXQoKSkKKyAgICBpZiAoSlNWYWx1
ZSBjYWNoZWRWYWx1ZSA9IHRoaXNPYmplY3QubV9jYWNoZWRWYWx1ZS5nZXQoKSkKICAgICAgICAg
cmV0dXJuIGNhY2hlZFZhbHVlOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVk
KCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBpbXBsLmNhY2hlZFZhbHVlKCkgPyBpbXBsLmNhY2hl
ZFZhbHVlKCktPmRlc2VyaWFsaXplKHN0YXRlLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKSwg
MCkgOiBqc051bGwoKTsKLSAgICB0aGlzT2JqZWN0LT5tX2NhY2hlZFZhbHVlLnNldChzdGF0ZS0+
dm0oKSwgdGhpc09iamVjdCwgcmVzdWx0KTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53
cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBpbXBsLmNhY2hlZFZhbHVlKCkgPyBpbXBs
LmNhY2hlZFZhbHVlKCktPmRlc2VyaWFsaXplKCZzdGF0ZSwgdGhpc09iamVjdC5nbG9iYWxPYmpl
Y3QoKSwgMCkgOiBqc051bGwoKTsKKyAgICB0aGlzT2JqZWN0Lm1fY2FjaGVkVmFsdWUuc2V0KHN0
YXRlLnZtKCksICZ0aGlzT2JqZWN0LCByZXN1bHQpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
LXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2VQb3J0c0dldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2UqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQb3J0c0dldHRlcihFeGVjU3RhdGUm
LCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UmLCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlUG9ydHMoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlPjo6YXR0cmlidXRlPGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZVBvcnRzR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAicG9ydHMiKTsKIH0K
IAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZVBvcnRzR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZSogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQb3J0
c0dldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2UmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzQXJy
YXkoc3RhdGUsIHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpLCBpbXBsLnBvcnRzKCkpOworICAg
IGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9
IGpzQXJyYXkoJnN0YXRlLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCBpbXBsLnBvcnRzKCkp
OwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDYWNoZWRSZWFkb25seVZhbHVlR2V0dGVyKEV4
ZWNTdGF0ZSosIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSosIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpOworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZUNhY2hlZFJlYWRvbmx5VmFsdWVHZXR0ZXIoRXhlY1N0YXRlJiwg
SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlJiwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZUNhY2hlZFJlYWRvbmx5VmFsdWUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNU
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlPjo6YXR0cmlidXRlPGpzVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNhY2hlZFJlYWRvbmx5VmFsdWVHZXR0ZXI+KHN0YXRl
LCB0aGlzVmFsdWUsICJjYWNoZWRSZWFkb25seVZhbHVlIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDYWNoZWRSZWFkb25s
eVZhbHVlR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZSogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDYWNoZWRS
ZWFkb25seVZhbHVlR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZSYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsK
ICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsK
LSAgICBpZiAoSlNWYWx1ZSBjYWNoZWRWYWx1ZSA9IHRoaXNPYmplY3QtPm1fY2FjaGVkUmVhZG9u
bHlWYWx1ZS5nZXQoKSkKKyAgICBpZiAoSlNWYWx1ZSBjYWNoZWRWYWx1ZSA9IHRoaXNPYmplY3Qu
bV9jYWNoZWRSZWFkb25seVZhbHVlLmdldCgpKQogICAgICAgICByZXR1cm4gY2FjaGVkVmFsdWU7
Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJl
c3VsdCA9IGltcGwuY2FjaGVkUmVhZG9ubHlWYWx1ZSgpID8gaW1wbC5jYWNoZWRSZWFkb25seVZh
bHVlKCktPmRlc2VyaWFsaXplKHN0YXRlLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKSwgMCkg
OiBqc051bGwoKTsKLSAgICB0aGlzT2JqZWN0LT5tX2NhY2hlZFJlYWRvbmx5VmFsdWUuc2V0KHN0
YXRlLT52bSgpLCB0aGlzT2JqZWN0LCByZXN1bHQpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2Jq
ZWN0LndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGltcGwuY2FjaGVkUmVhZG9ubHlW
YWx1ZSgpID8gaW1wbC5jYWNoZWRSZWFkb25seVZhbHVlKCktPmRlc2VyaWFsaXplKCZzdGF0ZSwg
dGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgMCkgOiBqc051bGwoKTsKKyAgICB0aGlzT2JqZWN0
Lm1fY2FjaGVkUmVhZG9ubHlWYWx1ZS5zZXQoc3RhdGUudm0oKSwgJnRoaXNPYmplY3QsIHJlc3Vs
dCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5jcHAKaW5kZXggMGI2
MmZiZGZhNmE4Yjk0ZTU0ZTc4ZTQ0NjNkZDE2ODA2MWRjODM1NS4uOTc0ZjVlNDQ3MDA1NGM0OWE4
ZDU3YWE2YzdiZjg5ZGE3ODliZjk0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuY3BwCkBAIC0yMTUsMTE3
ICsyMTUsMTE3IEBAIGlubGluZSBKU1Rlc3RUeXBlZGVmcyogSlNUZXN0VHlwZWRlZnM6OmNhc3RG
b3JBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBFbmNvZGVkCiAgICAgcmV0dXJuIGpzRHluYW1p
Y0Nhc3Q8SlNUZXN0VHlwZWRlZnMqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiB9CiAK
LXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1Vuc2lnbmVkTG9uZ0xvbmdBdHRy
R2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdFR5cGVkZWZzKiwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSk7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0VHlwZWRlZnNVbnNpZ25lZExvbmdMb25n
QXR0ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RUeXBlZGVmcyYsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1Vuc2lnbmVkTG9uZ0xvbmdB
dHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdFR5cGVkZWZzPjo6YXR0cmli
dXRlPGpzVGVzdFR5cGVkZWZzVW5zaWduZWRMb25nTG9uZ0F0dHJHZXR0ZXI+KHN0YXRlLCB0aGlz
VmFsdWUsICJ1bnNpZ25lZExvbmdMb25nQXR0ciIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0VHlwZWRlZnNVbnNpZ25lZExvbmdMb25nQXR0ckdldHRlcihFeGVjU3RhdGUqIHN0
YXRlLCBKU1Rlc3RUeXBlZGVmcyogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
K3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1Vuc2lnbmVkTG9uZ0xvbmdBdHRy
R2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdFR5cGVkZWZzJiB0aGlzT2JqZWN0LCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFw
cGVkKCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIEpTVmFs
dWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC51bnNpZ25lZExvbmdMb25nQXR0cigpKTsKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0VHlwZWRlZnNJ
bW11dGFibGVTZXJpYWxpemVkU2NyaXB0VmFsdWVHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0VHlw
ZWRlZnMqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RUeXBlZGVmc0ltbXV0YWJsZVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUdldHRlcihFeGVjU3Rh
dGUmLCBKU1Rlc3RUeXBlZGVmcyYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCiBFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc0ltbXV0YWJsZVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZShFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsK
ICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RUeXBlZGVmcz46OmF0dHJpYnV0ZTxqc1Rl
c3RUeXBlZGVmc0ltbXV0YWJsZVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUdldHRlcj4oc3RhdGUsIHRo
aXNWYWx1ZSwgImltbXV0YWJsZVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSIpOwogfQogCi1zdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0VHlwZWRlZnNJbW11dGFibGVTZXJpYWxpemVkU2NyaXB0VmFs
dWVHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0VHlwZWRlZnMqIHRoaXNPYmplY3QsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0VHlwZWRl
ZnNJbW11dGFibGVTZXJpYWxpemVkU2NyaXB0VmFsdWVHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwg
SlNUZXN0VHlwZWRlZnMmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0g
ICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3Vs
dCA9IGltcGwuaW1tdXRhYmxlU2VyaWFsaXplZFNjcmlwdFZhbHVlKCkgPyBpbXBsLmltbXV0YWJs
ZVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSgpLT5kZXNlcmlhbGl6ZShzdGF0ZSwgdGhpc09iamVjdC0+
Z2xvYmFsT2JqZWN0KCksIDApIDoganNOdWxsKCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmpl
Y3Qud3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gaW1wbC5pbW11dGFibGVTZXJpYWxp
emVkU2NyaXB0VmFsdWUoKSA/IGltcGwuaW1tdXRhYmxlU2VyaWFsaXplZFNjcmlwdFZhbHVlKCkt
PmRlc2VyaWFsaXplKCZzdGF0ZSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgMCkgOiBqc051
bGwoKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0VHlwZWRlZnNDb25zdHJ1Y3RvclRlc3RTdWJPYmpHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0
VHlwZWRlZnMqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKK3N0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yVGVzdFN1Yk9iakdldHRlcihFeGVjU3RhdGUmLCBK
U1Rlc3RUeXBlZGVmcyYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yVGVzdFN1Yk9iaihFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmlu
ZGluZ0NhbGxlcjxKU1Rlc3RUeXBlZGVmcz46OmF0dHJpYnV0ZTxqc1Rlc3RUeXBlZGVmc0NvbnN0
cnVjdG9yVGVzdFN1Yk9iakdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgIlRlc3RTdWJPYmoiKTsK
IH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzQ29uc3RydWN0b3JUZXN0
U3ViT2JqR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdFR5cGVkZWZzKiB0aGlzT2JqZWN0
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFR5
cGVkZWZzQ29uc3RydWN0b3JUZXN0U3ViT2JqR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVz
dFR5cGVkZWZzJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIHJl
dHVybiBKU1Rlc3RTdWJPYmo6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCB0aGlzT2JqZWN0
LT5nbG9iYWxPYmplY3QoKSk7CisgICAgcmV0dXJuIEpTVGVzdFN1Yk9iajo6Z2V0Q29uc3RydWN0
b3Ioc3RhdGUudm0oKSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7CiB9CiAKLXN0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uR2V0dGVy
KEV4ZWNTdGF0ZSosIEpTVGVzdFR5cGVkZWZzKiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7Citz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0VHlwZWRlZnNBdHRyV2l0aEdldHRlckV4Y2VwdGlv
bkdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RUeXBlZGVmcyYsIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc0F0dHJXaXRoR2V0dGVyRXhjZXB0
aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdFR5cGVkZWZzPjo6YXR0cmli
dXRlPGpzVGVzdFR5cGVkZWZzQXR0cldpdGhHZXR0ZXJFeGNlcHRpb25HZXR0ZXI+KHN0YXRlLCB0
aGlzVmFsdWUsICJhdHRyV2l0aEdldHRlckV4Y2VwdGlvbiIpOwogfQogCi1zdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0VHlwZWRlZnNBdHRyV2l0aEdldHRlckV4Y2VwdGlvbkdldHRlcihFeGVj
U3RhdGUqIHN0YXRlLCBKU1Rlc3RUeXBlZGVmcyogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc0F0dHJXaXRoR2V0
dGVyRXhjZXB0aW9uR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdFR5cGVkZWZzJiB0aGlz
T2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMg
PSAwOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CisgICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1i
ZXIoaW1wbC5hdHRyV2l0aEdldHRlckV4Y2VwdGlvbihlYykpOwotICAgIHNldERPTUV4Y2VwdGlv
bihzdGF0ZSwgdGhyb3dTY29wZSwgZWMpOworICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIHRo
cm93U2NvcGUsIGVjKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0VHlwZWRlZnNBdHRyV2l0aFNldHRlckV4Y2VwdGlvbkdldHRlcihFeGVjU3Rh
dGUqLCBKU1Rlc3RUeXBlZGVmcyosIFRocm93U2NvcGUmIHRocm93U2NvcGUpOworc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzQXR0cldpdGhTZXR0ZXJFeGNlcHRpb25HZXR0ZXIo
RXhlY1N0YXRlJiwgSlNUZXN0VHlwZWRlZnMmLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAog
RW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsK
ICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RUeXBlZGVmcz46OmF0dHJpYnV0ZTxqc1Rl
c3RUeXBlZGVmc0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVl
LCAiYXR0cldpdGhTZXR0ZXJFeGNlcHRpb24iKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdFR5cGVkZWZzQXR0cldpdGhTZXR0ZXJFeGNlcHRpb25HZXR0ZXIoRXhlY1N0YXRlKiBz
dGF0ZSwgSlNUZXN0VHlwZWRlZnMqIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0VHlwZWRlZnNBdHRyV2l0aFNldHRlckV4Y2Vw
dGlvbkdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RUeXBlZGVmcyYgdGhpc09iamVjdCwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+
d3JhcHBlZCgpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBK
U1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwuYXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oKSk7
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFR5
cGVkZWZzU3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb25HZXR0ZXIoRXhlY1N0YXRlKiwgSlNU
ZXN0VHlwZWRlZnMqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKK3N0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RUeXBlZGVmc1N0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uR2V0dGVyKEV4
ZWNTdGF0ZSYsIEpTVGVzdFR5cGVkZWZzJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKIEVu
Y29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzU3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24o
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
CiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0VHlwZWRlZnM+OjphdHRyaWJ1dGU8
anNUZXN0VHlwZWRlZnNTdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbkdldHRlcj4oc3RhdGUs
IHRoaXNWYWx1ZSwgInN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uIik7CiB9CiAKLXN0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1N0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0
aW9uR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdFR5cGVkZWZzKiB0aGlzT2JqZWN0LCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFR5cGVk
ZWZzU3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb25HZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwg
SlNUZXN0VHlwZWRlZnMmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAg
ICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndy
YXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBp
bXBsLnN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKGVjKSk7Ci0gICAgc2V0RE9NRXhjZXB0
aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCBlYyk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRl
LCBpbXBsLnN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKGVjKSk7CisgICAgc2V0RE9NRXhj
ZXB0aW9uKCZzdGF0ZSwgdGhyb3dTY29wZSwgZWMpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
LXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1N0cmluZ0F0dHJXaXRoU2V0dGVy
RXhjZXB0aW9uR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdFR5cGVkZWZzKiwgVGhyb3dTY29wZSYg
dGhyb3dTY29wZSk7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0VHlwZWRlZnNTdHJpbmdB
dHRyV2l0aFNldHRlckV4Y2VwdGlvbkdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RUeXBlZGVmcyYs
IFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVm
c1N0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2Fs
bGVyPEpTVGVzdFR5cGVkZWZzPjo6YXR0cmlidXRlPGpzVGVzdFR5cGVkZWZzU3RyaW5nQXR0cldp
dGhTZXR0ZXJFeGNlcHRpb25HZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJzdHJpbmdBdHRyV2l0
aFNldHRlckV4Y2VwdGlvbiIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0VHlw
ZWRlZnNTdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbkdldHRlcihFeGVjU3RhdGUqIHN0YXRl
LCBKU1Rlc3RUeXBlZGVmcyogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1N0cmluZ0F0dHJXaXRoU2V0dGVyRXhj
ZXB0aW9uR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdFR5cGVkZWZzJiB0aGlzT2JqZWN0
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0
ZSwgaW1wbC5zdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbigpKTsKKyAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dp
dGhDYWNoZSgmc3RhdGUsIGltcGwuc3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oKSk7CiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTYXR0cmlidXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU2F0dHJpYnV0ZS5jcHAKaW5kZXggNTI4ZDZjNDBlMGE4ZWUw
MDgwMDc4ZDc0Mzc3NmJmNDFiZDk5OGI3OS4uNDljYmVlMGZjZTc1MTJiYjNlNzdiZTg0MDU3MjJi
YjUwNTE4NjAyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTYXR0cmlidXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNhdHRyaWJ1dGUuY3BwCkBAIC0xMzcsMTkgKzEzNywxOSBAQCBpbmxpbmUg
SlNhdHRyaWJ1dGUqIEpTYXR0cmlidXRlOjpjYXN0Rm9yQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRl
KiwgRW5jb2RlZEpTVmFsdQogICAgIHJldHVybiBqc0R5bmFtaWNDYXN0PEpTYXR0cmlidXRlKj4o
SlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNhdHRyaWJ1dGVSZWFkb25seUdldHRlcihFeGVjU3RhdGUqLCBKU2F0dHJpYnV0ZSosIFRocm93
U2NvcGUmIHRocm93U2NvcGUpOworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzYXR0cmlidXRlUmVh
ZG9ubHlHZXR0ZXIoRXhlY1N0YXRlJiwgSlNhdHRyaWJ1dGUmLCBUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNhdHRyaWJ1dGVSZWFkb25seShFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1
cm4gQmluZGluZ0NhbGxlcjxKU2F0dHJpYnV0ZT46OmF0dHJpYnV0ZTxqc2F0dHJpYnV0ZVJlYWRv
bmx5R2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAicmVhZG9ubHkiKTsKIH0KIAotc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzYXR0cmlidXRlUmVhZG9ubHlHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwg
SlNhdHRyaWJ1dGUqIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMg
aW5saW5lIEpTVmFsdWUganNhdHRyaWJ1dGVSZWFkb25seUdldHRlcihFeGVjU3RhdGUmIHN0YXRl
LCBKU2F0dHJpYnV0ZSYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAg
ICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0
ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwucmVhZG9ubHkoKSk7CisgICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJp
bmdXaXRoQ2FjaGUoJnN0YXRlLCBpbXBsLnJlYWRvbmx5KCkpOwogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>291078</attachid>
            <date>2016-10-10 01:30:37 -0700</date>
            <delta_ts>2016-10-10 02:05:44 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-163179-20161010102713.patch</filename>
            <type>text/plain</type>
            <size>194156</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA2OTg2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzBlYjg1MWIzYzU4NTZk
MzEwOGQ0ZDUwMWVkOTc5ZWNiNmJjNzA2YS4uMmVlMGQ5YzU1YmEyYmQ5YWNkYjc4ODhlZDllOWEw
YzgyOTZiM2RhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDM5IEBACiAyMDE2LTEwLTEwICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAorICAgICAgICBBdHRyaWJ1dGUgZ2V0dGVy
IGJpbmRpbmcgZ2VuZXJhdGVkIGNvZGUgc2hvdWxkIHVzZSBtb3JlIHJlZmVyZW5jZXMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzE3OQorCisgICAg
ICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgIE5vIGNoYW5nZSBvZiBiZWhh
dmlvci4KKworICAgICAgICBVc2luZyBtb3JlIHJlZmVyZW5jZXMgaW4gYXR0cmlidXRlIGdldHRl
ciBnZW5lcmF0ZWQgY29kZSBzaW5jZSBCaW5kaW5nQ2FsbGVyOjphdHRyaWJ1dGUgY2FuIGRvIHRo
ZQorICAgICAgICBwb2ludGVyLXRvLXJlZmVyZW5jZXMgY2hlY2tzIG9uY2UgZm9yIGFsbC4KKwor
ICAgICAgICBOZWVkZWQgdG8gdXBkYXRlIEdlbmVyYXRlQ2FsbFdpdGggYW5kIE5hdGl2ZVRvSlNW
YWx1ZSB0byBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgcmVmZXJlbmNlcyAoYXR0cmlidXRlIGdldHRl
cnMpIG9yCisgICAgICAgIHBvaW50ZXJzIChtZXRob2RzIGFuZCBhdHRyaWJ1dGUgc2V0dGVycykg
YXJlIHRvIGJlIHVzZWQuCisgICAgICAgIEZ1dHVyZSByZWZhY3RvcmluZyBzaG91bGQgYWxsaWdu
IG1ldGhvZHMvYXR0cmlidXRlIHNldHRlcnMgdG8gYXR0cmlidXRlIGdldHRlcnMuCisKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaDoKKyAgICAgICAgKFdlYkNvcmU6OkJpbmRp
bmdDYWxsZXI6OmF0dHJpYnV0ZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9ySlMucG06CisgICAgICAgIChHZW5lcmF0ZUltcGxlbWVudGF0aW9uKToKKyAgICAgICAg
KEdlbmVyYXRlQ2FsbFdpdGgpOgorICAgICAgICAoTmF0aXZlVG9KU1ZhbHVlKToKKyAgICAgICAg
KEpTVmFsdWVUb05hdGl2ZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdEFjdGl2ZURPTU9iamVjdC5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RFeGNlcHRpb24uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RHbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHA6CisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuY3BwOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb25kZXRlcm1pbmlzdGljLmNwcDoKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcDoKKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNhdHRyaWJ1dGUuY3BwOgorCisyMDE2LTEwLTEwICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKwogICAgICAgICBSZWZhY3RvciBiaW5kaW5n
IGdlbmVyYXRlZCBjYXN0ZWQtdGhpcyBjaGVja3MgZm9yIGF0dHJpYnV0ZSBzZXR0ZXJzCiAgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjMxODEKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaAppbmRleCA1YTJjZWU1MGNkNmZm
YWMzZDU1NjZjYjVlMzgwMGQ0Y2U0MTQ1YTk4Li5hZTc2ZjQ1ZGNmMWIxM2VmYjdmMzc3Y2I1YjI0
NDNlMDYwZDJlOTc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TUJpbmRpbmcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcu
aApAQCAtMzM0LDcgKzMzNCw3IEBAIGVudW0gY2xhc3MgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3Ig
eyBUaHJvdywgUmV0dXJuRWFybHksIFJlamVjdFByb21pc2UgfTsKIHRlbXBsYXRlPHR5cGVuYW1l
IEpTQ2xhc3M+CiBzdHJ1Y3QgQmluZGluZ0NhbGxlciB7CiAgICAgdXNpbmcgQXR0cmlidXRlU2V0
dGVyRnVuY3Rpb24gPSBib29sKEpTQzo6RXhlY1N0YXRlKiwgSlNDbGFzcyosIEpTQzo6SlNWYWx1
ZSwgSlNDOjpUaHJvd1Njb3BlJik7Ci0gICAgdXNpbmcgQXR0cmlidXRlR2V0dGVyRnVuY3Rpb24g
PSBKU0M6OkpTVmFsdWUoSlNDOjpFeGVjU3RhdGUqLCBKU0NsYXNzKiwgSlNDOjpUaHJvd1Njb3Bl
Jik7CisgICAgdXNpbmcgQXR0cmlidXRlR2V0dGVyRnVuY3Rpb24gPSBKU0M6OkpTVmFsdWUoSlND
OjpFeGVjU3RhdGUmLCBKU0NsYXNzJiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKICAgICB0ZW1wbGF0
ZTxBdHRyaWJ1dGVTZXR0ZXJGdW5jdGlvbiBzZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9y
IHNob3VsZFRocm93ID0gQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OlRocm93PgogICAgIHN0YXRp
YyBib29sIHNldEF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTQzo6RW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgY29uc3Qg
Y2hhciogYXR0cmlidXRlTmFtZSkKQEAgLTM2NCw4ICszNjQsNyBAQCBzdHJ1Y3QgQmluZGluZ0Nh
bGxlciB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdFByb21pc2VXaXRoR2V0dGVyVHlw
ZUVycm9yKCpzdGF0ZSwgSlNDbGFzczo6aW5mbygpLT5jbGFzc05hbWUsIGF0dHJpYnV0ZU5hbWUp
OwogICAgICAgICAgICAgcmV0dXJuIEpTQzo6SlNWYWx1ZTo6ZW5jb2RlKEpTQzo6anNVbmRlZmlu
ZWQoKSk7CiAgICAgICAgIH0KLSAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCByZWZhY3RvciB0
aGUgYmluZGluZyBnZW5lcmF0ZWQgY29kZSB0byB1c2UgcmVmZXJlbmNlcyBmb3Igc3RhdGUgYW5k
IHRoaXNPYmplY3QuCi0gICAgICAgIHJldHVybiBKU0M6OkpTVmFsdWU6OmVuY29kZShnZXR0ZXIo
c3RhdGUsIHRoaXNPYmplY3QsIHRocm93U2NvcGUpKTsKKyAgICAgICAgcmV0dXJuIEpTQzo6SlNW
YWx1ZTo6ZW5jb2RlKGdldHRlcigqc3RhdGUsICp0aGlzT2JqZWN0LCB0aHJvd1Njb3BlKSk7CiAg
ICAgfQogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9D
b2RlR2VuZXJhdG9ySlMucG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JKUy5wbQppbmRleCBiYmI2NmFkOGY3MWRhMTU2MjRkNGQ2NGVlMzZkYzcyODUwNmU2
ZWFjLi5mNjRkOTMwODI3MTc3NTYxM2Q2YzZlYjdjMDQwOTE2YjkwOTRjMTQ1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQpAQCAt
MjkxMSwyNSArMjkxMSwyNiBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAg
ICAgICAgICAgICAkdGVtcGxhdGVQYXJhbWV0ZXJzIC49ICIsIENhc3RlZFRoaXNFcnJvckJlaGF2
aW9yOjpSZWplY3RQcm9taXNlIjsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgInN0YXRpYyBpbmxpbmUgSlNWYWx1ZSAke2dldEZ1bmN0aW9u
TmFtZX1HZXR0ZXIoRXhlY1N0YXRlKiwgJHtjbGFzc05hbWV9KiwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSk7XG5cbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAic3RhdGlj
IGlubGluZSBKU1ZhbHVlICR7Z2V0RnVuY3Rpb25OYW1lfUdldHRlcihFeGVjU3RhdGUmLCAke2Ns
YXNzTmFtZX0mLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTtcblxuIik7CiAKICAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIkVuY29kZWRKU1ZhbHVlICR7Z2V0RnVuY3Rpb25OYW1l
fShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFt
ZSlcbiIpOwogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CiAgICAg
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8
JHtjbGFzc05hbWV9Pjo6YXR0cmlidXRlPCR7dGVtcGxhdGVQYXJhbWV0ZXJzfT4oc3RhdGUsIHRo
aXNWYWx1ZSwgXCIkbmFtZVwiKTtcbiIpOwogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAifVxuXG4iKTsKIAotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAic3Rh
dGljIGlubGluZSBKU1ZhbHVlICR7Z2V0RnVuY3Rpb25OYW1lfUdldHRlcihFeGVjU3RhdGUqIHN0
YXRlLCAke2NsYXNzTmFtZX0qIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpXG4i
KTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgInN0YXRpYyBpbmxpbmUgSlNW
YWx1ZSAke2dldEZ1bmN0aW9uTmFtZX1HZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgJHtjbGFzc05h
bWV9JiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKVxuIik7CiAgICAgICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKICAgICAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7XG4iKTsKICAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJzdGF0aWMg
aW5saW5lIEpTVmFsdWUgJHtnZXRGdW5jdGlvbk5hbWV9R2V0dGVyKEV4ZWNTdGF0ZSopO1xuXG4i
KTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgInN0YXRpYyBpbmxpbmUgSlNW
YWx1ZSAke2dldEZ1bmN0aW9uTmFtZX1HZXR0ZXIoRXhlY1N0YXRlJik7XG5cbiIpOwogCiAgICAg
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJFbmNvZGVkSlNWYWx1ZSAke2dldEZ1bmN0
aW9uTmFtZX0oRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUsIFByb3BlcnR5TmFtZSlc
biIpOwogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7Ci0gICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSgk
e2dldEZ1bmN0aW9uTmFtZX1HZXR0ZXIoc3RhdGUpKTtcbiIpOworICAgICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIEFTU0VSVChzdGF0ZSk7XG4iKTsKKyAgICAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKCR7Z2V0RnVu
Y3Rpb25OYW1lfUdldHRlcigqc3RhdGUpKTtcbiIpOwogICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAifVxuXG4iKTsKIAotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAic3RhdGljIGlubGluZSBKU1ZhbHVlICR7Z2V0RnVuY3Rpb25OYW1lfUdldHRlcihFeGVjU3Rh
dGUqIHN0YXRlKVxuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJzdGF0
aWMgaW5saW5lIEpTVmFsdWUgJHtnZXRGdW5jdGlvbk5hbWV9R2V0dGVyKEV4ZWNTdGF0ZSYgc3Rh
dGUpXG4iKTsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTtcbiIpOwpAQCAtMjk0Niw5ICsyOTQ3LDkgQEAgc3ViIEdlbmVyYXRlSW1wbGVt
ZW50YXRpb24KICAgICAgICAgICAgICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkZyYW1lLmgi
KTsKICAgICAgICAgICAgICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIlNldHRpbmdzLmgiKTsK
ICAgICAgICAgICAgICAgICAgICAgbXkgJGVuYWJsZV9mdW5jdGlvbiA9IFRvTWV0aG9kTmFtZSgk
YXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0VuYWJsZWRCeVNldHRp
bmd9KSAuICJFbmFibGVkIjsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgaWYgKFVOTElLRUxZKCF0aGlzT2JqZWN0LT53cmFwcGVkKCkuZnJhbWUoKSkpXG4iKTsK
KyAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKFVOTElLRUxZ
KCF0aGlzT2JqZWN0LndyYXBwZWQoKS5mcmFtZSgpKSlcbiIpOwogICAgICAgICAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7XG4iKTsK
LSAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgU2V0dGluZ3MmIHNl
dHRpbmdzID0gdGhpc09iamVjdC0+d3JhcHBlZCgpLmZyYW1lKCktPnNldHRpbmdzKCk7XG4iKTsK
KyAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgU2V0dGluZ3MmIHNl
dHRpbmdzID0gdGhpc09iamVjdC53cmFwcGVkKCkuZnJhbWUoKS0+c2V0dGluZ3MoKTtcbiIpOwog
ICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoIXNldHRpbmdz
LiRlbmFibGVfZnVuY3Rpb24oKSlcbiIpOwogICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7XG4iKTsKICAgICAgICAgICAg
ICAgICB9CkBAIC0yOTYwLDkgKzI5NjEsOSBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgog
ICAgICAgICAgICAgICAgICEkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRl
cy0+e0RvTm90Q2hlY2tTZWN1cml0eX0gJiYKICAgICAgICAgICAgICAgICAhJGF0dHJpYnV0ZS0+
c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntEb05vdENoZWNrU2VjdXJpdHlPbkdldHRl
cn0pIHsKICAgICAgICAgICAgICAgICBpZiAoJGludGVyZmFjZU5hbWUgZXEgIkRPTVdpbmRvdyIp
IHsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKCFCaW5k
aW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coc3RhdGUsIHRoaXNPYmpl
Y3QtPndyYXBwZWQoKSwgVGhyb3dTZWN1cml0eUVycm9yKSlcbiIpOworICAgICAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoIUJpbmRpbmdTZWN1cml0eTo6c2hvdWxk
QWxsb3dBY2Nlc3NUb0RPTVdpbmRvdygmc3RhdGUsIHRoaXNPYmplY3Qud3JhcHBlZCgpLCBUaHJv
d1NlY3VyaXR5RXJyb3IpKVxuIik7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKCFCaW5kaW5nU2VjdXJpdHk6
OnNob3VsZEFsbG93QWNjZXNzVG9GcmFtZShzdGF0ZSwgdGhpc09iamVjdC0+d3JhcHBlZCgpLmZy
YW1lKCksIFRocm93U2VjdXJpdHlFcnJvcikpXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgaWYgKCFCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNj
ZXNzVG9GcmFtZSgmc3RhdGUsIHRoaXNPYmplY3Qud3JhcHBlZCgpLmZyYW1lKCksIFRocm93U2Vj
dXJpdHlFcnJvcikpXG4iKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpO1xuIik7CiAgICAg
ICAgICAgICB9CkBAIC0yOTczLDcgKzI5NzQsNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlv
bgogICAgICAgICAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCI8d3RmL05ldmVyRGVzdHJveWVk
Lmg+IiwgIldFQl9SRVBMQVkiKTsKIAogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiI2lmIEVOQUJMRShXRUJfUkVQTEFZKVxuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHN0YXRlLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCk7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc3RhdGUubGV4aWNhbEdsb2Jh
bE9iamVjdCgpO1xuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
SW5wdXRDdXJzb3ImIGN1cnNvciA9IGdsb2JhbE9iamVjdC0+aW5wdXRDdXJzb3IoKTtcbiIpOwog
CiAgICAgICAgICAgICAgICAgbXkgJG5hdGl2ZVR5cGUgPSBHZXROYXRpdmVUeXBlKCRpbnRlcmZh
Y2UsICR0eXBlKTsKQEAgLTI5ODEsMTAgKzI5ODIsMTAgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50
YXRpb24KICAgICAgICAgICAgICAgICBteSAkZXhjZXB0aW9uQ29kZSA9ICRnZXR0ZXJNYXlUaHJv
d0xlZ2FjeUV4Y2VwdGlvbiA/ICJlYyIgOiAiMCI7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21pY1N0cmluZz4g
YmluZGluZ05hbWUoXCIkaW50ZXJmYWNlTmFtZS4kbmFtZVwiLCBBdG9taWNTdHJpbmc6OkNvbnN0
cnVjdEZyb21MaXRlcmFsKTtcbiIpOwogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIGlmIChjdXJzb3IuaXNDYXB0dXJpbmcoKSkge1xuIik7Ci0gICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgICRtZW1vaXplZFR5cGUgbWVtb2l6ZWRSZXN1bHQg
PSB0aGlzT2JqZWN0LT53cmFwcGVkKCkuJGltcGxHZXR0ZXJGdW5jdGlvbk5hbWUoIiAuIGpvaW4o
IiwgIiwgQGFyZ3VtZW50cykgLiAiKTtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgICAgICAkbWVtb2l6ZWRUeXBlIG1lbW9pemVkUmVzdWx0ID0gdGhpc09iamVj
dC53cmFwcGVkKCkuJGltcGxHZXR0ZXJGdW5jdGlvbk5hbWUoIiAuIGpvaW4oIiwgIiwgQGFyZ3Vt
ZW50cykgLiAiKTtcbiIpOwogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
ICAgICBjdXJzb3IuYXBwZW5kSW5wdXQ8TWVtb2l6ZWRET01SZXN1bHQ8JG1lbW9pemVkVHlwZT4+
KGJpbmRpbmdOYW1lLmdldCgpLnN0cmluZygpLCBtZW1vaXplZFJlc3VsdCwgJGV4Y2VwdGlvbkNv
ZGUpO1xuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIEpT
VmFsdWUgcmVzdWx0ID0gIiAuIE5hdGl2ZVRvSlNWYWx1ZSgkYXR0cmlidXRlLT5zaWduYXR1cmUs
IDAsICRpbnRlcmZhY2UsICJtZW1vaXplZFJlc3VsdCIsICJ0aGlzT2JqZWN0IikgLiAiO1xuIik7
Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHNldERPTUV4Y2Vw
dGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgZWMpO1xuIikgaWYgJGdldHRlck1heVRocm93TGVnYWN5
RXhjZXB0aW9uOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBK
U1ZhbHVlIHJlc3VsdCA9ICIgLiBOYXRpdmVUb0pTVmFsdWVVc2luZ1JlZmVyZW5jZXMoJGF0dHJp
YnV0ZS0+c2lnbmF0dXJlLCAwLCAkaW50ZXJmYWNlLCAibWVtb2l6ZWRSZXN1bHQiLCAidGhpc09i
amVjdCIpIC4gIjtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
ICAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCB0aHJvd1Njb3BlLCBlYyk7XG4iKSBpZiAkZ2V0
dGVyTWF5VGhyb3dMZWdhY3lFeGNlcHRpb247CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgICAgIHJldHVybiByZXN1bHQ7XG4iKTsKICAgICAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICB9XG4iKTsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIlxuIik7CkBAIC0yOTkzLDggKzI5OTQsOCBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRh
dGlvbgogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBNZW1vaXpl
ZERPTVJlc3VsdEJhc2UqIGlucHV0ID0gY3Vyc29yLmZldGNoSW5wdXQ8TWVtb2l6ZWRET01SZXN1
bHRCYXNlPigpO1xuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
ICAgIGlmIChpbnB1dCAmJiBpbnB1dC0+Y29udmVydFRvPCRtZW1vaXplZFR5cGU+KG1lbW9pemVk
UmVzdWx0KSkge1xuIik7CiAgICAgICAgICAgICAgICAgIyBGSVhNRTogdGhlIGdlbmVyYXRlZCBj
b2RlIHNob3VsZCByZXBvcnQgYW4gZXJyb3IgaWYgYW4gaW5wdXQgY2Fubm90IGJlIGZldGNoZWQg
b3IgY29udmVydGVkLgotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAg
ICAgICAgSlNWYWx1ZSByZXN1bHQgPSAiIC4gTmF0aXZlVG9KU1ZhbHVlKCRhdHRyaWJ1dGUtPnNp
Z25hdHVyZSwgMCwgJGludGVyZmFjZSwgIm1lbW9pemVkUmVzdWx0IiwgInRoaXNPYmplY3QiKSAu
ICI7XG4iKTsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgICAg
IHNldERPTUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgaW5wdXQtPmV4Y2VwdGlvbkNvZGUo
KSk7XG4iKSBpZiAkZ2V0dGVyTWF5VGhyb3dMZWdhY3lFeGNlcHRpb247CisgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9ICIgLiBO
YXRpdmVUb0pTVmFsdWVVc2luZ1JlZmVyZW5jZXMoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLCAwLCAk
aW50ZXJmYWNlLCAibWVtb2l6ZWRSZXN1bHQiLCAidGhpc09iamVjdCIpIC4gIjtcbiIpOworICAg
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICAgICAgc2V0RE9NRXhjZXB0
aW9uKCZzdGF0ZSwgdGhyb3dTY29wZSwgaW5wdXQtPmV4Y2VwdGlvbkNvZGUoKSk7XG4iKSBpZiAk
Z2V0dGVyTWF5VGhyb3dMZWdhY3lFeGNlcHRpb247CiAgICAgICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuIik7CiAgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIH1cbiIpOwogICAgICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIH1cbiIpOwpAQCAtMzAwMiwxOCArMzAwMywxOCBAQCBzdWIg
R2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgfSAjIGF0dHJpYnV0ZSBOb25kZXRl
cm1pbmlzdGljCiAKICAgICAgICAgICAgIGlmIChIYXNDdXN0b21HZXR0ZXIoJGF0dHJpYnV0ZS0+
c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMpKSB7Ci0gICAgICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgcmV0dXJuIHRoaXNPYmplY3QtPiRpbXBsR2V0dGVyRnVuY3Rpb25O
YW1lKCpzdGF0ZSk7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICByZXR1cm4gdGhpc09iamVjdC4kaW1wbEdldHRlckZ1bmN0aW9uTmFtZShzdGF0ZSk7XG4iKTsK
ICAgICAgICAgICAgIH0gZWxzaWYgKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57Q2hlY2tTZWN1cml0eUZvck5vZGV9KSB7CiAgICAgICAgICAgICAgICAgJGltcGxJ
bmNsdWRlc3siSlNET01CaW5kaW5nLmgifSA9IDE7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTtcbiIpOwot
ICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBzaG91bGRBbGxv
d0FjY2Vzc1RvTm9kZShzdGF0ZSwgaW1wbC4iIC4gJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5uYW1l
IC4gIigpKSA/ICIgLiBOYXRpdmVUb0pTVmFsdWUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLCAwLCAk
aW50ZXJmYWNlLCAiaW1wbC4kaW1wbEdldHRlckZ1bmN0aW9uTmFtZSgpIiwgInRoaXNPYmplY3Qi
KSAuICIgOiBqc051bGwoKTtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTtcbiIpOworICAgICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBzaG91bGRBbGxvd0FjY2Vzc1Rv
Tm9kZSgmc3RhdGUsIGltcGwuIiAuICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+bmFtZSAuICIoKSkg
PyAiIC4gTmF0aXZlVG9KU1ZhbHVlVXNpbmdSZWZlcmVuY2VzKCRhdHRyaWJ1dGUtPnNpZ25hdHVy
ZSwgMCwgJGludGVyZmFjZSwgImltcGwuJGltcGxHZXR0ZXJGdW5jdGlvbk5hbWUoKSIsICJ0aGlz
T2JqZWN0IikgLiAiIDoganNOdWxsKCk7XG4iKTsKICAgICAgICAgICAgIH0gZWxzaWYgKCR0eXBl
IGVxICJFdmVudEhhbmRsZXIiKSB7CiAgICAgICAgICAgICAgICAgJGltcGxJbmNsdWRlc3siRXZl
bnROYW1lcy5oIn0gPSAxOwogICAgICAgICAgICAgICAgIG15ICRnZXR0ZXIgPSAkYXR0cmlidXRl
LT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e1dpbmRvd0V2ZW50SGFuZGxlcn0gPyAi
d2luZG93RXZlbnRIYW5kbGVyQXR0cmlidXRlIgogICAgICAgICAgICAgICAgICAgICA6ICRhdHRy
aWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57RG9jdW1lbnRFdmVudEhhbmRs
ZXJ9ID8gImRvY3VtZW50RXZlbnRIYW5kbGVyQXR0cmlidXRlIgogICAgICAgICAgICAgICAgICAg
ICA6ICJldmVudEhhbmRsZXJBdHRyaWJ1dGUiOwogICAgICAgICAgICAgICAgIG15ICRldmVudE5h
bWUgPSBFdmVudEhhbmRsZXJBdHRyaWJ1dGVFdmVudE5hbWUoJGF0dHJpYnV0ZSk7Ci0gICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuICRnZXR0ZXIodGhpc09iamVj
dC0+d3JhcHBlZCgpLCAkZXZlbnROYW1lKTtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIHJldHVybiAkZ2V0dGVyKHRoaXNPYmplY3Qud3JhcHBlZCgpLCAkZXZl
bnROYW1lKTtcbiIpOwogICAgICAgICAgICAgfSBlbHNpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJl
LT50eXBlID1+IC9Db25zdHJ1Y3RvciQvKSB7CiAgICAgICAgICAgICAgICAgbXkgJGNvbnN0cnVj
dG9yVHlwZSA9ICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+dHlwZTsKICAgICAgICAgICAgICAgICAk
Y29uc3RydWN0b3JUeXBlID1+IHMvQ29uc3RydWN0b3IkLy87CkBAIC0zMDIyLDMwICszMDIzLDMw
IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICAgICAgaWYgKCRpbnRl
cmZhY2VOYW1lIGVxICJET01XaW5kb3ciKSB7CiAgICAgICAgICAgICAgICAgICAgIG15ICRuYW1l
ZCA9ICgkY29uc3RydWN0b3JUeXBlID1+IC9OYW1lZCQvKSA/ICJOYW1lZCIgOiAiIjsKICAgICAg
ICAgICAgICAgICAgICAgJGNvbnN0cnVjdG9yVHlwZSA9fiBzL05hbWVkJC8vOwotICAgICAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gSlMiIC4gJGNvbnN0cnVj
dG9yVHlwZSAuICI6OmdldCR7bmFtZWR9Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIHRoaXNPYmpl
Y3QpO1xuIik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJl
dHVybiBKUyIgLiAkY29uc3RydWN0b3JUeXBlIC4gIjo6Z2V0JHtuYW1lZH1Db25zdHJ1Y3Rvcihz
dGF0ZS52bSgpLCAmdGhpc09iamVjdCk7XG4iKTsKICAgICAgICAgICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiSlMiIC4gJGNvbnN0cnVjdG9y
VHlwZSAuICIuaCIsICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
Q29uZGl0aW9uYWx9KTsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgcmV0dXJuIEpTIiAuICRjb25zdHJ1Y3RvclR5cGUgLiAiOjpnZXRDb25zdHJ1Y3RvcihzdGF0
ZS0+dm0oKSwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCkpO1xuIik7CisgICAgICAgICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBKUyIgLiAkY29uc3RydWN0b3JU
eXBlIC4gIjo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUudm0oKSwgdGhpc09iamVjdC5nbG9iYWxPYmpl
Y3QoKSk7XG4iKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2lmICghJGF0
dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntHZXR0ZXJNYXlUaHJvd0xl
Z2FjeUV4Y2VwdGlvbn0pIHsKICAgICAgICAgICAgICAgICBteSAkY2FjaGVJbmRleCA9IDA7CiAg
ICAgICAgICAgICAgICAgaWYgKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57Q2FjaGVkQXR0cmlidXRlfSkgewogICAgICAgICAgICAgICAgICAgICAkY2FjaGVJbmRl
eCA9ICRjdXJyZW50Q2FjaGVkQXR0cmlidXRlOwogICAgICAgICAgICAgICAgICAgICAkY3VycmVu
dENhY2hlZEF0dHJpYnV0ZSsrOwotICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICBpZiAoSlNWYWx1ZSBjYWNoZWRWYWx1ZSA9IHRoaXNPYmplY3QtPm1fIiAuICRhdHRy
aWJ1dGUtPnNpZ25hdHVyZS0+bmFtZSAuICIuZ2V0KCkpXG4iKTsKKyAgICAgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKEpTVmFsdWUgY2FjaGVkVmFsdWUgPSB0aGlz
T2JqZWN0Lm1fIiAuICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+bmFtZSAuICIuZ2V0KCkpXG4iKTsK
ICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiBj
YWNoZWRWYWx1ZTtcbiIpOwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIG15
IEBjYWxsV2l0aEFyZ3MgPSBHZW5lcmF0ZUNhbGxXaXRoKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q2FsbFdpdGh9LCBcQGltcGxDb250ZW50LCAianNVbmRlZmlu
ZWQoKSIpOworICAgICAgICAgICAgICAgIG15IEBjYWxsV2l0aEFyZ3MgPSBHZW5lcmF0ZUNhbGxX
aXRoVXNpbmdSZWZlcmVuY2VzKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57Q2FsbFdpdGh9LCBcQGltcGxDb250ZW50LCAianNVbmRlZmluZWQoKSIpOwogCiAgICAg
ICAgICAgICAgICAgaWYgKCRzdmdMaXN0UHJvcGVydHlUeXBlKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEpTVmFsdWUgcmVzdWx0ID0gICIgLiBOYXRpdmVU
b0pTVmFsdWUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLCAwLCAkaW50ZXJmYWNlLCAidGhpc09iamVj
dC0+d3JhcHBlZCgpLiRpbXBsR2V0dGVyRnVuY3Rpb25OYW1lKCIgLiAoam9pbiAiLCAiLCBAY2Fs
bFdpdGhBcmdzKSAuICIpIiwgInRoaXNPYmplY3QiKSAuICI7XG4iKTsKKyAgICAgICAgICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgSlNWYWx1ZSByZXN1bHQgPSAgIiAuIE5hdGl2
ZVRvSlNWYWx1ZVVzaW5nUmVmZXJlbmNlcygkYXR0cmlidXRlLT5zaWduYXR1cmUsIDAsICRpbnRl
cmZhY2UsICJ0aGlzT2JqZWN0LndyYXBwZWQoKS4kaW1wbEdldHRlckZ1bmN0aW9uTmFtZSgiIC4g
KGpvaW4gIiwgIiwgQGNhbGxXaXRoQXJncykgLiAiKSIsICJ0aGlzT2JqZWN0IikgLiAiO1xuIik7
CiAgICAgICAgICAgICAgICAgfSBlbHNpZiAoJHN2Z1Byb3BlcnR5T3JMaXN0UHJvcGVydHlUeXBl
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICRzdmdQcm9w
ZXJ0eU9yTGlzdFByb3BlcnR5VHlwZSYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKS5wcm9w
ZXJ0eVJlZmVyZW5jZSgpO1xuIik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgICRzdmdQcm9wZXJ0eU9yTGlzdFByb3BlcnR5VHlwZSYgaW1wbCA9IHRoaXNPYmpl
Y3Qud3JhcHBlZCgpLnByb3BlcnR5UmVmZXJlbmNlKCk7XG4iKTsKICAgICAgICAgICAgICAgICAg
ICAgaWYgKCRzdmdQcm9wZXJ0eU9yTGlzdFByb3BlcnR5VHlwZSBlcSAiZmxvYXQiKSB7ICMgU3Bl
Y2lhbCBjYXNlIGZvciBKU1NWR051bWJlcgotICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgSlNWYWx1ZSByZXN1bHQgPSAiIC4gTmF0aXZlVG9KU1ZhbHVlKCRh
dHRyaWJ1dGUtPnNpZ25hdHVyZSwgMCwgJGludGVyZmFjZSwgImltcGwiLCAidGhpc09iamVjdCIp
IC4gIjtcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgSlNWYWx1ZSByZXN1bHQgPSAiIC4gTmF0aXZlVG9KU1ZhbHVlVXNpbmdSZWZlcmVuY2VzKCRh
dHRyaWJ1dGUtPnNpZ25hdHVyZSwgMCwgJGludGVyZmFjZSwgImltcGwiLCAidGhpc09iamVjdCIp
IC4gIjtcbiIpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgSlNWYWx1ZSByZXN1bHQgPSAiIC4gTmF0
aXZlVG9KU1ZhbHVlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgMCwgJGludGVyZmFjZSwgImltcGwu
JGltcGxHZXR0ZXJGdW5jdGlvbk5hbWUoIiAuIChqb2luICIsICIsIEBjYWxsV2l0aEFyZ3MpIC4g
IikiLCAidGhpc09iamVjdCIpIC4gIjtcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgSlNWYWx1ZSByZXN1bHQgPSAiIC4gTmF0aXZlVG9KU1ZhbHVl
VXNpbmdSZWZlcmVuY2VzKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgMCwgJGludGVyZmFjZSwgImlt
cGwuJGltcGxHZXR0ZXJGdW5jdGlvbk5hbWUoIiAuIChqb2luICIsICIsIEBjYWxsV2l0aEFyZ3Mp
IC4gIikiLCAidGhpc09iamVjdCIpIC4gIjtcbiIpOwogCiAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICB9IGVsc2UgewpAQCAtMzA2MiwzMSArMzA2MywzMSBAQCBzdWIgR2Vu
ZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAg
ICAgICAgICAgdW5zaGlmdChAYXJndW1lbnRzLCBAY2FsbFdpdGhBcmdzKTsKLSAgICAgICAgICAg
ICAgICAgICAgbXkgJGpzVHlwZSA9IE5hdGl2ZVRvSlNWYWx1ZSgkYXR0cmlidXRlLT5zaWduYXR1
cmUsIDAsICRpbnRlcmZhY2UsICIke2Z1bmN0aW9uTmFtZX0oIiAuIGpvaW4oIiwgIiwgQGFyZ3Vt
ZW50cykgLiAiKSIsICJ0aGlzT2JqZWN0Iik7Ci0gICAgICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7XG4iKSBp
ZiAhJGF0dHJpYnV0ZS0+aXNTdGF0aWM7CisgICAgICAgICAgICAgICAgICAgIG15ICRqc1R5cGUg
PSBOYXRpdmVUb0pTVmFsdWVVc2luZ1JlZmVyZW5jZXMoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLCAw
LCAkaW50ZXJmYWNlLCAiJHtmdW5jdGlvbk5hbWV9KCIgLiBqb2luKCIsICIsIEBhcmd1bWVudHMp
IC4gIikiLCAidGhpc09iamVjdCIpOworICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7XG4iKSBpZiAhJGF0
dHJpYnV0ZS0+aXNTdGF0aWM7CiAgICAgICAgICAgICAgICAgICAgIGlmICgkY29kZUdlbmVyYXRv
ci0+SXNTVkdBbmltYXRlZFR5cGUoJHR5cGUpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvIG9iaiA9ICRqc1R5cGU7XG4iKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEpTVmFsdWUgcmVzdWx0ID0g
dG9KUyhzdGF0ZSwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCksIG9iai5nZXQoKSk7XG4iKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEpTVmFsdWUg
cmVzdWx0ID0gdG9KUygmc3RhdGUsIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIG9iai5nZXQo
KSk7XG4iKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEpTVmFsdWUgcmVzdWx0ID0gJGpzVHlwZTtc
biIpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgdGhpc09iamVjdC0+bV8iIC4gJGF0dHJp
YnV0ZS0+c2lnbmF0dXJlLT5uYW1lIC4gIi5zZXQoc3RhdGUtPnZtKCksIHRoaXNPYmplY3QsIHJl
c3VsdCk7XG4iKSBpZiAkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+
e0NhY2hlZEF0dHJpYnV0ZX07CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgdGhpc09iamVjdC5tXyIgLiAkYXR0cmlidXRlLT5zaWduYXR1cmUtPm5hbWUgLiAiLnNldChz
dGF0ZS52bSgpLCAmdGhpc09iamVjdCwgcmVzdWx0KTtcbiIpIGlmICRhdHRyaWJ1dGUtPnNpZ25h
dHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q2FjaGVkQXR0cmlidXRlfTsKICAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gcmVzdWx0O1xuIik7CiAKICAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgdW5zaGlmdChAYXJndW1lbnRzLCBHZW5l
cmF0ZUNhbGxXaXRoKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
Q2FsbFdpdGh9LCBcQGltcGxDb250ZW50LCAianNVbmRlZmluZWQoKSIpKTsKKyAgICAgICAgICAg
ICAgICB1bnNoaWZ0KEBhcmd1bWVudHMsIEdlbmVyYXRlQ2FsbFdpdGhVc2luZ1JlZmVyZW5jZXMo
JGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDYWxsV2l0aH0sIFxA
aW1wbENvbnRlbnQsICJqc1VuZGVmaW5lZCgpIiwgMCkpOwogCiAgICAgICAgICAgICAgICAgaWYg
KCRzdmdQcm9wZXJ0eU9yTGlzdFByb3BlcnR5VHlwZSkgewotICAgICAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICAkc3ZnUHJvcGVydHlPckxpc3RQcm9wZXJ0eVR5cGUgaW1w
bCgqdGhpc09iamVjdC0+d3JhcHBlZCgpKTtcbiIpOwotICAgICAgICAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICBKU1ZhbHVlIHJlc3VsdCA9ICIgLiBOYXRpdmVUb0pTVmFsdWUo
JGF0dHJpYnV0ZS0+c2lnbmF0dXJlLCAwLCAkaW50ZXJmYWNlLCAiaW1wbC4kaW1wbEdldHRlckZ1
bmN0aW9uTmFtZSgiIC4gam9pbigiLCAiLCBAYXJndW1lbnRzKSAuICIpIiwgInRoaXNPYmplY3Qi
KSAuICI7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
JHN2Z1Byb3BlcnR5T3JMaXN0UHJvcGVydHlUeXBlIGltcGwoKnRoaXNPYmplY3Qud3JhcHBlZCgp
KTtcbiIpOworICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBKU1Zh
bHVlIHJlc3VsdCA9ICIgLiBOYXRpdmVUb0pTVmFsdWVVc2luZ1JlZmVyZW5jZXMoJGF0dHJpYnV0
ZS0+c2lnbmF0dXJlLCAwLCAkaW50ZXJmYWNlLCAiaW1wbC4kaW1wbEdldHRlckZ1bmN0aW9uTmFt
ZSgiIC4gam9pbigiLCAiLCBAYXJndW1lbnRzKSAuICIpIiwgInRoaXNPYmplY3QiKSAuICI7XG4i
KTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpO1xuIik7
Ci0gICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEpTVmFsdWUgcmVz
dWx0ID0gIiAuIE5hdGl2ZVRvSlNWYWx1ZSgkYXR0cmlidXRlLT5zaWduYXR1cmUsIDAsICRpbnRl
cmZhY2UsICJpbXBsLiRpbXBsR2V0dGVyRnVuY3Rpb25OYW1lKCIgLiBqb2luKCIsICIsIEBhcmd1
bWVudHMpIC4gIikiLCAidGhpc09iamVjdCIpIC4gIjtcbiIpOworICAgICAgICAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVk
KCk7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgSlNW
YWx1ZSByZXN1bHQgPSAiIC4gTmF0aXZlVG9KU1ZhbHVlVXNpbmdSZWZlcmVuY2VzKCRhdHRyaWJ1
dGUtPnNpZ25hdHVyZSwgMCwgJGludGVyZmFjZSwgImltcGwuJGltcGxHZXR0ZXJGdW5jdGlvbk5h
bWUoIiAuIGpvaW4oIiwgIiwgQGFyZ3VtZW50cykgLiAiKSIsICJ0aGlzT2JqZWN0IikgLiAiO1xu
Iik7CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCBlYyk7XG4iKTsKKyAg
ICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBzZXRET01FeGNlcHRpb24oJnN0
YXRlLCB0aHJvd1Njb3BlLCBlYyk7XG4iKTsKIAogICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIHJldHVybiByZXN1bHQ7XG4iKTsKICAgICAgICAgICAgIH0KQEAgLTMzNzAs
OCArMzM3MSw4IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICAgICAg
ICAgICAgICAkZnVuY3Rpb25OYW1lID0gImltcGwuJHtmdW5jdGlvbk5hbWV9IjsKICAgICAgICAg
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgIHVuc2hpZnQoQGFyZ3VtZW50cywg
R2VuZXJhdGVDYWxsV2l0aCgkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRl
cy0+e1NldHRlckNhbGxXaXRofSwgXEBpbXBsQ29udGVudCwgImZhbHNlIikpOwotICAgICAgICAg
ICAgICAgICAgICB1bnNoaWZ0KEBhcmd1bWVudHMsIEdlbmVyYXRlQ2FsbFdpdGgoJGF0dHJpYnV0
ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDYWxsV2l0aH0sIFxAaW1wbENvbnRl
bnQsICJmYWxzZSIpKTsKKyAgICAgICAgICAgICAgICAgICAgdW5zaGlmdChAYXJndW1lbnRzLCBH
ZW5lcmF0ZUNhbGxXaXRoVXNpbmdQb2ludGVycygkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVu
ZGVkQXR0cmlidXRlcy0+e1NldHRlckNhbGxXaXRofSwgXEBpbXBsQ29udGVudCwgImZhbHNlIikp
OworICAgICAgICAgICAgICAgICAgICB1bnNoaWZ0KEBhcmd1bWVudHMsIEdlbmVyYXRlQ2FsbFdp
dGhVc2luZ1BvaW50ZXJzKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57Q2FsbFdpdGh9LCBcQGltcGxDb250ZW50LCAiZmFsc2UiKSk7CiAKICAgICAgICAgICAgICAg
ICAgICAgcHVzaChAYXJndW1lbnRzLCAiZWMiKSBpZiAkc2V0dGVyTWF5VGhyb3dMZWdhY3lFeGNl
cHRpb247CiAKQEAgLTM4NTcsNiArMzg1OCwyOSBAQCBzdWIgR2VuZXJhdGVGdW5jdGlvbkNhc3Rl
ZFRoaXMKICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKGNhc3RlZFRoaXMsICR7Y2xhc3NOYW1lfTo6aW5mbygpKTtcbiIpIHVubGVzcyAkaW50ZXJm
YWNlLT5uYW1lIGVxICJFdmVudFRhcmdldCI7CiB9CiAKK3N1YiBHZW5lcmF0ZUNhbGxXaXRoVXNp
bmdSZWZlcmVuY2VzCit7CisgICAgbXkgKCRjYWxsV2l0aCwgJG91dHB1dEFycmF5LCAkcmV0dXJu
VmFsdWUsICRmdW5jdGlvbikgPSBAXzsKKworICAgIG15ICRzdGF0ZVBvaW50ZXIgPSAiJnN0YXRl
IjsKKyAgICBteSAkc3RhdGVSZWZlcmVuY2UgPSAic3RhdGUiOworICAgIG15ICRnbG9iYWxPYmpl
Y3QgPSAianNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUubGV4aWNhbEdsb2JhbE9iamVj
dCgpKSI7CisKKyAgICByZXR1cm4gR2VuZXJhdGVDYWxsV2l0aCgkY2FsbFdpdGgsICRvdXRwdXRB
cnJheSwgJHJldHVyblZhbHVlLCAkZnVuY3Rpb24sICRzdGF0ZVBvaW50ZXIsICRzdGF0ZVJlZmVy
ZW5jZSwgJGdsb2JhbE9iamVjdCk7Cit9CisKKyMgRklYTUU6IFdlIHNob3VsZCByZW1vdmUgR2Vu
ZXJhdGVDYWxsV2l0aFVzaW5nUG9pbnRlcnMgYW5kIGNvbWJpbmUgR2VuZXJhdGVDYWxsV2l0aFVz
aW5nUmVmZXJlbmNlcyBhbmQgR2VuZXJhdGVDYWxsV2l0aAorc3ViIEdlbmVyYXRlQ2FsbFdpdGhV
c2luZ1BvaW50ZXJzCit7CisgICAgbXkgKCRjYWxsV2l0aCwgJG91dHB1dEFycmF5LCAkcmV0dXJu
VmFsdWUsICRmdW5jdGlvbikgPSBAXzsKKworICAgIG15ICRzdGF0ZVBvaW50ZXIgPSAic3RhdGUi
OworICAgIG15ICRzdGF0ZVJlZmVyZW5jZSA9ICIqc3RhdGUiOworICAgIG15ICRnbG9iYWxPYmpl
Y3QgPSAianNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKSkiOworCisgICAgcmV0dXJuIEdlbmVyYXRlQ2FsbFdpdGgoJGNhbGxXaXRoLCAkb3V0cHV0
QXJyYXksICRyZXR1cm5WYWx1ZSwgJGZ1bmN0aW9uLCAkc3RhdGVQb2ludGVyLCAkc3RhdGVSZWZl
cmVuY2UsICRnbG9iYWxPYmplY3QpOworfQorCiBzdWIgR2VuZXJhdGVDYWxsV2l0aAogewogICAg
IG15ICRjYWxsV2l0aCA9IHNoaWZ0OwpAQCAtMzg2NCwxOCArMzg4OCwyMSBAQCBzdWIgR2VuZXJh
dGVDYWxsV2l0aAogICAgIG15ICRvdXRwdXRBcnJheSA9IHNoaWZ0OwogICAgIG15ICRyZXR1cm5W
YWx1ZSA9IHNoaWZ0OwogICAgIG15ICRmdW5jdGlvbiA9IHNoaWZ0OworICAgIG15ICRzdGF0ZVBv
aW50ZXIgPSBzaGlmdDsKKyAgICBteSAkc3RhdGVSZWZlcmVuY2UgPSBzaGlmdDsKKyAgICBteSAk
Z2xvYmFsT2JqZWN0ID0gc2hpZnQ7CiAKICAgICBteSBAY2FsbFdpdGhBcmdzOwotICAgIHB1c2go
QGNhbGxXaXRoQXJncywgIipzdGF0ZSIpIGlmICRjb2RlR2VuZXJhdG9yLT5FeHRlbmRlZEF0dHJp
YnV0ZUNvbnRhaW5zKCRjYWxsV2l0aCwgIlNjcmlwdFN0YXRlIik7CisgICAgcHVzaChAY2FsbFdp
dGhBcmdzLCAkc3RhdGVSZWZlcmVuY2UpIGlmICRjb2RlR2VuZXJhdG9yLT5FeHRlbmRlZEF0dHJp
YnV0ZUNvbnRhaW5zKCRjYWxsV2l0aCwgIlNjcmlwdFN0YXRlIik7CiAgICAgaWYgKCRjb2RlR2Vu
ZXJhdG9yLT5FeHRlbmRlZEF0dHJpYnV0ZUNvbnRhaW5zKCRjYWxsV2l0aCwgIlNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQiKSkgewotICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgYXV0byog
Y29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7XG4iKTsKKyAgICAgICAgcHVzaChA
JG91dHB1dEFycmF5LCAiICAgIGF1dG8qIGNvbnRleHQgPSAkZ2xvYmFsT2JqZWN0LT5zY3JpcHRF
eGVjdXRpb25Db250ZXh0KCk7XG4iKTsKICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAg
IGlmICghY29udGV4dClcbiIpOwogICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAg
IHJldHVybiIgLiAoJHJldHVyblZhbHVlID8gIiAiIC4gJHJldHVyblZhbHVlIDogIiIpIC4gIjtc
biIpOwogICAgICAgICBwdXNoKEBjYWxsV2l0aEFyZ3MsICIqY29udGV4dCIpOwogICAgIH0KICAg
ICBpZiAoJGNvZGVHZW5lcmF0b3ItPkV4dGVuZGVkQXR0cmlidXRlQ29udGFpbnMoJGNhbGxXaXRo
LCAiRG9jdW1lbnQiKSkgewogICAgICAgICAkaW1wbEluY2x1ZGVzeyJEb2N1bWVudC5oIn0gPSAx
OwotICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgYXV0byogY29udGV4dCA9IGpzQ2Fz
dDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCk7XG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAi
ICAgIGF1dG8qIGNvbnRleHQgPSAkZ2xvYmFsT2JqZWN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0
KCk7XG4iKTsKICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlmICghY29udGV4dClc
biIpOwogICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIHJldHVybiIgLiAoJHJl
dHVyblZhbHVlID8gIiAiIC4gJHJldHVyblZhbHVlIDogIiIpIC4gIjtcbiIpOwogICAgICAgICBw
dXNoKEAkb3V0cHV0QXJyYXksICIgICAgQVNTRVJUKGNvbnRleHQtPmlzRG9jdW1lbnQoKSk7XG4i
KTsKQEAgLTM4ODQsMjAgKzM5MTEsMjAgQEAgc3ViIEdlbmVyYXRlQ2FsbFdpdGgKICAgICB9CiAg
ICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5FeHRlbmRlZEF0dHJpYnV0ZUNvbnRhaW5zKCRjYWxsV2l0
aCwgIkNhbGxlckRvY3VtZW50IikpIHsKICAgICAgICAgJGltcGxJbmNsdWRlc3siRG9jdW1lbnQu
aCJ9ID0gMTsKLSAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGF1dG8qIGRvY3VtZW50
ID0gY2FsbGVyRE9NV2luZG93KHN0YXRlKS5kb2N1bWVudCgpO1xuIik7CisgICAgICAgIHB1c2go
QCRvdXRwdXRBcnJheSwgIiAgICBhdXRvKiBkb2N1bWVudCA9IGNhbGxlckRPTVdpbmRvdygkc3Rh
dGVQb2ludGVyKS5kb2N1bWVudCgpO1xuIik7CiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwg
IiAgICBpZiAoIWRvY3VtZW50KVxuIik7CiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAg
ICAgICAgcmV0dXJuIiAuICgkcmV0dXJuVmFsdWUgPyAiICIgLiAkcmV0dXJuVmFsdWUgOiAiIikg
LiAiO1xuIik7CiAgICAgICAgIHB1c2goQGNhbGxXaXRoQXJncywgIipkb2N1bWVudCIpOwogICAg
IH0KICAgICBpZiAoJGZ1bmN0aW9uIGFuZCAkY29kZUdlbmVyYXRvci0+RXh0ZW5kZWRBdHRyaWJ1
dGVDb250YWlucygkY2FsbFdpdGgsICJTY3JpcHRBcmd1bWVudHMiKSkgewotICAgICAgICBwdXNo
KEAkb3V0cHV0QXJyYXksICIgICAgUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPiBz
Y3JpcHRBcmd1bWVudHMoSW5zcGVjdG9yOjpjcmVhdGVTY3JpcHRBcmd1bWVudHMoc3RhdGUsICIg
LiBAeyRmdW5jdGlvbi0+cGFyYW1ldGVyc30gLiAiKSk7XG4iKTsKKyAgICAgICAgcHVzaChAJG91
dHB1dEFycmF5LCAiICAgIFJlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4gc2NyaXB0
QXJndW1lbnRzKEluc3BlY3Rvcjo6Y3JlYXRlU2NyaXB0QXJndW1lbnRzKCRzdGF0ZVBvaW50ZXIs
ICIgLiBAeyRmdW5jdGlvbi0+cGFyYW1ldGVyc30gLiAiKSk7XG4iKTsKICAgICAgICAgJGltcGxJ
bmNsdWRlc3siPGluc3BlY3Rvci9TY3JpcHRBcmd1bWVudHMuaD4ifSA9IDE7CiAgICAgICAgICRp
bXBsSW5jbHVkZXN7IjxpbnNwZWN0b3IvU2NyaXB0Q2FsbFN0YWNrRmFjdG9yeS5oPiJ9ID0gMTsK
ICAgICAgICAgcHVzaChAY2FsbFdpdGhBcmdzLCAiV1RGTW92ZShzY3JpcHRBcmd1bWVudHMpIik7
CiAgICAgfQotICAgIHB1c2goQGNhbGxXaXRoQXJncywgImFjdGl2ZURPTVdpbmRvdyhzdGF0ZSki
KSBpZiAkY29kZUdlbmVyYXRvci0+RXh0ZW5kZWRBdHRyaWJ1dGVDb250YWlucygkY2FsbFdpdGgs
ICJBY3RpdmVXaW5kb3ciKTsKLSAgICBwdXNoKEBjYWxsV2l0aEFyZ3MsICJmaXJzdERPTVdpbmRv
dyhzdGF0ZSkiKSBpZiAkY29kZUdlbmVyYXRvci0+RXh0ZW5kZWRBdHRyaWJ1dGVDb250YWlucygk
Y2FsbFdpdGgsICJGaXJzdFdpbmRvdyIpOwotICAgIHB1c2goQGNhbGxXaXRoQXJncywgImNhbGxl
ckRPTVdpbmRvdyhzdGF0ZSkiKSBpZiAkY29kZUdlbmVyYXRvci0+RXh0ZW5kZWRBdHRyaWJ1dGVD
b250YWlucygkY2FsbFdpdGgsICJDYWxsZXJXaW5kb3ciKTsKKyAgICBwdXNoKEBjYWxsV2l0aEFy
Z3MsICJhY3RpdmVET01XaW5kb3coJHN0YXRlUG9pbnRlcikiKSBpZiAkY29kZUdlbmVyYXRvci0+
RXh0ZW5kZWRBdHRyaWJ1dGVDb250YWlucygkY2FsbFdpdGgsICJBY3RpdmVXaW5kb3ciKTsKKyAg
ICBwdXNoKEBjYWxsV2l0aEFyZ3MsICJmaXJzdERPTVdpbmRvdygkc3RhdGVQb2ludGVyKSIpIGlm
ICRjb2RlR2VuZXJhdG9yLT5FeHRlbmRlZEF0dHJpYnV0ZUNvbnRhaW5zKCRjYWxsV2l0aCwgIkZp
cnN0V2luZG93Iik7CisgICAgcHVzaChAY2FsbFdpdGhBcmdzLCAiY2FsbGVyRE9NV2luZG93KCRz
dGF0ZVBvaW50ZXIpIikgaWYgJGNvZGVHZW5lcmF0b3ItPkV4dGVuZGVkQXR0cmlidXRlQ29udGFp
bnMoJGNhbGxXaXRoLCAiQ2FsbGVyV2luZG93Iik7CiAKICAgICByZXR1cm4gQGNhbGxXaXRoQXJn
czsKIH0KQEAgLTM5OTUsNyArNDAyMiw3IEBAIHN1YiBHZW5lcmF0ZVBhcmFtZXRlcnNDaGVjawog
ICAgIGlmICghJGZ1bmN0aW9uLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0NvbnN0
cnVjdG9yfSkgewogICAgICAgICBteSAkbmFtZSA9ICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5uYW1l
OwogICAgICAgICAkcXVvdGVkRnVuY3Rpb25OYW1lID0gIlwiJG5hbWVcIiI7Ci0gICAgICAgIHB1
c2goQGFyZ3VtZW50cywgR2VuZXJhdGVDYWxsV2l0aCgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57Q2FsbFdpdGh9LCBcQCRvdXRwdXRBcnJheSwgIkpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKSIsICRmdW5jdGlvbikpOworICAgICAgICBwdXNoKEBhcmd1bWVu
dHMsIEdlbmVyYXRlQ2FsbFdpdGhVc2luZ1BvaW50ZXJzKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPntDYWxsV2l0aH0sIFxAJG91dHB1dEFycmF5LCAiSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpIiwgJGZ1bmN0aW9uKSk7CiAgICAgfSBlbHNlIHsKICAgICAg
ICAgJHF1b3RlZEZ1bmN0aW9uTmFtZSA9ICJudWxscHRyIjsKICAgICB9CkBAIC00NDQ1LDcgKzQ0
NzIsNyBAQCBzdWIgR2VuZXJhdGVDYWxsYmFja0ltcGxlbWVudGF0aW9uCiAKICAgICAgICAgICAg
IGZvcmVhY2ggbXkgJHBhcmFtIChAcGFyYW1zKSB7CiAgICAgICAgICAgICAgICAgbXkgJHBhcmFt
TmFtZSA9ICRwYXJhbS0+bmFtZTsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICBhcmdzLmFwcGVuZCgiIC4gTmF0aXZlVG9KU1ZhbHVlKCRwYXJhbSwgMSwgJGludGVyZmFj
ZSwgJHBhcmFtTmFtZSwgIm1fZGF0YSIpIC4gIik7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICBhcmdzLmFwcGVuZCgiIC4gTmF0aXZlVG9KU1ZhbHVlVXNpbmdQ
b2ludGVycygkcGFyYW0sIDEsICRpbnRlcmZhY2UsICRwYXJhbU5hbWUsICJtX2RhdGEiKSAuICIp
O1xuIik7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
XG4gICAgTmFrZWRQdHI8SlNDOjpFeGNlcHRpb24+IHJldHVybmVkRXhjZXB0aW9uO1xuIik7CkBA
IC00NTQzLDIzICs0NTcwLDIzIEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uRnVuY3Rpb25D
YWxsKCkKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAkaW5kZW50IC4gIiAgICAkbmF0
aXZlVHlwZSBtZW1vaXplZFJlc3VsdCA9ICRmdW5jdGlvblN0cmluZztcbiIpOwogICAgICAgICAg
ICAgbXkgJGV4Y2VwdGlvbkNvZGUgPSAkbWF5VGhyb3dMZWdhY3lFeGNlcHRpb24gPyAiZWMiIDog
IjAiOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICRpbmRlbnQgLiAiICAgIGN1cnNv
ci5hcHBlbmRJbnB1dDxNZW1vaXplZERPTVJlc3VsdDwkbWVtb2l6ZWRUeXBlPj4oYmluZGluZ05h
bWUuZ2V0KCkuc3RyaW5nKCksIG1lbW9pemVkUmVzdWx0LCAkZXhjZXB0aW9uQ29kZSk7XG4iKTsK
LSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAkaW5kZW50IC4gIiAgICByZXN1bHQgPSAi
IC4gTmF0aXZlVG9KU1ZhbHVlKCRmdW5jdGlvbi0+c2lnbmF0dXJlLCAxLCAkaW50ZXJmYWNlLCAi
bWVtb2l6ZWRSZXN1bHQiLCAkdGhpc09iamVjdCkgLiAiO1xuIik7CisgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgJGluZGVudCAuICIgICAgcmVzdWx0ID0gIiAuIE5hdGl2ZVRvSlNWYWx1
ZVVzaW5nUG9pbnRlcnMoJGZ1bmN0aW9uLT5zaWduYXR1cmUsIDEsICRpbnRlcmZhY2UsICJtZW1v
aXplZFJlc3VsdCIsICR0aGlzT2JqZWN0KSAuICI7XG4iKTsKICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAkaW5kZW50IC4gIn0gZWxzZSBpZiAoY3Vyc29yLmlzUmVwbGF5aW5nKCkpIHtc
biIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICRpbmRlbnQgLiAiICAgIE1lbW9p
emVkRE9NUmVzdWx0QmFzZSogaW5wdXQgPSBjdXJzb3IuZmV0Y2hJbnB1dDxNZW1vaXplZERPTVJl
c3VsdEJhc2U+KCk7XG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAkaW5kZW50
IC4gIiAgICAkbWVtb2l6ZWRUeXBlIG1lbW9pemVkUmVzdWx0O1xuIik7CiAgICAgICAgICAgICAj
IEZJWE1FOiB0aGUgZ2VuZXJhdGVkIGNvZGUgc2hvdWxkIHJlcG9ydCBhbiBlcnJvciBpZiBhbiBp
bnB1dCBjYW5ub3QgYmUgZmV0Y2hlZCBvciBjb252ZXJ0ZWQuCiAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgJGluZGVudCAuICIgICAgaWYgKGlucHV0ICYmIGlucHV0LT5jb252ZXJ0VG88
JG1lbW9pemVkVHlwZT4obWVtb2l6ZWRSZXN1bHQpKSB7XG4iKTsKLSAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAkaW5kZW50IC4gIiAgICAgICAgcmVzdWx0ID0gIiAuIE5hdGl2ZVRvSlNW
YWx1ZSgkZnVuY3Rpb24tPnNpZ25hdHVyZSwgMSwgJGludGVyZmFjZSwgIm1lbW9pemVkUmVzdWx0
IiwgJHRoaXNPYmplY3QpIC4gIjtcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICRpbmRlbnQgLiAiICAgICAgICByZXN1bHQgPSAiIC4gTmF0aXZlVG9KU1ZhbHVlVXNpbmdQb2lu
dGVycygkZnVuY3Rpb24tPnNpZ25hdHVyZSwgMSwgJGludGVyZmFjZSwgIm1lbW9pemVkUmVzdWx0
IiwgJHRoaXNPYmplY3QpIC4gIjtcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICRpbmRlbnQgLiAiICAgICAgICBlYyA9IGlucHV0LT5leGNlcHRpb25Db2RlKCk7XG4iKSBpZiAk
bWF5VGhyb3dMZWdhY3lFeGNlcHRpb247CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
JGluZGVudCAuICIgICAgfSBlbHNlXG4iKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAkaW5kZW50IC4gIiAgICAgICAgcmVzdWx0ID0gIiAuIE5hdGl2ZVRvSlNWYWx1ZSgkZnVuY3Rp
b24tPnNpZ25hdHVyZSwgMSwgJGludGVyZmFjZSwgJGZ1bmN0aW9uU3RyaW5nLCAkdGhpc09iamVj
dCkgLiAiO1xuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgJGluZGVudCAuICIg
ICAgICAgIHJlc3VsdCA9ICIgLiBOYXRpdmVUb0pTVmFsdWVVc2luZ1BvaW50ZXJzKCRmdW5jdGlv
bi0+c2lnbmF0dXJlLCAxLCAkaW50ZXJmYWNlLCAkZnVuY3Rpb25TdHJpbmcsICR0aGlzT2JqZWN0
KSAuICI7XG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAkaW5kZW50IC4gIn0g
ZWxzZVxuIik7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgJGluZGVudCAuICIgICAg
cmVzdWx0ID0gIiAuIE5hdGl2ZVRvSlNWYWx1ZSgkZnVuY3Rpb24tPnNpZ25hdHVyZSwgMSwgJGlu
dGVyZmFjZSwgJGZ1bmN0aW9uU3RyaW5nLCAkdGhpc09iamVjdCkgLiAiO1xuIik7CisgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgJGluZGVudCAuICIgICAgcmVzdWx0ID0gIiAuIE5hdGl2
ZVRvSlNWYWx1ZVVzaW5nUG9pbnRlcnMoJGZ1bmN0aW9uLT5zaWduYXR1cmUsIDEsICRpbnRlcmZh
Y2UsICRmdW5jdGlvblN0cmluZywgJHRoaXNPYmplY3QpIC4gIjtcbiIpOwogICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIjZWxzZVxuIik7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgJGluZGVudCAuICJyZXN1bHQgPSAiIC4gTmF0aXZlVG9KU1ZhbHVlKCRmdW5jdGlvbi0+
c2lnbmF0dXJlLCAxLCAkaW50ZXJmYWNlLCAkZnVuY3Rpb25TdHJpbmcsICR0aGlzT2JqZWN0KSAu
ICI7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAkaW5kZW50IC4gInJlc3Vs
dCA9ICIgLiBOYXRpdmVUb0pTVmFsdWVVc2luZ1BvaW50ZXJzKCRmdW5jdGlvbi0+c2lnbmF0dXJl
LCAxLCAkaW50ZXJmYWNlLCAkZnVuY3Rpb25TdHJpbmcsICR0aGlzT2JqZWN0KSAuICI7XG4iKTsK
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiI2VuZGlmXG4iKTsKICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAkaW5kZW50IC4gIkpTVmFsdWUg
cmVzdWx0ID0gIiAuIE5hdGl2ZVRvSlNWYWx1ZSgkZnVuY3Rpb24tPnNpZ25hdHVyZSwgMSwgJGlu
dGVyZmFjZSwgJGZ1bmN0aW9uU3RyaW5nLCAkdGhpc09iamVjdCkgLiAiO1xuIik7CisgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgJGluZGVudCAuICJKU1ZhbHVlIHJlc3VsdCA9ICIgLiBO
YXRpdmVUb0pTVmFsdWVVc2luZ1BvaW50ZXJzKCRmdW5jdGlvbi0+c2lnbmF0dXJlLCAxLCAkaW50
ZXJmYWNlLCAkZnVuY3Rpb25TdHJpbmcsICR0aGlzT2JqZWN0KSAuICI7XG4iKTsKICAgICAgICAg
fQogCiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4iIC4gJGluZGVudCAuICJzZXRET01F
eGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIGVjKTtcbiIpIGlmICRtYXlUaHJvd0xlZ2FjeUV4
Y2VwdGlvbjsKQEAgLTQ4ODcsMjMgKzQ5MTQsNDQgQEAgc3ViIEpTVmFsdWVUb05hdGl2ZQogICAg
IHJldHVybiAoIkpTJHt0eXBlfTo6dG9XcmFwcGVkKCR2YWx1ZSkiLCAwKTsKIH0KIAotc3ViIE5h
dGl2ZVRvSlNWYWx1ZQorc3ViIE5hdGl2ZVRvSlNWYWx1ZVVzaW5nUmVmZXJlbmNlcworeworICAg
IG15ICgkc2lnbmF0dXJlLCAkaW5GdW5jdGlvbkNhbGwsICRpbnRlcmZhY2UsICR2YWx1ZSwgJHRo
aXNWYWx1ZSkgPSBAXzsKKyAgICBteSAkc3RhdGVQb2ludGVyID0gIiZzdGF0ZSI7CisgICAgbXkg
JHN0YXRlUmVmZXJlbmNlID0gInN0YXRlIjsKKyAgICBteSAkd3JhcHBlZCA9ICIkdGhpc1ZhbHVl
LndyYXBwZWQoKSI7CisgICAgbXkgJGdsb2JhbE9iamVjdCA9ICR0aGlzVmFsdWUgPyAiJHRoaXNW
YWx1ZS5nbG9iYWxPYmplY3QoKSIgOiAianNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUu
bGV4aWNhbEdsb2JhbE9iamVjdCgpKSI7CisKKyAgICByZXR1cm4gTmF0aXZlVG9KU1ZhbHVlKCRz
aWduYXR1cmUsICRpbkZ1bmN0aW9uQ2FsbCwgJGludGVyZmFjZSwgJHZhbHVlLCAkc3RhdGVQb2lu
dGVyLCAkc3RhdGVSZWZlcmVuY2UsICR3cmFwcGVkLCAkZ2xvYmFsT2JqZWN0KTsKK30KKworIyBG
SVhNRTogV2Ugc2hvdWxkIHJlbW92ZSBOYXRpdmVUb0pTVmFsdWVVc2luZ1BvaW50ZXJzIGFuZCBj
b21iaW5lIE5hdGl2ZVRvSlNWYWx1ZVVzaW5nUmVmZXJlbmNlcyBhbmQgTmF0aXZlVG9KU1ZhbHVl
CitzdWIgTmF0aXZlVG9KU1ZhbHVlVXNpbmdQb2ludGVycwogewogICAgIG15ICgkc2lnbmF0dXJl
LCAkaW5GdW5jdGlvbkNhbGwsICRpbnRlcmZhY2UsICR2YWx1ZSwgJHRoaXNWYWx1ZSkgPSBAXzsK
KyAgICBteSAkc3RhdGVQb2ludGVyID0gInN0YXRlIjsKKyAgICBteSAkc3RhdGVSZWZlcmVuY2Ug
PSAiKnN0YXRlIjsKKyAgICBteSAkd3JhcHBlZCA9ICIkdGhpc1ZhbHVlLT53cmFwcGVkKCkiOwor
ICAgIG15ICRnbG9iYWxPYmplY3QgPSAkdGhpc1ZhbHVlID8gIiR0aGlzVmFsdWUtPmdsb2JhbE9i
amVjdCgpIiA6ICJqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS0+bGV4aWNhbEdsb2Jh
bE9iamVjdCgpKSI7CisKKyAgICByZXR1cm4gTmF0aXZlVG9KU1ZhbHVlKCRzaWduYXR1cmUsICRp
bkZ1bmN0aW9uQ2FsbCwgJGludGVyZmFjZSwgJHZhbHVlLCAkc3RhdGVQb2ludGVyLCAkc3RhdGVS
ZWZlcmVuY2UsICR3cmFwcGVkLCAkZ2xvYmFsT2JqZWN0KTsKK30KKworc3ViIE5hdGl2ZVRvSlNW
YWx1ZQoreworICAgIG15ICgkc2lnbmF0dXJlLCAkaW5GdW5jdGlvbkNhbGwsICRpbnRlcmZhY2Us
ICR2YWx1ZSwgJHN0YXRlUG9pbnRlciwgJHN0YXRlUmVmZXJlbmNlLCAkd3JhcHBlZCwgJGdsb2Jh
bE9iamVjdCkgPSBAXzsKIAogICAgIG15ICRjb25kaXRpb25hbCA9ICRzaWduYXR1cmUtPmV4dGVu
ZGVkQXR0cmlidXRlcy0+e0NvbmRpdGlvbmFsfTsKICAgICBteSAkdHlwZSA9ICRzaWduYXR1cmUt
PnR5cGU7CiAgICAgbXkgJGlzTnVsbGFibGUgPSAkc2lnbmF0dXJlLT5pc051bGxhYmxlOwogICAg
IG15ICRtYXlUaHJvd0V4Y2VwdGlvbiA9ICRzaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+
e0dldHRlck1heVRocm93RXhjZXB0aW9ufSB8fCAkc2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPntNYXlUaHJvd0V4Y2VwdGlvbn07CiAKLSAgICBteSAkZ2xvYmFsT2JqZWN0ID0gJHRoaXNW
YWx1ZSA/ICIkdGhpc1ZhbHVlLT5nbG9iYWxPYmplY3QoKSIgOiAianNDYXN0PEpTRE9NR2xvYmFs
T2JqZWN0Kj4oc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSkiOwotCi0gICAgcmV0dXJuICJ0
b0pTQm9vbGVhbigqc3RhdGUsIHRocm93U2NvcGUsICR2YWx1ZSkiIGlmICR0eXBlIGVxICJib29s
ZWFuIiAmJiAkbWF5VGhyb3dFeGNlcHRpb247CisgICAgcmV0dXJuICJ0b0pTQm9vbGVhbigkc3Rh
dGVSZWZlcmVuY2UsIHRocm93U2NvcGUsICR2YWx1ZSkiIGlmICR0eXBlIGVxICJib29sZWFuIiAm
JiAkbWF5VGhyb3dFeGNlcHRpb247CiAgICAgcmV0dXJuICJqc0Jvb2xlYW4oJHZhbHVlKSIgaWYg
JHR5cGUgZXEgImJvb2xlYW4iOwotICAgIHJldHVybiAidG9KU051bGxhYmxlRGF0ZSgqc3RhdGUs
IHRocm93U2NvcGUsICR2YWx1ZSkiIGlmICR0eXBlIGVxICJEYXRlIiAmJiAkaXNOdWxsYWJsZSAm
JiAkbWF5VGhyb3dFeGNlcHRpb247Ci0gICAgcmV0dXJuICJqc0RhdGVPck51bGwoc3RhdGUsICR2
YWx1ZSkiIGlmICR0eXBlIGVxICJEYXRlIiAmJiAkaXNOdWxsYWJsZTsKLSAgICByZXR1cm4gInRv
SlNEYXRlKCpzdGF0ZSwgdGhyb3dTY29wZSwgJHZhbHVlKSIgaWYgJHR5cGUgZXEgIkRhdGUiICYm
ICRtYXlUaHJvd0V4Y2VwdGlvbjsKLSAgICByZXR1cm4gImpzRGF0ZShzdGF0ZSwgJHZhbHVlKSIg
aWYgJHR5cGUgZXEgIkRhdGUiOworICAgIHJldHVybiAidG9KU051bGxhYmxlRGF0ZSgkc3RhdGVS
ZWZlcmVuY2UsIHRocm93U2NvcGUsICR2YWx1ZSkiIGlmICR0eXBlIGVxICJEYXRlIiAmJiAkaXNO
dWxsYWJsZSAmJiAkbWF5VGhyb3dFeGNlcHRpb247CisgICAgcmV0dXJuICJqc0RhdGVPck51bGwo
JHN0YXRlUG9pbnRlciwgJHZhbHVlKSIgaWYgJHR5cGUgZXEgIkRhdGUiICYmICRpc051bGxhYmxl
OworICAgIHJldHVybiAidG9KU0RhdGUoJHN0YXRlUmVmZXJlbmNlLCB0aHJvd1Njb3BlLCAkdmFs
dWUpIiBpZiAkdHlwZSBlcSAiRGF0ZSIgJiYgJG1heVRocm93RXhjZXB0aW9uOworICAgIHJldHVy
biAianNEYXRlKCRzdGF0ZVBvaW50ZXIsICR2YWx1ZSkiIGlmICR0eXBlIGVxICJEYXRlIjsKIAog
ICAgIGlmICgkY29kZUdlbmVyYXRvci0+SXNOdW1lcmljVHlwZSgkdHlwZSkgb3IgJHR5cGUgZXEg
IkRPTVRpbWVTdGFtcCIpIHsKICAgICAgICAgIyBXZSBjb3VsZCBpbnN0ZWFkIG92ZXJsb2FkIGEg
ZnVuY3Rpb24gdG8gd29yayB3aXRoIG9wdGlvbmFsIGFzIHdlbGwgYXMgbm9uLW9wdGlvbmFsIG51
bWJlcnMsIGJ1dCB0aGlzCkBAIC00OTEyLDQzICs0OTYwLDQzIEBAIHN1YiBOYXRpdmVUb0pTVmFs
dWUKICAgICAgICAgICAgICR2YWx1ZSA9fiBzL2dldFVuc2lnbmVkSW50ZWdyYWxBdHRyaWJ1dGUv
Z2V0SW50ZWdyYWxBdHRyaWJ1dGUvZzsKICAgICAgICAgICAgICR2YWx1ZSA9ICJzdGQ6Om1heCgw
LCAkdmFsdWUpIjsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gInRvSlNOdWxsYWJsZU51bWJl
cigqc3RhdGUsIHRocm93U2NvcGUsICR2YWx1ZSkiIGlmICRpc051bGxhYmxlICYmICRtYXlUaHJv
d0V4Y2VwdGlvbjsKKyAgICAgICAgcmV0dXJuICJ0b0pTTnVsbGFibGVOdW1iZXIoJHN0YXRlUmVm
ZXJlbmNlLCB0aHJvd1Njb3BlLCAkdmFsdWUpIiBpZiAkaXNOdWxsYWJsZSAmJiAkbWF5VGhyb3dF
eGNlcHRpb247CiAgICAgICAgIHJldHVybiAidG9OdWxsYWJsZUpTTnVtYmVyKCR2YWx1ZSkiIGlm
ICRpc051bGxhYmxlOwotICAgICAgICByZXR1cm4gInRvSlNOdW1iZXIoKnN0YXRlLCB0aHJvd1Nj
b3BlLCAkdmFsdWUpIiBpZiAkbWF5VGhyb3dFeGNlcHRpb247CisgICAgICAgIHJldHVybiAidG9K
U051bWJlcigkc3RhdGVSZWZlcmVuY2UsIHRocm93U2NvcGUsICR2YWx1ZSkiIGlmICRtYXlUaHJv
d0V4Y2VwdGlvbjsKICAgICAgICAgcmV0dXJuICJqc051bWJlcigkdmFsdWUpIjsKICAgICB9CiAK
ICAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPklzRW51bVR5cGUoJHR5cGUpKSB7CiAgICAgICAgIEFk
ZFRvSW1wbEluY2x1ZGVzKCI8cnVudGltZS9KU1N0cmluZy5oPiIsICRjb25kaXRpb25hbCk7Ci0g
ICAgICAgIHJldHVybiAianNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsICR2YWx1ZSkiOworICAgICAg
ICByZXR1cm4gImpzU3RyaW5nV2l0aENhY2hlKCRzdGF0ZVBvaW50ZXIsICR2YWx1ZSkiOwogICAg
IH0KIAogICAgIGlmICgkY29kZUdlbmVyYXRvci0+SXNTdHJpbmdUeXBlKCR0eXBlKSkgewogICAg
ICAgICBBZGRUb0ltcGxJbmNsdWRlcygiVVJMLmgiLCAkY29uZGl0aW9uYWwpOwotICAgICAgICBy
ZXR1cm4gImpzU3RyaW5nT3JOdWxsKHN0YXRlLCAkdmFsdWUpIiBpZiAkaXNOdWxsYWJsZTsKKyAg
ICAgICAgcmV0dXJuICJqc1N0cmluZ09yTnVsbCgkc3RhdGVQb2ludGVyLCAkdmFsdWUpIiBpZiAk
aXNOdWxsYWJsZTsKICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIjxydW50aW1lL0pTU3RyaW5n
Lmg+IiwgJGNvbmRpdGlvbmFsKTsKLSAgICAgICAgcmV0dXJuICJqc1N0cmluZ1dpdGhDYWNoZShz
dGF0ZSwgJHZhbHVlKSI7CisgICAgICAgIHJldHVybiAianNTdHJpbmdXaXRoQ2FjaGUoJHN0YXRl
UG9pbnRlciwgJHZhbHVlKSI7CiAgICAgfQogCiAgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc1Nl
cXVlbmNlT3JGcm96ZW5BcnJheVR5cGUoJHR5cGUpKSB7CiAgICAgICAgIG15ICRpbm5lclR5cGUg
PSAkY29kZUdlbmVyYXRvci0+R2V0U2VxdWVuY2VPckZyb3plbkFycmF5SW5uZXJUeXBlKCR0eXBl
KTsKICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkpTJHtpbm5lclR5cGV9LmgiLCAkY29uZGl0
aW9uYWwpIGlmICRjb2RlR2VuZXJhdG9yLT5Jc1JlZlB0clR5cGUoJGlubmVyVHlwZSk7Ci0gICAg
ICAgIHJldHVybiAianNBcnJheShzdGF0ZSwgJGdsb2JhbE9iamVjdCwgJHZhbHVlKSIgaWYgJGNv
ZGVHZW5lcmF0b3ItPklzU2VxdWVuY2VUeXBlKCR0eXBlKTsKLSAgICAgICAgcmV0dXJuICJqc0Zy
b3plbkFycmF5KHN0YXRlLCAkZ2xvYmFsT2JqZWN0LCAkdmFsdWUpIiBpZiAkY29kZUdlbmVyYXRv
ci0+SXNGcm96ZW5BcnJheVR5cGUoJHR5cGUpOworICAgICAgICByZXR1cm4gImpzQXJyYXkoJHN0
YXRlUG9pbnRlciwgJGdsb2JhbE9iamVjdCwgJHZhbHVlKSIgaWYgJGNvZGVHZW5lcmF0b3ItPklz
U2VxdWVuY2VUeXBlKCR0eXBlKTsKKyAgICAgICAgcmV0dXJuICJqc0Zyb3plbkFycmF5KCRzdGF0
ZVBvaW50ZXIsICRnbG9iYWxPYmplY3QsICR2YWx1ZSkiIGlmICRjb2RlR2VuZXJhdG9yLT5Jc0Zy
b3plbkFycmF5VHlwZSgkdHlwZSk7CiAgICAgfQogCiAgICAgaWYgKCR0eXBlIGVxICJhbnkiKSB7
CiAgICAgICAgIG15ICRyZXR1cm5UeXBlID0gJHNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57SW1wbGVtZW50YXRpb25SZXR1cm5UeXBlfTsKICAgICAgICAgaWYgKGRlZmluZWQgJHJldHVy
blR5cGUgYW5kICgkcmV0dXJuVHlwZSBlcSAiSURCS2V5UGF0aCIgb3IgJHJldHVyblR5cGUgZXEg
IklEQktleSIpKSB7CiAgICAgICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiSURCQmluZGluZ1V0
aWxpdGllcy5oIiwgJGNvbmRpdGlvbmFsKTsKLSAgICAgICAgICAgIHJldHVybiAidG9KUygqc3Rh
dGUsICokZ2xvYmFsT2JqZWN0LCAkdmFsdWUpIjsKKyAgICAgICAgICAgIHJldHVybiAidG9KUygk
c3RhdGVSZWZlcmVuY2UsICokZ2xvYmFsT2JqZWN0LCAkdmFsdWUpIjsKICAgICAgICAgfQogICAg
ICAgICByZXR1cm4gJHZhbHVlOwogICAgIH0KIAogICAgIGlmICgkdHlwZSBlcSAiU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlIikgewogICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiU2VyaWFsaXplZFNj
cmlwdFZhbHVlLmgiLCAkY29uZGl0aW9uYWwpOwotICAgICAgICByZXR1cm4gIiR2YWx1ZSA/ICR2
YWx1ZS0+ZGVzZXJpYWxpemUoc3RhdGUsICR0aGlzVmFsdWUtPmdsb2JhbE9iamVjdCgpLCAwKSA6
IGpzTnVsbCgpIjsKKyAgICAgICAgcmV0dXJuICIkdmFsdWUgPyAkdmFsdWUtPmRlc2VyaWFsaXpl
KCRzdGF0ZVBvaW50ZXIsICRnbG9iYWxPYmplY3QsIDApIDoganNOdWxsKCkiOwogICAgIH0KIAog
ICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJTdHlsZVByb3BlcnRpZXMuaCIsICRjb25kaXRpb25hbCkg
aWYgJHR5cGUgZXEgIkNTU1N0eWxlRGVjbGFyYXRpb24iOwpAQCAtNDk3Niw3ICs1MDI0LDcgQEAg
c3ViIE5hdGl2ZVRvSlNWYWx1ZQogICAgICAgICAgICAgaWYgKCRzZWxmSXNUZWFyT2ZmVHlwZSkg
ewogICAgICAgICAgICAgICAgICMgRklYTUU6IFdoeSBTVkdNYXRyaXggc3BlY2lmaWNhbGx5Pwog
ICAgICAgICAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJTVkdNYXRyaXhUZWFyT2ZmLmgiLCAk
Y29uZGl0aW9uYWwpOwotICAgICAgICAgICAgICAgICR2YWx1ZSA9ICJTVkdNYXRyaXhUZWFyT2Zm
OjpjcmVhdGUoJHRoaXNWYWx1ZS0+d3JhcHBlZCgpLCAkdmFsdWUpIjsKKyAgICAgICAgICAgICAg
ICAkdmFsdWUgPSAiU1ZHTWF0cml4VGVhck9mZjo6Y3JlYXRlKCR3cmFwcGVkLCAkdmFsdWUpIjsK
ICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMo
IlNWR1N0YXRpY1Byb3BlcnR5VGVhck9mZi5oIiwgJGNvbmRpdGlvbmFsKTsKICAgICAgICAgICAg
ICAgICBteSAkaW50ZXJmYWNlTmFtZSA9ICRpbnRlcmZhY2UtPm5hbWU7CkBAIC00OTkzLDggKzUw
NDEsOCBAQCBzdWIgTmF0aXZlVG9KU1ZhbHVlCiAgICAgbXkgJGZ1bmN0aW9uTmFtZSA9ICJ0b0pT
IjsKICAgICAkZnVuY3Rpb25OYW1lID0gInRvSlNOZXdseUNyZWF0ZWQiIGlmICRzaWduYXR1cmUt
PmV4dGVuZGVkQXR0cmlidXRlcy0+e05ld09iamVjdH07CiAKLSAgICBteSAkYXJndW1lbnRzID0g
InN0YXRlLCAkZ2xvYmFsT2JqZWN0LCAkdmFsdWUiOwotICAgICRhcmd1bWVudHMgPSAiKnN0YXRl
LCAqJGdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgJHZhbHVlIiBpZiAkbWF5VGhyb3dFeGNlcHRp
b247CisgICAgbXkgJGFyZ3VtZW50cyA9ICIkc3RhdGVQb2ludGVyLCAkZ2xvYmFsT2JqZWN0LCAk
dmFsdWUiOworICAgICRhcmd1bWVudHMgPSAiJHN0YXRlUmVmZXJlbmNlLCAqJGdsb2JhbE9iamVj
dCwgdGhyb3dTY29wZSwgJHZhbHVlIiBpZiAkbWF5VGhyb3dFeGNlcHRpb247CiAKICAgICByZXR1
cm4gIiRmdW5jdGlvbk5hbWUoJGFyZ3VtZW50cykiOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEFjdGl2ZURPTU9iamVjdC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0QWN0aXZlRE9N
T2JqZWN0LmNwcAppbmRleCBkMjE4ZDBlNTg2N2RhNTE2ODVmOTA3ZDFjNzA4MmVmYWEyNjFlMzQ4
Li5mMDJiMzljOGU2YzIyZTcwZjBjMjM0Y2JlYzJkMGNiNDk0NzA3MzFhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0QWN0aXZlRE9NT2Jq
ZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0QWN0aXZlRE9NT2JqZWN0LmNwcApAQCAtMTQ1LDIwICsxNDUsMjAgQEAgaW5saW5lIEpTVGVz
dEFjdGl2ZURPTU9iamVjdCogSlNUZXN0QWN0aXZlRE9NT2JqZWN0OjpjYXN0Rm9yQXR0cmlidXRl
KEpTQzo6RXhlY1MKICAgICByZXR1cm4ganNEeW5hbWljQ2FzdDxKU1Rlc3RBY3RpdmVET01PYmpl
Y3QqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RBY3RpdmVET01PYmplY3RFeGNpdGluZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlKiwg
SlNUZXN0QWN0aXZlRE9NT2JqZWN0KiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CitzdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0QWN0aXZlRE9NT2JqZWN0RXhjaXRpbmdBdHRyR2V0dGVyKEV4
ZWNTdGF0ZSYsIEpTVGVzdEFjdGl2ZURPTU9iamVjdCYsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
OwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RBY3RpdmVET01PYmplY3RFeGNpdGluZ0F0dHIoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7
CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0QWN0aXZlRE9NT2JqZWN0Pjo6YXR0cmli
dXRlPGpzVGVzdEFjdGl2ZURPTU9iamVjdEV4Y2l0aW5nQXR0ckdldHRlcj4oc3RhdGUsIHRoaXNW
YWx1ZSwgImV4Y2l0aW5nQXR0ciIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
QWN0aXZlRE9NT2JqZWN0RXhjaXRpbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVz
dEFjdGl2ZURPTU9iamVjdCogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RBY3RpdmVET01PYmplY3RFeGNpdGluZ0F0dHJHZXR0
ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0QWN0aXZlRE9NT2JqZWN0JiB0aGlzT2JqZWN0LCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
ICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIGlmICghQmluZGluZ1NlY3VyaXR5OjpzaG91
bGRBbGxvd0FjY2Vzc1RvRnJhbWUoc3RhdGUsIHRoaXNPYmplY3QtPndyYXBwZWQoKS5mcmFtZSgp
LCBUaHJvd1NlY3VyaXR5RXJyb3IpKQorICAgIGlmICghQmluZGluZ1NlY3VyaXR5OjpzaG91bGRB
bGxvd0FjY2Vzc1RvRnJhbWUoJnN0YXRlLCB0aGlzT2JqZWN0LndyYXBwZWQoKS5mcmFtZSgpLCBU
aHJvd1NlY3VyaXR5RXJyb3IpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICBh
dXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOworICAgIGF1dG8mIGltcGwgPSB0aGlz
T2JqZWN0LndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwuZXhj
aXRpbmdBdHRyKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRD
b25zdHJ1Y3Rvci5jcHAKaW5kZXggM2E0NWMyODg2MjVmZjNkMzcyYjg4NWVmMWE0NDFhNzVmZTMz
NGZmOC4uNDlhZGFkYmViOTRmNDZmMjdmY2EwMTJiNmQ4Njg1Mzg0NTIyZGFkYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50Q29u
c3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RFdmVudENvbnN0cnVjdG9yLmNwcApAQCAtMTgzLDUyICsxODMsNTIgQEAgaW5saW5l
IEpTVGVzdEV2ZW50Q29uc3RydWN0b3IqIEpTVGVzdEV2ZW50Q29uc3RydWN0b3I6OmNhc3RGb3JB
dHRyaWJ1dGUoSlNDOjpFeGUKICAgICByZXR1cm4ganNEeW5hbWljQ2FzdDxKU1Rlc3RFdmVudENv
bnN0cnVjdG9yKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogfQogCi1zdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0RXZlbnRDb25zdHJ1Y3RvckF0dHIxR2V0dGVyKEV4ZWNTdGF0ZSos
IEpTVGVzdEV2ZW50Q29uc3RydWN0b3IqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKK3N0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RFdmVudENvbnN0cnVjdG9yQXR0cjFHZXR0ZXIoRXhlY1N0
YXRlJiwgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvciYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwog
CiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RFdmVudENvbnN0cnVjdG9yQXR0cjEoRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0
dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0RXZlbnRDb25zdHJ1Y3Rvcj46OmF0dHJpYnV0ZTxqc1Rl
c3RFdmVudENvbnN0cnVjdG9yQXR0cjFHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJhdHRyMSIp
OwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RXZlbnRDb25zdHJ1Y3RvckF0dHIx
R2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEV2ZW50Q29uc3RydWN0b3IqIHRoaXNPYmpl
Y3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
RXZlbnRDb25zdHJ1Y3RvckF0dHIxR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEV2ZW50
Q29uc3RydWN0b3ImIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAg
YXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9
IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLmF0dHIxKCkpOworICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0
aENhY2hlKCZzdGF0ZSwgaW1wbC5hdHRyMSgpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1z
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RXZlbnRDb25zdHJ1Y3RvckF0dHIyR2V0dGVyKEV4
ZWNTdGF0ZSosIEpTVGVzdEV2ZW50Q29uc3RydWN0b3IqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KTsKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RFdmVudENvbnN0cnVjdG9yQXR0cjJHZXR0
ZXIoRXhlY1N0YXRlJiwgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvciYsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RFdmVudENvbnN0cnVjdG9yQXR0cjIoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7
CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0RXZlbnRDb25zdHJ1Y3Rvcj46OmF0dHJp
YnV0ZTxqc1Rlc3RFdmVudENvbnN0cnVjdG9yQXR0cjJHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUs
ICJhdHRyMiIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RXZlbnRDb25zdHJ1
Y3RvckF0dHIyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEV2ZW50Q29uc3RydWN0b3Iq
IHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0RXZlbnRDb25zdHJ1Y3RvckF0dHIyR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpT
VGVzdEV2ZW50Q29uc3RydWN0b3ImIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
CiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVl
IHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLmF0dHIyKCkpOworICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpz
U3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgaW1wbC5hdHRyMigpKTsKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCiAjaWYgRU5BQkxFKFNQRUNJQUxfRVZFTlQpCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0RXZlbnRDb25zdHJ1Y3RvckF0dHIzR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdEV2ZW50
Q29uc3RydWN0b3IqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKK3N0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RFdmVudENvbnN0cnVjdG9yQXR0cjNHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0
RXZlbnRDb25zdHJ1Y3RvciYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RFdmVudENvbnN0cnVjdG9yQXR0cjMoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdD
YWxsZXI8SlNUZXN0RXZlbnRDb25zdHJ1Y3Rvcj46OmF0dHJpYnV0ZTxqc1Rlc3RFdmVudENvbnN0
cnVjdG9yQXR0cjNHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJhdHRyMyIpOwogfQogCi1zdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RXZlbnRDb25zdHJ1Y3RvckF0dHIzR2V0dGVyKEV4ZWNT
dGF0ZSogc3RhdGUsIEpTVGVzdEV2ZW50Q29uc3RydWN0b3IqIHRoaXNPYmplY3QsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RXZlbnRDb25zdHJ1
Y3RvckF0dHIzR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEV2ZW50Q29uc3RydWN0b3Im
IHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgYXV0byYgaW1wbCA9
IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0
aENhY2hlKHN0YXRlLCBpbXBsLmF0dHIzKCkpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKCZzdGF0
ZSwgaW1wbC5hdHRyMygpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXhjZXB0aW9uLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFeGNlcHRp
b24uY3BwCmluZGV4IDMxYzZhZTkyMTEyY2Q3NmMzZmYwMjBkNGUzMjMwNjkxNmJkZGFiZWEuLmI2
YTMwMzFiYTcyZjMyYTk2ZDkyMTEyYWMwMzQ2YTZjYWI4ZDU2NDIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFeGNlcHRpb24uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFeGNlcHRp
b24uY3BwCkBAIC0xMzcsMTkgKzEzNywxOSBAQCBpbmxpbmUgSlNUZXN0RXhjZXB0aW9uKiBKU1Rl
c3RFeGNlcHRpb246OmNhc3RGb3JBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBFbmNvZAogICAg
IHJldHVybiBqc0R5bmFtaWNDYXN0PEpTVGVzdEV4Y2VwdGlvbio+KEpTVmFsdWU6OmRlY29kZSh0
aGlzVmFsdWUpKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEV4Y2VwdGlvbk5h
bWVHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0RXhjZXB0aW9uKiwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSk7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RXhjZXB0aW9uTmFtZUdldHRlcihF
eGVjU3RhdGUmLCBKU1Rlc3RFeGNlcHRpb24mLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAog
RW5jb2RlZEpTVmFsdWUganNUZXN0RXhjZXB0aW9uTmFtZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGlu
Z0NhbGxlcjxKU1Rlc3RFeGNlcHRpb24+OjphdHRyaWJ1dGU8anNUZXN0RXhjZXB0aW9uTmFtZUdl
dHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgIm5hbWUiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdEV4Y2VwdGlvbk5hbWVHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0RXhj
ZXB0aW9uKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdEV4Y2VwdGlvbk5hbWVHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNU
ZXN0RXhjZXB0aW9uJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAg
IGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQg
PSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5uYW1lKCkpOworICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0
aENhY2hlKCZzdGF0ZSwgaW1wbC5uYW1lKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RH
bG9iYWxPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdEdsb2JhbE9iamVjdC5jcHAKaW5kZXggNmMzOGRjYWNhYjFiMTM4NGM0OGVlOGYxYTA1
NmYxYjcwMDhhZTk3NC4uZTA4NGYxMmRiMzc3OGQ4NDQ0NmQyMzlmZmJjNDAyMTMzMWI4YjRmNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEdsb2JhbE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEdsb2JhbE9iamVjdC5jcHAKQEAgLTE4Miw3MSArMTgyLDcxIEBAIGlubGlu
ZSBKU1Rlc3RHbG9iYWxPYmplY3QqIEpTVGVzdEdsb2JhbE9iamVjdDo6Y2FzdEZvckF0dHJpYnV0
ZShKU0M6OkV4ZWNTdGF0ZSosCiAgICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8SlNUZXN0R2xvYmFs
T2JqZWN0Kj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogfQogCi1zdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0UmVndWxhckF0dHJpYnV0ZUdldHRlcihFeGVjU3Rh
dGUqLCBKU1Rlc3RHbG9iYWxPYmplY3QqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKK3N0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RSZWd1bGFyQXR0cmlidXRlR2V0dGVy
KEV4ZWNTdGF0ZSYsIEpTVGVzdEdsb2JhbE9iamVjdCYsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
OwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RSZWd1bGFyQXR0cmlidXRlKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQog
ewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdEdsb2JhbE9iamVjdD46OmF0dHJpYnV0
ZTxqc1Rlc3RHbG9iYWxPYmplY3RSZWd1bGFyQXR0cmlidXRlR2V0dGVyPihzdGF0ZSwgdGhpc1Zh
bHVlLCAicmVndWxhckF0dHJpYnV0ZSIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0R2xvYmFsT2JqZWN0UmVndWxhckF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBK
U1Rlc3RHbG9iYWxPYmplY3QqIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0UmVndWxhckF0dHJpYnV0ZUdl
dHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwog
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndy
YXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBp
bXBsLnJlZ3VsYXJBdHRyaWJ1dGUoKSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3Jh
cHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCBp
bXBsLnJlZ3VsYXJBdHRyaWJ1dGUoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFB1YmxpY0FuZFByaXZhdGVBdHRyaWJ1
dGVHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0R2xvYmFsT2JqZWN0KiwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSk7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0UHVibGlj
QW5kUHJpdmF0ZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RHbG9iYWxPYmplY3Qm
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFs
T2JqZWN0UHVibGljQW5kUHJpdmF0ZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0Nh
bGxlcjxKU1Rlc3RHbG9iYWxPYmplY3Q+OjphdHRyaWJ1dGU8anNUZXN0R2xvYmFsT2JqZWN0UHVi
bGljQW5kUHJpdmF0ZUF0dHJpYnV0ZUdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgInB1YmxpY0Fu
ZFByaXZhdGVBdHRyaWJ1dGUiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEds
b2JhbE9iamVjdFB1YmxpY0FuZFByaXZhdGVBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0
ZSwgSlNUZXN0R2xvYmFsT2JqZWN0KiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFB1YmxpY0FuZFByaXZh
dGVBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0
aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIGF1dG8mIGltcGwgPSB0
aGlzT2JqZWN0LT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhD
YWNoZShzdGF0ZSwgaW1wbC5wdWJsaWNBbmRQcml2YXRlQXR0cmlidXRlKCkpOworICAgIGF1dG8m
IGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3Ry
aW5nV2l0aENhY2hlKCZzdGF0ZSwgaW1wbC5wdWJsaWNBbmRQcml2YXRlQXR0cmlidXRlKCkpOwog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKICNpZiBFTkFCTEUoVEVTVF9GRUFUVVJFKQotc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFB1YmxpY0FuZFByaXZhdGVDb25kaXRp
b25hbEF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RHbG9iYWxPYmplY3QqLCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKTsKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxP
YmplY3RQdWJsaWNBbmRQcml2YXRlQ29uZGl0aW9uYWxBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRl
JiwgSlNUZXN0R2xvYmFsT2JqZWN0JiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKIEVuY29k
ZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFB1YmxpY0FuZFByaXZhdGVDb25kaXRpb25hbEF0
dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RHbG9iYWxPYmplY3Q+
OjphdHRyaWJ1dGU8anNUZXN0R2xvYmFsT2JqZWN0UHVibGljQW5kUHJpdmF0ZUNvbmRpdGlvbmFs
QXR0cmlidXRlR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAicHVibGljQW5kUHJpdmF0ZUNvbmRp
dGlvbmFsQXR0cmlidXRlIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9i
YWxPYmplY3RQdWJsaWNBbmRQcml2YXRlQ29uZGl0aW9uYWxBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0
YXRlKiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0KiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFB1Ymxp
Y0FuZFByaXZhdGVDb25kaXRpb25hbEF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBK
U1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7
CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJl
c3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLnB1YmxpY0FuZFByaXZhdGVDb25k
aXRpb25hbEF0dHJpYnV0ZSgpKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVk
KCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIGltcGwu
cHVibGljQW5kUHJpdmF0ZUNvbmRpdGlvbmFsQXR0cmlidXRlKCkpOwogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKICNlbmRpZgogCiAjaWYgRU5BQkxFKFRFU1RfRkVBVFVSRSkKLXN0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RFbmFibGVkQXRSdW50aW1lQXR0cmlidXRlR2V0
dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdEdsb2JhbE9iamVjdCosIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpOworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdEVuYWJsZWRBdFJ1
bnRpbWVBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0R2xvYmFsT2JqZWN0JiwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVj
dEVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8
SlNUZXN0R2xvYmFsT2JqZWN0Pjo6YXR0cmlidXRlPGpzVGVzdEdsb2JhbE9iamVjdEVuYWJsZWRB
dFJ1bnRpbWVBdHRyaWJ1dGVHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJlbmFibGVkQXRSdW50
aW1lQXR0cmlidXRlIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxP
YmplY3RFbmFibGVkQXRSdW50aW1lQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpT
VGVzdEdsb2JhbE9iamVjdCogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RFbmFibGVkQXRSdW50aW1lQXR0
cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09i
amVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09i
amVjdC0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUo
c3RhdGUsIGltcGwuZW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZSgpKTsKKyAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dp
dGhDYWNoZSgmc3RhdGUsIGltcGwuZW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZSgpKTsKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwCmluZGV4IGYxYjgxMGJhNmIw
MjY1Zjk1ZTlhNmMyMjBlYmY0MjliN2U4NjUwNDIuLjVjNjM1MjMxYjc5NWMyNDBlYWIyMDFkOWUy
MGE3NWEzMWIyNDI0MjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwCkBAIC00MTYsMTQgKzQxNiwx
NSBAQCBpbmxpbmUgSlNUZXN0SW50ZXJmYWNlKiBKU1Rlc3RJbnRlcmZhY2U6OmNhc3RGb3JBdHRy
aWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBFbmNvZAogfQogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjIy
KSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMpCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SW50
ZXJmYWNlQ29uc3RydWN0b3JJbXBsZW1lbnRzU3RhdGljUmVhZE9ubHlBdHRyR2V0dGVyKEV4ZWNT
dGF0ZSopOworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9y
SW1wbGVtZW50c1N0YXRpY1JlYWRPbmx5QXR0ckdldHRlcihFeGVjU3RhdGUmKTsKIAogRW5jb2Rl
ZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JJbXBsZW1lbnRzU3RhdGljUmVhZE9u
bHlBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3Rvcklt
cGxlbWVudHNTdGF0aWNSZWFkT25seUF0dHJHZXR0ZXIoc3RhdGUpKTsKKyAgICBBU1NFUlQoc3Rh
dGUpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0SW50ZXJmYWNlQ29uc3RydWN0
b3JJbXBsZW1lbnRzU3RhdGljUmVhZE9ubHlBdHRyR2V0dGVyKCpzdGF0ZSkpOwogfQogCi1zdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JJbXBsZW1lbnRzU3Rh
dGljUmVhZE9ubHlBdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUpCitzdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JJbXBsZW1lbnRzU3RhdGljUmVhZE9ubHlB
dHRyR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsK
ICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKFRlc3RJbnRlcmZhY2U6OmltcGxlbWVudHNT
dGF0aWNSZWFkT25seUF0dHIoKSk7CkBAIC00MzMsMTA1ICs0MzQsMTA3IEBAIHN0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvckltcGxlbWVudHNTdGF0aWNSZWFk
T25seUF0dHJHZXR0CiAjZW5kaWYKIAogI2lmIEVOQUJMRShDb25kaXRpb24yMikgfHwgRU5BQkxF
KENvbmRpdGlvbjIzKQotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUNvbnN0
cnVjdG9ySW1wbGVtZW50c1N0YXRpY0F0dHJHZXR0ZXIoRXhlY1N0YXRlKik7CitzdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JJbXBsZW1lbnRzU3RhdGljQXR0
ckdldHRlcihFeGVjU3RhdGUmKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlQ29u
c3RydWN0b3JJbXBsZW1lbnRzU3RhdGljQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0
SW50ZXJmYWNlQ29uc3RydWN0b3JJbXBsZW1lbnRzU3RhdGljQXR0ckdldHRlcihzdGF0ZSkpOwor
ICAgIEFTU0VSVChzdGF0ZSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RJbnRl
cmZhY2VDb25zdHJ1Y3RvckltcGxlbWVudHNTdGF0aWNBdHRyR2V0dGVyKCpzdGF0ZSkpOwogfQog
Ci1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JJbXBsZW1l
bnRzU3RhdGljQXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlKQorc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9ySW1wbGVtZW50c1N0YXRpY0F0dHJHZXR0ZXIo
RXhlY1N0YXRlJiBzdGF0ZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIEpTVmFs
dWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIFRlc3RJbnRlcmZhY2U6OmltcGxl
bWVudHNTdGF0aWNBdHRyKCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2Fj
aGUoJnN0YXRlLCBUZXN0SW50ZXJmYWNlOjppbXBsZW1lbnRzU3RhdGljQXR0cigpKTsKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCiAjZW5kaWYKIAogI2lmIEVOQUJMRShDb25kaXRpb24yMikgfHwg
RU5BQkxFKENvbmRpdGlvbjIzKQotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEludGVyZmFj
ZUltcGxlbWVudHNTdHIxR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdEludGVyZmFjZSosIFRocm93
U2NvcGUmIHRocm93U2NvcGUpOworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEludGVyZmFj
ZUltcGxlbWVudHNTdHIxR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdEludGVyZmFjZSYsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VJbXBs
ZW1lbnRzU3RyMShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RJbnRlcmZhY2U+
OjphdHRyaWJ1dGU8anNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjFHZXR0ZXI+KHN0YXRlLCB0
aGlzVmFsdWUsICJpbXBsZW1lbnRzU3RyMSIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjFHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNU
ZXN0SW50ZXJmYWNlKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIxR2V0dGVyKEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTVGVzdEludGVyZmFjZSYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwotICAg
IEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwuaW1wbGVtZW50
c1N0cjEoKSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIEpT
VmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCBpbXBsLmltcGxlbWVudHNT
dHIxKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKICNlbmRpZgogCiAjaWYgRU5BQkxFKENv
bmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMpCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjJHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0SW50
ZXJmYWNlKiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0SW50
ZXJmYWNlJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVz
dEludGVyZmFjZUltcGxlbWVudHNTdHIyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpT
VGVzdEludGVyZmFjZT46OmF0dHJpYnV0ZTxqc1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyMkdl
dHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgImltcGxlbWVudHNTdHIyIik7CiB9CiAKLXN0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyMkdldHRlcihFeGVjU3Rh
dGUqIHN0YXRlLCBKU1Rlc3RJbnRlcmZhY2UqIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0
cjJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0SW50ZXJmYWNlJiB0aGlzT2JqZWN0LCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
ICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53
cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwg
aW1wbC5pbXBsZW1lbnRzU3RyMigpKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFw
cGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIGlt
cGwuaW1wbGVtZW50c1N0cjIoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogI2VuZGlmCiAK
ICNpZiBFTkFCTEUoQ29uZGl0aW9uMjIpIHx8IEVOQUJMRShDb25kaXRpb24yMykKLXN0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyM0dldHRlcihFeGVjU3Rh
dGUqLCBKU1Rlc3RJbnRlcmZhY2UqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKK3N0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyM0dldHRlcihFeGVjU3Rh
dGUmLCBKU1Rlc3RJbnRlcmZhY2UmLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2Rl
ZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjMoRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJp
bmRpbmdDYWxsZXI8SlNUZXN0SW50ZXJmYWNlPjo6YXR0cmlidXRlPGpzVGVzdEludGVyZmFjZUlt
cGxlbWVudHNTdHIzR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAiaW1wbGVtZW50c1N0cjMiKTsK
IH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIz
R2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEludGVyZmFjZSogdGhpc09iamVjdCwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZh
Y2VJbXBsZW1lbnRzU3RyM0dldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RJbnRlcmZhY2Um
IHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgcmV0dXJuIHRoaXNP
YmplY3QtPmltcGxlbWVudHNTdHIzKCpzdGF0ZSk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QuaW1w
bGVtZW50c1N0cjMoc3RhdGUpOwogfQogCiAjZW5kaWYKIAogI2lmIEVOQUJMRShDb25kaXRpb24y
MikgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdElu
dGVyZmFjZUltcGxlbWVudHNOb2RlR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdEludGVyZmFjZSos
IFRocm93U2NvcGUmIHRocm93U2NvcGUpOworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdElu
dGVyZmFjZUltcGxlbWVudHNOb2RlR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdEludGVyZmFjZSYs
IFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZh
Y2VJbXBsZW1lbnRzTm9kZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RJbnRl
cmZhY2U+OjphdHRyaWJ1dGU8anNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c05vZGVHZXR0ZXI+KHN0
YXRlLCB0aGlzVmFsdWUsICJpbXBsZW1lbnRzTm9kZSIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c05vZGVHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0
ZSwgSlNUZXN0SW50ZXJmYWNlKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQor
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUltcGxlbWVudHNOb2RlR2V0dGVy
KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEludGVyZmFjZSYgdGhpc09iamVjdCwgVGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5V
U0VEX1BBUkFNKHN0YXRlKTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgp
OwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgdGhpc09iamVjdC0+Z2xvYmFsT2Jq
ZWN0KCksIGltcGwuaW1wbGVtZW50c05vZGUoKSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmpl
Y3Qud3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUygmc3RhdGUsIHRoaXNPYmpl
Y3QuZ2xvYmFsT2JqZWN0KCksIGltcGwuaW1wbGVtZW50c05vZGUoKSk7CiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShD
b25kaXRpb24xMikKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1
Y3RvclN1cHBsZW1lbnRhbFN0YXRpY1JlYWRPbmx5QXR0ckdldHRlcihFeGVjU3RhdGUqKTsKK3N0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvclN1cHBsZW1lbnRh
bFN0YXRpY1JlYWRPbmx5QXR0ckdldHRlcihFeGVjU3RhdGUmKTsKIAogRW5jb2RlZEpTVmFsdWUg
anNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JTdXBwbGVtZW50YWxTdGF0aWNSZWFkT25seUF0dHIo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yU3VwcGxlbWVu
dGFsU3RhdGljUmVhZE9ubHlBdHRyR2V0dGVyKHN0YXRlKSk7CisgICAgQVNTRVJUKHN0YXRlKTsK
KyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yU3Vw
cGxlbWVudGFsU3RhdGljUmVhZE9ubHlBdHRyR2V0dGVyKCpzdGF0ZSkpOwogfQogCi1zdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JTdXBwbGVtZW50YWxTdGF0
aWNSZWFkT25seUF0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSkKK3N0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvclN1cHBsZW1lbnRhbFN0YXRpY1JlYWRPbmx5
QXR0ckdldHRlcihFeGVjU3RhdGUmIHN0YXRlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihXZWJDb3JlOjpUZXN0U3VwcGxlbWVudGFs
OjpzdXBwbGVtZW50YWxTdGF0aWNSZWFkT25seUF0dHIoKSk7CkBAIC01NDEsOTEgKzU0NCw5MiBA
QCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JTdXBwbGVt
ZW50YWxTdGF0aWNSZWFkT25seUF0dHJHZQogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9u
MTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RJ
bnRlcmZhY2VDb25zdHJ1Y3RvclN1cHBsZW1lbnRhbFN0YXRpY0F0dHJHZXR0ZXIoRXhlY1N0YXRl
Kik7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JTdXBw
bGVtZW50YWxTdGF0aWNBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYpOwogCiBFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvclN1cHBsZW1lbnRhbFN0YXRpY0F0dHIoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yU3VwcGxlbWVudGFsU3RhdGlj
QXR0ckdldHRlcihzdGF0ZSkpOworICAgIEFTU0VSVChzdGF0ZSk7CisgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvclN1cHBsZW1lbnRhbFN0YXRpY0F0
dHJHZXR0ZXIoKnN0YXRlKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RJbnRl
cmZhY2VDb25zdHJ1Y3RvclN1cHBsZW1lbnRhbFN0YXRpY0F0dHJHZXR0ZXIoRXhlY1N0YXRlKiBz
dGF0ZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvclN1
cHBsZW1lbnRhbFN0YXRpY0F0dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSkKIHsKICAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUo
c3RhdGUsIFdlYkNvcmU6OlRlc3RTdXBwbGVtZW50YWw6OnN1cHBsZW1lbnRhbFN0YXRpY0F0dHIo
KSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIFdlYkNv
cmU6OlRlc3RTdXBwbGVtZW50YWw6OnN1cHBsZW1lbnRhbFN0YXRpY0F0dHIoKSk7CiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVO
QUJMRShDb25kaXRpb24xMikKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VT
dXBwbGVtZW50YWxTdHIxR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdEludGVyZmFjZSosIFRocm93
U2NvcGUmIHRocm93U2NvcGUpOworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEludGVyZmFj
ZVN1cHBsZW1lbnRhbFN0cjFHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0SW50ZXJmYWNlJiwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZVN1
cHBsZW1lbnRhbFN0cjEoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0SW50ZXJm
YWNlPjo6YXR0cmlidXRlPGpzVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjFHZXR0ZXI+KHN0
YXRlLCB0aGlzVmFsdWUsICJzdXBwbGVtZW50YWxTdHIxIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIxR2V0dGVyKEV4ZWNTdGF0ZSog
c3RhdGUsIEpTVGVzdEludGVyZmFjZSogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIx
R2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEludGVyZmFjZSYgdGhpc09iamVjdCwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3Jh
cHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIFdl
YkNvcmU6OlRlc3RTdXBwbGVtZW50YWw6OnN1cHBsZW1lbnRhbFN0cjEoaW1wbCkpOworICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpz
U3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgV2ViQ29yZTo6VGVzdFN1cHBsZW1lbnRhbDo6c3VwcGxl
bWVudGFsU3RyMShpbXBsKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogI2VuZGlmCiAKICNp
ZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikKLXN0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIyR2V0dGVyKEV4ZWNTdGF0
ZSosIEpTVGVzdEludGVyZmFjZSosIFRocm93U2NvcGUmIHRocm93U2NvcGUpOworc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjJHZXR0ZXIoRXhlY1N0
YXRlJiwgSlNUZXN0SW50ZXJmYWNlJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKIEVuY29k
ZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjIoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJu
IEJpbmRpbmdDYWxsZXI8SlNUZXN0SW50ZXJmYWNlPjo6YXR0cmlidXRlPGpzVGVzdEludGVyZmFj
ZVN1cHBsZW1lbnRhbFN0cjJHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJzdXBwbGVtZW50YWxT
dHIyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VTdXBwbGVt
ZW50YWxTdHIyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEludGVyZmFjZSogdGhpc09i
amVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIyR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVz
dEludGVyZmFjZSYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICBh
dXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0g
anNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIFdlYkNvcmU6OlRlc3RTdXBwbGVtZW50YWw6OnN1cHBs
ZW1lbnRhbFN0cjIoaW1wbCkpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQo
KTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgV2ViQ29y
ZTo6VGVzdFN1cHBsZW1lbnRhbDo6c3VwcGxlbWVudGFsU3RyMihpbXBsKSk7CiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJM
RShDb25kaXRpb24xMikKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VTdXBw
bGVtZW50YWxTdHIzR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdEludGVyZmFjZSosIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpOworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEludGVyZmFjZVN1
cHBsZW1lbnRhbFN0cjNHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0SW50ZXJmYWNlJiwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZVN1cHBs
ZW1lbnRhbFN0cjMoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0SW50ZXJmYWNl
Pjo6YXR0cmlidXRlPGpzVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjNHZXR0ZXI+KHN0YXRl
LCB0aGlzVmFsdWUsICJzdXBwbGVtZW50YWxTdHIzIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIzR2V0dGVyKEV4ZWNTdGF0ZSogc3Rh
dGUsIEpTVGVzdEludGVyZmFjZSogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
K3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIzR2V0
dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEludGVyZmFjZSYgdGhpc09iamVjdCwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAg
VU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICByZXR1cm4gdGhpc09iamVjdC0+c3VwcGxlbWVudGFs
U3RyMygqc3RhdGUpOworICAgIHJldHVybiB0aGlzT2JqZWN0LnN1cHBsZW1lbnRhbFN0cjMoc3Rh
dGUpOwogfQogCiAjZW5kaWYKIAogI2lmIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENv
bmRpdGlvbjEyKQotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEludGVyZmFjZVN1cHBsZW1l
bnRhbE5vZGVHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0SW50ZXJmYWNlKiwgVGhyb3dTY29wZSYg
dGhyb3dTY29wZSk7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SW50ZXJmYWNlU3VwcGxl
bWVudGFsTm9kZUdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RJbnRlcmZhY2UmLCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlU3VwcGxlbWVu
dGFsTm9kZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RJbnRlcmZhY2U+Ojph
dHRyaWJ1dGU8anNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsTm9kZUdldHRlcj4oc3RhdGUsIHRo
aXNWYWx1ZSwgInN1cHBsZW1lbnRhbE5vZGUiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbE5vZGVHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwg
SlNUZXN0SW50ZXJmYWNlKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3Rh
dGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbE5vZGVHZXR0ZXIo
RXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0SW50ZXJmYWNlJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7
Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmpl
Y3QoKSwgV2ViQ29yZTo6VGVzdFN1cHBsZW1lbnRhbDo6c3VwcGxlbWVudGFsTm9kZShpbXBsKSk7
CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVz
dWx0ID0gdG9KUygmc3RhdGUsIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIFdlYkNvcmU6OlRl
c3RTdXBwbGVtZW50YWw6OnN1cHBsZW1lbnRhbE5vZGUoaW1wbCkpOwogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IuY3BwCmluZGV4
IDVkYzBhYTdiNjhiYTNiNTRmZDE0Y2RkYWYzOWY3ODNjZmJjOGU4YjguLmFkZWMxOTllNDk3Mjk0
N2Q0NDdjYTdiZGY1MWQwNGIzMWIzYjNjNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEpTQnVpbHRp
bkNvbnN0cnVjdG9yLmNwcApAQCAtMTM3LDMyICsxMzcsMzIgQEAgaW5saW5lIEpTVGVzdEpTQnVp
bHRpbkNvbnN0cnVjdG9yKiBKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6Y2FzdEZvckF0dHJp
YnV0ZSgKICAgICByZXR1cm4ganNEeW5hbWljQ2FzdDxKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rv
cio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yVGVzdEF0dHJpYnV0ZUN1c3RvbUdldHRlcihF
eGVjU3RhdGUqLCBKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvciosIFRocm93U2NvcGUmIHRocm93
U2NvcGUpOworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9y
VGVzdEF0dHJpYnV0ZUN1c3RvbUdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RKU0J1aWx0aW5Db25z
dHJ1Y3RvciYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RKU0J1aWx0aW5Db25zdHJ1Y3RvclRlc3RBdHRyaWJ1dGVDdXN0b20oRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJu
IEJpbmRpbmdDYWxsZXI8SlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3I+OjphdHRyaWJ1dGU8anNU
ZXN0SlNCdWlsdGluQ29uc3RydWN0b3JUZXN0QXR0cmlidXRlQ3VzdG9tR2V0dGVyPihzdGF0ZSwg
dGhpc1ZhbHVlLCAidGVzdEF0dHJpYnV0ZUN1c3RvbSIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JUZXN0QXR0cmlidXRlQ3VzdG9tR2V0dGVy
KEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yKiB0aGlzT2JqZWN0
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEpT
QnVpbHRpbkNvbnN0cnVjdG9yVGVzdEF0dHJpYnV0ZUN1c3RvbUdldHRlcihFeGVjU3RhdGUmIHN0
YXRlLCBKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvciYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKLSAgICByZXR1cm4gdGhpc09iamVjdC0+dGVzdEF0dHJpYnV0ZUN1c3Rv
bSgqc3RhdGUpOworICAgIHJldHVybiB0aGlzT2JqZWN0LnRlc3RBdHRyaWJ1dGVDdXN0b20oc3Rh
dGUpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SlNCdWlsdGluQ29uc3RydWN0
b3JUZXN0QXR0cmlidXRlUldDdXN0b21HZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0SlNCdWlsdGlu
Q29uc3RydWN0b3IqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKK3N0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvclRlc3RBdHRyaWJ1dGVSV0N1c3RvbUdldHRl
cihFeGVjU3RhdGUmLCBKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvciYsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvclRl
c3RBdHRyaWJ1dGVSV0N1c3RvbShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RK
U0J1aWx0aW5Db25zdHJ1Y3Rvcj46OmF0dHJpYnV0ZTxqc1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rv
clRlc3RBdHRyaWJ1dGVSV0N1c3RvbUdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgInRlc3RBdHRy
aWJ1dGVSV0N1c3RvbSIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SlNCdWls
dGluQ29uc3RydWN0b3JUZXN0QXR0cmlidXRlUldDdXN0b21HZXR0ZXIoRXhlY1N0YXRlKiBzdGF0
ZSwgSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IqIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SlNCdWlsdGluQ29uc3RydWN0
b3JUZXN0QXR0cmlidXRlUldDdXN0b21HZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0SlNC
dWlsdGluQ29uc3RydWN0b3ImIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7
CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
Ci0gICAgcmV0dXJuIHRoaXNPYmplY3QtPnRlc3RBdHRyaWJ1dGVSV0N1c3RvbSgqc3RhdGUpOwor
ICAgIHJldHVybiB0aGlzT2JqZWN0LnRlc3RBdHRyaWJ1dGVSV0N1c3RvbShzdGF0ZSk7CiB9CiAK
IEVuY29kZWRKU1ZhbHVlIGpzVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3IoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
Tm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
Tm9kZS5jcHAKaW5kZXggZTM1NDE0ZDQyODA3YjY1MjIzOTEzNjY5MGU0OTFiMzRkYmRjMzM4MS4u
MDlhYzExNTY0NTFkNDlhZGUxYzc5YTY0NGQwYzRhMDcwNmU5MWY2ZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmNwcApA
QCAtMTcyLDE5ICsxNzIsMTkgQEAgaW5saW5lIEpTVGVzdE5vZGUqIEpTVGVzdE5vZGU6OmNhc3RG
b3JBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZQogICAgIHJldHVybiBq
c0R5bmFtaWNDYXN0PEpTVGVzdE5vZGUqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiB9
CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3ROb2RlTmFtZUdldHRlcihFeGVjU3RhdGUq
LCBKU1Rlc3ROb2RlKiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CitzdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0Tm9kZU5hbWVHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0Tm9kZSYsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROb2RlTmFtZShFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsK
ICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3ROb2RlPjo6YXR0cmlidXRlPGpzVGVzdE5v
ZGVOYW1lR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAibmFtZSIpOwogfQogCi1zdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0Tm9kZU5hbWVHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0
Tm9kZSogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3ROb2RlTmFtZUdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3ROb2Rl
JiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dp
dGhDYWNoZShzdGF0ZSwgaW1wbC5uYW1lKCkpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKCZzdGF0
ZSwgaW1wbC5uYW1lKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb25kZXRlcm1pbmlz
dGljLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RO
b25kZXRlcm1pbmlzdGljLmNwcAppbmRleCA2NDM3Mjk4OGI2MjgzMTI0ODAyOTAyMTM2YzFmZWIx
OGQ5MmZhMzU1Li44Zjk0MDE4YzIxNWVjYjc1OTA1NTljY2ZiMmE0YjViYjZlY2UzM2Q5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9u
ZGV0ZXJtaW5pc3RpYy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5vbmRldGVybWluaXN0aWMuY3BwCkBAIC0xNDgsMjMgKzE0OCwyMyBAQCBp
bmxpbmUgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyogSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYzo6Y2Fz
dEZvckF0dHJpYnV0ZShKU0M6OkV4ZQogICAgIHJldHVybiBqc0R5bmFtaWNDYXN0PEpTVGVzdE5v
bmRldGVybWluaXN0aWMqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiB9CiAKLXN0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY1Jl
YWRvbmx5QXR0ckdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3ROb25kZXRlcm1pbmlzdGljKiwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSk7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0Tm9uZGV0
ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNSZWFkb25seUF0dHJHZXR0ZXIoRXhlY1N0YXRlJiwg
SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCiBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY1JlYWRvbmx5
QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5
TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3ROb25kZXRlcm1pbmlzdGlj
Pjo6YXR0cmlidXRlPGpzVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljUmVhZG9u
bHlBdHRyR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAibm9uZGV0ZXJtaW5pc3RpY1JlYWRvbmx5
QXR0ciIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0Tm9uZGV0ZXJtaW5pc3Rp
Y05vbmRldGVybWluaXN0aWNSZWFkb25seUF0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNU
ZXN0Tm9uZGV0ZXJtaW5pc3RpYyogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
K3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5p
c3RpY1JlYWRvbmx5QXR0ckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3ROb25kZXRlcm1p
bmlzdGljJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogI2lmIEVOQUJM
RShXRUJfUkVQTEFZKQotICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzdGF0ZS0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpOworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qg
PSBzdGF0ZS5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CiAgICAgSW5wdXRDdXJzb3ImIGN1cnNvciA9
IGdsb2JhbE9iamVjdC0+aW5wdXRDdXJzb3IoKTsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
Y29uc3QgQXRvbWljU3RyaW5nPiBiaW5kaW5nTmFtZSgiVGVzdE5vbmRldGVybWluaXN0aWMubm9u
ZGV0ZXJtaW5pc3RpY1JlYWRvbmx5QXR0ciIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxp
dGVyYWwpOwogICAgIGlmIChjdXJzb3IuaXNDYXB0dXJpbmcoKSkgewotICAgICAgICBpbnQzMl90
IG1lbW9pemVkUmVzdWx0ID0gdGhpc09iamVjdC0+d3JhcHBlZCgpLm5vbmRldGVybWluaXN0aWNS
ZWFkb25seUF0dHIoKTsKKyAgICAgICAgaW50MzJfdCBtZW1vaXplZFJlc3VsdCA9IHRoaXNPYmpl
Y3Qud3JhcHBlZCgpLm5vbmRldGVybWluaXN0aWNSZWFkb25seUF0dHIoKTsKICAgICAgICAgY3Vy
c29yLmFwcGVuZElucHV0PE1lbW9pemVkRE9NUmVzdWx0PGludDMyX3Q+PihiaW5kaW5nTmFtZS5n
ZXQoKS5zdHJpbmcoKSwgbWVtb2l6ZWRSZXN1bHQsIDApOwogICAgICAgICBKU1ZhbHVlIHJlc3Vs
dCA9IGpzTnVtYmVyKG1lbW9pemVkUmVzdWx0KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAg
LTE3OSwzMCArMTc5LDMwIEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3ROb25kZXRlcm1p
bmlzdGljTm9uZGV0ZXJtaW5pc3RpY1JlYWRvbmx5QXR0ckdldHRlcihFCiAgICAgICAgIH0KICAg
ICB9CiAjZW5kaWYKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOworICAg
IGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9
IGpzTnVtYmVyKGltcGwubm9uZGV0ZXJtaW5pc3RpY1JlYWRvbmx5QXR0cigpKTsKICAgICByZXR1
cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0Tm9uZGV0ZXJtaW5p
c3RpY05vbmRldGVybWluaXN0aWNXcml0ZWFibGVBdHRyR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVz
dE5vbmRldGVybWluaXN0aWMqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKK3N0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY1dyaXRlYWJs
ZUF0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyYsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROb25kZXRlcm1pbmlzdGlj
Tm9uZGV0ZXJtaW5pc3RpY1dyaXRlYWJsZUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxs
ZXI8SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYz46OmF0dHJpYnV0ZTxqc1Rlc3ROb25kZXRlcm1pbmlz
dGljTm9uZGV0ZXJtaW5pc3RpY1dyaXRlYWJsZUF0dHJHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUs
ICJub25kZXRlcm1pbmlzdGljV3JpdGVhYmxlQXR0ciIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNXcml0ZWFibGVBdHRy
R2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE5vbmRldGVybWluaXN0aWMqIHRoaXNPYmpl
Y3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNXcml0ZWFibGVBdHRyR2V0dGVyKEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTVGVzdE5vbmRldGVybWluaXN0aWMmIHRoaXNPYmplY3QsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CiAjaWYgRU5BQkxFKFdFQl9SRVBMQVkpCi0gICAgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCA9IHN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CisgICAg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHN0YXRlLmxleGljYWxHbG9iYWxPYmplY3Qo
KTsKICAgICBJbnB1dEN1cnNvciYgY3Vyc29yID0gZ2xvYmFsT2JqZWN0LT5pbnB1dEN1cnNvcigp
OwogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBBdG9taWNTdHJpbmc+IGJpbmRpbmdO
YW1lKCJUZXN0Tm9uZGV0ZXJtaW5pc3RpYy5ub25kZXRlcm1pbmlzdGljV3JpdGVhYmxlQXR0ciIs
IEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwogICAgIGlmIChjdXJzb3IuaXND
YXB0dXJpbmcoKSkgewotICAgICAgICBTdHJpbmcgbWVtb2l6ZWRSZXN1bHQgPSB0aGlzT2JqZWN0
LT53cmFwcGVkKCkubm9uZGV0ZXJtaW5pc3RpY1dyaXRlYWJsZUF0dHIoKTsKKyAgICAgICAgU3Ry
aW5nIG1lbW9pemVkUmVzdWx0ID0gdGhpc09iamVjdC53cmFwcGVkKCkubm9uZGV0ZXJtaW5pc3Rp
Y1dyaXRlYWJsZUF0dHIoKTsKICAgICAgICAgY3Vyc29yLmFwcGVuZElucHV0PE1lbW9pemVkRE9N
UmVzdWx0PFN0cmluZz4+KGJpbmRpbmdOYW1lLmdldCgpLnN0cmluZygpLCBtZW1vaXplZFJlc3Vs
dCwgMCk7Ci0gICAgICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUs
IG1lbW9pemVkUmVzdWx0KTsKKyAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhD
YWNoZSgmc3RhdGUsIG1lbW9pemVkUmVzdWx0KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAg
ICB9CiAKQEAgLTIxMCwzNSArMjEwLDM1IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RO
b25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY1dyaXRlYWJsZUF0dHJHZXR0ZXIoCiAgICAg
ICAgIFN0cmluZyBtZW1vaXplZFJlc3VsdDsKICAgICAgICAgTWVtb2l6ZWRET01SZXN1bHRCYXNl
KiBpbnB1dCA9IGN1cnNvci5mZXRjaElucHV0PE1lbW9pemVkRE9NUmVzdWx0QmFzZT4oKTsKICAg
ICAgICAgaWYgKGlucHV0ICYmIGlucHV0LT5jb252ZXJ0VG88U3RyaW5nPihtZW1vaXplZFJlc3Vs
dCkpIHsKLSAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3Rh
dGUsIG1lbW9pemVkUmVzdWx0KTsKKyAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJp
bmdXaXRoQ2FjaGUoJnN0YXRlLCBtZW1vaXplZFJlc3VsdCk7CiAgICAgICAgICAgICByZXR1cm4g
cmVzdWx0OwogICAgICAgICB9CiAgICAgfQogI2VuZGlmCi0gICAgYXV0byYgaW1wbCA9IHRoaXNP
YmplY3QtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hl
KHN0YXRlLCBpbXBsLm5vbmRldGVybWluaXN0aWNXcml0ZWFibGVBdHRyKCkpOworICAgIGF1dG8m
IGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3Ry
aW5nV2l0aENhY2hlKCZzdGF0ZSwgaW1wbC5ub25kZXRlcm1pbmlzdGljV3JpdGVhYmxlQXR0cigp
KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNFeGNlcHRpb25BdHRyR2V0dGVyKEV4ZWNT
dGF0ZSosIEpTVGVzdE5vbmRldGVybWluaXN0aWMqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsK
K3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5p
c3RpY0V4Y2VwdGlvbkF0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0Tm9uZGV0ZXJtaW5pc3Rp
YyYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROb25k
ZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY0V4Y2VwdGlvbkF0dHIoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJu
IEJpbmRpbmdDYWxsZXI8SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYz46OmF0dHJpYnV0ZTxqc1Rlc3RO
b25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY0V4Y2VwdGlvbkF0dHJHZXR0ZXI+KHN0YXRl
LCB0aGlzVmFsdWUsICJub25kZXRlcm1pbmlzdGljRXhjZXB0aW9uQXR0ciIpOwogfQogCi1zdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNF
eGNlcHRpb25BdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE5vbmRldGVybWluaXN0
aWMqIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNFeGNlcHRpb25BdHRy
R2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE5vbmRldGVybWluaXN0aWMmIHRoaXNPYmpl
Y3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAjaWYgRU5BQkxFKFdFQl9SRVBMQVkpCi0g
ICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHN0YXRlLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCk7CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHN0YXRlLmxleGljYWxH
bG9iYWxPYmplY3QoKTsKICAgICBJbnB1dEN1cnNvciYgY3Vyc29yID0gZ2xvYmFsT2JqZWN0LT5p
bnB1dEN1cnNvcigpOwogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBBdG9taWNTdHJp
bmc+IGJpbmRpbmdOYW1lKCJUZXN0Tm9uZGV0ZXJtaW5pc3RpYy5ub25kZXRlcm1pbmlzdGljRXhj
ZXB0aW9uQXR0ciIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwogICAgIGlm
IChjdXJzb3IuaXNDYXB0dXJpbmcoKSkgewotICAgICAgICBTdHJpbmcgbWVtb2l6ZWRSZXN1bHQg
PSB0aGlzT2JqZWN0LT53cmFwcGVkKCkubm9uZGV0ZXJtaW5pc3RpY0V4Y2VwdGlvbkF0dHIoKTsK
KyAgICAgICAgU3RyaW5nIG1lbW9pemVkUmVzdWx0ID0gdGhpc09iamVjdC53cmFwcGVkKCkubm9u
ZGV0ZXJtaW5pc3RpY0V4Y2VwdGlvbkF0dHIoKTsKICAgICAgICAgY3Vyc29yLmFwcGVuZElucHV0
PE1lbW9pemVkRE9NUmVzdWx0PFN0cmluZz4+KGJpbmRpbmdOYW1lLmdldCgpLnN0cmluZygpLCBt
ZW1vaXplZFJlc3VsdCwgMCk7Ci0gICAgICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRo
Q2FjaGUoc3RhdGUsIG1lbW9pemVkUmVzdWx0KTsKKyAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBq
c1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIG1lbW9pemVkUmVzdWx0KTsKICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKICAgICB9CiAKQEAgLTI0NiwzNyArMjQ2LDM3IEBAIHN0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY0V4Y2VwdGlvbkF0dHJH
ZXR0ZXIoCiAgICAgICAgIFN0cmluZyBtZW1vaXplZFJlc3VsdDsKICAgICAgICAgTWVtb2l6ZWRE
T01SZXN1bHRCYXNlKiBpbnB1dCA9IGN1cnNvci5mZXRjaElucHV0PE1lbW9pemVkRE9NUmVzdWx0
QmFzZT4oKTsKICAgICAgICAgaWYgKGlucHV0ICYmIGlucHV0LT5jb252ZXJ0VG88U3RyaW5nPiht
ZW1vaXplZFJlc3VsdCkpIHsKLSAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdX
aXRoQ2FjaGUoc3RhdGUsIG1lbW9pemVkUmVzdWx0KTsKKyAgICAgICAgICAgIEpTVmFsdWUgcmVz
dWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCBtZW1vaXplZFJlc3VsdCk7CiAgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9CiAgICAgfQogI2VuZGlmCi0gICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3Ry
aW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLm5vbmRldGVybWluaXN0aWNFeGNlcHRpb25BdHRyKCkp
OworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJl
c3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgaW1wbC5ub25kZXRlcm1pbmlzdGljRXhj
ZXB0aW9uQXR0cigpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNHZXR0ZXJFeGNlcHRp
b25BdHRyR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE5vbmRldGVybWluaXN0aWMqLCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKTsKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3ROb25kZXRlcm1p
bmlzdGljTm9uZGV0ZXJtaW5pc3RpY0dldHRlckV4Y2VwdGlvbkF0dHJHZXR0ZXIoRXhlY1N0YXRl
JiwgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCiBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY0dldHRl
ckV4Y2VwdGlvbkF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0Tm9uZGV0
ZXJtaW5pc3RpYz46OmF0dHJpYnV0ZTxqc1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5p
c3RpY0dldHRlckV4Y2VwdGlvbkF0dHJHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJub25kZXRl
cm1pbmlzdGljR2V0dGVyRXhjZXB0aW9uQXR0ciIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNHZXR0ZXJFeGNlcHRpb25B
dHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE5vbmRldGVybWluaXN0aWMqIHRoaXNP
YmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNHZXR0ZXJFeGNlcHRpb25BdHRyR2V0
dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE5vbmRldGVybWluaXN0aWMmIHRoaXNPYmplY3Qs
IFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAj
aWYgRU5BQkxFKFdFQl9SRVBMQVkpCi0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9
IHN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCA9IHN0YXRlLmxleGljYWxHbG9iYWxPYmplY3QoKTsKICAgICBJbnB1dEN1cnNvciYg
Y3Vyc29yID0gZ2xvYmFsT2JqZWN0LT5pbnB1dEN1cnNvcigpOwogICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxjb25zdCBBdG9taWNTdHJpbmc+IGJpbmRpbmdOYW1lKCJUZXN0Tm9uZGV0ZXJtaW5p
c3RpYy5ub25kZXRlcm1pbmlzdGljR2V0dGVyRXhjZXB0aW9uQXR0ciIsIEF0b21pY1N0cmluZzo6
Q29uc3RydWN0RnJvbUxpdGVyYWwpOwogICAgIGlmIChjdXJzb3IuaXNDYXB0dXJpbmcoKSkgewot
ICAgICAgICBTdHJpbmcgbWVtb2l6ZWRSZXN1bHQgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCkubm9u
ZGV0ZXJtaW5pc3RpY0dldHRlckV4Y2VwdGlvbkF0dHIoZWMpOworICAgICAgICBTdHJpbmcgbWVt
b2l6ZWRSZXN1bHQgPSB0aGlzT2JqZWN0LndyYXBwZWQoKS5ub25kZXRlcm1pbmlzdGljR2V0dGVy
RXhjZXB0aW9uQXR0cihlYyk7CiAgICAgICAgIGN1cnNvci5hcHBlbmRJbnB1dDxNZW1vaXplZERP
TVJlc3VsdDxTdHJpbmc+PihiaW5kaW5nTmFtZS5nZXQoKS5zdHJpbmcoKSwgbWVtb2l6ZWRSZXN1
bHQsIGVjKTsKLSAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0
ZSwgbWVtb2l6ZWRSZXN1bHQpOwotICAgICAgICBzZXRET01FeGNlcHRpb24oc3RhdGUsIHRocm93
U2NvcGUsIGVjKTsKKyAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZSgm
c3RhdGUsIG1lbW9pemVkUmVzdWx0KTsKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwg
dGhyb3dTY29wZSwgZWMpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIApAQCAtMjg0
LDM3ICsyODQsMzcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE5vbmRldGVybWluaXN0
aWNOb25kZXRlcm1pbmlzdGljR2V0dGVyRXhjZXB0aW9uQXR0ckcKICAgICAgICAgU3RyaW5nIG1l
bW9pemVkUmVzdWx0OwogICAgICAgICBNZW1vaXplZERPTVJlc3VsdEJhc2UqIGlucHV0ID0gY3Vy
c29yLmZldGNoSW5wdXQ8TWVtb2l6ZWRET01SZXN1bHRCYXNlPigpOwogICAgICAgICBpZiAoaW5w
dXQgJiYgaW5wdXQtPmNvbnZlcnRUbzxTdHJpbmc+KG1lbW9pemVkUmVzdWx0KSkgewotICAgICAg
ICAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgbWVtb2l6ZWRS
ZXN1bHQpOwotICAgICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCBp
bnB1dC0+ZXhjZXB0aW9uQ29kZSgpKTsKKyAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0ganNT
dHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCBtZW1vaXplZFJlc3VsdCk7CisgICAgICAgICAgICBzZXRE
T01FeGNlcHRpb24oJnN0YXRlLCB0aHJvd1Njb3BlLCBpbnB1dC0+ZXhjZXB0aW9uQ29kZSgpKTsK
ICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KICAgICB9CiAjZW5kaWYKLSAg
ICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0
ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwubm9uZGV0ZXJtaW5pc3RpY0dldHRlckV4
Y2VwdGlvbkF0dHIoZWMpKTsKLSAgICBzZXRET01FeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUs
IGVjKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgSlNWYWx1
ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIGltcGwubm9uZGV0ZXJtaW5pc3Rp
Y0dldHRlckV4Y2VwdGlvbkF0dHIoZWMpKTsKKyAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCB0
aHJvd1Njb3BlLCBlYyk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljU2V0dGVyRXhjZXB0
aW9uQXR0ckdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3ROb25kZXRlcm1pbmlzdGljKiwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSk7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0Tm9uZGV0ZXJt
aW5pc3RpY05vbmRldGVybWluaXN0aWNTZXR0ZXJFeGNlcHRpb25BdHRyR2V0dGVyKEV4ZWNTdGF0
ZSYsIEpTVGVzdE5vbmRldGVybWluaXN0aWMmLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAog
RW5jb2RlZEpTVmFsdWUganNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNTZXR0
ZXJFeGNlcHRpb25BdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE5vbmRl
dGVybWluaXN0aWM+OjphdHRyaWJ1dGU8anNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWlu
aXN0aWNTZXR0ZXJFeGNlcHRpb25BdHRyR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAibm9uZGV0
ZXJtaW5pc3RpY1NldHRlckV4Y2VwdGlvbkF0dHIiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljU2V0dGVyRXhjZXB0aW9u
QXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3ROb25kZXRlcm1pbmlzdGljKiB0aGlz
T2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljU2V0dGVyRXhjZXB0aW9uQXR0ckdl
dHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3ROb25kZXRlcm1pbmlzdGljJiB0aGlzT2JqZWN0
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogI2lmIEVOQUJMRShXRUJfUkVQTEFZKQotICAg
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpOworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzdGF0ZS5sZXhpY2FsR2xv
YmFsT2JqZWN0KCk7CiAgICAgSW5wdXRDdXJzb3ImIGN1cnNvciA9IGdsb2JhbE9iamVjdC0+aW5w
dXRDdXJzb3IoKTsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbWljU3RyaW5n
PiBiaW5kaW5nTmFtZSgiVGVzdE5vbmRldGVybWluaXN0aWMubm9uZGV0ZXJtaW5pc3RpY1NldHRl
ckV4Y2VwdGlvbkF0dHIiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKICAg
ICBpZiAoY3Vyc29yLmlzQ2FwdHVyaW5nKCkpIHsKLSAgICAgICAgU3RyaW5nIG1lbW9pemVkUmVz
dWx0ID0gdGhpc09iamVjdC0+d3JhcHBlZCgpLm5vbmRldGVybWluaXN0aWNTZXR0ZXJFeGNlcHRp
b25BdHRyKCk7CisgICAgICAgIFN0cmluZyBtZW1vaXplZFJlc3VsdCA9IHRoaXNPYmplY3Qud3Jh
cHBlZCgpLm5vbmRldGVybWluaXN0aWNTZXR0ZXJFeGNlcHRpb25BdHRyKCk7CiAgICAgICAgIGN1
cnNvci5hcHBlbmRJbnB1dDxNZW1vaXplZERPTVJlc3VsdDxTdHJpbmc+PihiaW5kaW5nTmFtZS5n
ZXQoKS5zdHJpbmcoKSwgbWVtb2l6ZWRSZXN1bHQsIDApOwotICAgICAgICBKU1ZhbHVlIHJlc3Vs
dCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBtZW1vaXplZFJlc3VsdCk7CisgICAgICAgIEpT
VmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCBtZW1vaXplZFJlc3VsdCk7
CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCkBAIC0zMjIsMTMgKzMyMiwxMyBAQCBz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0
aWNTZXR0ZXJFeGNlcHRpb25BdHRyRwogICAgICAgICBTdHJpbmcgbWVtb2l6ZWRSZXN1bHQ7CiAg
ICAgICAgIE1lbW9pemVkRE9NUmVzdWx0QmFzZSogaW5wdXQgPSBjdXJzb3IuZmV0Y2hJbnB1dDxN
ZW1vaXplZERPTVJlc3VsdEJhc2U+KCk7CiAgICAgICAgIGlmIChpbnB1dCAmJiBpbnB1dC0+Y29u
dmVydFRvPFN0cmluZz4obWVtb2l6ZWRSZXN1bHQpKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlIHJl
c3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBtZW1vaXplZFJlc3VsdCk7CisgICAgICAg
ICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgbWVtb2l6ZWRS
ZXN1bHQpOwogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQogICAgIH0KICNl
bmRpZgotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1
ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5ub25kZXRlcm1pbmlzdGlj
U2V0dGVyRXhjZXB0aW9uQXR0cigpKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFw
cGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIGlt
cGwubm9uZGV0ZXJtaW5pc3RpY1NldHRlckV4Y2VwdGlvbkF0dHIoKSk7CiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE9iai5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0T2JqLmNwcAppbmRleCBjZjgxYTFjY2EwMDExMzQyZjEzOTQ3ZDk5ZjI3YTMz
Yzk4YzZkODgxLi45YTg2NmE4ZTI2ZTNlNTUyM2NhOTQ4MjBmNmYyNjM1ZTBkNjZjMDA4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2Jq
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
T2JqLmNwcApAQCAtMTY5Myw5ODIgKzE2OTMsOTg0IEBAIGlubGluZSBKU1Rlc3RPYmoqIEpTVGVz
dE9iajo6Y2FzdEZvckF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIHRo
CiAgICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRo
aXNWYWx1ZSkpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVhZE9ubHlM
b25nQXR0ckdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKTsKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWFkT25seUxvbmdBdHRyR2V0
dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCiBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWFkT25seUxvbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBC
aW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpSZWFkT25seUxvbmdB
dHRyR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAicmVhZE9ubHlMb25nQXR0ciIpOwogfQogCi1z
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVhZE9ubHlMb25nQXR0ckdldHRlcihFeGVj
U3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVhZE9ubHlMb25nQXR0ckdldHRl
cihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKKyAg
ICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQg
PSBqc051bWJlcihpbXBsLnJlYWRPbmx5TG9uZ0F0dHIoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlYWRPbmx5U3RyaW5nQXR0ckdl
dHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKK3N0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWFkT25seVN0cmluZ0F0dHJHZXR0ZXIoRXhl
Y1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKIEVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9ialJlYWRPbmx5U3RyaW5nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGlu
Z0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqUmVhZE9ubHlTdHJpbmdBdHRy
R2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAicmVhZE9ubHlTdHJpbmdBdHRyIik7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWFkT25seVN0cmluZ0F0dHJHZXR0ZXIoRXhl
Y1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlYWRPbmx5U3RyaW5nQXR0ckdl
dHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsK
LSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLnJlYWRP
bmx5U3RyaW5nQXR0cigpKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7
CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIGltcGwucmVh
ZE9ubHlTdHJpbmdBdHRyKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWFkT25seVRlc3RPYmpBdHRyR2V0dGVyKEV4ZWNTdGF0ZSos
IEpTVGVzdE9iaiosIFRocm93U2NvcGUmIHRocm93U2NvcGUpOworc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdE9ialJlYWRPbmx5VGVzdE9iakF0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0
T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
alJlYWRPbmx5VGVzdE9iakF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0
T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9ialJlYWRPbmx5VGVzdE9iakF0dHJHZXR0ZXI+KHN0YXRl
LCB0aGlzVmFsdWUsICJyZWFkT25seVRlc3RPYmpBdHRyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3RPYmpSZWFkT25seVRlc3RPYmpBdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3Rh
dGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWFkT25seVRlc3RPYmpBdHRyR2V0dGVyKEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwotICAgIEpTVmFs
dWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCksIGltcGwu
cmVhZE9ubHlUZXN0T2JqQXR0cigpKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFw
cGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKCZzdGF0ZSwgdGhpc09iamVjdC5nbG9i
YWxPYmplY3QoKSwgaW1wbC5yZWFkT25seVRlc3RPYmpBdHRyKCkpOwogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3RvclN0YXRp
Y1JlYWRPbmx5TG9uZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlKik7CitzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0T2JqQ29uc3RydWN0b3JTdGF0aWNSZWFkT25seUxvbmdBdHRyR2V0dGVyKEV4ZWNT
dGF0ZSYpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3RvclN0YXRpY1JlYWRP
bmx5TG9uZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUsIFByb3BlcnR5TmFt
ZSkKIHsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9iakNvbnN0cnVjdG9yU3Rh
dGljUmVhZE9ubHlMb25nQXR0ckdldHRlcihzdGF0ZSkpOworICAgIEFTU0VSVChzdGF0ZSk7Cisg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpDb25zdHJ1Y3RvclN0YXRpY1JlYWRP
bmx5TG9uZ0F0dHJHZXR0ZXIoKnN0YXRlKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RPYmpDb25zdHJ1Y3RvclN0YXRpY1JlYWRPbmx5TG9uZ0F0dHJHZXR0ZXIoRXhlY1N0YXRl
KiBzdGF0ZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3RvclN0YXRp
Y1JlYWRPbmx5TG9uZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSkKIHsKICAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoVGVzdE9iajo6c3Rh
dGljUmVhZE9ubHlMb25nQXR0cigpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JTdGF0aWNTdHJpbmdBdHRyR2V0dGVy
KEV4ZWNTdGF0ZSopOworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdG9y
U3RhdGljU3RyaW5nQXR0ckdldHRlcihFeGVjU3RhdGUmKTsKIAogRW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqQ29uc3RydWN0b3JTdGF0aWNTdHJpbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1Rlc3RPYmpDb25zdHJ1Y3RvclN0YXRpY1N0cmluZ0F0dHJHZXR0ZXIoc3RhdGUpKTsKKyAgICBB
U1NFUlQoc3RhdGUpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqQ29uc3Ry
dWN0b3JTdGF0aWNTdHJpbmdBdHRyR2V0dGVyKCpzdGF0ZSkpOwogfQogCi1zdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JTdGF0aWNTdHJpbmdBdHRyR2V0dGVyKEV4ZWNT
dGF0ZSogc3RhdGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JT
dGF0aWNTdHJpbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7CiAgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRl
LCBUZXN0T2JqOjpzdGF0aWNTdHJpbmdBdHRyKCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNT
dHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCBUZXN0T2JqOjpzdGF0aWNTdHJpbmdBdHRyKCkpOwogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDb25z
dHJ1Y3RvclRlc3RTdWJPYmpHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgVGhyb3dTY29w
ZSYgdGhyb3dTY29wZSk7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0
b3JUZXN0U3ViT2JqR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3RvclRlc3RTdWJP
YmooRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5h
bWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpz
VGVzdE9iakNvbnN0cnVjdG9yVGVzdFN1Yk9iakdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgIlRl
c3RTdWJPYmoiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVj
dG9yVGVzdFN1Yk9iakdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmpl
Y3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
T2JqQ29uc3RydWN0b3JUZXN0U3ViT2JqR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9i
aiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICByZXR1cm4gSlNU
ZXN0U3ViT2JqOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgdGhpc09iamVjdC0+Z2xvYmFs
T2JqZWN0KCkpOworICAgIHJldHVybiBKU1Rlc3RTdWJPYmo6OmdldENvbnN0cnVjdG9yKHN0YXRl
LnZtKCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOwogfQogCi1zdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0T2JqVGVzdFN1Yk9iakVuYWJsZWRCeVNldHRpbmdDb25zdHJ1Y3RvckdldHRl
cihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKK3N0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpUZXN0U3ViT2JqRW5hYmxlZEJ5U2V0dGluZ0NvbnN0
cnVjdG9yR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpUZXN0U3ViT2JqRW5hYmxlZEJ5U2V0dGlu
Z0NvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
UHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0
dHJpYnV0ZTxqc1Rlc3RPYmpUZXN0U3ViT2JqRW5hYmxlZEJ5U2V0dGluZ0NvbnN0cnVjdG9yR2V0
dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAiVGVzdFN1Yk9iakVuYWJsZWRCeVNldHRpbmciKTsKIH0K
IAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialRlc3RTdWJPYmpFbmFibGVkQnlTZXR0
aW5nQ29uc3RydWN0b3JHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2Jq
ZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dE9ialRlc3RTdWJPYmpFbmFibGVkQnlTZXR0aW5nQ29uc3RydWN0b3JHZXR0ZXIoRXhlY1N0YXRl
JiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQog
ewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OwotICAgIGlmIChVTkxJS0VMWSghdGhpc09iamVjdC0+d3JhcHBlZCgpLmZyYW1lKCkpKQorICAg
IGlmIChVTkxJS0VMWSghdGhpc09iamVjdC53cmFwcGVkKCkuZnJhbWUoKSkpCiAgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwotICAgIFNldHRpbmdzJiBzZXR0aW5ncyA9IHRoaXNPYmplY3Qt
PndyYXBwZWQoKS5mcmFtZSgpLT5zZXR0aW5ncygpOworICAgIFNldHRpbmdzJiBzZXR0aW5ncyA9
IHRoaXNPYmplY3Qud3JhcHBlZCgpLmZyYW1lKCktPnNldHRpbmdzKCk7CiAgICAgaWYgKCFzZXR0
aW5ncy50ZXN0U2V0dGluZ0VuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
Ci0gICAgcmV0dXJuIEpTVGVzdFN1Yk9iajo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIHRo
aXNPYmplY3QtPmdsb2JhbE9iamVjdCgpKTsKKyAgICByZXR1cm4gSlNUZXN0U3ViT2JqOjpnZXRD
b25zdHJ1Y3RvcihzdGF0ZS52bSgpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIAot
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakVudW1BdHRyR2V0dGVyKEV4ZWNTdGF0ZSos
IEpTVGVzdE9iaiosIFRocm93U2NvcGUmIHRocm93U2NvcGUpOworc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdE9iakVudW1BdHRyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpFbnVtQXR0cihF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkK
IHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0
T2JqRW51bUF0dHJHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJlbnVtQXR0ciIpOwogfQogCi1z
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqRW51bUF0dHJHZXR0ZXIoRXhlY1N0YXRlKiBz
dGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3Rh
dGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakVudW1BdHRyR2V0dGVyKEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAg
ICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0
ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwuZW51bUF0dHIoKSk7CisgICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJp
bmdXaXRoQ2FjaGUoJnN0YXRlLCBpbXBsLmVudW1BdHRyKCkpOwogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpCeXRlQXR0ckdldHRlcihFeGVj
U3RhdGUqLCBKU1Rlc3RPYmoqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKK3N0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RPYmpCeXRlQXR0ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmom
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQnl0
ZUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0
eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRl
PGpzVGVzdE9iakJ5dGVBdHRyR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAiYnl0ZUF0dHIiKTsK
IH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakJ5dGVBdHRyR2V0dGVyKEV4ZWNT
dGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpCeXRlQXR0ckdldHRlcihFeGVjU3Rh
dGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
CiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKKyAgICBhdXRvJiBp
bXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJl
cihpbXBsLmJ5dGVBdHRyKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RPYmpPY3RldEF0dHJHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2Jq
KiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
T2JqT2N0ZXRBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpPY3RldEF0dHIoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAg
cmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9iak9jdGV0
QXR0ckdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgIm9jdGV0QXR0ciIpOwogfQogCi1zdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0T2JqT2N0ZXRBdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUs
IEpTVGVzdE9iaiogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpPY3RldEF0dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwg
SlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNP
YmplY3Qud3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5vY3Rl
dEF0dHIoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdE9ialNob3J0QXR0ckdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKTsKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpTaG9ydEF0
dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7
CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialNob3J0QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmlu
ZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqU2hvcnRBdHRyR2V0dGVy
PihzdGF0ZSwgdGhpc1ZhbHVlLCAic2hvcnRBdHRyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RPYmpTaG9ydEF0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2Jq
KiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdE9ialNob3J0QXR0ckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmom
IHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgYXV0byYgaW1wbCA9
IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFw
cGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLnNob3J0QXR0cigpKTsK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2Jq
Q2xhbXBlZFNob3J0QXR0ckdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKTsKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDbGFtcGVkU2hv
cnRBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDbGFtcGVkU2hvcnRBdHRyKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAg
IHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpDbGFt
cGVkU2hvcnRBdHRyR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAiY2xhbXBlZFNob3J0QXR0ciIp
OwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ2xhbXBlZFNob3J0QXR0ckdl
dHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ2xhbXBlZFNob3J0
QXR0ckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBw
ZWQoKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgSlNWYWx1
ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLmNsYW1wZWRTaG9ydEF0dHIoKSk7CiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakVuZm9yY2VSYW5n
ZVNob3J0QXR0ckdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKTsKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpFbmZvcmNlUmFuZ2VTaG9y
dEF0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakVuZm9yY2VSYW5nZVNob3J0QXR0cihFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsK
ICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2Jq
RW5mb3JjZVJhbmdlU2hvcnRBdHRyR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAiZW5mb3JjZVJh
bmdlU2hvcnRBdHRyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpFbmZv
cmNlUmFuZ2VTaG9ydEF0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlz
T2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdE9iakVuZm9yY2VSYW5nZVNob3J0QXR0ckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rl
c3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVj
dC53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLmVuZm9yY2VS
YW5nZVNob3J0QXR0cigpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0T2JqVW5zaWduZWRTaG9ydEF0dHJHZXR0ZXIoRXhlY1N0YXRlKiwgSlNU
ZXN0T2JqKiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0T2JqVW5zaWduZWRTaG9ydEF0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialVuc2ln
bmVkU2hvcnRBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
UHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0
dHJpYnV0ZTxqc1Rlc3RPYmpVbnNpZ25lZFNob3J0QXR0ckdldHRlcj4oc3RhdGUsIHRoaXNWYWx1
ZSwgInVuc2lnbmVkU2hvcnRBdHRyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RPYmpVbnNpZ25lZFNob3J0QXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoq
IHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0T2JqVW5zaWduZWRTaG9ydEF0dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNU
ZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIGF1dG8m
IGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmpl
Y3Qud3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC51bnNpZ25l
ZFNob3J0QXR0cigpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0T2JqTG9uZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSk7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqTG9u
Z0F0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakxvbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBC
aW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpMb25nQXR0ckdldHRl
cj4oc3RhdGUsIHRoaXNWYWx1ZSwgImxvbmdBdHRyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RPYmpMb25nQXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoq
IHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0T2JqTG9uZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0
aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIGF1dG8mIGltcGwgPSB0
aGlzT2JqZWN0LT53cmFwcGVkKCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBl
ZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5sb25nQXR0cigpKTsKICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqTG9u
Z0xvbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIFRocm93U2NvcGUmIHRocm93
U2NvcGUpOworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakxvbmdMb25nQXR0ckdldHRl
cihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAogRW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqTG9uZ0xvbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5n
Q2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpMb25nTG9uZ0F0dHJHZXR0ZXI+
KHN0YXRlLCB0aGlzVmFsdWUsICJsb25nTG9uZ0F0dHIiKTsKIH0KIAotc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdE9iakxvbmdMb25nQXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rl
c3RPYmoqIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0T2JqTG9uZ0xvbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpT
VGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2Jq
ZWN0LndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwubG9uZ0xv
bmdBdHRyKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RPYmpVbnNpZ25lZExvbmdMb25nQXR0ckdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RP
YmoqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RPYmpVbnNpZ25lZExvbmdMb25nQXR0ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqVW5zaWdu
ZWRMb25nTG9uZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6
YXR0cmlidXRlPGpzVGVzdE9ialVuc2lnbmVkTG9uZ0xvbmdBdHRyR2V0dGVyPihzdGF0ZSwgdGhp
c1ZhbHVlLCAidW5zaWduZWRMb25nTG9uZ0F0dHIiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdE9ialVuc2lnbmVkTG9uZ0xvbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUs
IEpTVGVzdE9iaiogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpVbnNpZ25lZExvbmdMb25nQXR0ckdldHRlcihFeGVjU3Rh
dGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
CiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKKyAgICBhdXRvJiBp
bXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJl
cihpbXBsLnVuc2lnbmVkTG9uZ0xvbmdBdHRyKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
LXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdBdHRyR2V0dGVyKEV4ZWNTdGF0
ZSosIEpTVGVzdE9iaiosIFRocm93U2NvcGUmIHRocm93U2NvcGUpOworc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdE9ialN0cmluZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialN0cmlu
Z0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0
eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRl
PGpzVGVzdE9ialN0cmluZ0F0dHJHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJzdHJpbmdBdHRy
Iik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdBdHRyR2V0dGVy
KEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdBdHRyR2V0dGVy
KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwotICAg
IEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwuc3RyaW5nQXR0
cigpKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgSlNWYWx1
ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIGltcGwuc3RyaW5nQXR0cigpKTsK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2Jq
VXN2c3RyaW5nQXR0ckdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKTsKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpVc3ZzdHJpbmdBdHRy
R2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwog
CiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpVc3ZzdHJpbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBC
aW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpVc3ZzdHJpbmdBdHRy
R2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAidXN2c3RyaW5nQXR0ciIpOwogfQogCi1zdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0T2JqVXN2c3RyaW5nQXR0ckdldHRlcihFeGVjU3RhdGUqIHN0
YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqVXN2c3RyaW5nQXR0ckdldHRlcihFeGVjU3RhdGUm
IHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7
CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJl
c3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLnVzdnN0cmluZ0F0dHIoKSk7Cisg
ICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0
ID0ganNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCBpbXBsLnVzdnN0cmluZ0F0dHIoKSk7CiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialRlc3RP
YmpBdHRyR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpOworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialRlc3RPYmpBdHRyR2V0dGVyKEV4
ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCiBFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpUZXN0T2JqQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxl
cjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqVGVzdE9iakF0dHJHZXR0ZXI+KHN0YXRl
LCB0aGlzVmFsdWUsICJ0ZXN0T2JqQXR0ciIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0T2JqVGVzdE9iakF0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0
aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdE9ialRlc3RPYmpBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYg
dGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICBhdXRvJiBpbXBsID0g
dGhpc09iamVjdC0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwg
dGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCksIGltcGwudGVzdE9iakF0dHIoKSk7CisgICAgYXV0
byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9K
Uygmc3RhdGUsIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIGltcGwudGVzdE9iakF0dHIoKSk7
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9i
alRlc3ROdWxsYWJsZU9iakF0dHJHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSk7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqVGVzdE51
bGxhYmxlT2JqQXR0ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqVGVzdE51bGxhYmxlT2JqQXR0
cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFt
ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNU
ZXN0T2JqVGVzdE51bGxhYmxlT2JqQXR0ckdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgInRlc3RO
dWxsYWJsZU9iakF0dHIiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialRl
c3ROdWxsYWJsZU9iakF0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlz
T2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdE9ialRlc3ROdWxsYWJsZU9iakF0dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0
T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIGF1dG8mIGlt
cGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0
YXRlLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKSwgaW1wbC50ZXN0TnVsbGFibGVPYmpBdHRy
KCkpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBKU1ZhbHVl
IHJlc3VsdCA9IHRvSlMoJnN0YXRlLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCBpbXBsLnRl
c3ROdWxsYWJsZU9iakF0dHIoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdE9iakxlbmllbnRUZXN0T2JqQXR0ckdldHRlcihFeGVjU3RhdGUq
LCBKU1Rlc3RPYmoqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKK3N0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RPYmpMZW5pZW50VGVzdE9iakF0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0
T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
akxlbmllbnRUZXN0T2JqQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RP
Ymo+OjphdHRyaWJ1dGU8anNUZXN0T2JqTGVuaWVudFRlc3RPYmpBdHRyR2V0dGVyLCBDYXN0ZWRU
aGlzRXJyb3JCZWhhdmlvcjo6UmV0dXJuRWFybHk+KHN0YXRlLCB0aGlzVmFsdWUsICJsZW5pZW50
VGVzdE9iakF0dHIiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakxlbmll
bnRUZXN0T2JqQXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmpl
Y3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
T2JqTGVuaWVudFRlc3RPYmpBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYg
dGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICBhdXRvJiBpbXBsID0g
dGhpc09iamVjdC0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwg
dGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCksIGltcGwubGVuaWVudFRlc3RPYmpBdHRyKCkpOwor
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3Vs
dCA9IHRvSlMoJnN0YXRlLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCBpbXBsLmxlbmllbnRU
ZXN0T2JqQXR0cigpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0T2JqVW5mb3JnZWFibGVBdHRyR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9i
aiosIFRocm93U2NvcGUmIHRocm93U2NvcGUpOworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dE9ialVuZm9yZ2VhYmxlQXR0ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqVW5mb3JnZWFibGVB
dHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxq
c1Rlc3RPYmpVbmZvcmdlYWJsZUF0dHJHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJ1bmZvcmdl
YWJsZUF0dHIiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialVuZm9yZ2Vh
YmxlQXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqVW5m
b3JnZWFibGVBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVj
dCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVj
dC0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3Rh
dGUsIGltcGwudW5mb3JnZWFibGVBdHRyKCkpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKCZzdGF0
ZSwgaW1wbC51bmZvcmdlYWJsZUF0dHIoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3Rh
dGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5
U3RyaW5nR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpOworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ0F0dHJUcmVhdGluZ051
bGxBc0VtcHR5U3RyaW5nR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdBdHRyVHJlYXRp
bmdOdWxsQXNFbXB0eVN0cmluZyhFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RP
Ymo+OjphdHRyaWJ1dGU8anNUZXN0T2JqU3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJp
bmdHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJzdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0
eVN0cmluZyIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqU3RyaW5nQXR0
clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmdHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0
T2JqKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdE9ialN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nR2V0dGVy
KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwotICAg
IEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwuc3RyaW5nQXR0
clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcoKSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmpl
Y3Qud3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoJnN0
YXRlLCBpbXBsLnN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKCkpOwogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpVc3ZzdHJp
bmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZ0dldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RP
YmoqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RPYmpVc3ZzdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZ0dldHRlcihFeGVjU3Rh
dGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqVXN2c3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAg
ICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9ialVz
dnN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nR2V0dGVyPihzdGF0ZSwgdGhpc1Zh
bHVlLCAidXN2c3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmciKTsKIH0KIAotc3Rh
dGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialVzdnN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0Vt
cHR5U3RyaW5nR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpV
c3ZzdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZ0dldHRlcihFeGVjU3RhdGUmIHN0
YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0g
ICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3Vs
dCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLnVzdnN0cmluZ0F0dHJUcmVhdGluZ051
bGxBc0VtcHR5U3RyaW5nKCkpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQo
KTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgaW1wbC51
c3ZzdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZygpKTsKICAgICByZXR1cm4gcmVz
dWx0OwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqSW1wbGVtZW50YXRpb25F
bnVtQXR0ckdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKTsKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpJbXBsZW1lbnRhdGlvbkVudW1B
dHRyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
OwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpJbXBsZW1lbnRhdGlvbkVudW1BdHRyKEV4ZWNT
dGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewog
ICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpJ
bXBsZW1lbnRhdGlvbkVudW1BdHRyR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAiaW1wbGVtZW50
YXRpb25FbnVtQXR0ciIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqSW1w
bGVtZW50YXRpb25FbnVtQXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRo
aXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0T2JqSW1wbGVtZW50YXRpb25FbnVtQXR0ckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBK
U1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgYXV0
byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpz
U3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLmltcGxlbWVudGF0aW9uRW51bUF0dHIoKSk7Cisg
ICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0
ID0ganNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCBpbXBsLmltcGxlbWVudGF0aW9uRW51bUF0dHIo
KSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dE9ialhNTE9iakF0dHJHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgVGhyb3dTY29wZSYg
dGhyb3dTY29wZSk7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqWE1MT2JqQXR0ckdl
dHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAog
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqWE1MT2JqQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGlu
Z0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqWE1MT2JqQXR0ckdldHRlcj4o
c3RhdGUsIHRoaXNWYWx1ZSwgIlhNTE9iakF0dHIiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdE9ialhNTE9iakF0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2Jq
KiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdE9ialhNTE9iakF0dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2Jq
JiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRl
LCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKSwgaW1wbC54bWxPYmpBdHRyKCkpOworICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRv
SlMoJnN0YXRlLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCBpbXBsLnhtbE9iakF0dHIoKSk7
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9i
akNyZWF0ZUdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKTsKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDcmVhdGVHZXR0ZXIoRXhlY1N0
YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKIEVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9iakNyZWF0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RP
Ymo+OjphdHRyaWJ1dGU8anNUZXN0T2JqQ3JlYXRlR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAi
Y3JlYXRlIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDcmVhdGVHZXR0
ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNyZWF0ZUdldHRlcihF
eGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKKyAgICBh
dXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBq
c0Jvb2xlYW4oaW1wbC5pc0NyZWF0ZSgpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0ckdldHRlcihFeGVj
U3RhdGUqLCBKU1Rlc3RPYmoqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKK3N0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRTdHJpbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYs
IEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpSZWZsZWN0ZWRTdHJpbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVy
PEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpSZWZsZWN0ZWRTdHJpbmdBdHRyR2V0dGVy
PihzdGF0ZSwgdGhpc1ZhbHVlLCAicmVmbGVjdGVkU3RyaW5nQXR0ciIpOwogfQogCi1zdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0ckdldHRlcihFeGVjU3Rh
dGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0ckdldHRl
cihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKLSAg
ICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLmF0dHJpYnV0
ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRzdHJp
bmdhdHRyQXR0cikpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAg
ICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgaW1wbC5hdHRyaWJ1
dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkc3Ry
aW5nYXR0ckF0dHIpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0T2JqUmVmbGVjdGVkVVNWU3RyaW5nQXR0ckdldHRlcihFeGVjU3RhdGUqLCBK
U1Rlc3RPYmoqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKK3N0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRVU1ZTdHJpbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVz
dE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpSZWZsZWN0ZWRVU1ZTdHJpbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpT
VGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpSZWZsZWN0ZWRVU1ZTdHJpbmdBdHRyR2V0dGVy
PihzdGF0ZSwgdGhpc1ZhbHVlLCAicmVmbGVjdGVkVVNWU3RyaW5nQXR0ciIpOwogfQogCi1zdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkVVNWU3RyaW5nQXR0ckdldHRlcihF
eGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkVVNWU3RyaW5n
QXR0ckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBw
ZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBs
LmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZs
ZWN0ZWR1c3ZzdHJpbmdhdHRyQXR0cikpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0Lndy
YXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwg
aW1wbC5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6
cmVmbGVjdGVkdXN2c3RyaW5nYXR0ckF0dHIpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1z
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkSW50ZWdyYWxBdHRyR2V0dGVy
KEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIFRocm93U2NvcGUmIHRocm93U2NvcGUpOworc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZEludGVncmFsQXR0ckdldHRlcihFeGVj
U3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqUmVmbGVjdGVkSW50ZWdyYWxBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5k
aW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpSZWZsZWN0ZWRJbnRlZ3Jh
bEF0dHJHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJyZWZsZWN0ZWRJbnRlZ3JhbEF0dHIiKTsK
IH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZEludGVncmFsQXR0
ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVk
SW50ZWdyYWxBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVj
dCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVj
dC0+d3JhcHBlZCgpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAg
ICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwuZ2V0SW50ZWdyYWxBdHRyaWJ1dGUoV2Vi
Q29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRpbnRlZ3JhbGF0dHJBdHRyKSk7CiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFVu
c2lnbmVkSW50ZWdyYWxBdHRyR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpOworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3Rl
ZFVuc2lnbmVkSW50ZWdyYWxBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRV
bnNpZ25lZEludGVncmFsQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RP
Ymo+OjphdHRyaWJ1dGU8anNUZXN0T2JqUmVmbGVjdGVkVW5zaWduZWRJbnRlZ3JhbEF0dHJHZXR0
ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJyZWZsZWN0ZWRVbnNpZ25lZEludGVncmFsQXR0ciIpOwog
fQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkVW5zaWduZWRJbnRl
Z3JhbEF0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0LCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJl
ZmxlY3RlZFVuc2lnbmVkSW50ZWdyYWxBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVz
dE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICBhdXRvJiBp
bXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKHN0ZDo6bWF4KDAsIGlt
cGwuZ2V0SW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWR1bnNp
Z25lZGludGVncmFsYXR0ckF0dHIpKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZEJvb2xlYW5BdHRyR2V0dGVyKEV4ZWNT
dGF0ZSosIEpTVGVzdE9iaiosIFRocm93U2NvcGUmIHRocm93U2NvcGUpOworc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZEJvb2xlYW5BdHRyR2V0dGVyKEV4ZWNTdGF0ZSYs
IEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpSZWZsZWN0ZWRCb29sZWFuQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxl
cjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqUmVmbGVjdGVkQm9vbGVhbkF0dHJHZXR0
ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJyZWZsZWN0ZWRCb29sZWFuQXR0ciIpOwogfQogCi1zdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkQm9vbGVhbkF0dHJHZXR0ZXIoRXhl
Y1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZEJvb2xlYW5BdHRy
R2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5V
U0VEX1BBUkFNKHN0YXRlKTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgp
OworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJl
c3VsdCA9IGpzQm9vbGVhbihpbXBsLmhhc0F0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24o
V2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRib29sZWFuYXR0ckF0dHIpKTsKICAgICByZXR1
cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVk
VVJMQXR0ckdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKTsKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRVUkxBdHRyR2V0
dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCiBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRVUkxBdHRyKEV4ZWNTdGF0ZSogc3RhdGUs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBC
aW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpSZWZsZWN0ZWRVUkxB
dHRyR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAicmVmbGVjdGVkVVJMQXR0ciIpOwogfQogCi1z
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkVVJMQXR0ckdldHRlcihFeGVj
U3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkVVJMQXR0ckdldHRl
cihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKLSAg
ICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLmdldFVSTEF0
dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZHVybGF0dHJBdHRyKSk7CisgICAg
YXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0g
anNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCBpbXBsLmdldFVSTEF0dHJpYnV0ZShXZWJDb3JlOjpI
VE1MTmFtZXM6OnJlZmxlY3RlZHVybGF0dHJBdHRyKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFVTVlVSTEF0dHJHZXR0
ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CitzdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkVVNWVVJMQXR0ckdldHRlcihFeGVj
U3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqUmVmbGVjdGVkVVNWVVJMQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGlu
Z0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqUmVmbGVjdGVkVVNWVVJMQXR0
ckdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgInJlZmxlY3RlZFVTVlVSTEF0dHIiKTsKIH0KIAot
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFVTVlVSTEF0dHJHZXR0ZXIo
RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFVTVlVSTEF0
dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVk
KCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5n
ZXRVUkxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWR1c3Z1cmxhdHRyQXR0
cikpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBKU1ZhbHVl
IHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgaW1wbC5nZXRVUkxBdHRyaWJ1dGUo
V2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWR1c3Z1cmxhdHRyQXR0cikpOwogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRT
dHJpbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIFRocm93U2NvcGUmIHRocm93
U2NvcGUpOworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0
dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7
CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0dHIoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAg
cmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9ialJlZmxl
Y3RlZFN0cmluZ0F0dHJHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJyZWZsZWN0ZWRTdHJpbmdB
dHRyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRTdHJp
bmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWZs
ZWN0ZWRTdHJpbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09i
amVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09i
amVjdC0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUo
c3RhdGUsIGltcGwuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1M
TmFtZXM6OmN1c3RvbUNvbnRlbnRTdHJpbmdBdHRyQXR0cikpOworICAgIGF1dG8mIGltcGwgPSB0
aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENh
Y2hlKCZzdGF0ZSwgaW1wbC5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6
OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudFN0cmluZ0F0dHJBdHRyKSk7CiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZEN1c3Rv
bUludGVncmFsQXR0ckdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKTsKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRDdXN0
b21JbnRlZ3JhbEF0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYg
dGhyb3dTY29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZEN1c3RvbUlu
dGVncmFsQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRy
aWJ1dGU8anNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWxBdHRyR2V0dGVyPihzdGF0ZSwg
dGhpc1ZhbHVlLCAicmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWxBdHRyIik7CiB9CiAKLXN0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21JbnRlZ3JhbEF0dHJHZXR0ZXIo
RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZEN1c3RvbUlu
dGVncmFsQXR0ckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3Qs
IFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qt
PndyYXBwZWQoKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAg
SlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLmdldEludGVncmFsQXR0cmlidXRlKFdlYkNv
cmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudEludGVncmFsQXR0ckF0dHIpKTsKICAgICByZXR1
cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVk
Q3VzdG9tQm9vbGVhbkF0dHJHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgVGhyb3dTY29w
ZSYgdGhyb3dTY29wZSk7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVk
Q3VzdG9tQm9vbGVhbkF0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29w
ZSYgdGhyb3dTY29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZEN1c3Rv
bUJvb2xlYW5BdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
UHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0
dHJpYnV0ZTxqc1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21Cb29sZWFuQXR0ckdldHRlcj4oc3RhdGUs
IHRoaXNWYWx1ZSwgInJlZmxlY3RlZEN1c3RvbUJvb2xlYW5BdHRyIik7CiB9CiAKLXN0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21Cb29sZWFuQXR0ckdldHRlcihF
eGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tQm9v
bGVhbkF0dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
ICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53
cmFwcGVkKCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIEpT
VmFsdWUgcmVzdWx0ID0ganNCb29sZWFuKGltcGwuaGFzQXR0cmlidXRlV2l0aG91dFN5bmNocm9u
aXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRCb29sZWFuQXR0ckF0dHIp
KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
T2JqUmVmbGVjdGVkQ3VzdG9tVVJMQXR0ckdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpS
ZWZsZWN0ZWRDdXN0b21VUkxBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRD
dXN0b21VUkxBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
UHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0
dHJpYnV0ZTxqc1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21VUkxBdHRyR2V0dGVyPihzdGF0ZSwgdGhp
c1ZhbHVlLCAicmVmbGVjdGVkQ3VzdG9tVVJMQXR0ciIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tVVJMQXR0ckdldHRlcihFeGVjU3RhdGUqIHN0
YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tVVJMQXR0ckdldHRlcihF
eGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKLSAgICBK
U1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLmdldFVSTEF0dHJp
YnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRVUkxBdHRyQXR0cikpOworICAg
IGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9
IGpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgaW1wbC5nZXRVUkxBdHRyaWJ1dGUoV2ViQ29yZTo6
SFRNTE5hbWVzOjpjdXN0b21Db250ZW50VVJMQXR0ckF0dHIpKTsKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCiAjaWYgRU5BQkxFKFRFU1RfRkVBVFVSRSkKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RPYmpFbmFibGVkQXRSdW50aW1lQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVz
dE9iaiosIFRocm93U2NvcGUmIHRocm93U2NvcGUpOworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdE9iakVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0
T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
akVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8
SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9iakVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGVH
ZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJlbmFibGVkQXRSdW50aW1lQXR0cmlidXRlIik7CiB9
CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpFbmFibGVkQXRSdW50aW1lQXR0cmli
dXRlR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpFbmFibGVk
QXRSdW50aW1lQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhp
c09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICBhdXRvJiBpbXBsID0gdGhp
c09iamVjdC0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2Fj
aGUoc3RhdGUsIGltcGwuZW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZSgpKTsKKyAgICBhdXRvJiBp
bXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmlu
Z1dpdGhDYWNoZSgmc3RhdGUsIGltcGwuZW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZSgpKTsKICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCiAjZW5kaWYKIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdE9ialR5cGVkQXJyYXlBdHRyR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIFRocm93
U2NvcGUmIHRocm93U2NvcGUpOworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialR5cGVk
QXJyYXlBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpUeXBlZEFycmF5QXR0cihFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAg
ICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqVHlw
ZWRBcnJheUF0dHJHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJ0eXBlZEFycmF5QXR0ciIpOwog
fQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqVHlwZWRBcnJheUF0dHJHZXR0ZXIo
RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialR5cGVkQXJyYXlBdHRyR2V0
dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwot
ICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0
KCksIGltcGwudHlwZWRBcnJheUF0dHIoKSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUygmc3RhdGUsIHRoaXNPYmplY3Qu
Z2xvYmFsT2JqZWN0KCksIGltcGwudHlwZWRBcnJheUF0dHIoKSk7CiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakF0dHJpYnV0ZVdpdGhHZXR0
ZXJFeGNlcHRpb25HZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSk7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQXR0cmlidXRlV2l0aEdl
dHRlckV4Y2VwdGlvbkdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQXR0cmlidXRlV2l0aEdldHRl
ckV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRy
aWJ1dGU8anNUZXN0T2JqQXR0cmlidXRlV2l0aEdldHRlckV4Y2VwdGlvbkdldHRlcj4oc3RhdGUs
IHRoaXNWYWx1ZSwgImF0dHJpYnV0ZVdpdGhHZXR0ZXJFeGNlcHRpb24iKTsKIH0KIAotc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakF0dHJpYnV0ZVdpdGhHZXR0ZXJFeGNlcHRpb25HZXR0
ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakF0dHJpYnV0ZVdpdGhH
ZXR0ZXJFeGNlcHRpb25HZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2Jq
ZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2Jq
ZWN0LT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTTnVtYmVyKCpzdGF0ZSwg
dGhyb3dTY29wZSwgaW1wbC5hdHRyaWJ1dGVXaXRoR2V0dGVyRXhjZXB0aW9uKCkpOworICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRv
SlNOdW1iZXIoc3RhdGUsIHRocm93U2NvcGUsIGltcGwuYXR0cmlidXRlV2l0aEdldHRlckV4Y2Vw
dGlvbigpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0T2JqQXR0cmlidXRlV2l0aEdldHRlckxlZ2FjeUV4Y2VwdGlvbkdldHRlcihFeGVjU3Rh
dGUqLCBKU1Rlc3RPYmoqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKK3N0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3RPYmpBdHRyaWJ1dGVXaXRoR2V0dGVyTGVnYWN5RXhjZXB0aW9uR2V0dGVy
KEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCiBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpBdHRyaWJ1dGVXaXRoR2V0dGVyTGVnYWN5RXhjZXB0aW9uKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQog
ewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RP
YmpBdHRyaWJ1dGVXaXRoR2V0dGVyTGVnYWN5RXhjZXB0aW9uR2V0dGVyPihzdGF0ZSwgdGhpc1Zh
bHVlLCAiYXR0cmlidXRlV2l0aEdldHRlckxlZ2FjeUV4Y2VwdGlvbiIpOwogfQogCi1zdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0T2JqQXR0cmlidXRlV2l0aEdldHRlckxlZ2FjeUV4Y2VwdGlv
bkdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQXR0cmlidXRl
V2l0aEdldHRlckxlZ2FjeUV4Y2VwdGlvbkdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RP
YmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgRXhjZXB0aW9u
Q29kZSBlYyA9IDA7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKKyAg
ICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQg
PSBqc051bWJlcihpbXBsLmF0dHJpYnV0ZVdpdGhHZXR0ZXJMZWdhY3lFeGNlcHRpb24oZWMpKTsK
LSAgICBzZXRET01FeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIGVjKTsKKyAgICBzZXRET01F
eGNlcHRpb24oJnN0YXRlLCB0aHJvd1Njb3BlLCBlYyk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakF0dHJpYnV0ZVdpdGhTZXR0ZXJFeGNl
cHRpb25HZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSk7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQXR0cmlidXRlV2l0aFNldHRlckV4
Y2VwdGlvbkdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQXR0cmlidXRlV2l0aFNldHRlckV4Y2Vw
dGlvbihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5
TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8
anNUZXN0T2JqQXR0cmlidXRlV2l0aFNldHRlckV4Y2VwdGlvbkdldHRlcj4oc3RhdGUsIHRoaXNW
YWx1ZSwgImF0dHJpYnV0ZVdpdGhTZXR0ZXJFeGNlcHRpb24iKTsKIH0KIAotc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdE9iakF0dHJpYnV0ZVdpdGhTZXR0ZXJFeGNlcHRpb25HZXR0ZXIoRXhl
Y1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakF0dHJpYnV0ZVdpdGhTZXR0ZXJF
eGNlcHRpb25HZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
ICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53
cmFwcGVkKCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIEpT
VmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5hdHRyaWJ1dGVXaXRoU2V0dGVyRXhjZXB0aW9u
KCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RPYmpBdHRyaWJ1dGVXaXRoU2V0dGVyTGVnYWN5RXhjZXB0aW9uR2V0dGVyKEV4ZWNTdGF0ZSos
IEpTVGVzdE9iaiosIFRocm93U2NvcGUmIHRocm93U2NvcGUpOworc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdE9iakF0dHJpYnV0ZVdpdGhTZXR0ZXJMZWdhY3lFeGNlcHRpb25HZXR0ZXIoRXhl
Y1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKIEVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9iakF0dHJpYnV0ZVdpdGhTZXR0ZXJMZWdhY3lFeGNlcHRpb24oRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAg
ICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9iakF0
dHJpYnV0ZVdpdGhTZXR0ZXJMZWdhY3lFeGNlcHRpb25HZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUs
ICJhdHRyaWJ1dGVXaXRoU2V0dGVyTGVnYWN5RXhjZXB0aW9uIik7CiB9CiAKLXN0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RPYmpBdHRyaWJ1dGVXaXRoU2V0dGVyTGVnYWN5RXhjZXB0aW9uR2V0
dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCwgVGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpBdHRyaWJ1dGVXaXRo
U2V0dGVyTGVnYWN5RXhjZXB0aW9uR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYg
dGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICBhdXRvJiBpbXBsID0g
dGhpc09iamVjdC0+d3JhcHBlZCgpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBw
ZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwuYXR0cmlidXRlV2l0aFNl
dHRlckxlZ2FjeUV4Y2VwdGlvbigpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0T2JqU3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb25HZXR0
ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CitzdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqU3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb25H
ZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAK
IEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQog
ewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RP
YmpTdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbkdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwg
InN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RPYmpTdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbkdldHRlcihFeGVjU3Rh
dGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqU3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNl
cHRpb25HZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBq
c1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5zdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlv
bihlYykpOwotICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgZWMpOworICAg
IGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9
IGpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgaW1wbC5zdHJpbmdBdHRyV2l0aEdldHRlckV4Y2Vw
dGlvbihlYykpOworICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIHRocm93U2NvcGUsIGVjKTsK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2Jq
U3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb25HZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2Jq
KiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
T2JqU3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb25HZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0
T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
alN0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2Fs
bGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpTdHJpbmdBdHRyV2l0aFNldHRlckV4
Y2VwdGlvbkdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgInN0cmluZ0F0dHJXaXRoU2V0dGVyRXhj
ZXB0aW9uIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdBdHRy
V2l0aFNldHRlckV4Y2VwdGlvbkdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRo
aXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0T2JqU3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb25HZXR0ZXIoRXhlY1N0YXRlJiBz
dGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewog
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwot
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1
bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5zdHJpbmdBdHRyV2l0aFNldHRlckV4
Y2VwdGlvbigpKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAg
SlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIGltcGwuc3RyaW5nQXR0
cldpdGhTZXR0ZXJFeGNlcHRpb24oKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakN1c3RvbUF0dHJHZXR0ZXIoRXhlY1N0YXRlKiwgSlNU
ZXN0T2JqKiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0T2JqQ3VzdG9tQXR0ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ3VzdG9tQXR0cihF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkK
IHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0
T2JqQ3VzdG9tQXR0ckdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgImN1c3RvbUF0dHIiKTsKIH0K
IAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakN1c3RvbUF0dHJHZXR0ZXIoRXhlY1N0
YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakN1c3RvbUF0dHJHZXR0ZXIoRXhlY1N0
YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3Rh
dGUpOwotICAgIHJldHVybiB0aGlzT2JqZWN0LT5jdXN0b21BdHRyKCpzdGF0ZSk7CisgICAgcmV0
dXJuIHRoaXNPYmplY3QuY3VzdG9tQXR0cihzdGF0ZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RPYmpPbmZvb0dldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKTsKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpPbmZvb0dl
dHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAog
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqT25mb28oRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxs
ZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9iak9uZm9vR2V0dGVyPihzdGF0ZSwgdGhp
c1ZhbHVlLCAib25mb28iKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iak9u
Zm9vR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpPbmZvb0dl
dHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7Ci0gICAgcmV0dXJuIGV2ZW50SGFuZGxlckF0dHJpYnV0ZSh0aGlzT2Jq
ZWN0LT53cmFwcGVkKCksIGV2ZW50TmFtZXMoKS5mb29FdmVudCk7CisgICAgcmV0dXJuIGV2ZW50
SGFuZGxlckF0dHJpYnV0ZSh0aGlzT2JqZWN0LndyYXBwZWQoKSwgZXZlbnROYW1lcygpLmZvb0V2
ZW50KTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iak9ud2Via2l0Zm9vR2V0
dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIFRocm93U2NvcGUmIHRocm93U2NvcGUpOworc3Rh
dGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iak9ud2Via2l0Zm9vR2V0dGVyKEV4ZWNTdGF0ZSYs
IEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpPbndlYmtpdGZvbyhFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RP
Ymo+OjphdHRyaWJ1dGU8anNUZXN0T2JqT253ZWJraXRmb29HZXR0ZXI+KHN0YXRlLCB0aGlzVmFs
dWUsICJvbndlYmtpdGZvbyIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2Jq
T253ZWJraXRmb29HZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9i
ak9ud2Via2l0Zm9vR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVj
dCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICByZXR1cm4gZXZlbnRIYW5kbGVyQXR0
cmlidXRlKHRoaXNPYmplY3QtPndyYXBwZWQoKSwgZXZlbnROYW1lcygpLmZvb0V2ZW50KTsKKyAg
ICByZXR1cm4gZXZlbnRIYW5kbGVyQXR0cmlidXRlKHRoaXNPYmplY3Qud3JhcHBlZCgpLCBldmVu
dE5hbWVzKCkuZm9vRXZlbnQpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2Jq
V2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpOworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialdp
dGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlw
dFN0YXRlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46
OmF0dHJpYnV0ZTxqc1Rlc3RPYmpXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVHZXR0ZXI+KHN0YXRl
LCB0aGlzVmFsdWUsICJ3aXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGUiKTsKIH0KIAotc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZUdldHRlcihFeGVj
U3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdFN0YXRlQXR0cmli
dXRlR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAg
VU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBl
ZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC53aXRoU2NyaXB0U3RhdGVB
dHRyaWJ1dGUoKnN0YXRlKSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgp
OworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC53aXRoU2NyaXB0U3RhdGVBdHRy
aWJ1dGUoc3RhdGUpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0T2JqV2l0aENhbGxXaXRoQW5kU2V0dGVyQ2FsbFdpdGhBdHRyaWJ1dGVHZXR0
ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CitzdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqV2l0aENhbGxXaXRoQW5kU2V0dGVyQ2FsbFdpdGhB
dHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialdpdGhDYWxsV2l0aEFuZFNldHRlckNh
bGxXaXRoQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46
OmF0dHJpYnV0ZTxqc1Rlc3RPYmpXaXRoQ2FsbFdpdGhBbmRTZXR0ZXJDYWxsV2l0aEF0dHJpYnV0
ZUdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgIndpdGhDYWxsV2l0aEFuZFNldHRlckNhbGxXaXRo
QXR0cmlidXRlIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoQ2Fs
bFdpdGhBbmRTZXR0ZXJDYWxsV2l0aEF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBK
U1Rlc3RPYmoqIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0T2JqV2l0aENhbGxXaXRoQW5kU2V0dGVyQ2FsbFdpdGhBdHRyaWJ1
dGVHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVk
KCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLndpdGhDYWxsV2l0aEFuZFNl
dHRlckNhbGxXaXRoQXR0cmlidXRlKCpzdGF0ZSkpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2Jq
ZWN0LndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwud2l0aENh
bGxXaXRoQW5kU2V0dGVyQ2FsbFdpdGhBdHRyaWJ1dGUoc3RhdGUpKTsKICAgICByZXR1cm4gcmVz
dWx0OwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHRBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSk7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqV2l0aFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2Jq
JiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialdp
dGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5n
Q2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dEF0dHJpYnV0ZUdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgIndpdGhTY3JpcHRFeGVj
dXRpb25Db250ZXh0QXR0cmlidXRlIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUq
IHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRB
dHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
ICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNE
T01HbG9iYWxPYmplY3QqPihzdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpOworICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxP
YmplY3QqPihzdGF0ZS5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250
ZXh0KCk7CiAgICAgaWYgKCFjb250ZXh0KQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
LSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVz
dWx0ID0gdG9KUyhzdGF0ZSwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCksIGltcGwud2l0aFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGUoKmNvbnRleHQpKTsKKyAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKCZzdGF0
ZSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgaW1wbC53aXRoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dEF0dHJpYnV0ZSgqY29udGV4dCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXNH
ZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7Citz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlUmFp
c2VzR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
OwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlz
ZXMoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5h
bWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpz
VGVzdE9ialdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlc0dldHRlcj4oc3RhdGUsIHRoaXNW
YWx1ZSwgIndpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcyIpOwogfQogCi1zdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzR2V0dGVy
KEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0U3RhdGVB
dHRyaWJ1dGVSYWlzZXNHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2Jq
ZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAw
OwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSBy
ZXN1bHQgPSB0b0pTKHN0YXRlLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKSwgaW1wbC53aXRo
U2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMoKnN0YXRlLCBlYykpOwotICAgIHNldERPTUV4Y2Vw
dGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgZWMpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoJnN0YXRlLCB0aGlzT2JqZWN0
Lmdsb2JhbE9iamVjdCgpLCBpbXBsLndpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcyhzdGF0
ZSwgZWMpKTsKKyAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCB0aHJvd1Njb3BlLCBlYyk7CiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialdp
dGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlUmFpc2VzR2V0dGVyKEV4ZWNTdGF0ZSos
IEpTVGVzdE9iaiosIFRocm93U2NvcGUmIHRocm93U2NvcGUpOworc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlUmFpc2VzR2V0
dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCiBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0
ZVJhaXNlcyhFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1
dGU8anNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVSYWlzZXNHZXR0
ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0
ZVJhaXNlcyIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVSYWlzZXNHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwg
SlNUZXN0T2JqKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRl
UmFpc2VzR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBh
dXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUtPmxleGljYWxH
bG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICBhdXRvKiBjb250
ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUubGV4aWNhbEdsb2JhbE9iamVj
dCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIGlmICghY29udGV4dCkKICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndy
YXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIHRoaXNPYmplY3QtPmds
b2JhbE9iamVjdCgpLCBpbXBsLndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlUmFp
c2VzKCpjb250ZXh0LCBlYykpOwotICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29w
ZSwgZWMpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBKU1Zh
bHVlIHJlc3VsdCA9IHRvSlMoJnN0YXRlLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCBpbXBs
LndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlUmFpc2VzKCpjb250ZXh0LCBlYykp
OworICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIHRocm93U2NvcGUsIGVjKTsKICAgICByZXR1
cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUq
LCBKU1Rlc3RPYmoqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKK3N0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0
cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpT
VGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFu
ZFNjcmlwdFN0YXRlQXR0cmlidXRlR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAid2l0aFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZSIpOwogfQogCi1zdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3Jp
cHRTdGF0ZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNP
YmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZUdl
dHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7Ci0gICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9i
amVjdCo+KHN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250
ZXh0KCk7CisgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0
YXRlLmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAg
ICBpZiAoIWNvbnRleHQpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIGF1dG8m
IGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pT
KHN0YXRlLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKSwgaW1wbC53aXRoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlKCpzdGF0ZSwgKmNvbnRleHQpKTsKKyAg
ICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQg
PSB0b0pTKCZzdGF0ZSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgaW1wbC53aXRoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlKHN0YXRlLCAqY29udGV4dCkp
OwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RP
YmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2Vz
R2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwor
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0
QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXNHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2Jq
JiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialdp
dGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7
CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9i
aldpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXNH
ZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNj
cmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRl
UmFpc2VzR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpXaXRo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzR2V0dGVy
KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBhdXRvKiBjb250ZXh0
ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3Qo
KSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0
PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUubGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIGlmICghY29udGV4dCkKICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKLSAg
ICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgp
LCBpbXBsLndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVS
YWlzZXMoKnN0YXRlLCAqY29udGV4dCwgZWMpKTsKLSAgICBzZXRET01FeGNlcHRpb24oc3RhdGUs
IHRocm93U2NvcGUsIGVjKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7
CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKCZzdGF0ZSwgdGhpc09iamVjdC5nbG9iYWxPYmpl
Y3QoKSwgaW1wbC53aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmli
dXRlUmFpc2VzKHN0YXRlLCAqY29udGV4dCwgZWMpKTsKKyAgICBzZXRET01FeGNlcHRpb24oJnN0
YXRlLCB0aHJvd1Njb3BlLCBlYyk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0
U3RhdGVXaXRoU3BhY2VzQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpOworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialdp
dGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzQXR0cmlidXRl
R2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwog
CiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNj
cmlwdFN0YXRlV2l0aFNwYWNlc0F0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxl
cjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1dGVHZXR0ZXI+KHN0YXRlLCB0aGlzVmFs
dWUsICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNlc0F0
dHJpYnV0ZSIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1dGVHZXR0ZXIo
RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRp
b25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0
ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
IHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKLSAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUt
PmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICBh
dXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUubGV4aWNhbEds
b2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIGlmICghY29udGV4
dCkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNP
YmplY3QtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIHRoaXNP
YmplY3QtPmdsb2JhbE9iamVjdCgpLCBpbXBsLndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5k
U2NyaXB0U3RhdGVXaXRoU3BhY2VzQXR0cmlidXRlKCpzdGF0ZSwgKmNvbnRleHQpKTsKKyAgICBh
dXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0
b0pTKCZzdGF0ZSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgaW1wbC53aXRoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNlc0F0dHJpYnV0ZShzdGF0ZSwgKmNv
bnRleHQpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0T2JqV2l0aFNjcmlwdEFyZ3VtZW50c0FuZENhbGxTdGFja0F0dHJpYnV0ZUdldHRlcihF
eGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKK3N0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0QXJndW1lbnRzQW5kQ2FsbFN0YWNrQXR0
cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0QXJndW1lbnRzQW5kQ2Fs
bFN0YWNrQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46
OmF0dHJpYnV0ZTxqc1Rlc3RPYmpXaXRoU2NyaXB0QXJndW1lbnRzQW5kQ2FsbFN0YWNrQXR0cmli
dXRlR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAid2l0aFNjcmlwdEFyZ3VtZW50c0FuZENhbGxT
dGFja0F0dHJpYnV0ZSIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqV2l0
aFNjcmlwdEFyZ3VtZW50c0FuZENhbGxTdGFja0F0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqIHN0
YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdEFyZ3VtZW50c0FuZENhbGxTdGFj
a0F0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3Qs
IFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qt
PndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIHRoaXNPYmplY3Qt
Pmdsb2JhbE9iamVjdCgpLCBpbXBsLndpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tBdHRy
aWJ1dGUoKSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIEpT
VmFsdWUgcmVzdWx0ID0gdG9KUygmc3RhdGUsIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIGlt
cGwud2l0aFNjcmlwdEFyZ3VtZW50c0FuZENhbGxTdGFja0F0dHJpYnV0ZSgpKTsKICAgICByZXR1
cm4gcmVzdWx0OwogfQogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjEpCi1zdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMUdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RP
YmoqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RPYmpDb25kaXRpb25hbEF0dHIxR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25h
bEF0dHIxKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0
ZTxqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHIxR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAiY29u
ZGl0aW9uYWxBdHRyMSIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ29u
ZGl0aW9uYWxBdHRyMUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmpl
Y3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
T2JqQ29uZGl0aW9uYWxBdHRyMUdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRo
aXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgYXV0byYgaW1wbCA9IHRo
aXNPYmplY3QtPndyYXBwZWQoKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVk
KCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLmNvbmRpdGlvbmFsQXR0cjEo
KSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTI2NzYsMTggKzI2NzgsMTggQEAgc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjFHZXR0ZXIoRXhlY1N0YXRl
KiBzdGF0ZSwgSlNUZXN0T2IKICNlbmRpZgogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjEpICYmIEVO
QUJMRShDb25kaXRpb24yKQotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlv
bmFsQXR0cjJHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSk7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMkdl
dHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAog
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMihFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4g
QmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqQ29uZGl0aW9uYWxB
dHRyMkdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgImNvbmRpdGlvbmFsQXR0cjIiKTsKIH0KIAot
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjJHZXR0ZXIoRXhl
Y1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjJHZXR0
ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7Cisg
ICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0
ID0ganNOdW1iZXIoaW1wbC5jb25kaXRpb25hbEF0dHIyKCkpOwogICAgIHJldHVybiByZXN1bHQ7
CiB9CkBAIC0yNjk1LDE4ICsyNjk3LDE4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RP
YmpDb25kaXRpb25hbEF0dHIyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iCiAjZW5k
aWYKIAogI2lmIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKLXN0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHIzR2V0dGVyKEV4ZWNTdGF0
ZSosIEpTVGVzdE9iaiosIFRocm93U2NvcGUmIHRocm93U2NvcGUpOworc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjNHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0
T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
akNvbmRpdGlvbmFsQXR0cjMoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2Jq
Pjo6YXR0cmlidXRlPGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjNHZXR0ZXI+KHN0YXRlLCB0aGlz
VmFsdWUsICJjb25kaXRpb25hbEF0dHIzIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RPYmpDb25kaXRpb25hbEF0dHIzR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9i
aiogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHIzR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpT
VGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2Jq
ZWN0LndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwuY29uZGl0
aW9uYWxBdHRyMygpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtMjcxNCw0NjAgKzI3MTYs
NDYwIEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHIzR2V0
dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iCiAjZW5kaWYKIAogI2lmIEVOQUJMRShDb25k
aXRpb24xKQotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjRD
b25zdHJ1Y3RvckdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKTsKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHI0
Q29uc3RydWN0b3JHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjRDb25z
dHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1
dGU8anNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNENvbnN0cnVjdG9yR2V0dGVyPihzdGF0ZSwgdGhp
c1ZhbHVlLCAiY29uZGl0aW9uYWxBdHRyNCIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNENvbnN0cnVjdG9yR2V0dGVyKEV4ZWNTdGF0ZSogc3Rh
dGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHI0Q29uc3RydWN0b3JHZXR0
ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOwotICAgIHJldHVybiBKU1Rlc3RPYmplY3RBOjpnZXRDb25zdHJ1Y3Rvcihz
dGF0ZS0+dm0oKSwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCkpOworICAgIHJldHVybiBKU1Rl
c3RPYmplY3RBOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS52bSgpLCB0aGlzT2JqZWN0Lmdsb2JhbE9i
amVjdCgpKTsKIH0KIAogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgJiYgRU5BQkxF
KENvbmRpdGlvbjIpCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxB
dHRyNUNvbnN0cnVjdG9yR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIFRocm93U2NvcGUm
IHRocm93U2NvcGUpOworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFs
QXR0cjVDb25zdHJ1Y3RvckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRy
NUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
UHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0
dHJpYnV0ZTxqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHI1Q29uc3RydWN0b3JHZXR0ZXI+KHN0YXRl
LCB0aGlzVmFsdWUsICJjb25kaXRpb25hbEF0dHI1Iik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHI1Q29uc3RydWN0b3JHZXR0ZXIoRXhlY1N0YXRl
KiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQor
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjVDb25zdHJ1Y3Rv
ckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgcmV0dXJuIEpTVGVzdE9iamVjdEI6OmdldENvbnN0cnVj
dG9yKHN0YXRlLT52bSgpLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKSk7CisgICAgcmV0dXJu
IEpTVGVzdE9iamVjdEI6OmdldENvbnN0cnVjdG9yKHN0YXRlLnZtKCksIHRoaXNPYmplY3QuZ2xv
YmFsT2JqZWN0KCkpOwogfQogCiAjZW5kaWYKIAogI2lmIEVOQUJMRShDb25kaXRpb24xKSB8fCBF
TkFCTEUoQ29uZGl0aW9uMikKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRp
b25hbEF0dHI2Q29uc3RydWN0b3JHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSk7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ29uZGl0
aW9uYWxBdHRyNkNvbnN0cnVjdG9yR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25h
bEF0dHI2Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2Jq
Pjo6YXR0cmlidXRlPGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjZDb25zdHJ1Y3RvckdldHRlcj4o
c3RhdGUsIHRoaXNWYWx1ZSwgImNvbmRpdGlvbmFsQXR0cjYiKTsKIH0KIAotc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjZDb25zdHJ1Y3RvckdldHRlcihFeGVj
U3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNkNvbnN0
cnVjdG9yR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICByZXR1cm4gSlNUZXN0T2JqZWN0Qzo6Z2V0Q29u
c3RydWN0b3Ioc3RhdGUtPnZtKCksIHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpKTsKKyAgICBy
ZXR1cm4gSlNUZXN0T2JqZWN0Qzo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUudm0oKSwgdGhpc09iamVj
dC5nbG9iYWxPYmplY3QoKSk7CiB9CiAKICNlbmRpZgogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0T2JqQ2FjaGVkQXR0cmlidXRlMUdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpD
YWNoZWRBdHRyaWJ1dGUxR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDYWNoZWRBdHRyaWJ1dGUx
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rl
c3RPYmpDYWNoZWRBdHRyaWJ1dGUxR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAiY2FjaGVkQXR0
cmlidXRlMSIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ2FjaGVkQXR0
cmlidXRlMUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ2Fj
aGVkQXR0cmlidXRlMUdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmpl
Y3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgaWYgKEpTVmFsdWUgY2FjaGVkVmFs
dWUgPSB0aGlzT2JqZWN0LT5tX2NhY2hlZEF0dHJpYnV0ZTEuZ2V0KCkpCisgICAgaWYgKEpTVmFs
dWUgY2FjaGVkVmFsdWUgPSB0aGlzT2JqZWN0Lm1fY2FjaGVkQXR0cmlidXRlMS5nZXQoKSkKICAg
ICAgICAgcmV0dXJuIGNhY2hlZFZhbHVlOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53
cmFwcGVkKCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIEpT
VmFsdWUgcmVzdWx0ID0gaW1wbC5jYWNoZWRBdHRyaWJ1dGUxKCk7Ci0gICAgdGhpc09iamVjdC0+
bV9jYWNoZWRBdHRyaWJ1dGUxLnNldChzdGF0ZS0+dm0oKSwgdGhpc09iamVjdCwgcmVzdWx0KTsK
KyAgICB0aGlzT2JqZWN0Lm1fY2FjaGVkQXR0cmlidXRlMS5zZXQoc3RhdGUudm0oKSwgJnRoaXNP
YmplY3QsIHJlc3VsdCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdE9iakNhY2hlZEF0dHJpYnV0ZTJHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0
T2JqKiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0T2JqQ2FjaGVkQXR0cmlidXRlMkdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ2FjaGVkQXR0
cmlidXRlMihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1
dGU8anNUZXN0T2JqQ2FjaGVkQXR0cmlidXRlMkdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgImNh
Y2hlZEF0dHJpYnV0ZTIiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNh
Y2hlZEF0dHJpYnV0ZTJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2Jq
ZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dE9iakNhY2hlZEF0dHJpYnV0ZTJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0
aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIGlmIChKU1ZhbHVlIGNh
Y2hlZFZhbHVlID0gdGhpc09iamVjdC0+bV9jYWNoZWRBdHRyaWJ1dGUyLmdldCgpKQorICAgIGlm
IChKU1ZhbHVlIGNhY2hlZFZhbHVlID0gdGhpc09iamVjdC5tX2NhY2hlZEF0dHJpYnV0ZTIuZ2V0
KCkpCiAgICAgICAgIHJldHVybiBjYWNoZWRWYWx1ZTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09i
amVjdC0+d3JhcHBlZCgpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsK
ICAgICBKU1ZhbHVlIHJlc3VsdCA9IGltcGwuY2FjaGVkQXR0cmlidXRlMigpOwotICAgIHRoaXNP
YmplY3QtPm1fY2FjaGVkQXR0cmlidXRlMi5zZXQoc3RhdGUtPnZtKCksIHRoaXNPYmplY3QsIHJl
c3VsdCk7CisgICAgdGhpc09iamVjdC5tX2NhY2hlZEF0dHJpYnV0ZTIuc2V0KHN0YXRlLnZtKCks
ICZ0aGlzT2JqZWN0LCByZXN1bHQpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpBbnlBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlKiwgSlNU
ZXN0T2JqKiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0T2JqQW55QXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpBbnlBdHRyaWJ1
dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5h
bWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpz
VGVzdE9iakFueUF0dHJpYnV0ZUdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgImFueUF0dHJpYnV0
ZSIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQW55QXR0cmlidXRlR2V0
dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCwgVGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpBbnlBdHRyaWJ1dGVH
ZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7
CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVz
dWx0ID0gaW1wbC5hbnlBdHRyaWJ1dGUoKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ29udGVudERvY3VtZW50R2V0dGVyKEV4ZWNTdGF0
ZSosIEpTVGVzdE9iaiosIFRocm93U2NvcGUmIHRocm93U2NvcGUpOworc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdE9iakNvbnRlbnREb2N1bWVudEdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RP
YmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
Q29udGVudERvY3VtZW50KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46
OmF0dHJpYnV0ZTxqc1Rlc3RPYmpDb250ZW50RG9jdW1lbnRHZXR0ZXI+KHN0YXRlLCB0aGlzVmFs
dWUsICJjb250ZW50RG9jdW1lbnQiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dE9iakNvbnRlbnREb2N1bWVudEdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRo
aXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0T2JqQ29udGVudERvY3VtZW50R2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9i
aiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwotICAgIHJldHVybiBzaG91bGRBbGxvd0FjY2Vzc1Rv
Tm9kZShzdGF0ZSwgaW1wbC5jb250ZW50RG9jdW1lbnQoKSkgPyB0b0pTKHN0YXRlLCB0aGlzT2Jq
ZWN0LT5nbG9iYWxPYmplY3QoKSwgaW1wbC5jb250ZW50RG9jdW1lbnQoKSkgOiBqc051bGwoKTsK
KyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgcmV0dXJuIHNob3Vs
ZEFsbG93QWNjZXNzVG9Ob2RlKCZzdGF0ZSwgaW1wbC5jb250ZW50RG9jdW1lbnQoKSkgPyB0b0pT
KCZzdGF0ZSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgaW1wbC5jb250ZW50RG9jdW1lbnQo
KSkgOiBqc051bGwoKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iak11dGFi
bGVQb2ludEdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKTsKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpNdXRhYmxlUG9pbnRHZXR0ZXIo
RXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKIEVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9iak11dGFibGVQb2ludChFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0Nh
bGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqTXV0YWJsZVBvaW50R2V0dGVyPihz
dGF0ZSwgdGhpc1ZhbHVlLCAibXV0YWJsZVBvaW50Iik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RPYmpNdXRhYmxlUG9pbnRHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0
T2JqKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdE9iak11dGFibGVQb2ludEdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rl
c3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMo
c3RhdGUsIHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpLCBTVkdTdGF0aWNQcm9wZXJ0eVRlYXJP
ZmY8VGVzdE9iaiwgU1ZHUG9pbnQ+OjpjcmVhdGUoaW1wbCwgaW1wbC5tdXRhYmxlUG9pbnQoKSwg
JlRlc3RPYmo6OnVwZGF0ZU11dGFibGVQb2ludCkpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2Jq
ZWN0LndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoJnN0YXRlLCB0aGlzT2Jq
ZWN0Lmdsb2JhbE9iamVjdCgpLCBTVkdTdGF0aWNQcm9wZXJ0eVRlYXJPZmY8VGVzdE9iaiwgU1ZH
UG9pbnQ+OjpjcmVhdGUoaW1wbCwgaW1wbC5tdXRhYmxlUG9pbnQoKSwgJlRlc3RPYmo6OnVwZGF0
ZU11dGFibGVQb2ludCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3RPYmpJbW11dGFibGVQb2ludEdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RP
YmoqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RPYmpJbW11dGFibGVQb2ludEdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqSW1tdXRhYmxlUG9p
bnQoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5h
bWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpz
VGVzdE9iakltbXV0YWJsZVBvaW50R2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAiaW1tdXRhYmxl
UG9pbnQiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakltbXV0YWJsZVBv
aW50R2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpJbW11dGFi
bGVQb2ludEdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwog
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndy
YXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIHRoaXNPYmplY3QtPmds
b2JhbE9iamVjdCgpLCBTVkdQcm9wZXJ0eVRlYXJPZmY8U1ZHUG9pbnQ+OjpjcmVhdGUoaW1wbC5p
bW11dGFibGVQb2ludCgpKSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgp
OworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUygmc3RhdGUsIHRoaXNPYmplY3QuZ2xvYmFsT2Jq
ZWN0KCksIFNWR1Byb3BlcnR5VGVhck9mZjxTVkdQb2ludD46OmNyZWF0ZShpbXBsLmltbXV0YWJs
ZVBvaW50KCkpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0T2JqU3RyYXdiZXJyeUdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKTsKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpTdHJh
d2JlcnJ5R2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpTdHJhd2JlcnJ5KEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVy
biBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpTdHJhd2JlcnJ5
R2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAic3RyYXdiZXJyeSIpOwogfQogCi1zdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0T2JqU3RyYXdiZXJyeUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBK
U1Rlc3RPYmoqIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0T2JqU3RyYXdiZXJyeUdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBK
U1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgYXV0
byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09i
amVjdC53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLmJsdWVi
ZXJyeSgpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0T2JqRGVzY3JpcHRpb25HZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSk7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqRGVzY3Jp
cHRpb25HZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakRlc2NyaXB0aW9uKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVy
biBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpEZXNjcmlwdGlv
bkdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgImRlc2NyaXB0aW9uIik7CiB9CiAKLXN0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpEZXNjcmlwdGlvbkdldHRlcihFeGVjU3RhdGUqIHN0YXRl
LCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0T2JqRGVzY3JpcHRpb25HZXR0ZXIoRXhlY1N0YXRlJiBzdGF0
ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAg
IGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CisgICAgYXV0byYgaW1wbCA9IHRo
aXNPYmplY3Qud3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5k
ZXNjcmlwdGlvbigpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0T2JqSWRHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgVGhyb3dTY29w
ZSYgdGhyb3dTY29wZSk7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqSWRHZXR0ZXIo
RXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKIEVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9iaklkKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVz
dE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpJZEdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgImlk
Iik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpJZEdldHRlcihFeGVjU3Rh
dGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqSWRHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0
ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAg
IGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CisgICAgYXV0byYgaW1wbCA9IHRo
aXNPYmplY3Qud3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5p
ZCgpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0T2JqSGFzaEdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKTsKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpIYXNoR2V0dGVyKEV4ZWNT
dGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpIYXNoKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9i
aj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpIYXNoR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAiaGFz
aCIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqSGFzaEdldHRlcihFeGVj
U3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqSGFzaEdldHRlcihFeGVjU3RhdGUm
IHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7
CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJl
c3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLmhhc2goKSk7CisgICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJp
bmdXaXRoQ2FjaGUoJnN0YXRlLCBpbXBsLmhhc2goKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlcGxhY2VhYmxlQXR0cmlidXRlR2V0
dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIFRocm93U2NvcGUmIHRocm93U2NvcGUpOworc3Rh
dGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlcGxhY2VhYmxlQXR0cmlidXRlR2V0dGVyKEV4
ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCiBFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpSZXBsYWNlYWJsZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmlu
ZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqUmVwbGFjZWFibGVBdHRy
aWJ1dGVHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJyZXBsYWNlYWJsZUF0dHJpYnV0ZSIpOwog
fQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVwbGFjZWFibGVBdHRyaWJ1dGVH
ZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlcGxhY2VhYmxl
QXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+
d3JhcHBlZCgpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBK
U1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwucmVwbGFjZWFibGVBdHRyaWJ1dGUoKSk7CiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iak51
bGxhYmxlRG91YmxlQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIFRocm93
U2NvcGUmIHRocm93U2NvcGUpOworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iak51bGxh
YmxlRG91YmxlQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZURvdWJs
ZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRy
aWJ1dGU8anNUZXN0T2JqTnVsbGFibGVEb3VibGVBdHRyaWJ1dGVHZXR0ZXI+KHN0YXRlLCB0aGlz
VmFsdWUsICJudWxsYWJsZURvdWJsZUF0dHJpYnV0ZSIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0T2JqTnVsbGFibGVEb3VibGVBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlKiBz
dGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3Rh
dGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlRG91YmxlQXR0cmlidXRlR2V0dGVy
KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOworICAg
IGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9
IHRvTnVsbGFibGVKU051bWJlcihpbXBsLm51bGxhYmxlRG91YmxlQXR0cmlidXRlKCkpOwogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpOdWxs
YWJsZUxvbmdBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgVGhyb3dTY29w
ZSYgdGhyb3dTY29wZSk7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVM
b25nQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZUxvbmdBdHRyaWJ1
dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5h
bWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpz
VGVzdE9iak51bGxhYmxlTG9uZ0F0dHJpYnV0ZUdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgIm51
bGxhYmxlTG9uZ0F0dHJpYnV0ZSIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
T2JqTnVsbGFibGVMb25nQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9i
aiogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZUxvbmdBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0
ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAg
IGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CisgICAgYXV0byYgaW1wbCA9IHRo
aXNPYmplY3Qud3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9OdWxsYWJsZUpTTnVt
YmVyKGltcGwubnVsbGFibGVMb25nQXR0cmlidXRlKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZUJvb2xlYW5BdHRyaWJ1
dGVHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7
CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVCb29sZWFuQXR0cmlidXRl
R2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwog
CiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZUJvb2xlYW5BdHRyaWJ1dGUoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAg
ICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9iak51
bGxhYmxlQm9vbGVhbkF0dHJpYnV0ZUdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgIm51bGxhYmxl
Qm9vbGVhbkF0dHJpYnV0ZSIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2Jq
TnVsbGFibGVCb29sZWFuQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9i
aiogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZUJvb2xlYW5BdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiBz
dGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewog
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwot
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CisgICAgYXV0byYgaW1wbCA9
IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNCb29sZWFuKGlt
cGwubnVsbGFibGVCb29sZWFuQXR0cmlidXRlKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
LXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZVN0cmluZ0F0dHJpYnV0ZUdl
dHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKK3N0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZVN0cmluZ0F0dHJpYnV0ZUdldHRl
cihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAogRW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVTdHJpbmdBdHRyaWJ1dGUoRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0
dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9iak51bGxhYmxl
U3RyaW5nQXR0cmlidXRlR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAibnVsbGFibGVTdHJpbmdB
dHRyaWJ1dGUiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxl
U3RyaW5nQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09i
amVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RPYmpOdWxsYWJsZVN0cmluZ0F0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rl
c3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3Ry
aW5nT3JOdWxsKHN0YXRlLCBpbXBsLm51bGxhYmxlU3RyaW5nQXR0cmlidXRlKCkpOworICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpz
U3RyaW5nT3JOdWxsKCZzdGF0ZSwgaW1wbC5udWxsYWJsZVN0cmluZ0F0dHJpYnV0ZSgpKTsKICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqTnVs
bGFibGVMb25nU2V0dGFibGVBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2Jq
TnVsbGFibGVMb25nU2V0dGFibGVBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2Jq
JiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak51
bGxhYmxlTG9uZ1NldHRhYmxlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVy
PEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpOdWxsYWJsZUxvbmdTZXR0YWJsZUF0dHJp
YnV0ZUdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgIm51bGxhYmxlTG9uZ1NldHRhYmxlQXR0cmli
dXRlIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZUxvbmdT
ZXR0YWJsZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNP
YmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0T2JqTnVsbGFibGVMb25nU2V0dGFibGVBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0
ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAg
IGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CisgICAgYXV0byYgaW1wbCA9IHRo
aXNPYmplY3Qud3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9OdWxsYWJsZUpTTnVt
YmVyKGltcGwubnVsbGFibGVMb25nU2V0dGFibGVBdHRyaWJ1dGUoKSk7CiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlU3RyaW5n
U2V0dGFibGVBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgVGhyb3dTY29w
ZSYgdGhyb3dTY29wZSk7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVT
dHJpbmdTZXR0YWJsZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVT
dHJpbmdTZXR0YWJsZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rl
c3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqTnVsbGFibGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0
ZUdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgIm51bGxhYmxlU3RyaW5nU2V0dGFibGVBdHRyaWJ1
dGUiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlU3RyaW5n
U2V0dGFibGVBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlz
T2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdE9iak51bGxhYmxlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiBz
dGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewog
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwot
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1
bHQgPSBqc1N0cmluZ09yTnVsbChzdGF0ZSwgaW1wbC5udWxsYWJsZVN0cmluZ1NldHRhYmxlQXR0
cmlidXRlKCkpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBK
U1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nT3JOdWxsKCZzdGF0ZSwgaW1wbC5udWxsYWJsZVN0cmlu
Z1NldHRhYmxlQXR0cmlidXRlKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZVVTVlN0cmluZ1NldHRhYmxlQXR0cmlidXRl
R2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwor
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlVVNWU3RyaW5nU2V0dGFibGVB
dHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlVVNWU3RyaW5nU2V0dGFi
bGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0
cmlidXRlPGpzVGVzdE9iak51bGxhYmxlVVNWU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGVHZXR0ZXI+
KHN0YXRlLCB0aGlzVmFsdWUsICJudWxsYWJsZVVTVlN0cmluZ1NldHRhYmxlQXR0cmlidXRlIik7
CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZVVTVlN0cmluZ1Nl
dHRhYmxlQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09i
amVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RPYmpOdWxsYWJsZVVTVlN0cmluZ1NldHRhYmxlQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSYg
c3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsK
ICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsK
LSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVz
dWx0ID0ganNTdHJpbmdPck51bGwoc3RhdGUsIGltcGwubnVsbGFibGVVU1ZTdHJpbmdTZXR0YWJs
ZUF0dHJpYnV0ZSgpKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Cisg
ICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ09yTnVsbCgmc3RhdGUsIGltcGwubnVsbGFibGVV
U1ZTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZSgpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1z
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVTdHJpbmdWYWx1ZUdldHRlcihF
eGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKK3N0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZVN0cmluZ1ZhbHVlR2V0dGVyKEV4ZWNTdGF0
ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpOdWxsYWJsZVN0cmluZ1ZhbHVlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2Fs
bGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpOdWxsYWJsZVN0cmluZ1ZhbHVlR2V0
dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAibnVsbGFibGVTdHJpbmdWYWx1ZSIpOwogfQogCi1zdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVTdHJpbmdWYWx1ZUdldHRlcihFeGVj
U3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVTdHJpbmdWYWx1ZUdl
dHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgYXV0byYgaW1w
bCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53
cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSB0b051bGxhYmxlSlNOdW1iZXIoaW1wbC5u
dWxsYWJsZVN0cmluZ1ZhbHVlKGVjKSk7Ci0gICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCB0aHJv
d1Njb3BlLCBlYyk7CisgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgdGhyb3dTY29wZSwgZWMp
OwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RP
YmpBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSk7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQXR0cmlidXRlR2V0dGVy
KEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCiBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxs
ZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9iakF0dHJpYnV0ZUdldHRlcj4oc3RhdGUs
IHRoaXNWYWx1ZSwgImF0dHJpYnV0ZSIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0T2JqQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09i
amVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RPYmpBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2Jq
ZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2Jq
ZWN0LT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShz
dGF0ZSwgaW1wbC5hdHRyaWJ1dGUoKSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3Jh
cHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCBp
bXBsLmF0dHJpYnV0ZSgpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0T2JqQXR0cmlidXRlV2l0aFJlc2VydmVkRW51bVR5cGVHZXR0ZXIoRXhl
Y1N0YXRlKiwgSlNUZXN0T2JqKiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CitzdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0T2JqQXR0cmlidXRlV2l0aFJlc2VydmVkRW51bVR5cGVHZXR0ZXIo
RXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKIEVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9iakF0dHJpYnV0ZVdpdGhSZXNlcnZlZEVudW1UeXBlKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAg
IHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpBdHRy
aWJ1dGVXaXRoUmVzZXJ2ZWRFbnVtVHlwZUdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgImF0dHJp
YnV0ZVdpdGhSZXNlcnZlZEVudW1UeXBlIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RPYmpBdHRyaWJ1dGVXaXRoUmVzZXJ2ZWRFbnVtVHlwZUdldHRlcihFeGVjU3RhdGUqIHN0
YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQXR0cmlidXRlV2l0aFJlc2VydmVkRW51bVR5cGVH
ZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7
Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5hdHRy
aWJ1dGVXaXRoUmVzZXJ2ZWRFbnVtVHlwZSgpKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVj
dC53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZSgmc3Rh
dGUsIGltcGwuYXR0cmlidXRlV2l0aFJlc2VydmVkRW51bVR5cGUoKSk7CiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialRlc3RSZWFkT25seVBy
b21pc2VBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgVGhyb3dTY29wZSYg
dGhyb3dTY29wZSk7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqVGVzdFJlYWRPbmx5
UHJvbWlzZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqVGVzdFJlYWRPbmx5UHJv
bWlzZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+Ojph
dHRyaWJ1dGU8anNUZXN0T2JqVGVzdFJlYWRPbmx5UHJvbWlzZUF0dHJpYnV0ZUdldHRlciwgQ2Fz
dGVkVGhpc0Vycm9yQmVoYXZpb3I6OlJlamVjdFByb21pc2U+KHN0YXRlLCB0aGlzVmFsdWUsICJ0
ZXN0UmVhZE9ubHlQcm9taXNlQXR0cmlidXRlIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RPYmpUZXN0UmVhZE9ubHlQcm9taXNlQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSog
c3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpUZXN0UmVhZE9ubHlQcm9taXNlQXR0cmlidXRl
R2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5V
U0VEX1BBUkFNKHN0YXRlKTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgp
OwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgdGhpc09iamVjdC0+Z2xvYmFsT2Jq
ZWN0KCksIGltcGwudGVzdFJlYWRPbmx5UHJvbWlzZUF0dHJpYnV0ZSgpKTsKKyAgICBhdXRvJiBp
bXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKCZz
dGF0ZSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgaW1wbC50ZXN0UmVhZE9ubHlQcm9taXNl
QXR0cmlidXRlKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RPYmpQdXRGb3J3YXJkc0F0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqLCBKU1Rl
c3RPYmoqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RPYmpQdXRGb3J3YXJkc0F0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmom
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHV0
Rm9yd2FyZHNBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2Jq
Pjo6YXR0cmlidXRlPGpzVGVzdE9ialB1dEZvcndhcmRzQXR0cmlidXRlR2V0dGVyPihzdGF0ZSwg
dGhpc1ZhbHVlLCAicHV0Rm9yd2FyZHNBdHRyaWJ1dGUiKTsKIH0KIAotc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdE9ialB1dEZvcndhcmRzQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSogc3Rh
dGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpQdXRGb3J3YXJkc0F0dHJpYnV0ZUdldHRlcihFeGVj
U3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShz
dGF0ZSk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKLSAgICBKU1Zh
bHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpLCBpbXBs
LnB1dEZvcndhcmRzQXR0cmlidXRlKCkpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0Lndy
YXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoJnN0YXRlLCB0aGlzT2JqZWN0Lmds
b2JhbE9iamVjdCgpLCBpbXBsLnB1dEZvcndhcmRzQXR0cmlidXRlKCkpOwogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpQdXRGb3J3YXJkc051
bGxhYmxlQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIFRocm93U2NvcGUm
IHRocm93U2NvcGUpOworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialB1dEZvcndhcmRz
TnVsbGFibGVBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29w
ZSYgdGhyb3dTY29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialB1dEZvcndhcmRzTnVs
bGFibGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6
YXR0cmlidXRlPGpzVGVzdE9ialB1dEZvcndhcmRzTnVsbGFibGVBdHRyaWJ1dGVHZXR0ZXI+KHN0
YXRlLCB0aGlzVmFsdWUsICJwdXRGb3J3YXJkc051bGxhYmxlQXR0cmlidXRlIik7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpQdXRGb3J3YXJkc051bGxhYmxlQXR0cmlidXRl
R2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCwgVGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpQdXRGb3J3YXJk
c051bGxhYmxlQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhp
c09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICBhdXRvJiBpbXBsID0gdGhp
c09iamVjdC0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgdGhp
c09iamVjdC0+Z2xvYmFsT2JqZWN0KCksIGltcGwucHV0Rm9yd2FyZHNOdWxsYWJsZUF0dHJpYnV0
ZSgpKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgSlNWYWx1
ZSByZXN1bHQgPSB0b0pTKCZzdGF0ZSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgaW1wbC5w
dXRGb3J3YXJkc051bGxhYmxlQXR0cmlidXRlKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
LXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdpZmllckF0dHJpYnV0ZUdldHRl
cihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKK3N0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdpZmllckF0dHJpYnV0ZUdldHRlcihFeGVj
U3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqU3RyaW5naWZpZXJBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRp
bmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9ialN0cmluZ2lmaWVyQXR0cmli
dXRlR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAic3RyaW5naWZpZXJBdHRyaWJ1dGUiKTsKIH0K
IAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ2lmaWVyQXR0cmlidXRlR2V0
dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCwgVGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdpZmllckF0
dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwog
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndy
YXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBp
bXBsLnN0cmluZ2lmaWVyQXR0cmlidXRlKCkpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKCZzdGF0
ZSwgaW1wbC5zdHJpbmdpZmllckF0dHJpYnV0ZSgpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2UuY3BwCmluZGV4IDE3MmVlMTg0MWRkNDk0OGI5MmRhNmY2NmU3YWUzMTQ1NTgxN2UzZWMuLjk2
NDc2ZGY5OGU1NTY2OWI3MGNlODJmMGViYmFkYjQyZGRlMjY5NjUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCkBAIC0xMzcs
ODkgKzEzNyw4OSBAQCBpbmxpbmUgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
KiBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhYwogICAgIHJldHVybiBqc0R5bmFt
aWNDYXN0PEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSo+KEpTVmFsdWU6OmRl
Y29kZSh0aGlzVmFsdWUpKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVZhbHVlR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSosIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwor
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFj
ZVZhbHVlR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZSYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VWYWx1ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGlu
Z0NhbGxlcjxKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U+OjphdHRyaWJ1dGU8
anNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlVmFsdWVHZXR0ZXI+KHN0YXRlLCB0
aGlzVmFsdWUsICJ2YWx1ZSIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U2Vy
aWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlVmFsdWVHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwg
SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiB0aGlzT2JqZWN0LCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZVZhbHVlR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwotICAg
IEpTVmFsdWUgcmVzdWx0ID0gaW1wbC52YWx1ZSgpID8gaW1wbC52YWx1ZSgpLT5kZXNlcmlhbGl6
ZShzdGF0ZSwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCksIDApIDoganNOdWxsKCk7CisgICAg
YXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0g
aW1wbC52YWx1ZSgpID8gaW1wbC52YWx1ZSgpLT5kZXNlcmlhbGl6ZSgmc3RhdGUsIHRoaXNPYmpl
Y3QuZ2xvYmFsT2JqZWN0KCksIDApIDoganNOdWxsKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZVJlYWRvbmx5VmFsdWVHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlKiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CitzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUmVhZG9ubHlWYWx1
ZUdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2Um
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUmVhZG9ubHlWYWx1ZShFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmlu
ZGluZ0NhbGxlcjxKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U+OjphdHRyaWJ1
dGU8anNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUmVhZG9ubHlWYWx1ZUdldHRl
cj4oc3RhdGUsIHRoaXNWYWx1ZSwgInJlYWRvbmx5VmFsdWUiKTsKIH0KIAotc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVJlYWRvbmx5VmFs
dWVHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVJlYWRvbmx5VmFs
dWVHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIGF1dG8m
IGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBpbXBs
LnJlYWRvbmx5VmFsdWUoKSA/IGltcGwucmVhZG9ubHlWYWx1ZSgpLT5kZXNlcmlhbGl6ZShzdGF0
ZSwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCksIDApIDoganNOdWxsKCk7CisgICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gaW1wbC5y
ZWFkb25seVZhbHVlKCkgPyBpbXBsLnJlYWRvbmx5VmFsdWUoKS0+ZGVzZXJpYWxpemUoJnN0YXRl
LCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCAwKSA6IGpzTnVsbCgpOwogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2VDYWNoZWRWYWx1ZUdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKK3N0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDYWNo
ZWRWYWx1ZUdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2UmLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ2FjaGVkVmFsdWUoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJu
IEJpbmRpbmdDYWxsZXI8SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlPjo6YXR0
cmlidXRlPGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNhY2hlZFZhbHVlR2V0
dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAiY2FjaGVkVmFsdWUiKTsKIH0KIAotc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNhY2hlZFZhbHVl
R2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZSogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDYWNoZWRWYWx1ZUdl
dHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2UmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgaWYgKEpTVmFs
dWUgY2FjaGVkVmFsdWUgPSB0aGlzT2JqZWN0LT5tX2NhY2hlZFZhbHVlLmdldCgpKQorICAgIGlm
IChKU1ZhbHVlIGNhY2hlZFZhbHVlID0gdGhpc09iamVjdC5tX2NhY2hlZFZhbHVlLmdldCgpKQog
ICAgICAgICByZXR1cm4gY2FjaGVkVmFsdWU7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qt
PndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGltcGwuY2FjaGVkVmFsdWUoKSA/IGlt
cGwuY2FjaGVkVmFsdWUoKS0+ZGVzZXJpYWxpemUoc3RhdGUsIHRoaXNPYmplY3QtPmdsb2JhbE9i
amVjdCgpLCAwKSA6IGpzTnVsbCgpOwotICAgIHRoaXNPYmplY3QtPm1fY2FjaGVkVmFsdWUuc2V0
KHN0YXRlLT52bSgpLCB0aGlzT2JqZWN0LCByZXN1bHQpOworICAgIGF1dG8mIGltcGwgPSB0aGlz
T2JqZWN0LndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGltcGwuY2FjaGVkVmFsdWUo
KSA/IGltcGwuY2FjaGVkVmFsdWUoKS0+ZGVzZXJpYWxpemUoJnN0YXRlLCB0aGlzT2JqZWN0Lmds
b2JhbE9iamVjdCgpLCAwKSA6IGpzTnVsbCgpOworICAgIHRoaXNPYmplY3QubV9jYWNoZWRWYWx1
ZS5zZXQoc3RhdGUudm0oKSwgJnRoaXNPYmplY3QsIHJlc3VsdCk7CiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZVBvcnRzR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZSosIFRocm93U2NvcGUmIHRocm93U2NvcGUpOworc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVBvcnRzR2V0dGVyKEV4
ZWNTdGF0ZSYsIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSYsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2VQb3J0cyhFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U+OjphdHRyaWJ1dGU8anNUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlUG9ydHNHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJwb3J0
cyIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlUG9ydHNHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZVBvcnRzR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZSYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAg
ICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0
ID0ganNBcnJheShzdGF0ZSwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCksIGltcGwucG9ydHMo
KSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIEpTVmFsdWUg
cmVzdWx0ID0ganNBcnJheSgmc3RhdGUsIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIGltcGwu
cG9ydHMoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNhY2hlZFJlYWRvbmx5VmFsdWVH
ZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U2Vy
aWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ2FjaGVkUmVhZG9ubHlWYWx1ZUdldHRlcihFeGVj
U3RhdGUmLCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UmLCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlQ2FjaGVkUmVhZG9ubHlWYWx1ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0Nh
bGxlcjxKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U+OjphdHRyaWJ1dGU8anNU
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ2FjaGVkUmVhZG9ubHlWYWx1ZUdldHRl
cj4oc3RhdGUsIHRoaXNWYWx1ZSwgImNhY2hlZFJlYWRvbmx5VmFsdWUiKTsKIH0KIAotc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNhY2hl
ZFJlYWRvbmx5VmFsdWVHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQor
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFj
ZUNhY2hlZFJlYWRvbmx5VmFsdWVHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0o
c3RhdGUpOwotICAgIGlmIChKU1ZhbHVlIGNhY2hlZFZhbHVlID0gdGhpc09iamVjdC0+bV9jYWNo
ZWRSZWFkb25seVZhbHVlLmdldCgpKQorICAgIGlmIChKU1ZhbHVlIGNhY2hlZFZhbHVlID0gdGhp
c09iamVjdC5tX2NhY2hlZFJlYWRvbmx5VmFsdWUuZ2V0KCkpCiAgICAgICAgIHJldHVybiBjYWNo
ZWRWYWx1ZTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwotICAgIEpT
VmFsdWUgcmVzdWx0ID0gaW1wbC5jYWNoZWRSZWFkb25seVZhbHVlKCkgPyBpbXBsLmNhY2hlZFJl
YWRvbmx5VmFsdWUoKS0+ZGVzZXJpYWxpemUoc3RhdGUsIHRoaXNPYmplY3QtPmdsb2JhbE9iamVj
dCgpLCAwKSA6IGpzTnVsbCgpOwotICAgIHRoaXNPYmplY3QtPm1fY2FjaGVkUmVhZG9ubHlWYWx1
ZS5zZXQoc3RhdGUtPnZtKCksIHRoaXNPYmplY3QsIHJlc3VsdCk7CisgICAgYXV0byYgaW1wbCA9
IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gaW1wbC5jYWNoZWRS
ZWFkb25seVZhbHVlKCkgPyBpbXBsLmNhY2hlZFJlYWRvbmx5VmFsdWUoKS0+ZGVzZXJpYWxpemUo
JnN0YXRlLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCAwKSA6IGpzTnVsbCgpOworICAgIHRo
aXNPYmplY3QubV9jYWNoZWRSZWFkb25seVZhbHVlLnNldChzdGF0ZS52bSgpLCAmdGhpc09iamVj
dCwgcmVzdWx0KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuY3BwIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmNwcApp
bmRleCAwYjYyZmJkZmE2YThiOTRlNTRlNzhlNDQ2M2RkMTY4MDYxZGM4MzU1Li45NzRmNWU0NDcw
MDU0YzQ5YThkNTdhYTZjN2JmODlkYTc4OWJmOTRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5jcHAKQEAg
LTIxNSwxMTcgKzIxNSwxMTcgQEAgaW5saW5lIEpTVGVzdFR5cGVkZWZzKiBKU1Rlc3RUeXBlZGVm
czo6Y2FzdEZvckF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEVuY29kZWQKICAgICByZXR1cm4g
anNEeW5hbWljQ2FzdDxKU1Rlc3RUeXBlZGVmcyo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUp
KTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzVW5zaWduZWRMb25n
TG9uZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0VHlwZWRlZnMqLCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKTsKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1Vuc2lnbmVk
TG9uZ0xvbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdFR5cGVkZWZzJiwgVGhyb3dTY29w
ZSYgdGhyb3dTY29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzVW5zaWduZWRM
b25nTG9uZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0VHlwZWRlZnM+
OjphdHRyaWJ1dGU8anNUZXN0VHlwZWRlZnNVbnNpZ25lZExvbmdMb25nQXR0ckdldHRlcj4oc3Rh
dGUsIHRoaXNWYWx1ZSwgInVuc2lnbmVkTG9uZ0xvbmdBdHRyIik7CiB9CiAKLXN0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1Vuc2lnbmVkTG9uZ0xvbmdBdHRyR2V0dGVyKEV4ZWNT
dGF0ZSogc3RhdGUsIEpTVGVzdFR5cGVkZWZzKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzVW5zaWduZWRMb25n
TG9uZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0VHlwZWRlZnMmIHRoaXNPYmpl
Y3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmpl
Y3QtPndyYXBwZWQoKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAg
ICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLnVuc2lnbmVkTG9uZ0xvbmdBdHRyKCkp
OwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RU
eXBlZGVmc0ltbXV0YWJsZVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUdldHRlcihFeGVjU3RhdGUqLCBK
U1Rlc3RUeXBlZGVmcyosIFRocm93U2NvcGUmIHRocm93U2NvcGUpOworc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdFR5cGVkZWZzSW1tdXRhYmxlU2VyaWFsaXplZFNjcmlwdFZhbHVlR2V0dGVy
KEV4ZWNTdGF0ZSYsIEpTVGVzdFR5cGVkZWZzJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAK
IEVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzSW1tdXRhYmxlU2VyaWFsaXplZFNjcmlwdFZh
bHVlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdFR5cGVkZWZzPjo6YXR0cmli
dXRlPGpzVGVzdFR5cGVkZWZzSW1tdXRhYmxlU2VyaWFsaXplZFNjcmlwdFZhbHVlR2V0dGVyPihz
dGF0ZSwgdGhpc1ZhbHVlLCAiaW1tdXRhYmxlU2VyaWFsaXplZFNjcmlwdFZhbHVlIik7CiB9CiAK
LXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc0ltbXV0YWJsZVNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RUeXBlZGVmcyogdGhpc09i
amVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RUeXBlZGVmc0ltbXV0YWJsZVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUdldHRlcihFeGVjU3RhdGUm
IHN0YXRlLCBKU1Rlc3RUeXBlZGVmcyYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwotICAgIEpTVmFs
dWUgcmVzdWx0ID0gaW1wbC5pbW11dGFibGVTZXJpYWxpemVkU2NyaXB0VmFsdWUoKSA/IGltcGwu
aW1tdXRhYmxlU2VyaWFsaXplZFNjcmlwdFZhbHVlKCktPmRlc2VyaWFsaXplKHN0YXRlLCB0aGlz
T2JqZWN0LT5nbG9iYWxPYmplY3QoKSwgMCkgOiBqc051bGwoKTsKKyAgICBhdXRvJiBpbXBsID0g
dGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBpbXBsLmltbXV0YWJs
ZVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSgpID8gaW1wbC5pbW11dGFibGVTZXJpYWxpemVkU2NyaXB0
VmFsdWUoKS0+ZGVzZXJpYWxpemUoJnN0YXRlLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCAw
KSA6IGpzTnVsbCgpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yVGVzdFN1Yk9iakdldHRlcihFeGVjU3RhdGUq
LCBKU1Rlc3RUeXBlZGVmcyosIFRocm93U2NvcGUmIHRocm93U2NvcGUpOworc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzQ29uc3RydWN0b3JUZXN0U3ViT2JqR2V0dGVyKEV4ZWNT
dGF0ZSYsIEpTVGVzdFR5cGVkZWZzJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKIEVuY29k
ZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzQ29uc3RydWN0b3JUZXN0U3ViT2JqKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJl
dHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdFR5cGVkZWZzPjo6YXR0cmlidXRlPGpzVGVzdFR5cGVk
ZWZzQ29uc3RydWN0b3JUZXN0U3ViT2JqR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAiVGVzdFN1
Yk9iaiIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0VHlwZWRlZnNDb25zdHJ1
Y3RvclRlc3RTdWJPYmpHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0VHlwZWRlZnMqIHRo
aXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0VHlwZWRlZnNDb25zdHJ1Y3RvclRlc3RTdWJPYmpHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0
ZSwgSlNUZXN0VHlwZWRlZnMmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7
CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
Ci0gICAgcmV0dXJuIEpTVGVzdFN1Yk9iajo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIHRo
aXNPYmplY3QtPmdsb2JhbE9iamVjdCgpKTsKKyAgICByZXR1cm4gSlNUZXN0U3ViT2JqOjpnZXRD
b25zdHJ1Y3RvcihzdGF0ZS52bSgpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIAot
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzQXR0cldpdGhHZXR0ZXJFeGNlcHRp
b25HZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0VHlwZWRlZnMqLCBUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKTsKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc0F0dHJXaXRoR2V0dGVy
RXhjZXB0aW9uR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdFR5cGVkZWZzJiwgVGhyb3dTY29wZSYg
dGhyb3dTY29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzQXR0cldpdGhHZXR0
ZXJFeGNlcHRpb24oRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0VHlwZWRlZnM+
OjphdHRyaWJ1dGU8anNUZXN0VHlwZWRlZnNBdHRyV2l0aEdldHRlckV4Y2VwdGlvbkdldHRlcj4o
c3RhdGUsIHRoaXNWYWx1ZSwgImF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uIik7CiB9CiAKLXN0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uR2V0
dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdFR5cGVkZWZzKiB0aGlzT2JqZWN0LCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzQXR0
cldpdGhHZXR0ZXJFeGNlcHRpb25HZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0VHlwZWRl
ZnMmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgRXhjZXB0aW9u
Q29kZSBlYyA9IDA7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKKyAg
ICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQg
PSBqc051bWJlcihpbXBsLmF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKGVjKSk7Ci0gICAgc2V0RE9N
RXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCBlYyk7CisgICAgc2V0RE9NRXhjZXB0aW9uKCZz
dGF0ZSwgdGhyb3dTY29wZSwgZWMpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uR2V0dGVy
KEV4ZWNTdGF0ZSosIEpTVGVzdFR5cGVkZWZzKiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7Citz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0VHlwZWRlZnNBdHRyV2l0aFNldHRlckV4Y2VwdGlv
bkdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RUeXBlZGVmcyYsIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc0F0dHJXaXRoU2V0dGVyRXhjZXB0
aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdFR5cGVkZWZzPjo6YXR0cmli
dXRlPGpzVGVzdFR5cGVkZWZzQXR0cldpdGhTZXR0ZXJFeGNlcHRpb25HZXR0ZXI+KHN0YXRlLCB0
aGlzVmFsdWUsICJhdHRyV2l0aFNldHRlckV4Y2VwdGlvbiIpOwogfQogCi1zdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0VHlwZWRlZnNBdHRyV2l0aFNldHRlckV4Y2VwdGlvbkdldHRlcihFeGVj
U3RhdGUqIHN0YXRlLCBKU1Rlc3RUeXBlZGVmcyogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc0F0dHJXaXRoU2V0
dGVyRXhjZXB0aW9uR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdFR5cGVkZWZzJiB0aGlz
T2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIGF1dG8mIGltcGwgPSB0aGlz
T2JqZWN0LT53cmFwcGVkKCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgp
OwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5hdHRyV2l0aFNldHRlckV4Y2Vw
dGlvbigpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0VHlwZWRlZnNTdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbkdldHRlcihFeGVjU3Rh
dGUqLCBKU1Rlc3RUeXBlZGVmcyosIFRocm93U2NvcGUmIHRocm93U2NvcGUpOworc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzU3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb25H
ZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0VHlwZWRlZnMmLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNTdHJpbmdBdHRyV2l0aEdldHRlckV4
Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RUeXBlZGVmcz46OmF0
dHJpYnV0ZTxqc1Rlc3RUeXBlZGVmc1N0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uR2V0dGVy
PihzdGF0ZSwgdGhpc1ZhbHVlLCAic3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24iKTsKIH0K
IAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzU3RyaW5nQXR0cldpdGhHZXR0
ZXJFeGNlcHRpb25HZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0VHlwZWRlZnMqIHRoaXNP
YmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0VHlwZWRlZnNTdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbkdldHRlcihFeGVjU3RhdGUm
IHN0YXRlLCBKU1Rlc3RUeXBlZGVmcyYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09i
amVjdC0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUo
c3RhdGUsIGltcGwuc3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oZWMpKTsKLSAgICBzZXRE
T01FeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIGVjKTsKKyAgICBhdXRvJiBpbXBsID0gdGhp
c09iamVjdC53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNo
ZSgmc3RhdGUsIGltcGwuc3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oZWMpKTsKKyAgICBz
ZXRET01FeGNlcHRpb24oJnN0YXRlLCB0aHJvd1Njb3BlLCBlYyk7CiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzU3RyaW5nQXR0cldp
dGhTZXR0ZXJFeGNlcHRpb25HZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0VHlwZWRlZnMqLCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKTsKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RUeXBlZGVm
c1N0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdFR5
cGVkZWZzJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVz
dFR5cGVkZWZzU3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJp
bmRpbmdDYWxsZXI8SlNUZXN0VHlwZWRlZnM+OjphdHRyaWJ1dGU8anNUZXN0VHlwZWRlZnNTdHJp
bmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbkdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgInN0cmlu
Z0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RUeXBlZGVmc1N0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uR2V0dGVyKEV4ZWNTdGF0
ZSogc3RhdGUsIEpTVGVzdFR5cGVkZWZzKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzU3RyaW5nQXR0cldpdGhT
ZXR0ZXJFeGNlcHRpb25HZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0VHlwZWRlZnMmIHRo
aXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgYXV0byYgaW1wbCA9IHRo
aXNPYmplY3QtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENh
Y2hlKHN0YXRlLCBpbXBsLnN0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKCkpOworICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpz
U3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgaW1wbC5zdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlv
bigpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNhdHRyaWJ1dGUuY3BwIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTYXR0cmlidXRlLmNwcAppbmRleCA1MjhkNmM0
MGUwYThlZTAwODAwNzhkNzQzNzc2YmY0MWJkOTk4Yjc5Li40OWNiZWUwZmNlNzUxMmJiM2U3N2Jl
ODQwNTcyMmJiNTA1MTg2MDIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNhdHRyaWJ1dGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU2F0dHJpYnV0ZS5jcHAKQEAgLTEzNywxOSArMTM3LDE5IEBA
IGlubGluZSBKU2F0dHJpYnV0ZSogSlNhdHRyaWJ1dGU6OmNhc3RGb3JBdHRyaWJ1dGUoSlNDOjpF
eGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1CiAgICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8SlNhdHRy
aWJ1dGUqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc2F0dHJpYnV0ZVJlYWRvbmx5R2V0dGVyKEV4ZWNTdGF0ZSosIEpTYXR0cmlidXRl
KiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNhdHRy
aWJ1dGVSZWFkb25seUdldHRlcihFeGVjU3RhdGUmLCBKU2F0dHJpYnV0ZSYsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc2F0dHJpYnV0ZVJlYWRvbmx5KEV4ZWNT
dGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewog
ICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTYXR0cmlidXRlPjo6YXR0cmlidXRlPGpzYXR0cmli
dXRlUmVhZG9ubHlHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJyZWFkb25seSIpOwogfQogCi1z
dGF0aWMgaW5saW5lIEpTVmFsdWUganNhdHRyaWJ1dGVSZWFkb25seUdldHRlcihFeGVjU3RhdGUq
IHN0YXRlLCBKU2F0dHJpYnV0ZSogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
K3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc2F0dHJpYnV0ZVJlYWRvbmx5R2V0dGVyKEV4ZWNTdGF0
ZSYgc3RhdGUsIEpTYXR0cmlidXRlJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3Rh
dGUpOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1
ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5yZWFkb25seSgpKTsKKyAg
ICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQg
PSBqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIGltcGwucmVhZG9ubHkoKSk7CiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>