<?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>112443</bug_id>
          
          <creation_ts>2013-03-15 07:01:42 -0700</creation_ts>
          <short_desc>REGRESSION(r145896): Chrome broken by r145802 and this builds on top of it. (Requested by marja____ on #webkit).</short_desc>
          <delta_ts>2013-03-15 07:07:37 -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>New Bugs</component>
          <version>528+ (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>
          
          <blocked>111417</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="WebKit Review Bot">webkit.review.bot</reporter>
          <assigned_to name="WebKit Review Bot">webkit.review.bot</assigned_to>
          <cc>haraken</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>855961</commentid>
    <comment_count>0</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-15 07:01:42 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/145896 broke the build:
Chrome broken by r145802 and this builds on top of it. (Requested by marja____ on #webkit).

This is an automatic bug report generated by the sheriff-bot. If this bug
report was created because of a flaky test, please file a bug for the flaky
test (if we don&apos;t already have one on file) and dup this bug against that bug
so that we can track how often these flaky tests case pain.

&quot;Only you can prevent forest fires.&quot; -- Smokey the Bear</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>855963</commentid>
    <comment_count>1</comment_count>
      <attachid>193301</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-15 07:02:16 -0700</bug_when>
    <thetext>Created attachment 193301
ROLLOUT of r145896

Any committer can land this patch automatically by marking it commit-queue+.  The commit-queue will build and test the patch before landing to ensure that the rollout will be successful.  This process takes approximately 15 minutes.

If you would like to land the rollout faster, you can use the following command:

  webkit-patch land-attachment ATTACHMENT_ID

where ATTACHMENT_ID is the ID of this attachment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>855964</commentid>
    <comment_count>2</comment_count>
      <attachid>193301</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-15 07:07:34 -0700</bug_when>
    <thetext>Comment on attachment 193301
ROLLOUT of r145896

Clearing flags on attachment: 193301

Committed r145904: &lt;http://trac.webkit.org/changeset/145904&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>855965</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-15 07:07:37 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>193301</attachid>
            <date>2013-03-15 07:02:16 -0700</date>
            <delta_ts>2013-03-15 07:07:34 -0700</delta_ts>
            <desc>ROLLOUT of r145896</desc>
            <filename>bug-112443-20130315135811.patch</filename>
            <type>text/plain</type>
            <size>302103</size>
            <attacher name="WebKit Review Bot">webkit.review.bot</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ1OTAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGU2MjE0NDFhOTI0YmQ2
Mjg3ZmY2ZjZmNzlhNjQ3MTEwYjFhYTNhYS4uMDkzY2U1YTQ2NWU3ZDkxYzE1ZDVlMDFlYTRkZGMx
YWI1YzQ3MjVmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyOSBAQAorMjAxMy0wMy0xNSAgU2hl
cmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CisKKyAgICAgICAgVW5yZXZp
ZXdlZCwgcm9sbGluZyBvdXQgcjE0NTg5Ni4KKyAgICAgICAgaHR0cDovL3RyYWMud2Via2l0Lm9y
Zy9jaGFuZ2VzZXQvMTQ1ODk2CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMTI0NDMKKworICAgICAgICBDaHJvbWUgYnJva2VuIGJ5IHIxNDU4MDIgYW5k
IHRoaXMgYnVpbGRzIG9uIHRvcCBvZiBpdC4KKyAgICAgICAgKFJlcXVlc3RlZCBieSBtYXJqYV9f
X18gb24gI3dlYmtpdCkuCisKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0
b3JWOC5wbToKKyAgICAgICAgKEdlbmVyYXRlSGVhZGVyKToKKyAgICAgICAgKEdlbmVyYXRlTm9y
bWFsQXR0ckdldHRlckNhbGxiYWNrKToKKyAgICAgICAgKEdlbmVyYXRlTm9ybWFsQXR0ckdldHRl
cik6CisgICAgICAgIChHZW5lcmF0ZU5vcm1hbEF0dHJTZXR0ZXJDYWxsYmFjayk6CisgICAgICAg
IChHZW5lcmF0ZU5vcm1hbEF0dHJTZXR0ZXIpOgorICAgICAgICAoR2VuZXJhdGVOYW1lZENvbnN0
cnVjdG9yKToKKyAgICAgICAgKEdlbmVyYXRlQmF0Y2hlZEF0dHJpYnV0ZURhdGEpOgorICAgICAg
ICAoR2VuZXJhdGVTaW5nbGVCYXRjaGVkQXR0cmlidXRlKToKKyAgICAgICAgKEdlbmVyYXRlSW1w
bGVtZW50YXRpb24pOgorICAgICAgICAoR2VuZXJhdGVDYWxsYmFja0ltcGxlbWVudGF0aW9uKToK
KyAgICAgICAgKEdlbmVyYXRlRnVuY3Rpb25DYWxsU3RyaW5nKToKKyAgICAgICAgKENyZWF0ZUN1
c3RvbVNpZ25hdHVyZSk6CisgICAgICAgIChOYXRpdmVUb0pTVmFsdWUpOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOEZsb2F0NjRBcnJheS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDb25maWd1cmVWOEZsb2F0NjRBcnJheVRlbXBsYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OlY4RmxvYXQ2NEFycmF5OjpHZXRUZW1wbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWOEZsb2F0
NjRBcnJheTo6SGFzSW5zdGFuY2UpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9W
OC9WOEZsb2F0NjRBcnJheS5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEFjdGl2ZURPTU9iamVjdC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDb25maWd1cmVWOFRlc3RBY3RpdmVET01PYmplY3RUZW1wbGF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpWOFRlc3RBY3RpdmVET01PYmplY3Q6OkdldFRlbXBsYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlY4VGVzdEFjdGl2ZURPTU9iamVjdDo6SGFzSW5zdGFuY2UpOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RBY3RpdmVET01PYmplY3QuaDoKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RD
dXN0b21OYW1lZEdldHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb25maWd1cmVWOFRlc3RD
dXN0b21OYW1lZEdldHRlclRlbXBsYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4VGVzdEN1c3Rv
bU5hbWVkR2V0dGVyOjpHZXRUZW1wbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3RDdXN0
b21OYW1lZEdldHRlcjo6SGFzSW5zdGFuY2UpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9WOC9WOFRlc3RDdXN0b21OYW1lZEdldHRlci5oOgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50Q29uc3RydWN0b3Iu
Y3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDb25maWd1cmVWOFRl
c3RFdmVudENvbnN0cnVjdG9yVGVtcGxhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0RXZl
bnRDb25zdHJ1Y3Rvcjo6R2V0VGVtcGxhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0RXZl
bnRDb25zdHJ1Y3Rvcjo6SGFzSW5zdGFuY2UpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9WOC9WOFRlc3RFdmVudENvbnN0cnVjdG9yLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXZlbnRUYXJnZXQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q29uZmlndXJlVjhUZXN0RXZlbnRUYXJnZXRUZW1wbGF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpWOFRlc3RFdmVudFRhcmdldDo6R2V0VGVtcGxhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6VjhUZXN0RXZlbnRUYXJnZXQ6Okhhc0luc3RhbmNlKToKKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXZlbnRUYXJnZXQuaDoKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFeGNlcHRp
b24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29uZmlndXJlVjhUZXN0RXhjZXB0aW9uVGVtcGxh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0RXhjZXB0aW9uOjpHZXRUZW1wbGF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpWOFRlc3RFeGNlcHRpb246Okhhc0luc3RhbmNlKToKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXhjZXB0aW9uLmg6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0SW50ZXJm
YWNlLmNwcDoKKyAgICAgICAgKFRlc3RJbnRlcmZhY2VWOEludGVybmFsKToKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q29uZmlndXJlVjhUZXN0SW50ZXJmYWNlVGVtcGxh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0SW50ZXJmYWNlOjpHZXRUZW1wbGF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpWOFRlc3RJbnRlcmZhY2U6Okhhc0luc3RhbmNlKToKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0SW50ZXJmYWNlLmg6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TWVkaWFR
dWVyeUxpc3RMaXN0ZW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb25maWd1cmVWOFRlc3RN
ZWRpYVF1ZXJ5TGlzdExpc3RlbmVyVGVtcGxhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0
TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjo6R2V0VGVtcGxhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
VjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjo6SGFzSW5zdGFuY2UpOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmg6Cisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhU
ZXN0TmFtZWRDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3ROYW1lZENv
bnN0cnVjdG9yQ29uc3RydWN0b3I6OkdldFRlbXBsYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bmZpZ3VyZVY4VGVzdE5hbWVkQ29uc3RydWN0b3JUZW1wbGF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpWOFRlc3ROYW1lZENvbnN0cnVjdG9yOjpHZXRUZW1wbGF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpWOFRlc3ROYW1lZENvbnN0cnVjdG9yOjpIYXNJbnN0YW5jZSk6CisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE5hbWVkQ29uc3RydWN0b3IuaDoKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3ROb2RlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbmZpZ3VyZVY4VGVzdE5vZGVUZW1wbGF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpWOFRlc3ROb2RlOjpHZXRUZW1wbGF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpWOFRlc3ROb2RlOjpIYXNJbnN0YW5jZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Y4L1Y4VGVzdE5vZGUuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwOgorICAgICAgICAoVGVzdE9ialY4SW50
ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDb25maWd1cmVW
OFRlc3RPYmpUZW1wbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3RPYmo6OkdldFRlbXBs
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4VGVzdE9iajo6SGFzSW5zdGFuY2UpOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouaDoKKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPdmVybG9hZGVk
Q29uc3RydWN0b3JzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbmZpZ3VyZVY4VGVzdE92ZXJs
b2FkZWRDb25zdHJ1Y3RvcnNUZW1wbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3RPdmVy
bG9hZGVkQ29uc3RydWN0b3JzOjpHZXRUZW1wbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWOFRl
c3RPdmVybG9hZGVkQ29uc3RydWN0b3JzOjpIYXNJbnN0YW5jZSk6CisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuaDoKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb25maWd1cmVWOFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2VUZW1wbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2U6OkdldFRlbXBsYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4VGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6SGFzSW5zdGFuY2UpOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2UuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9WOC9WOFRlc3RUeXBlZGVmcy5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbmZpZ3VyZVY4VGVzdFR5cGVkZWZzVGVtcGxhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6VjhUZXN0VHlwZWRlZnM6OkdldFRlbXBsYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4VGVz
dFR5cGVkZWZzOjpIYXNJbnN0YW5jZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Y4L1Y4VGVzdFR5cGVkZWZzLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBiaW5k
aW5ncy92OC9ET01EYXRhU3RvcmUuaDoKKyAgICAgICAgKERPTURhdGFTdG9yZSk6CisgICAgICAg
ICogYmluZGluZ3MvdjgvVjhET01Db25maWd1cmF0aW9uLmNwcDoKKyAgICAgICAgKiBiaW5kaW5n
cy92OC9WOERPTUNvbmZpZ3VyYXRpb24uaDoKKyAgICAgICAgKFY4RE9NQ29uZmlndXJhdGlvbik6
CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NV2luZG93Q3VzdG9tLmNwcDoKKyAg
ICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhFdmVudFRhcmdldEN1c3RvbS5jcHA6CisgICAg
ICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4SURCQW55Q3VzdG9tLmNwcDoKKyAgICAgICAgKiBi
aW5kaW5ncy92OC9jdXN0b20vVjhNaWNyb0RhdGFJdGVtVmFsdWVDdXN0b20uY3BwOgorICAgICAg
ICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFdvcmtlckNvbnRleHRDdXN0b20uY3BwOgorCiAyMDEz
LTAzLTE1ICBBbGJlcnRvIEdhcmNpYSAgPGFnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBb
QmxhY2tCZXJyeV0gUmVtb3ZlIFBsYXRmb3JtU3VwcG9ydApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0gYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQppbmRleCBmMDM4NDA0Mjc4NmFm
ODBlYTBhYjRiODcxY2NlOTg0OTdjNDNiOWVjLi5jNWFiMzYwMDU0NzM1NWY3MzA5Nzg2NGViM2M4
M2I5M2ZiMGNiMDdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L0NvZGVHZW5lcmF0b3JWOC5wbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L0NvZGVHZW5lcmF0b3JWOC5wbQpAQCAtNTI0LDE5ICs1MjQsMTIgQEAgRU5ECiAgICAgICAgIHB1
c2goQGhlYWRlckNvbnRlbnQsIDw8RU5EKTsKIGNsYXNzICR7bmF0aXZlVHlwZX07CiB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gdG9WOCgke25hdGl2ZVR5cGV9Kiwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0
PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKik7Ci12ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
dG9WOEZvck1haW5Xb3JsZCgke25hdGl2ZVR5cGV9Kiwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBj
cmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKik7CiAKIHRlbXBsYXRlPGNsYXNzIEhvbGRlckNv
bnRhaW5lciwgY2xhc3MgV3JhcHBhYmxlPgogaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0
b1Y4RmFzdCgke25hdGl2ZVR5cGV9KiBpbXBsLCBjb25zdCBIb2xkZXJDb250YWluZXImIGNvbnRh
aW5lciwgV3JhcHBhYmxlKikKIHsKICAgICByZXR1cm4gdG9WOChpbXBsLCBjb250YWluZXIuSG9s
ZGVyKCksIGNvbnRhaW5lci5HZXRJc29sYXRlKCkpOwogfQotCi10ZW1wbGF0ZTxjbGFzcyBIb2xk
ZXJDb250YWluZXIsIGNsYXNzIFdyYXBwYWJsZT4KLWlubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gdG9WOEZhc3RGb3JNYWluV29ybGQoJHtuYXRpdmVUeXBlfSogaW1wbCwgY29uc3QgSG9sZGVy
Q29udGFpbmVyJiBjb250YWluZXIsIFdyYXBwYWJsZSopCi17Ci0gICAgcmV0dXJuIHRvVjhGb3JN
YWluV29ybGQoaW1wbCwgY29udGFpbmVyLkhvbGRlcigpLCBjb250YWluZXIuR2V0SXNvbGF0ZSgp
KTsKLX0KIEVORAogICAgIH0gZWxzZSB7CiAKQEAgLTU3NCwxNyArNTY3LDYgQEAgaW5saW5lIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KCR7bmF0aXZlVHlwZX0qIGltcGwsIHY4OjpIYW5kbGU8
djg6Ok9iamVjdD4gY3IKICAgICByZXR1cm4gd3JhcChpbXBsLCBjcmVhdGlvbkNvbnRleHQsIGlz
b2xhdGUpOwogfQogCi1pbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjhGb3JNYWluV29y
bGQoJHtuYXRpdmVUeXBlfSogaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNv
bnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQotewotICAgIEFTU0VSVCh3b3JsZFR5cGUoaXNv
bGF0ZSkgPT0gTWFpbldvcmxkKTsKLSAgICBpZiAoVU5MSUtFTFkoIWltcGwpKQotICAgICAgICBy
ZXR1cm4gdjhOdWxsV2l0aENoZWNrKGlzb2xhdGUpOwotICAgIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiB3cmFwcGVyID0gRE9NRGF0YVN0b3JlOjpnZXRXcmFwcGVyRm9yTWFpbldvcmxkKGltcGwpOwot
ICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiAkcmV0dXJuaW5nV3Jh
cHBlcjsKLSAgICByZXR1cm4gd3JhcChpbXBsLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwot
fQotCiB0ZW1wbGF0ZTxjbGFzcyBIb2xkZXJDb250YWluZXIsIGNsYXNzIFdyYXBwYWJsZT4KIGlu
bGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOEZhc3QoJHtuYXRpdmVUeXBlfSogaW1wbCwg
Y29uc3QgSG9sZGVyQ29udGFpbmVyJiBjb250YWluZXIsIFdyYXBwYWJsZSogd3JhcHBhYmxlKQog
ewpAQCAtNTk1LDI1ICs1NzcsNiBAQCBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjhG
YXN0KCR7bmF0aXZlVHlwZX0qIGltcGwsIGNvbnN0IEhvbGRlckNvbnRhaW5lcgogICAgICAgICBy
ZXR1cm4gJHJldHVybmluZ1dyYXBwZXI7CiAgICAgcmV0dXJuIHdyYXAoaW1wbCwgY29udGFpbmVy
LkhvbGRlcigpLCBjb250YWluZXIuR2V0SXNvbGF0ZSgpKTsKIH0KLQotdGVtcGxhdGU8Y2xhc3Mg
SG9sZGVyQ29udGFpbmVyLCBjbGFzcyBXcmFwcGFibGU+Ci1pbmxpbmUgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IHRvVjhGYXN0Rm9yTWFpbldvcmxkKCR7bmF0aXZlVHlwZX0qIGltcGwsIGNvbnN0IEhv
bGRlckNvbnRhaW5lciYgY29udGFpbmVyLCBXcmFwcGFibGUqIHdyYXBwYWJsZSkKLXsKLSAgICBB
U1NFUlQod29ybGRUeXBlKGNvbnRhaW5lci5HZXRJc29sYXRlKCkpID09IE1haW5Xb3JsZCk7Ci0g
ICAgaWYgKFVOTElLRUxZKCFpbXBsKSkKLSAgICAgICAgcmV0dXJuIHY4TnVsbChjb250YWluZXIu
R2V0SXNvbGF0ZSgpKTsKLSAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBET01E
YXRhU3RvcmU6OmdldFdyYXBwZXJGb3JNYWluV29ybGQoaW1wbCk7Ci0gICAgaWYgKCF3cmFwcGVy
LklzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuICRyZXR1cm5pbmdXcmFwcGVyOwotICAgIHJldHVy
biB3cmFwKGltcGwsIGNvbnRhaW5lci5Ib2xkZXIoKSwgY29udGFpbmVyLkdldElzb2xhdGUoKSk7
Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIEhvbGRlckNvbnRhaW5lciwgY2xhc3MgV3JhcHBhYmxlPgot
aW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4RmFzdEZvck1haW5Xb3JsZChQYXNzUmVm
UHRyPCAke25hdGl2ZVR5cGV9ID4gaW1wbCwgY29uc3QgSG9sZGVyQ29udGFpbmVyJiBjb250YWlu
ZXIsIFdyYXBwYWJsZSogd3JhcHBhYmxlKQotewotICAgIHJldHVybiB0b1Y4RmFzdEZvck1haW5X
b3JsZChpbXBsLmdldCgpLCBjb250YWluZXIsIHdyYXBwYWJsZSk7Ci19Ci0KIEVORAogICAgIH0K
IApAQCAtOTE3LDcgKzg4MCw2IEBAIHN1YiBHZW5lcmF0ZU5vcm1hbEF0dHJHZXR0ZXJDYWxsYmFj
awogewogICAgIG15ICRhdHRyaWJ1dGUgPSBzaGlmdDsKICAgICBteSAkaW50ZXJmYWNlID0gc2hp
ZnQ7Ci0gICAgbXkgJGZvck1haW5Xb3JsZFN1ZmZpeCA9IHNoaWZ0OwogCiAgICAgbXkgJGludGVy
ZmFjZU5hbWUgPSAkaW50ZXJmYWNlLT5uYW1lOwogICAgIG15ICR2OEludGVyZmFjZU5hbWUgPSAi
VjgkaW50ZXJmYWNlTmFtZSI7CkBAIC05MjcsMTMgKzg4OSwxMyBAQCBzdWIgR2VuZXJhdGVOb3Jt
YWxBdHRyR2V0dGVyQ2FsbGJhY2sKICAgICBteSAkY29uZGl0aW9uYWxTdHJpbmcgPSAkY29kZUdl
bmVyYXRvci0+R2VuZXJhdGVDb25kaXRpb25hbFN0cmluZygkYXR0cmlidXRlLT5zaWduYXR1cmUp
OwogICAgIHB1c2goQGltcGxDb250ZW50SW50ZXJuYWxzLCAiI2lmICR7Y29uZGl0aW9uYWxTdHJp
bmd9XG5cbiIpIGlmICRjb25kaXRpb25hbFN0cmluZzsKIAotICAgIHB1c2goQGltcGxDb250ZW50
SW50ZXJuYWxzLCAic3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiAke2F0dHJOYW1lfUF0dHJH
ZXR0ZXJDYWxsYmFjayR7Zm9yTWFpbldvcmxkU3VmZml4fSh2ODo6TG9jYWw8djg6OlN0cmluZz4g
bmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbylcbiIpOworICAgIHB1c2goQGltcGxD
b250ZW50SW50ZXJuYWxzLCAic3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiAke2F0dHJOYW1l
fUF0dHJHZXR0ZXJDYWxsYmFjayh2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6
OkFjY2Vzc29ySW5mbyYgaW5mbylcbiIpOwogICAgIHB1c2goQGltcGxDb250ZW50SW50ZXJuYWxz
LCAie1xuIik7CiAgICAgcHVzaChAaW1wbENvbnRlbnRJbnRlcm5hbHMsIEdlbmVyYXRlRmVhdHVy
ZU9ic2VydmF0aW9uKCRhdHRyRXh0LT57IlY4TWVhc3VyZUFzIn0pKTsKICAgICBpZiAoSGFzQ3Vz
dG9tR2V0dGVyKCRhdHRyRXh0KSkgewogICAgICAgICBwdXNoKEBpbXBsQ29udGVudEludGVybmFs
cywgIiAgICByZXR1cm4gJHt2OEludGVyZmFjZU5hbWV9Ojoke2F0dHJOYW1lfUF0dHJHZXR0ZXJD
dXN0b20obmFtZSwgaW5mbyk7XG4iKTsKICAgICB9IGVsc2UgewotICAgICAgICBwdXNoKEBpbXBs
Q29udGVudEludGVybmFscywgIiAgICByZXR1cm4gJHtpbnRlcmZhY2VOYW1lfVY4SW50ZXJuYWw6
OiR7YXR0ck5hbWV9QXR0ckdldHRlciR7Zm9yTWFpbldvcmxkU3VmZml4fShuYW1lLCBpbmZvKTtc
biIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudEludGVybmFscywgIiAgICByZXR1cm4gJHtp
bnRlcmZhY2VOYW1lfVY4SW50ZXJuYWw6OiR7YXR0ck5hbWV9QXR0ckdldHRlcihuYW1lLCBpbmZv
KTtcbiIpOwogICAgIH0KICAgICBwdXNoKEBpbXBsQ29udGVudEludGVybmFscywgIn1cblxuIik7
CiAgICAgcHVzaChAaW1wbENvbnRlbnRJbnRlcm5hbHMsICIjZW5kaWYgLy8gJHtjb25kaXRpb25h
bFN0cmluZ31cblxuIikgaWYgJGNvbmRpdGlvbmFsU3RyaW5nOwpAQCAtOTQzLDcgKzkwNSw2IEBA
IHN1YiBHZW5lcmF0ZU5vcm1hbEF0dHJHZXR0ZXIKIHsKICAgICBteSAkYXR0cmlidXRlID0gc2hp
ZnQ7CiAgICAgbXkgJGludGVyZmFjZSA9IHNoaWZ0OwotICAgIG15ICRmb3JNYWluV29ybGRTdWZm
aXggPSBzaGlmdDsKIAogICAgIG15ICRpbnRlcmZhY2VOYW1lID0gJGludGVyZmFjZS0+bmFtZTsK
ICAgICBteSAkdjhJbnRlcmZhY2VOYW1lID0gIlY4JGludGVyZmFjZU5hbWUiOwpAQCAtOTYzLDcg
KzkyNCw3IEBAIHN1YiBHZW5lcmF0ZU5vcm1hbEF0dHJHZXR0ZXIKICAgICBteSAkY29uZGl0aW9u
YWxTdHJpbmcgPSAkY29kZUdlbmVyYXRvci0+R2VuZXJhdGVDb25kaXRpb25hbFN0cmluZygkYXR0
cmlidXRlLT5zaWduYXR1cmUpOwogICAgIHB1c2goQGltcGxDb250ZW50SW50ZXJuYWxzLCAiI2lm
ICR7Y29uZGl0aW9uYWxTdHJpbmd9XG5cbiIpIGlmICRjb25kaXRpb25hbFN0cmluZzsKICAgICBw
dXNoKEBpbXBsQ29udGVudEludGVybmFscywgPDxFTkQpOwotc3RhdGljIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiAke2F0dHJOYW1lfUF0dHJHZXR0ZXIke2Zvck1haW5Xb3JsZFN1ZmZpeH0odjg6Okxv
Y2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCitzdGF0
aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+ICR7YXR0ck5hbWV9QXR0ckdldHRlcih2ODo6TG9jYWw8
djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKIHsKIEVORAog
ICAgIGlmICgkc3ZnTmF0aXZlVHlwZSkgewpAQCAtMTEyOSw3ICsxMDkwLDcgQEAgRU5ECiAgICAg
ICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJWOCRhdHRyVHlwZS5oIik7CiAgICAgICAgIG15ICRzdmdO
YXRpdmVUeXBlID0gJGNvZGVHZW5lcmF0b3ItPkdldFNWR1R5cGVOZWVkaW5nVGVhck9mZigkYXR0
clR5cGUpOwogICAgICAgICAjIENvbnZlcnQgZnJvbSBhYnN0cmFjdCBTVkdQcm9wZXJ0eSB0byBy
ZWFsIHR5cGUsIHNvIHRoZSByaWdodCB0b0pTKCkgbWV0aG9kIGNhbiBiZSBpbnZva2VkLgotICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudEludGVybmFscywgIiAgICByZXR1cm4gdG9WOEZhc3QkZm9y
TWFpbldvcmxkU3VmZml4KHN0YXRpY19jYXN0PCRzdmdOYXRpdmVUeXBlKj4oJHJlc3VsdCksIGlu
Zm8sIGltcCk7XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnRJbnRlcm5hbHMsICIgICAg
cmV0dXJuIHRvVjhGYXN0KHN0YXRpY19jYXN0PCRzdmdOYXRpdmVUeXBlKj4oJHJlc3VsdCksIGlu
Zm8sIGltcCk7XG4iKTsKICAgICB9IGVsc2lmICgkY29kZUdlbmVyYXRvci0+SXNTVkdUeXBlTmVl
ZGluZ1RlYXJPZmYoJGF0dHJUeXBlKSBhbmQgbm90ICRpbnRlcmZhY2VOYW1lID1+IC9MaXN0JC8p
IHsKICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIlY4JGF0dHJUeXBlLmgiKTsKICAgICAgICAg
QWRkVG9JbXBsSW5jbHVkZXMoIlNWR1Byb3BlcnR5VGVhck9mZi5oIik7CkBAIC0xMTY3LDcgKzEx
MjgsNyBAQCBFTkQKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAkd3JhcHBlZFZh
bHVlID0gIldURjo6Z2V0UHRyKCR7dGVhck9mZlR5cGV9OjpjcmVhdGUoJHJlc3VsdCkpIjsKICAg
ICAgICAgfQotICAgICAgICBwdXNoKEBpbXBsQ29udGVudEludGVybmFscywgIiAgICByZXR1cm4g
dG9WOEZhc3QkZm9yTWFpbldvcmxkU3VmZml4KCR3cmFwcGVkVmFsdWUsIGluZm8sIGltcCk7XG4i
KTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnRJbnRlcm5hbHMsICIgICAgcmV0dXJuIHRvVjhG
YXN0KCR3cmFwcGVkVmFsdWUsIGluZm8sIGltcCk7XG4iKTsKICAgICB9IGVsc2lmICgkYXR0cmli
dXRlLT5zaWduYXR1cmUtPnR5cGUgZXEgIk1lc3NhZ2VQb3J0QXJyYXkiKSB7CiAgICAgICAgIEFk
ZFRvSW1wbEluY2x1ZGVzKCJNZXNzYWdlUG9ydC5oIik7CiAgICAgICAgIEFkZFRvSW1wbEluY2x1
ZGVzKCJWOE1lc3NhZ2VQb3J0LmgiKTsKQEAgLTExNzksNyArMTE0MCw3IEBAIEVORAogICAgIE1l
c3NhZ2VQb3J0QXJyYXkgcG9ydHNDb3B5KCpwb3J0cyk7CiAgICAgdjg6OkxvY2FsPHY4OjpBcnJh
eT4gcG9ydEFycmF5ID0gdjg6OkFycmF5OjpOZXcocG9ydHNDb3B5LnNpemUoKSk7CiAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBwb3J0c0NvcHkuc2l6ZSgpOyArK2kpCi0gICAgICAgIHBvcnRB
cnJheS0+U2V0KHY4SW50ZWdlcihpLCBpbmZvLkdldElzb2xhdGUoKSksIHRvVjhGYXN0JGZvck1h
aW5Xb3JsZFN1ZmZpeChwb3J0c0NvcHlbaV0uZ2V0KCksIGluZm8sIGltcCkpOworICAgICAgICBw
b3J0QXJyYXktPlNldCh2OEludGVnZXIoaSwgaW5mby5HZXRJc29sYXRlKCkpLCB0b1Y4RmFzdChw
b3J0c0NvcHlbaV0uZ2V0KCksIGluZm8sIGltcCkpOwogICAgIHJldHVybiBwb3J0QXJyYXk7CiBF
TkQKICAgICB9IGVsc2lmICgkYXR0cmlidXRlLT5zaWduYXR1cmUtPnR5cGUgZXEgIlNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZSIgJiYgJGF0dHJFeHQtPnsiQ2FjaGVkQXR0cmlidXRlIn0pIHsKQEAgLTEx
OTEsNyArMTE1Miw3IEBAIEVORAogICAgIHJldHVybiB2YWx1ZTsKIEVORAogICAgIH0gZWxzZSB7
Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50SW50ZXJuYWxzLCAiICAgIHJldHVybiAiIC4gTmF0
aXZlVG9KU1ZhbHVlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgJHJlc3VsdCwgImluZm8uSG9sZGVy
KCkiLCAiaW5mby5HZXRJc29sYXRlKCkiLCAiaW5mbyIsICJpbXAiLCAiUmV0dXJuVW5zYWZlSGFu
ZGxlIiwgJGZvck1haW5Xb3JsZFN1ZmZpeCkuIjtcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudEludGVybmFscywgIiAgICByZXR1cm4gIiAuIE5hdGl2ZVRvSlNWYWx1ZSgkYXR0cmlidXRl
LT5zaWduYXR1cmUsICRyZXN1bHQsICJpbmZvLkhvbGRlcigpIiwgImluZm8uR2V0SXNvbGF0ZSgp
IiwgImluZm8iLCAiaW1wIiwgIlJldHVyblVuc2FmZUhhbmRsZSIpLiI7XG4iKTsKICAgICB9CiAK
ICAgICBwdXNoKEBpbXBsQ29udGVudEludGVybmFscywgIn1cblxuIik7ICAjIGVuZCBvZiBnZXR0
ZXIKQEAgLTEyMzksNyArMTIwMCw2IEBAIHN1YiBHZW5lcmF0ZU5vcm1hbEF0dHJTZXR0ZXJDYWxs
YmFjawogewogICAgIG15ICRhdHRyaWJ1dGUgPSBzaGlmdDsKICAgICBteSAkaW50ZXJmYWNlID0g
c2hpZnQ7Ci0gICAgbXkgJGZvck1haW5Xb3JsZFN1ZmZpeCA9IHNoaWZ0OwogCiAgICAgbXkgJGlu
dGVyZmFjZU5hbWUgPSAkaW50ZXJmYWNlLT5uYW1lOwogICAgIG15ICR2OEludGVyZmFjZU5hbWUg
PSAiVjgkaW50ZXJmYWNlTmFtZSI7CkBAIC0xMjQ5LDEzICsxMjA5LDEzIEBAIHN1YiBHZW5lcmF0
ZU5vcm1hbEF0dHJTZXR0ZXJDYWxsYmFjawogICAgIG15ICRjb25kaXRpb25hbFN0cmluZyA9ICRj
b2RlR2VuZXJhdG9yLT5HZW5lcmF0ZUNvbmRpdGlvbmFsU3RyaW5nKCRhdHRyaWJ1dGUtPnNpZ25h
dHVyZSk7CiAgICAgcHVzaChAaW1wbENvbnRlbnRJbnRlcm5hbHMsICIjaWYgJHtjb25kaXRpb25h
bFN0cmluZ31cblxuIikgaWYgJGNvbmRpdGlvbmFsU3RyaW5nOwogCi0gICAgcHVzaChAaW1wbENv
bnRlbnRJbnRlcm5hbHMsICJzdGF0aWMgdm9pZCAke2F0dHJOYW1lfUF0dHJTZXR0ZXJDYWxsYmFj
ayR7Zm9yTWFpbldvcmxkU3VmZml4fSh2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6Okxv
Y2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pXG4iKTsK
KyAgICBwdXNoKEBpbXBsQ29udGVudEludGVybmFscywgInN0YXRpYyB2b2lkICR7YXR0ck5hbWV9
QXR0clNldHRlckNhbGxiYWNrKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8
djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbylcbiIpOwogICAg
IHB1c2goQGltcGxDb250ZW50SW50ZXJuYWxzLCAie1xuIik7CiAgICAgcHVzaChAaW1wbENvbnRl
bnRJbnRlcm5hbHMsIEdlbmVyYXRlRmVhdHVyZU9ic2VydmF0aW9uKCRhdHRyRXh0LT57IlY4TWVh
c3VyZUFzIn0pKTsKICAgICBpZiAoSGFzQ3VzdG9tU2V0dGVyKCRhdHRyRXh0KSkgewogICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudEludGVybmFscywgIiAgICAke3Y4SW50ZXJmYWNlTmFtZX06OiR7
YXR0ck5hbWV9QXR0clNldHRlckN1c3RvbShuYW1lLCB2YWx1ZSwgaW5mbyk7XG4iKTsKICAgICB9
IGVsc2UgewotICAgICAgICBwdXNoKEBpbXBsQ29udGVudEludGVybmFscywgIiAgICAke2ludGVy
ZmFjZU5hbWV9VjhJbnRlcm5hbDo6JHthdHRyTmFtZX1BdHRyU2V0dGVyJHtmb3JNYWluV29ybGRT
dWZmaXh9KG5hbWUsIHZhbHVlLCBpbmZvKTtcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dEludGVybmFscywgIiAgICAke2ludGVyZmFjZU5hbWV9VjhJbnRlcm5hbDo6JHthdHRyTmFtZX1B
dHRyU2V0dGVyKG5hbWUsIHZhbHVlLCBpbmZvKTtcbiIpOwogICAgIH0KICAgICBwdXNoKEBpbXBs
Q29udGVudEludGVybmFscywgIn1cblxuIik7CiAgICAgcHVzaChAaW1wbENvbnRlbnRJbnRlcm5h
bHMsICIjZW5kaWYgLy8gJHtjb25kaXRpb25hbFN0cmluZ31cblxuIikgaWYgJGNvbmRpdGlvbmFs
U3RyaW5nOwpAQCAtMTI2NSw3ICsxMjI1LDYgQEAgc3ViIEdlbmVyYXRlTm9ybWFsQXR0clNldHRl
cgogewogICAgIG15ICRhdHRyaWJ1dGUgPSBzaGlmdDsKICAgICBteSAkaW50ZXJmYWNlID0gc2hp
ZnQ7Ci0gICAgbXkgJGZvck1haW5Xb3JsZFN1ZmZpeCA9IHNoaWZ0OwogCiAgICAgbXkgJGludGVy
ZmFjZU5hbWUgPSAkaW50ZXJmYWNlLT5uYW1lOwogICAgIG15ICR2OEludGVyZmFjZU5hbWUgPSAi
VjgkaW50ZXJmYWNlTmFtZSI7CkBAIC0xMjc5LDcgKzEyMzgsNyBAQCBzdWIgR2VuZXJhdGVOb3Jt
YWxBdHRyU2V0dGVyCiAKICAgICBteSAkY29uZGl0aW9uYWxTdHJpbmcgPSAkY29kZUdlbmVyYXRv
ci0+R2VuZXJhdGVDb25kaXRpb25hbFN0cmluZygkYXR0cmlidXRlLT5zaWduYXR1cmUpOwogICAg
IHB1c2goQGltcGxDb250ZW50SW50ZXJuYWxzLCAiI2lmICR7Y29uZGl0aW9uYWxTdHJpbmd9XG5c
biIpIGlmICRjb25kaXRpb25hbFN0cmluZzsKLSAgICBwdXNoKEBpbXBsQ29udGVudEludGVybmFs
cywgInN0YXRpYyB2b2lkICR7YXR0ck5hbWV9QXR0clNldHRlciR7Zm9yTWFpbldvcmxkU3VmZml4
fSh2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUs
IGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pXG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVu
dEludGVybmFscywgInN0YXRpYyB2b2lkICR7YXR0ck5hbWV9QXR0clNldHRlcih2ODo6TG9jYWw8
djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpB
Y2Nlc3NvckluZm8mIGluZm8pXG4iKTsKICAgICBwdXNoKEBpbXBsQ29udGVudEludGVybmFscywg
IntcbiIpOwogCiAgICAgIyBJZiB0aGUgIlN0cmljdFR5cGVDaGVja2luZyIgZXh0ZW5kZWQgYXR0
cmlidXRlIGlzIHByZXNlbnQsIGFuZCB0aGUgYXR0cmlidXRlJ3MgdHlwZSBpcyBhbgpAQCAtMjI4
OSw3ICsyMjQ4LDcgQEAgRU5ECiAKICAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOwogCi12
ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gJHt2OEludGVyZmFjZU5hbWV9Q29u
c3RydWN0b3I6OkdldFRlbXBsYXRlKHY4OjpJc29sYXRlKiBpc29sYXRlLCBXcmFwcGVyV29ybGRU
eXBlIGN1cnJlbnRXb3JsZFR5cGUpCit2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0
ZT4gJHt2OEludGVyZmFjZU5hbWV9Q29uc3RydWN0b3I6OkdldFRlbXBsYXRlKHY4OjpJc29sYXRl
KiBpc29sYXRlLCBXcmFwcGVyV29ybGRUeXBlIHdvcmxkVHlwZSkKIHsKICAgICBzdGF0aWMgdjg6
OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IGNhY2hlZFRlbXBsYXRlOwogICAgIGlm
ICghY2FjaGVkVGVtcGxhdGUuSXNFbXB0eSgpKQpAQCAtMjMwMSw3ICsyMjYwLDcgQEAgdjg6OlBl
cnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+ICR7djhJbnRlcmZhY2VOYW1lfUNvbnN0cnVj
dG9yOjpHZXRUZW1wbGF0ZSgKICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdFRlbXBsYXRlPiBpbnN0
YW5jZSA9IHJlc3VsdC0+SW5zdGFuY2VUZW1wbGF0ZSgpOwogICAgIGluc3RhbmNlLT5TZXRJbnRl
cm5hbEZpZWxkQ291bnQoJHt2OEludGVyZmFjZU5hbWV9OjppbnRlcm5hbEZpZWxkQ291bnQpOwog
ICAgIHJlc3VsdC0+U2V0Q2xhc3NOYW1lKHY4OjpTdHJpbmc6Ok5ld1N5bWJvbCgiJHtpbnRlcmZh
Y2VOYW1lfSIpKTsKLSAgICByZXN1bHQtPkluaGVyaXQoJHt2OEludGVyZmFjZU5hbWV9OjpHZXRU
ZW1wbGF0ZShpc29sYXRlLCBjdXJyZW50V29ybGRUeXBlKSk7CisgICAgcmVzdWx0LT5Jbmhlcml0
KCR7djhJbnRlcmZhY2VOYW1lfTo6R2V0VGVtcGxhdGUoaXNvbGF0ZSwgd29ybGRUeXBlKSk7CiAK
ICAgICBjYWNoZWRUZW1wbGF0ZSA9IHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRl
Pjo6TmV3KGlzb2xhdGUsIHJlc3VsdCk7CiAgICAgcmV0dXJuIGNhY2hlZFRlbXBsYXRlOwpAQCAt
MjMyNywxMyArMjI4NiwxMiBAQCBzdWIgR2VuZXJhdGVCYXRjaGVkQXR0cmlidXRlRGF0YQogewog
ICAgIG15ICRpbnRlcmZhY2UgPSBzaGlmdDsKICAgICBteSAkYXR0cmlidXRlcyA9IHNoaWZ0Owot
ICAgIG15ICRmb3JNYWluV29ybGRTdWZmaXggPSBzaGlmdDsKICAgICBteSAkaW50ZXJmYWNlTmFt
ZSA9ICRpbnRlcmZhY2UtPm5hbWU7CiAKICAgICBmb3JlYWNoIG15ICRhdHRyaWJ1dGUgKEAkYXR0
cmlidXRlcykgewogICAgICAgICBteSAkY29uZGl0aW9uYWxTdHJpbmcgPSAkY29kZUdlbmVyYXRv
ci0+R2VuZXJhdGVDb25kaXRpb25hbFN0cmluZygkYXR0cmlidXRlLT5zaWduYXR1cmUpOwogICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiNpZiAke2NvbmRpdGlvbmFsU3RyaW5nfVxuIikgaWYg
JGNvbmRpdGlvbmFsU3RyaW5nOwotICAgICAgICBHZW5lcmF0ZVNpbmdsZUJhdGNoZWRBdHRyaWJ1
dGUoJGludGVyZmFjZU5hbWUsICRhdHRyaWJ1dGUsICIsIiwgIiIsICRmb3JNYWluV29ybGRTdWZm
aXgpOworICAgICAgICBHZW5lcmF0ZVNpbmdsZUJhdGNoZWRBdHRyaWJ1dGUoJGludGVyZmFjZU5h
bWUsICRhdHRyaWJ1dGUsICIsIiwgIiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiNl
bmRpZiAvLyAke2NvbmRpdGlvbmFsU3RyaW5nfVxuIikgaWYgJGNvbmRpdGlvbmFsU3RyaW5nOwog
ICAgIH0KIH0KQEAgLTIzNDQsNyArMjMwMiw2IEBAIHN1YiBHZW5lcmF0ZVNpbmdsZUJhdGNoZWRB
dHRyaWJ1dGUKICAgICBteSAkYXR0cmlidXRlID0gc2hpZnQ7CiAgICAgbXkgJGRlbGltaXRlciA9
IHNoaWZ0OwogICAgIG15ICRpbmRlbnQgPSBzaGlmdDsKLSAgICBteSAkZm9yTWFpbldvcmxkU3Vm
Zml4ID0gc2hpZnQ7CiAgICAgbXkgJGF0dHJOYW1lID0gJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5u
YW1lOwogICAgIG15ICRhdHRyRXh0ID0gJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0
dHJpYnV0ZXM7CiAKQEAgLTI0MDAsOCArMjM1Nyw4IEBAIHN1YiBHZW5lcmF0ZVNpbmdsZUJhdGNo
ZWRBdHRyaWJ1dGUKICAgICAgICAgJHNldHRlciA9ICIke2ludGVyZmFjZU5hbWV9VjhJbnRlcm5h
bDo6JHtpbnRlcmZhY2VOYW1lfVJlcGxhY2VhYmxlQXR0clNldHRlckNhbGxiYWNrIjsKICAgICB9
IGVsc2UgewogICAgICAgICAjIERlZmF1bHQgR2V0dGVyIGFuZCBTZXR0ZXIKLSAgICAgICAgJGdl
dHRlciA9ICIke2ludGVyZmFjZU5hbWV9VjhJbnRlcm5hbDo6JHthdHRyTmFtZX1BdHRyR2V0dGVy
Q2FsbGJhY2ske2Zvck1haW5Xb3JsZFN1ZmZpeH0iOwotICAgICAgICAkc2V0dGVyID0gIiR7aW50
ZXJmYWNlTmFtZX1WOEludGVybmFsOjoke2F0dHJOYW1lfUF0dHJTZXR0ZXJDYWxsYmFjayR7Zm9y
TWFpbldvcmxkU3VmZml4fSI7CisgICAgICAgICRnZXR0ZXIgPSAiJHtpbnRlcmZhY2VOYW1lfVY4
SW50ZXJuYWw6OiR7YXR0ck5hbWV9QXR0ckdldHRlckNhbGxiYWNrIjsKKyAgICAgICAgJHNldHRl
ciA9ICIke2ludGVyZmFjZU5hbWV9VjhJbnRlcm5hbDo6JHthdHRyTmFtZX1BdHRyU2V0dGVyQ2Fs
bGJhY2siOwogCiAgICAgICAgIGlmICghSGFzQ3VzdG9tU2V0dGVyKCRhdHRyRXh0KSAmJiAkYXR0
ckV4dC0+eyJSZXBsYWNlYWJsZSJ9KSB7CiAgICAgICAgICAgICAkc2V0dGVyID0gIiR7aW50ZXJm
YWNlTmFtZX1WOEludGVybmFsOjoke2ludGVyZmFjZU5hbWV9UmVwbGFjZWFibGVBdHRyU2V0dGVy
Q2FsbGJhY2siOwpAQCAtMjcyNyw3ICsyNjg0LDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRp
b24KICAgICAgICAgbXkgJHBhcmVudCA9ICRfOwogICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygi
Vjgke3BhcmVudH0uaCIpOwogICAgICAgICAkcGFyZW50Q2xhc3MgPSAiVjgiIC4gJHBhcmVudDsK
LSAgICAgICAgJHBhcmVudENsYXNzVGVtcGxhdGUgPSAkcGFyZW50Q2xhc3MgLiAiOjpHZXRUZW1w
bGF0ZShpc29sYXRlLCBjdXJyZW50V29ybGRUeXBlKSI7CisgICAgICAgICRwYXJlbnRDbGFzc1Rl
bXBsYXRlID0gJHBhcmVudENsYXNzIC4gIjo6R2V0VGVtcGxhdGUoaXNvbGF0ZSwgd29ybGRUeXBl
KSI7CiAgICAgICAgIGxhc3Q7CiAgICAgfQogCkBAIC0yODA2LDIzICsyNzYzLDE0IEBAIEVORAog
ICAgICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIik7
CiAgICAgICAgIH0KIAotICAgICAgICBHZW5lcmF0ZU5vcm1hbEF0dHJHZXR0ZXIoJGF0dHJpYnV0
ZSwgJGludGVyZmFjZSwgIiIpOwotICAgICAgICBHZW5lcmF0ZU5vcm1hbEF0dHJHZXR0ZXJDYWxs
YmFjaygkYXR0cmlidXRlLCAkaW50ZXJmYWNlLCAiIik7Ci0KLSAgICAgICAgaWYgKCEkYXR0ckV4
dC0+eyJWOEVuYWJsZWRQZXJDb250ZXh0In0pIHsKLSAgICAgICAgICAgIEdlbmVyYXRlTm9ybWFs
QXR0ckdldHRlcigkYXR0cmlidXRlLCAkaW50ZXJmYWNlLCAiRm9yTWFpbldvcmxkIik7Ci0gICAg
ICAgICAgICBHZW5lcmF0ZU5vcm1hbEF0dHJHZXR0ZXJDYWxsYmFjaygkYXR0cmlidXRlLCAkaW50
ZXJmYWNlLCAiRm9yTWFpbldvcmxkIik7Ci0gICAgICAgIH0KKyAgICAgICAgR2VuZXJhdGVOb3Jt
YWxBdHRyR2V0dGVyKCRhdHRyaWJ1dGUsICRpbnRlcmZhY2UpOworICAgICAgICBHZW5lcmF0ZU5v
cm1hbEF0dHJHZXR0ZXJDYWxsYmFjaygkYXR0cmlidXRlLCAkaW50ZXJmYWNlKTsKIAogICAgICAg
ICBpZiAoIUhhc0N1c3RvbVNldHRlcigkYXR0ckV4dCkgJiYgJGF0dHJFeHQtPnsiUmVwbGFjZWFi
bGUifSkgewogICAgICAgICAgICAgJGhhc1JlcGxhY2VhYmxlID0gMTsKICAgICAgICAgfSBlbHNp
ZiAoIUlzUmVhZG9ubHkoJGF0dHJpYnV0ZSkpIHsKLSAgICAgICAgICAgIEdlbmVyYXRlTm9ybWFs
QXR0clNldHRlcigkYXR0cmlidXRlLCAkaW50ZXJmYWNlLCAiIik7Ci0gICAgICAgICAgICBHZW5l
cmF0ZU5vcm1hbEF0dHJTZXR0ZXJDYWxsYmFjaygkYXR0cmlidXRlLCAkaW50ZXJmYWNlLCAiIik7
Ci0gICAgICAgICAgICBpZiAoISRhdHRyRXh0LT57IlY4RW5hYmxlZFBlckNvbnRleHQifSkgewot
ICAgICAgICAgICAgICAgIEdlbmVyYXRlTm9ybWFsQXR0clNldHRlcigkYXR0cmlidXRlLCAkaW50
ZXJmYWNlLCAiRm9yTWFpbldvcmxkIik7Ci0gICAgICAgICAgICAgICAgR2VuZXJhdGVOb3JtYWxB
dHRyU2V0dGVyQ2FsbGJhY2soJGF0dHJpYnV0ZSwgJGludGVyZmFjZSwgIkZvck1haW5Xb3JsZCIp
OwotICAgICAgICAgICAgfQorICAgICAgICAgICAgR2VuZXJhdGVOb3JtYWxBdHRyU2V0dGVyKCRh
dHRyaWJ1dGUsICRpbnRlcmZhY2UpOworICAgICAgICAgICAgR2VuZXJhdGVOb3JtYWxBdHRyU2V0
dGVyQ2FsbGJhY2soJGF0dHJpYnV0ZSwgJGludGVyZmFjZSk7CiAgICAgICAgIH0KICAgICB9CiAK
QEAgLTI5MzMsMTEgKzI4ODEsNyBAQCBFTkQKICAgICAjIFB1dCB0aGUgYXR0cmlidXRlcyB0aGF0
IGRpc2FsbG93IHNoYWRvd2luZyBvbiB0aGUgc2hhZG93IG9iamVjdC4KICAgICBpZiAoQGRpc2Fs
bG93c1NoYWRvd2luZykgewogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgInN0YXRpYyBjb25z
dCBWOERPTUNvbmZpZ3VyYXRpb246OkJhdGNoZWRBdHRyaWJ1dGUgc2hhZG93QXR0cnNbXSA9IHtc
biIpOwotICAgICAgICBHZW5lcmF0ZUJhdGNoZWRBdHRyaWJ1dGVEYXRhKCRpbnRlcmZhY2UsIFxA
ZGlzYWxsb3dzU2hhZG93aW5nLCAiIik7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAifTtc
blxuIik7Ci0KLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJzdGF0aWMgY29uc3QgVjhET01D
b25maWd1cmF0aW9uOjpCYXRjaGVkQXR0cmlidXRlIHNoYWRvd0F0dHJzRm9yTWFpbldvcmxkW10g
PSB7XG4iKTsKLSAgICAgICAgR2VuZXJhdGVCYXRjaGVkQXR0cmlidXRlRGF0YSgkaW50ZXJmYWNl
LCBcQGRpc2FsbG93c1NoYWRvd2luZywgIkZvck1haW5Xb3JsZCIpOworICAgICAgICBHZW5lcmF0
ZUJhdGNoZWRBdHRyaWJ1dGVEYXRhKCRpbnRlcmZhY2UsIFxAZGlzYWxsb3dzU2hhZG93aW5nKTsK
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9O1xuXG4iKTsKICAgICB9CiAKQEAgLTI5NDUs
MTIgKzI4ODksNyBAQCBFTkQKICAgICBpZiAoQCRhdHRyaWJ1dGVzKSB7CiAgICAgICAgICRoYXNf
YXR0cmlidXRlcyA9IDE7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAic3RhdGljIGNvbnN0
IFY4RE9NQ29uZmlndXJhdGlvbjo6QmF0Y2hlZEF0dHJpYnV0ZSAke3Y4SW50ZXJmYWNlTmFtZX1B
dHRyc1tdID0ge1xuIik7Ci0gICAgICAgIEdlbmVyYXRlQmF0Y2hlZEF0dHJpYnV0ZURhdGEoJGlu
dGVyZmFjZSwgJGF0dHJpYnV0ZXMsICIiKTsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9
O1xuXG4iKTsKLQotICAgICAgICAjIFNldHVwIGF0dHJpYnV0ZXMgd2l0aCBzcGVjaWFsaXplZCBn
ZXR0ZXJzLgotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgInN0YXRpYyBjb25zdCBWOERPTUNv
bmZpZ3VyYXRpb246OkJhdGNoZWRBdHRyaWJ1dGUgJHt2OEludGVyZmFjZU5hbWV9QXR0cnNGb3JN
YWluV29ybGRbXSA9IHtcbiIpOwotICAgICAgICBHZW5lcmF0ZUJhdGNoZWRBdHRyaWJ1dGVEYXRh
KCRpbnRlcmZhY2UsICRhdHRyaWJ1dGVzLCAiRm9yTWFpbldvcmxkIik7CisgICAgICAgIEdlbmVy
YXRlQmF0Y2hlZEF0dHJpYnV0ZURhdGEoJGludGVyZmFjZSwgJGF0dHJpYnV0ZXMpOwogICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIn07XG5cbiIpOwogICAgIH0KIApAQCAtMzA0MiwxMyArMjk4
MSwxMCBAQCBFTkQKICAgICAjIGNvbmZpZ3VyYXRpb24gbWV0aG9kLgogICAgIGlmICgkaW50ZXJm
YWNlTmFtZSBlcSAiRE9NV2luZG93IikgewogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxF
TkQpOwotc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3RUZW1wbGF0ZT4gQ29uZmlndXJl
U2hhZG93T2JqZWN0VGVtcGxhdGUodjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdFRlbXBsYXRlPiB0
ZW1wbCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUsIFdyYXBwZXJXb3JsZFR5cGUgY3VycmVudFdvcmxk
VHlwZSkKK3N0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0VGVtcGxhdGU+IENvbmZpZ3Vy
ZVNoYWRvd09iamVjdFRlbXBsYXRlKHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3RUZW1wbGF0ZT4g
dGVtcGwsIHY4OjpJc29sYXRlKiBpc29sYXRlKQogewogICAgIFY4RE9NQ29uZmlndXJhdGlvbjo6
YmF0Y2hDb25maWd1cmVBdHRyaWJ1dGVzKHRlbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3RUZW1w
bGF0ZT4oKSwgc2hhZG93QXR0cnMsIFdURl9BUlJBWV9MRU5HVEgoc2hhZG93QXR0cnMpLCBpc29s
YXRlKTsKIAotICAgIGlmIChjdXJyZW50V29ybGRUeXBlID09IE1haW5Xb3JsZCkKLSAgICAgICAg
VjhET01Db25maWd1cmF0aW9uOjpiYXRjaENvbmZpZ3VyZUF0dHJpYnV0ZXModGVtcGwsIHY4OjpI
YW5kbGU8djg6Ok9iamVjdFRlbXBsYXRlPigpLCBzaGFkb3dBdHRyc0Zvck1haW5Xb3JsZCwgV1RG
X0FSUkFZX0xFTkdUSChzaGFkb3dBdHRyc0Zvck1haW5Xb3JsZCksIGlzb2xhdGUpOwotCiAgICAg
Ly8gSW5zdGFsbCBhIHNlY3VyaXR5IGhhbmRsZXIgd2l0aCBWOC4KICAgICB0ZW1wbC0+U2V0QWNj
ZXNzQ2hlY2tDYWxsYmFja3MoVjhET01XaW5kb3c6Om5hbWVkU2VjdXJpdHlDaGVja0N1c3RvbSwg
VjhET01XaW5kb3c6OmluZGV4ZWRTZWN1cml0eUNoZWNrQ3VzdG9tLCB2ODo6RXh0ZXJuYWw6Ok5l
dygmVjhET01XaW5kb3c6OmluZm8pKTsKICAgICB0ZW1wbC0+U2V0SW50ZXJuYWxGaWVsZENvdW50
KFY4RE9NV2luZG93OjppbnRlcm5hbEZpZWxkQ291bnQpOwpAQCAtMzA2Myw3ICsyOTk5LDcgQEAg
RU5ECiAKICAgICAjIEdlbmVyYXRlIHRoZSB0ZW1wbGF0ZSBjb25maWd1cmF0aW9uIG1ldGhvZAog
ICAgIHB1c2goQGltcGxDb250ZW50LCAgPDxFTkQpOwotc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4
OjpGdW5jdGlvblRlbXBsYXRlPiBDb25maWd1cmUke3Y4SW50ZXJmYWNlTmFtZX1UZW1wbGF0ZSh2
ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gZGVzYywgdjg6Oklzb2xhdGUqIGlz
b2xhdGUsIFdyYXBwZXJXb3JsZFR5cGUgY3VycmVudFdvcmxkVHlwZSkKK3N0YXRpYyB2ODo6UGVy
c2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gQ29uZmlndXJlJHt2OEludGVyZmFjZU5hbWV9
VGVtcGxhdGUodjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IGRlc2MsIHY4OjpJ
c29sYXRlKiBpc29sYXRlLCBXcmFwcGVyV29ybGRUeXBlIHdvcmxkVHlwZSkKIHsKICAgICBkZXNj
LT5SZWFkT25seVByb3RvdHlwZSgpOwogCkBAIC0zMTMxLDE3ICszMDY3LDkgQEAgRU5ECiAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4jaWYgJHtjb25kaXRpb25hbFN0cmluZ31cbiIpIGlm
ICRjb25kaXRpb25hbFN0cmluZzsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYg
KCR7ZW5hYmxlX2Z1bmN0aW9ufSgpKSB7XG4iKTsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgICAgIHN0YXRpYyBjb25zdCBWOERPTUNvbmZpZ3VyYXRpb246OkJhdGNoZWRBdHRyaWJ1
dGUgYXR0ckRhdGEgPVxcXG4iKTsKLSAgICAgICAgR2VuZXJhdGVTaW5nbGVCYXRjaGVkQXR0cmli
dXRlKCRpbnRlcmZhY2VOYW1lLCAkcnVudGltZV9hdHRyLCAiOyIsICIgICAgIiwgIiIpOworICAg
ICAgICBHZW5lcmF0ZVNpbmdsZUJhdGNoZWRBdHRyaWJ1dGUoJGludGVyZmFjZU5hbWUsICRydW50
aW1lX2F0dHIsICI7IiwgIiAgICAiKTsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsIDw8RU5E
KTsKICAgICAgICAgVjhET01Db25maWd1cmF0aW9uOjpjb25maWd1cmVBdHRyaWJ1dGUoaW5zdGFu
Y2UsIHByb3RvLCBhdHRyRGF0YSwgaXNvbGF0ZSk7Ci1FTkQKLSAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgICAgIGlmIChjdXJyZW50V29ybGRUeXBlID09IE1haW5Xb3JsZCkge1xuIik7
Ci0KLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgICAgICBzdGF0aWMgY29uc3Qg
VjhET01Db25maWd1cmF0aW9uOjpCYXRjaGVkQXR0cmlidXRlIGF0dHJEYXRhRm9yTWFpbldvcmxk
ID1cXFxuIik7Ci0gICAgICAgIEdlbmVyYXRlU2luZ2xlQmF0Y2hlZEF0dHJpYnV0ZSgkaW50ZXJm
YWNlTmFtZSwgJHJ1bnRpbWVfYXR0ciwgIjsiLCAiICAgICIsICJGb3JNYWluV29ybGQiKTsKLSAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsIDw8RU5EKTsKLSAgICAgICAgICAgIFY4RE9NQ29uZmln
dXJhdGlvbjo6Y29uZmlndXJlQXR0cmlidXRlKGluc3RhbmNlLCBwcm90bywgYXR0ckRhdGFGb3JN
YWluV29ybGQsIGlzb2xhdGUpOwotICAgICAgICB9CiAgICAgfQogRU5ECiAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiXG4jZW5kaWYgLy8gJHtjb25kaXRpb25hbFN0cmluZ31cbiIpIGlmICRj
b25kaXRpb25hbFN0cmluZzsKQEAgLTMxNjgsMzQgKzMwOTYsNiBAQCBFTkQKICAgICBHZW5lcmF0
ZUltcGxlbWVudGF0aW9uQ3VzdG9tQ2FsbCgkaW50ZXJmYWNlKTsKICAgICBHZW5lcmF0ZUltcGxl
bWVudGF0aW9uTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCgkaW50ZXJmYWNlKTsKIAotICAgIG15ICRh
ZGRUb1RlbXBsYXRlID0gIlY4RE9NQ29uZmlndXJhdGlvbjo6YWRkVG9UZW1wbGF0ZShkZXNjLCAi
OwotICAgIGlmICgkaGFzX2F0dHJpYnV0ZXMpIHsKLSAgICAgICAgJGFkZFRvVGVtcGxhdGUgPSAk
YWRkVG9UZW1wbGF0ZSAuICIke3Y4SW50ZXJmYWNlTmFtZX1BdHRyc0Zvck1haW5Xb3JsZCwgV1RG
X0FSUkFZX0xFTkdUSCgke3Y4SW50ZXJmYWNlTmFtZX1BdHRyc0Zvck1haW5Xb3JsZCksICI7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgJGFkZFRvVGVtcGxhdGUgPSAkYWRkVG9UZW1wbGF0ZSAuICIw
LCAwLCAiCi0gICAgfQotICAgICMgTm8gc3BlY2lhbGl6ZWQgY2FsbGJhY2tzIHlldC4KLSAgICAk
YWRkVG9UZW1wbGF0ZSA9ICRhZGRUb1RlbXBsYXRlIC4gIjAsIDAsICI7Ci0gICAgJGFkZFRvVGVt
cGxhdGUgPSAkYWRkVG9UZW1wbGF0ZSAuICJpc29sYXRlLCBkZWZhdWx0U2lnbmF0dXJlKTsiOwot
Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsIDw8RU5EKTsKLQotICAgIGlmIChjdXJyZW50V29ybGRU
eXBlID09IE1haW5Xb3JsZCkKLUVORAotCi0gICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0
cmlidXRlcy0+eyJWOEVuYWJsZWRBdFJ1bnRpbWUifSkgewotICAgICAgICBteSAkZW5hYmxlX2Z1
bmN0aW9uID0gR2V0UnVudGltZUVuYWJsZUZ1bmN0aW9uTmFtZSgkaW50ZXJmYWNlKTsKLQotICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOwotICAgICAgICBpZiAoJHtlbmFibGVfZnVu
Y3Rpb259KCkpCi0gICAgICAgICAgICAke2FkZFRvVGVtcGxhdGV9Ci1FTkQKLSAgIH0gZWxzZSB7
Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCA8PEVORCk7Ci0gICAgICAgICR7YWRkVG9UZW1w
bGF0ZX0KLUVORAotICAgfQotCiAgICAgIyBEZWZpbmUgb3VyIGZ1bmN0aW9ucyB3aXRoIFNldCgp
IG9yIFNldEFjY2Vzc29yKCkKICAgICBteSAkdG90YWxfZnVuY3Rpb25zID0gMDsKICAgICBmb3Jl
YWNoIG15ICRmdW5jdGlvbiAoQG5vcm1hbEZ1bmN0aW9ucykgewpAQCAtMzI1MiwyMyArMzE1Miwy
MyBAQCBFTkQKICAgICByZXR1cm4gZGVzYzsKIH0KIAotdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0
aW9uVGVtcGxhdGU+ICR7djhJbnRlcmZhY2VOYW1lfTo6R2V0VGVtcGxhdGUodjg6Oklzb2xhdGUq
IGlzb2xhdGUsIFdyYXBwZXJXb3JsZFR5cGUgY3VycmVudFdvcmxkVHlwZSkKK3Y4OjpQZXJzaXN0
ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiAke3Y4SW50ZXJmYWNlTmFtZX06OkdldFRlbXBsYXRl
KHY4OjpJc29sYXRlKiBpc29sYXRlLCBXcmFwcGVyV29ybGRUeXBlIHdvcmxkVHlwZSkKIHsKICAg
ICBWOFBlcklzb2xhdGVEYXRhKiBkYXRhID0gVjhQZXJJc29sYXRlRGF0YTo6ZnJvbShpc29sYXRl
KTsKLSAgICBWOFBlcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0g
ZGF0YS0+dGVtcGxhdGVNYXAoY3VycmVudFdvcmxkVHlwZSkuZmluZCgmaW5mbyk7Ci0gICAgaWYg
KHJlc3VsdCAhPSBkYXRhLT50ZW1wbGF0ZU1hcChjdXJyZW50V29ybGRUeXBlKS5lbmQoKSkKKyAg
ICBWOFBlcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+
dGVtcGxhdGVNYXAod29ybGRUeXBlKS5maW5kKCZpbmZvKTsKKyAgICBpZiAocmVzdWx0ICE9IGRh
dGEtPnRlbXBsYXRlTWFwKHdvcmxkVHlwZSkuZW5kKCkpCiAgICAgICAgIHJldHVybiByZXN1bHQt
PnZhbHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJz
aXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9Ci0gICAgICAgIENvbmZpZ3VyZSR7
djhJbnRlcmZhY2VOYW1lfVRlbXBsYXRlKGRhdGEtPnJhd1RlbXBsYXRlKCZpbmZvLCBjdXJyZW50
V29ybGRUeXBlKSwgaXNvbGF0ZSwgY3VycmVudFdvcmxkVHlwZSk7Ci0gICAgZGF0YS0+dGVtcGxh
dGVNYXAoY3VycmVudFdvcmxkVHlwZSkuYWRkKCZpbmZvLCB0ZW1wbCk7CisgICAgICAgIENvbmZp
Z3VyZSR7djhJbnRlcmZhY2VOYW1lfVRlbXBsYXRlKGRhdGEtPnJhd1RlbXBsYXRlKCZpbmZvLCB3
b3JsZFR5cGUpLCBpc29sYXRlLCB3b3JsZFR5cGUpOworICAgIGRhdGEtPnRlbXBsYXRlTWFwKHdv
cmxkVHlwZSkuYWRkKCZpbmZvLCB0ZW1wbCk7CiAgICAgcmV0dXJuIHRlbXBsOwogfQogCi1ib29s
ICR7djhJbnRlcmZhY2VOYW1lfTo6SGFzSW5zdGFuY2Uodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZh
bHVlLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSwgV3JhcHBlcldvcmxkVHlwZSBjdXJyZW50V29ybGRU
eXBlKQorYm9vbCAke3Y4SW50ZXJmYWNlTmFtZX06Okhhc0luc3RhbmNlKHY4OjpIYW5kbGU8djg6
OlZhbHVlPiB2YWx1ZSwgdjg6Oklzb2xhdGUqIGlzb2xhdGUsIFdyYXBwZXJXb3JsZFR5cGUgd29y
bGRUeXBlKQogewotICAgIHJldHVybiBWOFBlcklzb2xhdGVEYXRhOjpmcm9tKGlzb2xhdGUpLT5o
YXNJbnN0YW5jZSgmaW5mbywgdmFsdWUsIGN1cnJlbnRXb3JsZFR5cGUpOworICAgIHJldHVybiBW
OFBlcklzb2xhdGVEYXRhOjpmcm9tKGlzb2xhdGUpLT5oYXNJbnN0YW5jZSgmaW5mbywgdmFsdWUs
IHdvcmxkVHlwZSk7CiB9CiAKIEVORApAQCAtMzI4OSw3ICszMTg5LDcgQEAgRU5ECiAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuI2lmICR7Y29uZGl0aW9uYWxTdHJpbmd9XG4iKSBp
ZiAkY29uZGl0aW9uYWxTdHJpbmc7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICBpZiAoJHtlbmFibGVGdW5jdGlvbn0oaW1wbC0+ZG9jdW1lbnQoKSkpIHtcbiIpOwogICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHN0YXRpYyBjb25zdCBWOERPTUNvbmZp
Z3VyYXRpb246OkJhdGNoZWRBdHRyaWJ1dGUgYXR0ckRhdGEgPVxcXG4iKTsKLSAgICAgICAgICAg
IEdlbmVyYXRlU2luZ2xlQmF0Y2hlZEF0dHJpYnV0ZSgkaW50ZXJmYWNlTmFtZSwgJHJ1bnRpbWVB
dHRyLCAiOyIsICIgICAgIiwgIiIpOworICAgICAgICAgICAgR2VuZXJhdGVTaW5nbGVCYXRjaGVk
QXR0cmlidXRlKCRpbnRlcmZhY2VOYW1lLCAkcnVudGltZUF0dHIsICI7IiwgIiAgICAiKTsKICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCA8PEVORCk7CiAgICAgICAgIFY4RE9NQ29uZmln
dXJhdGlvbjo6Y29uZmlndXJlQXR0cmlidXRlKGluc3RhbmNlLCBwcm90bywgYXR0ckRhdGEsIGlz
b2xhdGUpOwogRU5ECkBAIC0zMzY2LDE0ICszMjY2LDE0IEBAIHY4OjpQZXJzaXN0ZW50PHY4OjpP
YmplY3RUZW1wbGF0ZT4gVjhET01XaW5kb3c6OkdldFNoYWRvd09iamVjdFRlbXBsYXRlKHY4OjpJ
c29sCiAgICAgICAgIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0VGVtcGxhdGU+IFY4
RE9NV2luZG93U2hhZG93T2JqZWN0Q2FjaGVGb3JNYWluV29ybGQ7CiAgICAgICAgIGlmIChWOERP
TVdpbmRvd1NoYWRvd09iamVjdENhY2hlRm9yTWFpbldvcmxkLklzRW1wdHkoKSkgewogICAgICAg
ICAgICAgVjhET01XaW5kb3dTaGFkb3dPYmplY3RDYWNoZUZvck1haW5Xb3JsZCA9IHY4OjpQZXJz
aXN0ZW50PHY4OjpPYmplY3RUZW1wbGF0ZT46Ok5ldyhpc29sYXRlLCB2ODo6T2JqZWN0VGVtcGxh
dGU6Ok5ldygpKTsKLSAgICAgICAgICAgIENvbmZpZ3VyZVNoYWRvd09iamVjdFRlbXBsYXRlKFY4
RE9NV2luZG93U2hhZG93T2JqZWN0Q2FjaGVGb3JNYWluV29ybGQsIGlzb2xhdGUsIGN1cnJlbnRX
b3JsZFR5cGUpOworICAgICAgICAgICAgQ29uZmlndXJlU2hhZG93T2JqZWN0VGVtcGxhdGUoVjhE
T01XaW5kb3dTaGFkb3dPYmplY3RDYWNoZUZvck1haW5Xb3JsZCwgaXNvbGF0ZSk7CiAgICAgICAg
IH0KICAgICAgICAgcmV0dXJuIFY4RE9NV2luZG93U2hhZG93T2JqZWN0Q2FjaGVGb3JNYWluV29y
bGQ7CiAgICAgfSBlbHNlIHsKICAgICAgICAgc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmpl
Y3RUZW1wbGF0ZT4gVjhET01XaW5kb3dTaGFkb3dPYmplY3RDYWNoZUZvck5vbk1haW5Xb3JsZDsK
ICAgICAgICAgaWYgKFY4RE9NV2luZG93U2hhZG93T2JqZWN0Q2FjaGVGb3JOb25NYWluV29ybGQu
SXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBWOERPTVdpbmRvd1NoYWRvd09iamVjdENhY2hlRm9y
Tm9uTWFpbldvcmxkID0gdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdFRlbXBsYXRlPjo6TmV3KGlz
b2xhdGUsIHY4OjpPYmplY3RUZW1wbGF0ZTo6TmV3KCkpOwotICAgICAgICAgICAgQ29uZmlndXJl
U2hhZG93T2JqZWN0VGVtcGxhdGUoVjhET01XaW5kb3dTaGFkb3dPYmplY3RDYWNoZUZvck5vbk1h
aW5Xb3JsZCwgaXNvbGF0ZSwgY3VycmVudFdvcmxkVHlwZSk7CisgICAgICAgICAgICBDb25maWd1
cmVTaGFkb3dPYmplY3RUZW1wbGF0ZShWOERPTVdpbmRvd1NoYWRvd09iamVjdENhY2hlRm9yTm9u
TWFpbldvcmxkLCBpc29sYXRlKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gVjhET01XaW5k
b3dTaGFkb3dPYmplY3RDYWNoZUZvck5vbk1haW5Xb3JsZDsKICAgICB9CkBAIC0zNTgzLDcgKzM0
ODMsNyBAQCBFTkQKICAgICAgICAgICAgIEBhcmdzID0gKCk7CiAgICAgICAgICAgICBmb3JlYWNo
IG15ICRwYXJhbSAoQHBhcmFtcykgewogICAgICAgICAgICAgICAgIG15ICRwYXJhbU5hbWUgPSAk
cGFyYW0tPm5hbWU7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+ICR7cGFyYW1OYW1lfUhhbmRsZSA9ICIgLiBOYXRpdmVUb0pTVmFs
dWUoJHBhcmFtLCAkcGFyYW1OYW1lLCAidjg6OkhhbmRsZTx2ODo6T2JqZWN0PigpIiwgInY4Q29u
dGV4dC0+R2V0SXNvbGF0ZSgpIiwgIiIpIC4gIjtcbiIpOworICAgICAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiAke3BhcmFtTmFtZX1IYW5k
bGUgPSAiIC4gTmF0aXZlVG9KU1ZhbHVlKCRwYXJhbSwgJHBhcmFtTmFtZSwgInY4OjpIYW5kbGU8
djg6Ok9iamVjdD4oKSIsICJ2OENvbnRleHQtPkdldElzb2xhdGUoKSIpIC4gIjtcbiIpOwogICAg
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmICgke3BhcmFtTmFtZX1IYW5k
bGUuSXNFbXB0eSgpKSB7XG4iKTsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICAgICAgaWYgKCFpc1NjcmlwdENvbnRyb2xsZXJUZXJtaW5hdGluZygpKVxuIik7CiAgICAg
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgICAgICBDUkFTSCgpO1xuIik7
CkBAIC0zOTYxLDkgKzM4NjEsOSBAQCBzdWIgR2VuZXJhdGVGdW5jdGlvbkNhbGxTdHJpbmcKICAg
ICBteSAkbmF0aXZlVmFsdWU7CiAgICAgIyBGSVhNRTogVXBkYXRlIGZvciBhbGwgU2NyaXB0V3Jh
cHBhYmxlcy4KICAgICBpZiAoSXNET01Ob2RlVHlwZSgkaW50ZXJmYWNlTmFtZSkpIHsKLSAgICAg
ICAgJG5hdGl2ZVZhbHVlID0gTmF0aXZlVG9KU1ZhbHVlKCRmdW5jdGlvbi0+c2lnbmF0dXJlLCAk
cmV0dXJuLCAiYXJncy5Ib2xkZXIoKSIsICJhcmdzLkdldElzb2xhdGUoKSIsICJhcmdzIiwgImlt
cCIsICJSZXR1cm5VbnNhZmVIYW5kbGUiLCAiIik7CisgICAgICAgICRuYXRpdmVWYWx1ZSA9IE5h
dGl2ZVRvSlNWYWx1ZSgkZnVuY3Rpb24tPnNpZ25hdHVyZSwgJHJldHVybiwgImFyZ3MuSG9sZGVy
KCkiLCAiYXJncy5HZXRJc29sYXRlKCkiLCAiYXJncyIsICJpbXAiLCAiUmV0dXJuVW5zYWZlSGFu
ZGxlIik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgJG5hdGl2ZVZhbHVlID0gTmF0aXZlVG9KU1Zh
bHVlKCRmdW5jdGlvbi0+c2lnbmF0dXJlLCAkcmV0dXJuLCAiYXJncy5Ib2xkZXIoKSIsICJhcmdz
LkdldElzb2xhdGUoKSIsIDAsIDAsICJSZXR1cm5VbnNhZmVIYW5kbGUiLCAiIik7CisgICAgICAg
ICRuYXRpdmVWYWx1ZSA9IE5hdGl2ZVRvSlNWYWx1ZSgkZnVuY3Rpb24tPnNpZ25hdHVyZSwgJHJl
dHVybiwgImFyZ3MuSG9sZGVyKCkiLCAiYXJncy5HZXRJc29sYXRlKCkiLCAwLCAwLCAiUmV0dXJu
VW5zYWZlSGFuZGxlIik7CiAgICAgfQogCiAgICAgJHJlc3VsdCAuPSAkaW5kZW50IC4gInJldHVy
biAiIC4gJG5hdGl2ZVZhbHVlIC4gIjtcbiI7CkBAIC00MTk4LDcgKzQwOTgsNyBAQCBzdWIgQ3Jl
YXRlQ3VzdG9tU2lnbmF0dXJlCiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
ICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoR2V0VjhIZWFkZXJOYW1lKCR0eXBlKSk7CiAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICRyZXN1bHQgLj0gIlY4UGVySXNvbGF0ZURh
dGE6OmZyb20oaXNvbGF0ZSktPnJhd1RlbXBsYXRlKCZWOCR7dHlwZX06OmluZm8sIGN1cnJlbnRX
b3JsZFR5cGUpIjsKKyAgICAgICAgICAgICAgICAkcmVzdWx0IC49ICJWOFBlcklzb2xhdGVEYXRh
Ojpmcm9tKGlzb2xhdGUpLT5yYXdUZW1wbGF0ZSgmVjgke3R5cGV9OjppbmZvLCB3b3JsZFR5cGUp
IjsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICRyZXN1bHQg
Lj0gInY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uVGVtcGxhdGU+KCkiOwpAQCAtNDM0Myw3ICs0MjQz
LDYgQEAgc3ViIE5hdGl2ZVRvSlNWYWx1ZQogICAgIG15ICRnZXRTY3JpcHRXcmFwcGFibGVBcmcg
PSAkZ2V0U2NyaXB0V3JhcHBhYmxlID8gIiwgJGdldFNjcmlwdFdyYXBwYWJsZSIgOiAiIjsKICAg
ICBteSAkcmV0dXJuSGFuZGxlVHlwZSA9IHNoaWZ0OwogICAgIG15ICRyZXR1cm5IYW5kbGVUeXBl
QXJnID0gJHJldHVybkhhbmRsZVR5cGUgPyAiLCAkcmV0dXJuSGFuZGxlVHlwZSIgOiAiIjsKLSAg
ICBteSAkZm9yTWFpbldvcmxkU3VmZml4ID0gc2hpZnQ7CiAKICAgICBteSAkdHlwZSA9ICRzaWdu
YXR1cmUtPnR5cGU7CiAKQEAgLTQ0MDEsNyArNDMwMCw3IEBAIHN1YiBOYXRpdmVUb0pTVmFsdWUK
IAogICAgIGlmIChJc0RPTU5vZGVUeXBlKCR0eXBlKSB8fCAkdHlwZSBlcSAiRXZlbnRUYXJnZXQi
KSB7CiAgICAgICBpZiAoJGdldFNjcmlwdFdyYXBwYWJsZSkgewotICAgICAgICAgIHJldHVybiAi
dG9WOEZhc3Qke2Zvck1haW5Xb3JsZFN1ZmZpeH0oJHZhbHVlJGdldEhvbGRlckNvbnRhaW5lckFy
ZyRnZXRTY3JpcHRXcmFwcGFibGVBcmcpIjsKKyAgICAgICAgICByZXR1cm4gInRvVjhGYXN0KCR2
YWx1ZSRnZXRIb2xkZXJDb250YWluZXJBcmckZ2V0U2NyaXB0V3JhcHBhYmxlQXJnKSI7CiAgICAg
ICB9CiAgICAgICByZXR1cm4gInRvVjgoJHZhbHVlLCAkZ2V0Q3JlYXRpb25Db250ZXh0LCAkZ2V0
SXNvbGF0ZSkiOwogICAgIH0KQEAgLTQ0MjEsNyArNDMyMCw3IEBAIHN1YiBOYXRpdmVUb0pTVmFs
dWUKICAgICBBZGRUb0ltcGxJbmNsdWRlcygid3RmL0dldFB0ci5oIik7CiAKICAgICBpZiAoJGdl
dFNjcmlwdFdyYXBwYWJsZSkgewotICAgICAgICAgIHJldHVybiAidG9WOEZhc3QkZm9yTWFpbldv
cmxkU3VmZml4KCR2YWx1ZSRnZXRIb2xkZXJDb250YWluZXJBcmckZ2V0U2NyaXB0V3JhcHBhYmxl
QXJnKSI7CisgICAgICAgICAgcmV0dXJuICJ0b1Y4RmFzdCgkdmFsdWUkZ2V0SG9sZGVyQ29udGFp
bmVyQXJnJGdldFNjcmlwdFdyYXBwYWJsZUFyZykiOwogICAgIH0KICAgICByZXR1cm4gInRvVjgo
JHZhbHVlLCAkZ2V0Q3JlYXRpb25Db250ZXh0LCAkZ2V0SXNvbGF0ZSkiOwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4RmxvYXQ2NEFycmF5
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOEZsb2F0NjRB
cnJheS5jcHAKaW5kZXggN2UxZTk5Zjc0ZWZmYzNiY2E5NmE1NjgzN2ZiYjU3YmM1YmE4Y2VlOS4u
MjFhYmY0ZGY5MTZhMDMxMGUxNjdkZDIyYmU3MDcxODU5ZDZlMWU3YiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4RmxvYXQ2NEFycmF5LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhGbG9hdDY0QXJy
YXkuY3BwCkBAIC0xMzUsMTIgKzEzNSwxMiBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhGbG9h
dDY0QXJyYXk6OmNvbnN0cnVjdG9yQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYQogICAg
IHJldHVybiBGbG9hdDY0QXJyYXlWOEludGVybmFsOjpjb25zdHJ1Y3RvcihhcmdzKTsKIH0KIAot
c3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBDb25maWd1cmVWOEZs
b2F0NjRBcnJheVRlbXBsYXRlKHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBk
ZXNjLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSwgV3JhcHBlcldvcmxkVHlwZSBjdXJyZW50V29ybGRU
eXBlKQorc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBDb25maWd1
cmVWOEZsb2F0NjRBcnJheVRlbXBsYXRlKHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBs
YXRlPiBkZXNjLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSwgV3JhcHBlcldvcmxkVHlwZSB3b3JsZFR5
cGUpCiB7CiAgICAgZGVzYy0+UmVhZE9ubHlQcm90b3R5cGUoKTsKIAogICAgIHY4OjpMb2NhbDx2
ODo6U2lnbmF0dXJlPiBkZWZhdWx0U2lnbmF0dXJlOwotICAgIGRlZmF1bHRTaWduYXR1cmUgPSBW
OERPTUNvbmZpZ3VyYXRpb246OmNvbmZpZ3VyZVRlbXBsYXRlKGRlc2MsICJGbG9hdDY0QXJyYXki
LCBWOEFycmF5QnVmZmVyVmlldzo6R2V0VGVtcGxhdGUoaXNvbGF0ZSwgY3VycmVudFdvcmxkVHlw
ZSksIFY4RmxvYXQ2NEFycmF5OjppbnRlcm5hbEZpZWxkQ291bnQsCisgICAgZGVmYXVsdFNpZ25h
dHVyZSA9IFY4RE9NQ29uZmlndXJhdGlvbjo6Y29uZmlndXJlVGVtcGxhdGUoZGVzYywgIkZsb2F0
NjRBcnJheSIsIFY4QXJyYXlCdWZmZXJWaWV3OjpHZXRUZW1wbGF0ZShpc29sYXRlLCB3b3JsZFR5
cGUpLCBWOEZsb2F0NjRBcnJheTo6aW50ZXJuYWxGaWVsZENvdW50LAogICAgICAgICAwLCAwLAog
ICAgICAgICBWOEZsb2F0NjRBcnJheU1ldGhvZHMsIFdURl9BUlJBWV9MRU5HVEgoVjhGbG9hdDY0
QXJyYXlNZXRob2RzKSwgaXNvbGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKGRlZmF1bHRTaWduYXR1
cmUpOyAvLyBJbiBzb21lIGNhc2VzLCBpdCB3aWxsIG5vdCBiZSB1c2VkLgpAQCAtMTUxLDEyICsx
NTEsOSBAQCBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IENvbmZp
Z3VyZVY4RmxvYXQ2NEFycmF5VGVtcGxhdGUodjg6OgogICAgIFVOVVNFRF9QQVJBTShwcm90byk7
IC8vIEluIHNvbWUgY2FzZXMsIGl0IHdpbGwgbm90IGJlIHVzZWQuCiAgICAgCiAKLSAgICBpZiAo
Y3VycmVudFdvcmxkVHlwZSA9PSBNYWluV29ybGQpCi0gICAgICAgIFY4RE9NQ29uZmlndXJhdGlv
bjo6YWRkVG9UZW1wbGF0ZShkZXNjLCAwLCAwLCAwLCAwLCBpc29sYXRlLCBkZWZhdWx0U2lnbmF0
dXJlKTsKLQogICAgIC8vIEN1c3RvbSBTaWduYXR1cmUgJ2ZvbycKICAgICBjb25zdCBpbnQgZm9v
QXJnYyA9IDE7Ci0gICAgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gZm9vQXJndltm
b29BcmdjXSA9IHsgVjhQZXJJc29sYXRlRGF0YTo6ZnJvbShpc29sYXRlKS0+cmF3VGVtcGxhdGUo
JlY4RmxvYXQzMkFycmF5OjppbmZvLCBjdXJyZW50V29ybGRUeXBlKSB9OworICAgIHY4OjpIYW5k
bGU8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IGZvb0FyZ3ZbZm9vQXJnY10gPSB7IFY4UGVySXNvbGF0
ZURhdGE6OmZyb20oaXNvbGF0ZSktPnJhd1RlbXBsYXRlKCZWOEZsb2F0MzJBcnJheTo6aW5mbywg
d29ybGRUeXBlKSB9OwogICAgIHY4OjpIYW5kbGU8djg6OlNpZ25hdHVyZT4gZm9vU2lnbmF0dXJl
ID0gdjg6OlNpZ25hdHVyZTo6TmV3KGRlc2MsIGZvb0FyZ2MsIGZvb0FyZ3YpOwogICAgIHByb3Rv
LT5TZXQodjg6OlN0cmluZzo6TmV3U3ltYm9sKCJmb28iKSwgdjg6OkZ1bmN0aW9uVGVtcGxhdGU6
Ok5ldyhGbG9hdDY0QXJyYXlWOEludGVybmFsOjpmb29NZXRob2RDYWxsYmFjaywgdjhVbmRlZmlu
ZWQoKSwgZm9vU2lnbmF0dXJlKSk7CiAKQEAgLTE2NSwyMyArMTYyLDIzIEBAIHN0YXRpYyB2ODo6
UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gQ29uZmlndXJlVjhGbG9hdDY0QXJyYXlU
ZW1wbGF0ZSh2ODo6CiAgICAgcmV0dXJuIGRlc2M7CiB9CiAKLXY4OjpQZXJzaXN0ZW50PHY4OjpG
dW5jdGlvblRlbXBsYXRlPiBWOEZsb2F0NjRBcnJheTo6R2V0VGVtcGxhdGUodjg6Oklzb2xhdGUq
IGlzb2xhdGUsIFdyYXBwZXJXb3JsZFR5cGUgY3VycmVudFdvcmxkVHlwZSkKK3Y4OjpQZXJzaXN0
ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOEZsb2F0NjRBcnJheTo6R2V0VGVtcGxhdGUodjg6
Oklzb2xhdGUqIGlzb2xhdGUsIFdyYXBwZXJXb3JsZFR5cGUgd29ybGRUeXBlKQogewogICAgIFY4
UGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOFBlcklzb2xhdGVEYXRhOjpmcm9tKGlzb2xhdGUpOwot
ICAgIFY4UGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVyYXRvciByZXN1bHQgPSBkYXRh
LT50ZW1wbGF0ZU1hcChjdXJyZW50V29ybGRUeXBlKS5maW5kKCZpbmZvKTsKLSAgICBpZiAocmVz
dWx0ICE9IGRhdGEtPnRlbXBsYXRlTWFwKGN1cnJlbnRXb3JsZFR5cGUpLmVuZCgpKQorICAgIFY4
UGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT50ZW1w
bGF0ZU1hcCh3b3JsZFR5cGUpLmZpbmQoJmluZm8pOworICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+
dGVtcGxhdGVNYXAod29ybGRUeXBlKS5lbmQoKSkKICAgICAgICAgcmV0dXJuIHJlc3VsdC0+dmFs
dWU7CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6OlBlcnNpc3Rl
bnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0KLSAgICAgICAgQ29uZmlndXJlVjhGbG9h
dDY0QXJyYXlUZW1wbGF0ZShkYXRhLT5yYXdUZW1wbGF0ZSgmaW5mbywgY3VycmVudFdvcmxkVHlw
ZSksIGlzb2xhdGUsIGN1cnJlbnRXb3JsZFR5cGUpOwotICAgIGRhdGEtPnRlbXBsYXRlTWFwKGN1
cnJlbnRXb3JsZFR5cGUpLmFkZCgmaW5mbywgdGVtcGwpOworICAgICAgICBDb25maWd1cmVWOEZs
b2F0NjRBcnJheVRlbXBsYXRlKGRhdGEtPnJhd1RlbXBsYXRlKCZpbmZvLCB3b3JsZFR5cGUpLCBp
c29sYXRlLCB3b3JsZFR5cGUpOworICAgIGRhdGEtPnRlbXBsYXRlTWFwKHdvcmxkVHlwZSkuYWRk
KCZpbmZvLCB0ZW1wbCk7CiAgICAgcmV0dXJuIHRlbXBsOwogfQogCi1ib29sIFY4RmxvYXQ2NEFy
cmF5OjpIYXNJbnN0YW5jZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUsIHY4OjpJc29sYXRl
KiBpc29sYXRlLCBXcmFwcGVyV29ybGRUeXBlIGN1cnJlbnRXb3JsZFR5cGUpCitib29sIFY4Rmxv
YXQ2NEFycmF5OjpIYXNJbnN0YW5jZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUsIHY4OjpJ
c29sYXRlKiBpc29sYXRlLCBXcmFwcGVyV29ybGRUeXBlIHdvcmxkVHlwZSkKIHsKLSAgICByZXR1
cm4gVjhQZXJJc29sYXRlRGF0YTo6ZnJvbShpc29sYXRlKS0+aGFzSW5zdGFuY2UoJmluZm8sIHZh
bHVlLCBjdXJyZW50V29ybGRUeXBlKTsKKyAgICByZXR1cm4gVjhQZXJJc29sYXRlRGF0YTo6ZnJv
bShpc29sYXRlKS0+aGFzSW5zdGFuY2UoJmluZm8sIHZhbHVlLCB3b3JsZFR5cGUpOwogfQogCiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOEZs
b2F0NjRBcnJheS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4
RmxvYXQ2NEFycmF5LmgKaW5kZXggMjY0NDE1NDA5YjVmN2Y1MWI2YjRhZjYzNTJmMTJiMTZlMjk4
MDI5Ni4uNDMzN2RkMjZkYjFiZWJlYjI0OWUzZGEzMDAyY2I0ZTMwMmFkZDFiMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4RmxvYXQ2NEFycmF5
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4RmxvYXQ2
NEFycmF5LmgKQEAgLTY1LDE3ICs2NSw2IEBAIGlubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
dG9WOChGbG9hdDY0QXJyYXkqIGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlCiAgICAg
cmV0dXJuIHdyYXAoaW1wbCwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKIH0KIAotaW5saW5l
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4Rm9yTWFpbldvcmxkKEZsb2F0NjRBcnJheSogaW1w
bCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBp
c29sYXRlKQotewotICAgIEFTU0VSVCh3b3JsZFR5cGUoaXNvbGF0ZSkgPT0gTWFpbldvcmxkKTsK
LSAgICBpZiAoVU5MSUtFTFkoIWltcGwpKQotICAgICAgICByZXR1cm4gdjhOdWxsV2l0aENoZWNr
KGlzb2xhdGUpOwotICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB3cmFwcGVyID0gRE9NRGF0YVN0
b3JlOjpnZXRXcmFwcGVyRm9yTWFpbldvcmxkKGltcGwpOwotICAgIGlmICghd3JhcHBlci5Jc0Vt
cHR5KCkpCi0gICAgICAgIHJldHVybiB3cmFwcGVyOwotICAgIHJldHVybiB3cmFwKGltcGwsIGNy
ZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7Ci19Ci0KIHRlbXBsYXRlPGNsYXNzIEhvbGRlckNvbnRh
aW5lciwgY2xhc3MgV3JhcHBhYmxlPgogaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4
RmFzdChGbG9hdDY0QXJyYXkqIGltcGwsIGNvbnN0IEhvbGRlckNvbnRhaW5lciYgY29udGFpbmVy
LCBXcmFwcGFibGUqIHdyYXBwYWJsZSkKIHsKQEAgLTg4LDI1ICs3Nyw2IEBAIGlubGluZSB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOEZhc3QoRmxvYXQ2NEFycmF5KiBpbXBsLCBjb25zdCBIb2xk
ZXJDb250YWluZXImCiB9CiAKIHRlbXBsYXRlPGNsYXNzIEhvbGRlckNvbnRhaW5lciwgY2xhc3Mg
V3JhcHBhYmxlPgotaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4RmFzdEZvck1haW5X
b3JsZChGbG9hdDY0QXJyYXkqIGltcGwsIGNvbnN0IEhvbGRlckNvbnRhaW5lciYgY29udGFpbmVy
LCBXcmFwcGFibGUqIHdyYXBwYWJsZSkKLXsKLSAgICBBU1NFUlQod29ybGRUeXBlKGNvbnRhaW5l
ci5HZXRJc29sYXRlKCkpID09IE1haW5Xb3JsZCk7Ci0gICAgaWYgKFVOTElLRUxZKCFpbXBsKSkK
LSAgICAgICAgcmV0dXJuIHY4TnVsbChjb250YWluZXIuR2V0SXNvbGF0ZSgpKTsKLSAgICB2ODo6
SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBET01EYXRhU3RvcmU6OmdldFdyYXBwZXJGb3JN
YWluV29ybGQoaW1wbCk7Ci0gICAgaWYgKCF3cmFwcGVyLklzRW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuIHdyYXBwZXI7Ci0gICAgcmV0dXJuIHdyYXAoaW1wbCwgY29udGFpbmVyLkhvbGRlcigpLCBj
b250YWluZXIuR2V0SXNvbGF0ZSgpKTsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgSG9sZGVyQ29udGFp
bmVyLCBjbGFzcyBXcmFwcGFibGU+Ci1pbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjhG
YXN0Rm9yTWFpbldvcmxkKFBhc3NSZWZQdHI8IEZsb2F0NjRBcnJheSA+IGltcGwsIGNvbnN0IEhv
bGRlckNvbnRhaW5lciYgY29udGFpbmVyLCBXcmFwcGFibGUqIHdyYXBwYWJsZSkKLXsKLSAgICBy
ZXR1cm4gdG9WOEZhc3RGb3JNYWluV29ybGQoaW1wbC5nZXQoKSwgY29udGFpbmVyLCB3cmFwcGFi
bGUpOwotfQotCi0KLXRlbXBsYXRlPGNsYXNzIEhvbGRlckNvbnRhaW5lciwgY2xhc3MgV3JhcHBh
YmxlPgogaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4RmFzdChQYXNzUmVmUHRyPCBG
bG9hdDY0QXJyYXkgPiBpbXBsLCBjb25zdCBIb2xkZXJDb250YWluZXImIGNvbnRhaW5lciwgV3Jh
cHBhYmxlKiB3cmFwcGFibGUpCiB7CiAgICAgcmV0dXJuIHRvVjhGYXN0KGltcGwuZ2V0KCksIGNv
bnRhaW5lciwgd3JhcHBhYmxlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RBY3RpdmVET01PYmplY3QuY3BwIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEFjdGl2ZURPTU9iamVjdC5jcHAKaW5k
ZXggM2U0MjJlNDQ2ZWNjYzcwZGQxNDBjMGRlMjQwNTEyNGJhNTA2YmVmNi4uM2E4NjE3YWJkOTU1
ODc0OTU3YmFmODI1MmMyMGFkNmJhMGM2MjAyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEFjdGl2ZURPTU9iamVjdC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEFjdGl2ZURPTU9i
amVjdC5jcHAKQEAgLTgyLDE3ICs4Miw2IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
ZXhjaXRpbmdBdHRyQXR0ckdldHRlckNhbGxiYWNrKHY4OjpMb2NhbDx2ODo6U3RyaW5nCiAgICAg
cmV0dXJuIFRlc3RBY3RpdmVET01PYmplY3RWOEludGVybmFsOjpleGNpdGluZ0F0dHJBdHRyR2V0
dGVyKG5hbWUsIGluZm8pOwogfQogCi1zdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGV4Y2l0
aW5nQXR0ckF0dHJHZXR0ZXJGb3JNYWluV29ybGQodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUs
IGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCi17Ci0gICAgVGVzdEFjdGl2ZURPTU9iamVj
dCogaW1wID0gVjhUZXN0QWN0aXZlRE9NT2JqZWN0Ojp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsK
LSAgICByZXR1cm4gdjhJbnRlZ2VyKGltcC0+ZXhjaXRpbmdBdHRyKCksIGluZm8uR2V0SXNvbGF0
ZSgpKTsKLX0KLQotc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBleGNpdGluZ0F0dHJBdHRy
R2V0dGVyQ2FsbGJhY2tGb3JNYWluV29ybGQodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNv
bnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCi17Ci0gICAgcmV0dXJuIFRlc3RBY3RpdmVET01P
YmplY3RWOEludGVybmFsOjpleGNpdGluZ0F0dHJBdHRyR2V0dGVyRm9yTWFpbldvcmxkKG5hbWUs
IGluZm8pOwotfQotCiBib29sIGluZGV4ZWRTZWN1cml0eUNoZWNrKHY4OjpMb2NhbDx2ODo6T2Jq
ZWN0PiBob3N0LCB1aW50MzJfdCBpbmRleCwgdjg6OkFjY2Vzc1R5cGUgdHlwZSwgdjg6OkxvY2Fs
PHY4OjpWYWx1ZT4pCiB7CiAgICAgVGVzdEFjdGl2ZURPTU9iamVjdCogaW1wID0gIFY4VGVzdEFj
dGl2ZURPTU9iamVjdDo6dG9OYXRpdmUoaG9zdCk7CkBAIC0xODksMTIgKzE3OCw3IEBAIHN0YXRp
YyBjb25zdCBWOERPTUNvbmZpZ3VyYXRpb246OkJhdGNoZWRBdHRyaWJ1dGUgVjhUZXN0QWN0aXZl
RE9NT2JqZWN0QXR0cnNbXSA9CiAgICAgeyJleGNpdGluZ0F0dHIiLCBUZXN0QWN0aXZlRE9NT2Jq
ZWN0VjhJbnRlcm5hbDo6ZXhjaXRpbmdBdHRyQXR0ckdldHRlckNhbGxiYWNrLCAwLCAwIC8qIG5v
IGRhdGEgKi8sIHN0YXRpY19jYXN0PHY4OjpBY2Nlc3NDb250cm9sPih2ODo6REVGQVVMVCksIHN0
YXRpY19jYXN0PHY4OjpQcm9wZXJ0eUF0dHJpYnV0ZT4odjg6Ok5vbmUpLCAwIC8qIG9uIGluc3Rh
bmNlICovfSwKIH07CiAKLXN0YXRpYyBjb25zdCBWOERPTUNvbmZpZ3VyYXRpb246OkJhdGNoZWRB
dHRyaWJ1dGUgVjhUZXN0QWN0aXZlRE9NT2JqZWN0QXR0cnNGb3JNYWluV29ybGRbXSA9IHsKLSAg
ICAvLyBBdHRyaWJ1dGUgJ2V4Y2l0aW5nQXR0cicgKFR5cGU6ICdyZWFkb25seSBhdHRyaWJ1dGUn
IEV4dEF0dHI6ICcnKQotICAgIHsiZXhjaXRpbmdBdHRyIiwgVGVzdEFjdGl2ZURPTU9iamVjdFY4
SW50ZXJuYWw6OmV4Y2l0aW5nQXR0ckF0dHJHZXR0ZXJDYWxsYmFja0Zvck1haW5Xb3JsZCwgMCwg
MCAvKiBubyBkYXRhICovLCBzdGF0aWNfY2FzdDx2ODo6QWNjZXNzQ29udHJvbD4odjg6OkRFRkFV
TFQpLCBzdGF0aWNfY2FzdDx2ODo6UHJvcGVydHlBdHRyaWJ1dGU+KHY4OjpOb25lKSwgMCAvKiBv
biBpbnN0YW5jZSAqL30sCi19OwotCi1zdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9u
VGVtcGxhdGU+IENvbmZpZ3VyZVY4VGVzdEFjdGl2ZURPTU9iamVjdFRlbXBsYXRlKHY4OjpQZXJz
aXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBkZXNjLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSwg
V3JhcHBlcldvcmxkVHlwZSBjdXJyZW50V29ybGRUeXBlKQorc3RhdGljIHY4OjpQZXJzaXN0ZW50
PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBDb25maWd1cmVWOFRlc3RBY3RpdmVET01PYmplY3RUZW1w
bGF0ZSh2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gZGVzYywgdjg6Oklzb2xh
dGUqIGlzb2xhdGUsIFdyYXBwZXJXb3JsZFR5cGUgd29ybGRUeXBlKQogewogICAgIGRlc2MtPlJl
YWRPbmx5UHJvdG90eXBlKCk7CiAKQEAgLTIwOSwxMiArMTkzLDkgQEAgc3RhdGljIHY4OjpQZXJz
aXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBDb25maWd1cmVWOFRlc3RBY3RpdmVET01PYmpl
Y3RUZW1wbGEKICAgICBVTlVTRURfUEFSQU0ocHJvdG8pOyAvLyBJbiBzb21lIGNhc2VzLCBpdCB3
aWxsIG5vdCBiZSB1c2VkLgogICAgIGluc3RhbmNlLT5TZXRBY2Nlc3NDaGVja0NhbGxiYWNrcyhU
ZXN0QWN0aXZlRE9NT2JqZWN0VjhJbnRlcm5hbDo6bmFtZWRTZWN1cml0eUNoZWNrLCBUZXN0QWN0
aXZlRE9NT2JqZWN0VjhJbnRlcm5hbDo6aW5kZXhlZFNlY3VyaXR5Q2hlY2ssIHY4OjpFeHRlcm5h
bDo6TmV3KCZWOFRlc3RBY3RpdmVET01PYmplY3Q6OmluZm8pKTsKIAotICAgIGlmIChjdXJyZW50
V29ybGRUeXBlID09IE1haW5Xb3JsZCkKLSAgICAgICAgVjhET01Db25maWd1cmF0aW9uOjphZGRU
b1RlbXBsYXRlKGRlc2MsIFY4VGVzdEFjdGl2ZURPTU9iamVjdEF0dHJzRm9yTWFpbldvcmxkLCBX
VEZfQVJSQVlfTEVOR1RIKFY4VGVzdEFjdGl2ZURPTU9iamVjdEF0dHJzRm9yTWFpbldvcmxkKSwg
MCwgMCwgaXNvbGF0ZSwgZGVmYXVsdFNpZ25hdHVyZSk7Ci0KICAgICAvLyBDdXN0b20gU2lnbmF0
dXJlICdleGNpdGluZ0Z1bmN0aW9uJwogICAgIGNvbnN0IGludCBleGNpdGluZ0Z1bmN0aW9uQXJn
YyA9IDE7Ci0gICAgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gZXhjaXRpbmdGdW5j
dGlvbkFyZ3ZbZXhjaXRpbmdGdW5jdGlvbkFyZ2NdID0geyBWOFBlcklzb2xhdGVEYXRhOjpmcm9t
KGlzb2xhdGUpLT5yYXdUZW1wbGF0ZSgmVjhOb2RlOjppbmZvLCBjdXJyZW50V29ybGRUeXBlKSB9
OworICAgIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IGV4Y2l0aW5nRnVuY3Rpb25B
cmd2W2V4Y2l0aW5nRnVuY3Rpb25BcmdjXSA9IHsgVjhQZXJJc29sYXRlRGF0YTo6ZnJvbShpc29s
YXRlKS0+cmF3VGVtcGxhdGUoJlY4Tm9kZTo6aW5mbywgd29ybGRUeXBlKSB9OwogICAgIHY4OjpI
YW5kbGU8djg6OlNpZ25hdHVyZT4gZXhjaXRpbmdGdW5jdGlvblNpZ25hdHVyZSA9IHY4OjpTaWdu
YXR1cmU6Ok5ldyhkZXNjLCBleGNpdGluZ0Z1bmN0aW9uQXJnYywgZXhjaXRpbmdGdW5jdGlvbkFy
Z3YpOwogICAgIHByb3RvLT5TZXQodjg6OlN0cmluZzo6TmV3U3ltYm9sKCJleGNpdGluZ0Z1bmN0
aW9uIiksIHY4OjpGdW5jdGlvblRlbXBsYXRlOjpOZXcoVGVzdEFjdGl2ZURPTU9iamVjdFY4SW50
ZXJuYWw6OmV4Y2l0aW5nRnVuY3Rpb25NZXRob2RDYWxsYmFjaywgdjhVbmRlZmluZWQoKSwgZXhj
aXRpbmdGdW5jdGlvblNpZ25hdHVyZSkpOwogCkBAIC0yMjYsMjMgKzIwNywyMyBAQCBzdGF0aWMg
djg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IENvbmZpZ3VyZVY4VGVzdEFjdGl2
ZURPTU9iamVjdFRlbXBsYQogICAgIHJldHVybiBkZXNjOwogfQogCi12ODo6UGVyc2lzdGVudDx2
ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhUZXN0QWN0aXZlRE9NT2JqZWN0OjpHZXRUZW1wbGF0ZSh2
ODo6SXNvbGF0ZSogaXNvbGF0ZSwgV3JhcHBlcldvcmxkVHlwZSBjdXJyZW50V29ybGRUeXBlKQor
djg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdEFjdGl2ZURPTU9iamVj
dDo6R2V0VGVtcGxhdGUodjg6Oklzb2xhdGUqIGlzb2xhdGUsIFdyYXBwZXJXb3JsZFR5cGUgd29y
bGRUeXBlKQogewogICAgIFY4UGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOFBlcklzb2xhdGVEYXRh
Ojpmcm9tKGlzb2xhdGUpOwotICAgIFY4UGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVy
YXRvciByZXN1bHQgPSBkYXRhLT50ZW1wbGF0ZU1hcChjdXJyZW50V29ybGRUeXBlKS5maW5kKCZp
bmZvKTsKLSAgICBpZiAocmVzdWx0ICE9IGRhdGEtPnRlbXBsYXRlTWFwKGN1cnJlbnRXb3JsZFR5
cGUpLmVuZCgpKQorICAgIFY4UGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVyYXRvciBy
ZXN1bHQgPSBkYXRhLT50ZW1wbGF0ZU1hcCh3b3JsZFR5cGUpLmZpbmQoJmluZm8pOworICAgIGlm
IChyZXN1bHQgIT0gZGF0YS0+dGVtcGxhdGVNYXAod29ybGRUeXBlKS5lbmQoKSkKICAgICAgICAg
cmV0dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7
CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0KLSAgICAg
ICAgQ29uZmlndXJlVjhUZXN0QWN0aXZlRE9NT2JqZWN0VGVtcGxhdGUoZGF0YS0+cmF3VGVtcGxh
dGUoJmluZm8sIGN1cnJlbnRXb3JsZFR5cGUpLCBpc29sYXRlLCBjdXJyZW50V29ybGRUeXBlKTsK
LSAgICBkYXRhLT50ZW1wbGF0ZU1hcChjdXJyZW50V29ybGRUeXBlKS5hZGQoJmluZm8sIHRlbXBs
KTsKKyAgICAgICAgQ29uZmlndXJlVjhUZXN0QWN0aXZlRE9NT2JqZWN0VGVtcGxhdGUoZGF0YS0+
cmF3VGVtcGxhdGUoJmluZm8sIHdvcmxkVHlwZSksIGlzb2xhdGUsIHdvcmxkVHlwZSk7CisgICAg
ZGF0YS0+dGVtcGxhdGVNYXAod29ybGRUeXBlKS5hZGQoJmluZm8sIHRlbXBsKTsKICAgICByZXR1
cm4gdGVtcGw7CiB9CiAKLWJvb2wgVjhUZXN0QWN0aXZlRE9NT2JqZWN0OjpIYXNJbnN0YW5jZSh2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUsIHY4OjpJc29sYXRlKiBpc29sYXRlLCBXcmFwcGVy
V29ybGRUeXBlIGN1cnJlbnRXb3JsZFR5cGUpCitib29sIFY4VGVzdEFjdGl2ZURPTU9iamVjdDo6
SGFzSW5zdGFuY2Uodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlLCB2ODo6SXNvbGF0ZSogaXNv
bGF0ZSwgV3JhcHBlcldvcmxkVHlwZSB3b3JsZFR5cGUpCiB7Ci0gICAgcmV0dXJuIFY4UGVySXNv
bGF0ZURhdGE6OmZyb20oaXNvbGF0ZSktPmhhc0luc3RhbmNlKCZpbmZvLCB2YWx1ZSwgY3VycmVu
dFdvcmxkVHlwZSk7CisgICAgcmV0dXJuIFY4UGVySXNvbGF0ZURhdGE6OmZyb20oaXNvbGF0ZSkt
Pmhhc0luc3RhbmNlKCZpbmZvLCB2YWx1ZSwgd29ybGRUeXBlKTsKIH0KIAogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0QWN0aXZlRE9N
T2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0
QWN0aXZlRE9NT2JqZWN0LmgKaW5kZXggNjUwZGZlNTA3NWViOWY1YTI2NGMwYzBkNDY4MzQwZmE4
M2FkOWFkMC4uYzgwZWZhNjlmMzJkOTQyMTU5ZGYzZTJmNzM3NTI2NmIzNDQ0N2ZhNCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEFjdGl2
ZURPTU9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9W
OC9WOFRlc3RBY3RpdmVET01PYmplY3QuaApAQCAtNjgsMTcgKzY4LDYgQEAgaW5saW5lIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiB0b1Y4KFRlc3RBY3RpdmVET01PYmplY3QqIGltcGwsIHY4OjpIYW5k
bGU8djg6Ok9iamUKICAgICByZXR1cm4gd3JhcChpbXBsLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xh
dGUpOwogfQogCi1pbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjhGb3JNYWluV29ybGQo
VGVzdEFjdGl2ZURPTU9iamVjdCogaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlv
bkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQotewotICAgIEFTU0VSVCh3b3JsZFR5cGUo
aXNvbGF0ZSkgPT0gTWFpbldvcmxkKTsKLSAgICBpZiAoVU5MSUtFTFkoIWltcGwpKQotICAgICAg
ICByZXR1cm4gdjhOdWxsV2l0aENoZWNrKGlzb2xhdGUpOwotICAgIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiB3cmFwcGVyID0gRE9NRGF0YVN0b3JlOjpnZXRXcmFwcGVyRm9yTWFpbldvcmxkKGltcGwp
OwotICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiB3cmFwcGVyOwot
ICAgIHJldHVybiB3cmFwKGltcGwsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7Ci19Ci0KIHRl
bXBsYXRlPGNsYXNzIEhvbGRlckNvbnRhaW5lciwgY2xhc3MgV3JhcHBhYmxlPgogaW5saW5lIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4RmFzdChUZXN0QWN0aXZlRE9NT2JqZWN0KiBpbXBsLCBj
b25zdCBIb2xkZXJDb250YWluZXImIGNvbnRhaW5lciwgV3JhcHBhYmxlKiB3cmFwcGFibGUpCiB7
CkBAIC05MSwyNSArODAsNiBAQCBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjhGYXN0
KFRlc3RBY3RpdmVET01PYmplY3QqIGltcGwsIGNvbnN0IEhvbGRlckNvbgogfQogCiB0ZW1wbGF0
ZTxjbGFzcyBIb2xkZXJDb250YWluZXIsIGNsYXNzIFdyYXBwYWJsZT4KLWlubGluZSB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gdG9WOEZhc3RGb3JNYWluV29ybGQoVGVzdEFjdGl2ZURPTU9iamVjdCog
aW1wbCwgY29uc3QgSG9sZGVyQ29udGFpbmVyJiBjb250YWluZXIsIFdyYXBwYWJsZSogd3JhcHBh
YmxlKQotewotICAgIEFTU0VSVCh3b3JsZFR5cGUoY29udGFpbmVyLkdldElzb2xhdGUoKSkgPT0g
TWFpbldvcmxkKTsKLSAgICBpZiAoVU5MSUtFTFkoIWltcGwpKQotICAgICAgICByZXR1cm4gdjhO
dWxsKGNvbnRhaW5lci5HZXRJc29sYXRlKCkpOwotICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4g
d3JhcHBlciA9IERPTURhdGFTdG9yZTo6Z2V0V3JhcHBlckZvck1haW5Xb3JsZChpbXBsKTsKLSAg
ICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gd3JhcHBlcjsKLSAgICBy
ZXR1cm4gd3JhcChpbXBsLCBjb250YWluZXIuSG9sZGVyKCksIGNvbnRhaW5lci5HZXRJc29sYXRl
KCkpOwotfQotCi10ZW1wbGF0ZTxjbGFzcyBIb2xkZXJDb250YWluZXIsIGNsYXNzIFdyYXBwYWJs
ZT4KLWlubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOEZhc3RGb3JNYWluV29ybGQoUGFz
c1JlZlB0cjwgVGVzdEFjdGl2ZURPTU9iamVjdCA+IGltcGwsIGNvbnN0IEhvbGRlckNvbnRhaW5l
ciYgY29udGFpbmVyLCBXcmFwcGFibGUqIHdyYXBwYWJsZSkKLXsKLSAgICByZXR1cm4gdG9WOEZh
c3RGb3JNYWluV29ybGQoaW1wbC5nZXQoKSwgY29udGFpbmVyLCB3cmFwcGFibGUpOwotfQotCi0K
LXRlbXBsYXRlPGNsYXNzIEhvbGRlckNvbnRhaW5lciwgY2xhc3MgV3JhcHBhYmxlPgogaW5saW5l
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4RmFzdChQYXNzUmVmUHRyPCBUZXN0QWN0aXZlRE9N
T2JqZWN0ID4gaW1wbCwgY29uc3QgSG9sZGVyQ29udGFpbmVyJiBjb250YWluZXIsIFdyYXBwYWJs
ZSogd3JhcHBhYmxlKQogewogICAgIHJldHVybiB0b1Y4RmFzdChpbXBsLmdldCgpLCBjb250YWlu
ZXIsIHdyYXBwYWJsZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVjgvVjhUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEN1c3RvbU5hbWVkR2V0dGVyLmNwcAppbmRl
eCBiNzQ0MzFiMmJhMTUyMjdiYjhkYmQzMTZjYTI3OTM3MzlkNzQxOThkLi5lZTVlMzcyZWY0Yzc4
Y2U0ODZmODNkMGQ5M2Y4MDkwY2YwZDhmZjg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RDdXN0b21OYW1l
ZEdldHRlci5jcHAKQEAgLTkxLDcgKzkxLDcgQEAgc3RhdGljIGNvbnN0IFY4RE9NQ29uZmlndXJh
dGlvbjo6QmF0Y2hlZE1ldGhvZCBWOFRlc3RDdXN0b21OYW1lZEdldHRlck1ldGhvZHNbXQogICAg
IHsiYW5vdGhlckZ1bmN0aW9uIiwgVGVzdEN1c3RvbU5hbWVkR2V0dGVyVjhJbnRlcm5hbDo6YW5v
dGhlckZ1bmN0aW9uTWV0aG9kQ2FsbGJhY2t9LAogfTsKIAotc3RhdGljIHY4OjpQZXJzaXN0ZW50
PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBDb25maWd1cmVWOFRlc3RDdXN0b21OYW1lZEdldHRlclRl
bXBsYXRlKHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBkZXNjLCB2ODo6SXNv
bGF0ZSogaXNvbGF0ZSwgV3JhcHBlcldvcmxkVHlwZSBjdXJyZW50V29ybGRUeXBlKQorc3RhdGlj
IHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBDb25maWd1cmVWOFRlc3RDdXN0
b21OYW1lZEdldHRlclRlbXBsYXRlKHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRl
PiBkZXNjLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSwgV3JhcHBlcldvcmxkVHlwZSB3b3JsZFR5cGUp
CiB7CiAgICAgZGVzYy0+UmVhZE9ubHlQcm90b3R5cGUoKTsKIApAQCAtMTA3LDMxICsxMDcsMjgg
QEAgc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBDb25maWd1cmVW
OFRlc3RDdXN0b21OYW1lZEdldHRlclRlbXAKICAgICAKICAgICBkZXNjLT5JbnN0YW5jZVRlbXBs
YXRlKCktPlNldE5hbWVkUHJvcGVydHlIYW5kbGVyKFY4VGVzdEN1c3RvbU5hbWVkR2V0dGVyOjpu
YW1lZFByb3BlcnR5R2V0dGVyLCAwLCAwLCAwLCAwKTsKIAotICAgIGlmIChjdXJyZW50V29ybGRU
eXBlID09IE1haW5Xb3JsZCkKLSAgICAgICAgVjhET01Db25maWd1cmF0aW9uOjphZGRUb1RlbXBs
YXRlKGRlc2MsIDAsIDAsIDAsIDAsIGlzb2xhdGUsIGRlZmF1bHRTaWduYXR1cmUpOwotCiAgICAg
Ly8gQ3VzdG9tIHRvU3RyaW5nIHRlbXBsYXRlCiAgICAgZGVzYy0+U2V0KHY4OjpTdHJpbmc6Ok5l
d1N5bWJvbCgidG9TdHJpbmciKSwgVjhQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpLT50b1N0cmlu
Z1RlbXBsYXRlKCkpOwogICAgIHJldHVybiBkZXNjOwogfQogCi12ODo6UGVyc2lzdGVudDx2ODo6
RnVuY3Rpb25UZW1wbGF0ZT4gVjhUZXN0Q3VzdG9tTmFtZWRHZXR0ZXI6OkdldFRlbXBsYXRlKHY4
OjpJc29sYXRlKiBpc29sYXRlLCBXcmFwcGVyV29ybGRUeXBlIGN1cnJlbnRXb3JsZFR5cGUpCit2
ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhUZXN0Q3VzdG9tTmFtZWRHZXR0
ZXI6OkdldFRlbXBsYXRlKHY4OjpJc29sYXRlKiBpc29sYXRlLCBXcmFwcGVyV29ybGRUeXBlIHdv
cmxkVHlwZSkKIHsKICAgICBWOFBlcklzb2xhdGVEYXRhKiBkYXRhID0gVjhQZXJJc29sYXRlRGF0
YTo6ZnJvbShpc29sYXRlKTsKLSAgICBWOFBlcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRl
cmF0b3IgcmVzdWx0ID0gZGF0YS0+dGVtcGxhdGVNYXAoY3VycmVudFdvcmxkVHlwZSkuZmluZCgm
aW5mbyk7Ci0gICAgaWYgKHJlc3VsdCAhPSBkYXRhLT50ZW1wbGF0ZU1hcChjdXJyZW50V29ybGRU
eXBlKS5lbmQoKSkKKyAgICBWOFBlcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3Ig
cmVzdWx0ID0gZGF0YS0+dGVtcGxhdGVNYXAod29ybGRUeXBlKS5maW5kKCZpbmZvKTsKKyAgICBp
ZiAocmVzdWx0ICE9IGRhdGEtPnRlbXBsYXRlTWFwKHdvcmxkVHlwZSkuZW5kKCkpCiAgICAgICAg
IHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3Bl
OwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9Ci0gICAg
ICAgIENvbmZpZ3VyZVY4VGVzdEN1c3RvbU5hbWVkR2V0dGVyVGVtcGxhdGUoZGF0YS0+cmF3VGVt
cGxhdGUoJmluZm8sIGN1cnJlbnRXb3JsZFR5cGUpLCBpc29sYXRlLCBjdXJyZW50V29ybGRUeXBl
KTsKLSAgICBkYXRhLT50ZW1wbGF0ZU1hcChjdXJyZW50V29ybGRUeXBlKS5hZGQoJmluZm8sIHRl
bXBsKTsKKyAgICAgICAgQ29uZmlndXJlVjhUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJUZW1wbGF0ZShk
YXRhLT5yYXdUZW1wbGF0ZSgmaW5mbywgd29ybGRUeXBlKSwgaXNvbGF0ZSwgd29ybGRUeXBlKTsK
KyAgICBkYXRhLT50ZW1wbGF0ZU1hcCh3b3JsZFR5cGUpLmFkZCgmaW5mbywgdGVtcGwpOwogICAg
IHJldHVybiB0ZW1wbDsKIH0KIAotYm9vbCBWOFRlc3RDdXN0b21OYW1lZEdldHRlcjo6SGFzSW5z
dGFuY2Uodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSwg
V3JhcHBlcldvcmxkVHlwZSBjdXJyZW50V29ybGRUeXBlKQorYm9vbCBWOFRlc3RDdXN0b21OYW1l
ZEdldHRlcjo6SGFzSW5zdGFuY2Uodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlLCB2ODo6SXNv
bGF0ZSogaXNvbGF0ZSwgV3JhcHBlcldvcmxkVHlwZSB3b3JsZFR5cGUpCiB7Ci0gICAgcmV0dXJu
IFY4UGVySXNvbGF0ZURhdGE6OmZyb20oaXNvbGF0ZSktPmhhc0luc3RhbmNlKCZpbmZvLCB2YWx1
ZSwgY3VycmVudFdvcmxkVHlwZSk7CisgICAgcmV0dXJuIFY4UGVySXNvbGF0ZURhdGE6OmZyb20o
aXNvbGF0ZSktPmhhc0luc3RhbmNlKCZpbmZvLCB2YWx1ZSwgd29ybGRUeXBlKTsKIH0KIAogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0
Q3VzdG9tTmFtZWRHZXR0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9WOC9WOFRlc3RDdXN0b21OYW1lZEdldHRlci5oCmluZGV4IDUzNjczZjc2OWU3MTM2MDBmMjI1
NDI1ZmY4YWI1M2U2ZjNiMzYyYzMuLjJhNTFjZGVkOWFlNzk2Yzc1Yzk5MjFlMDhkYWE4NDAyYzRh
MjNhM2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9W
OC9WOFRlc3RDdXN0b21OYW1lZEdldHRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RDdXN0b21OYW1lZEdldHRlci5oCkBAIC02OSwxNyArNjks
NiBAQCBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoVGVzdEN1c3RvbU5hbWVkR2V0
dGVyKiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYgogICAgIHJldHVybiB3cmFwKGltcGwsIGNyZWF0
aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiB9CiAKLWlubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
dG9WOEZvck1haW5Xb3JsZChUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIqIGltcGwsIHY4OjpIYW5kbGU8
djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKLXsKLSAg
ICBBU1NFUlQod29ybGRUeXBlKGlzb2xhdGUpID09IE1haW5Xb3JsZCk7Ci0gICAgaWYgKFVOTElL
RUxZKCFpbXBsKSkKLSAgICAgICAgcmV0dXJuIHY4TnVsbFdpdGhDaGVjayhpc29sYXRlKTsKLSAg
ICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd3JhcHBlciA9IERPTURhdGFTdG9yZTo6Z2V0V3JhcHBl
ckZvck1haW5Xb3JsZChpbXBsKTsKLSAgICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgpKQotICAgICAg
ICByZXR1cm4gd3JhcHBlcjsKLSAgICByZXR1cm4gd3JhcChpbXBsLCBjcmVhdGlvbkNvbnRleHQs
IGlzb2xhdGUpOwotfQotCiB0ZW1wbGF0ZTxjbGFzcyBIb2xkZXJDb250YWluZXIsIGNsYXNzIFdy
YXBwYWJsZT4KIGlubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOEZhc3QoVGVzdEN1c3Rv
bU5hbWVkR2V0dGVyKiBpbXBsLCBjb25zdCBIb2xkZXJDb250YWluZXImIGNvbnRhaW5lciwgV3Jh
cHBhYmxlKiB3cmFwcGFibGUpCiB7CkBAIC05MiwyNSArODEsNiBAQCBpbmxpbmUgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IHRvVjhGYXN0KFRlc3RDdXN0b21OYW1lZEdldHRlciogaW1wbCwgY29uc3Qg
SG9sZGVyQwogfQogCiB0ZW1wbGF0ZTxjbGFzcyBIb2xkZXJDb250YWluZXIsIGNsYXNzIFdyYXBw
YWJsZT4KLWlubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOEZhc3RGb3JNYWluV29ybGQo
VGVzdEN1c3RvbU5hbWVkR2V0dGVyKiBpbXBsLCBjb25zdCBIb2xkZXJDb250YWluZXImIGNvbnRh
aW5lciwgV3JhcHBhYmxlKiB3cmFwcGFibGUpCi17Ci0gICAgQVNTRVJUKHdvcmxkVHlwZShjb250
YWluZXIuR2V0SXNvbGF0ZSgpKSA9PSBNYWluV29ybGQpOwotICAgIGlmIChVTkxJS0VMWSghaW1w
bCkpCi0gICAgICAgIHJldHVybiB2OE51bGwoY29udGFpbmVyLkdldElzb2xhdGUoKSk7Ci0gICAg
djg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gRE9NRGF0YVN0b3JlOjpnZXRXcmFwcGVy
Rm9yTWFpbldvcmxkKGltcGwpOwotICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkpCi0gICAgICAg
IHJldHVybiB3cmFwcGVyOwotICAgIHJldHVybiB3cmFwKGltcGwsIGNvbnRhaW5lci5Ib2xkZXIo
KSwgY29udGFpbmVyLkdldElzb2xhdGUoKSk7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIEhvbGRlckNv
bnRhaW5lciwgY2xhc3MgV3JhcHBhYmxlPgotaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0
b1Y4RmFzdEZvck1haW5Xb3JsZChQYXNzUmVmUHRyPCBUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIgPiBp
bXBsLCBjb25zdCBIb2xkZXJDb250YWluZXImIGNvbnRhaW5lciwgV3JhcHBhYmxlKiB3cmFwcGFi
bGUpCi17Ci0gICAgcmV0dXJuIHRvVjhGYXN0Rm9yTWFpbldvcmxkKGltcGwuZ2V0KCksIGNvbnRh
aW5lciwgd3JhcHBhYmxlKTsKLX0KLQotCi10ZW1wbGF0ZTxjbGFzcyBIb2xkZXJDb250YWluZXIs
IGNsYXNzIFdyYXBwYWJsZT4KIGlubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOEZhc3Qo
UGFzc1JlZlB0cjwgVGVzdEN1c3RvbU5hbWVkR2V0dGVyID4gaW1wbCwgY29uc3QgSG9sZGVyQ29u
dGFpbmVyJiBjb250YWluZXIsIFdyYXBwYWJsZSogd3JhcHBhYmxlKQogewogICAgIHJldHVybiB0
b1Y4RmFzdChpbXBsLmdldCgpLCBjb250YWluZXIsIHdyYXBwYWJsZSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXZlbnRDb25zdHJ1
Y3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0
RXZlbnRDb25zdHJ1Y3Rvci5jcHAKaW5kZXggZDMwNTFhNDI1Zjk4MGY3NzIzMzRiMmRkYjM2N2Zi
NzA3MTRlOGE2Mi4uMmM2OGVlOTRiZjNhZjE0OGY1NTYwYWI1ZmM5YzA4MGI3NDdjOWZiZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2
ZW50Q29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9WOC9WOFRlc3RFdmVudENvbnN0cnVjdG9yLmNwcApAQCAtODEsMTcgKzgxLDYgQEAgc3Rh
dGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBhdHRyMUF0dHJHZXR0ZXJDYWxsYmFjayh2ODo6TG9j
YWw8djg6OlN0cmluZz4gbmFtZSwKICAgICByZXR1cm4gVGVzdEV2ZW50Q29uc3RydWN0b3JWOElu
dGVybmFsOjphdHRyMUF0dHJHZXR0ZXIobmFtZSwgaW5mbyk7CiB9CiAKLXN0YXRpYyB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gYXR0cjFBdHRyR2V0dGVyRm9yTWFpbldvcmxkKHY4OjpMb2NhbDx2ODo6
U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQotewotICAgIFRlc3RF
dmVudENvbnN0cnVjdG9yKiBpbXAgPSBWOFRlc3RFdmVudENvbnN0cnVjdG9yOjp0b05hdGl2ZShp
bmZvLkhvbGRlcigpKTsKLSAgICByZXR1cm4gdjhTdHJpbmcoaW1wLT5hdHRyMSgpLCBpbmZvLkdl
dElzb2xhdGUoKSwgUmV0dXJuVW5zYWZlSGFuZGxlKTsKLX0KLQotc3RhdGljIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiBhdHRyMUF0dHJHZXR0ZXJDYWxsYmFja0Zvck1haW5Xb3JsZCh2ODo6TG9jYWw8
djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKLXsKLSAgICBy
ZXR1cm4gVGVzdEV2ZW50Q29uc3RydWN0b3JWOEludGVybmFsOjphdHRyMUF0dHJHZXR0ZXJGb3JN
YWluV29ybGQobmFtZSwgaW5mbyk7Ci19Ci0KIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
YXR0cjJBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNj
ZXNzb3JJbmZvJiBpbmZvKQogewogICAgIFRlc3RFdmVudENvbnN0cnVjdG9yKiBpbXAgPSBWOFRl
c3RFdmVudENvbnN0cnVjdG9yOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKQEAgLTEwMywxNyAr
OTIsNiBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGF0dHIyQXR0ckdldHRlckNhbGxi
YWNrKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLAogICAgIHJldHVybiBUZXN0RXZlbnRDb25z
dHJ1Y3RvclY4SW50ZXJuYWw6OmF0dHIyQXR0ckdldHRlcihuYW1lLCBpbmZvKTsKIH0KIAotc3Rh
dGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBhdHRyMkF0dHJHZXR0ZXJGb3JNYWluV29ybGQodjg6
OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCi17
Ci0gICAgVGVzdEV2ZW50Q29uc3RydWN0b3IqIGltcCA9IFY4VGVzdEV2ZW50Q29uc3RydWN0b3I6
OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwotICAgIHJldHVybiB2OFN0cmluZyhpbXAtPmF0dHIy
KCksIGluZm8uR2V0SXNvbGF0ZSgpLCBSZXR1cm5VbnNhZmVIYW5kbGUpOwotfQotCi1zdGF0aWMg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IGF0dHIyQXR0ckdldHRlckNhbGxiYWNrRm9yTWFpbldvcmxk
KHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZv
KQotewotICAgIHJldHVybiBUZXN0RXZlbnRDb25zdHJ1Y3RvclY4SW50ZXJuYWw6OmF0dHIyQXR0
ckdldHRlckZvck1haW5Xb3JsZChuYW1lLCBpbmZvKTsKLX0KLQogc3RhdGljIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiBjb25zdHJ1Y3Rvcihjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogewogICAg
IGlmIChhcmdzLkxlbmd0aCgpIDwgMSkKQEAgLTE0MiwxMyArMTIwLDYgQEAgc3RhdGljIGNvbnN0
IFY4RE9NQ29uZmlndXJhdGlvbjo6QmF0Y2hlZEF0dHJpYnV0ZSBWOFRlc3RFdmVudENvbnN0cnVj
dG9yQXR0cnNbXQogICAgIHsiYXR0cjIiLCBUZXN0RXZlbnRDb25zdHJ1Y3RvclY4SW50ZXJuYWw6
OmF0dHIyQXR0ckdldHRlckNhbGxiYWNrLCAwLCAwIC8qIG5vIGRhdGEgKi8sIHN0YXRpY19jYXN0
PHY4OjpBY2Nlc3NDb250cm9sPih2ODo6REVGQVVMVCksIHN0YXRpY19jYXN0PHY4OjpQcm9wZXJ0
eUF0dHJpYnV0ZT4odjg6Ok5vbmUpLCAwIC8qIG9uIGluc3RhbmNlICovfSwKIH07CiAKLXN0YXRp
YyBjb25zdCBWOERPTUNvbmZpZ3VyYXRpb246OkJhdGNoZWRBdHRyaWJ1dGUgVjhUZXN0RXZlbnRD
b25zdHJ1Y3RvckF0dHJzRm9yTWFpbldvcmxkW10gPSB7Ci0gICAgLy8gQXR0cmlidXRlICdhdHRy
MScgKFR5cGU6ICdyZWFkb25seSBhdHRyaWJ1dGUnIEV4dEF0dHI6ICcnKQotICAgIHsiYXR0cjEi
LCBUZXN0RXZlbnRDb25zdHJ1Y3RvclY4SW50ZXJuYWw6OmF0dHIxQXR0ckdldHRlckNhbGxiYWNr
Rm9yTWFpbldvcmxkLCAwLCAwIC8qIG5vIGRhdGEgKi8sIHN0YXRpY19jYXN0PHY4OjpBY2Nlc3ND
b250cm9sPih2ODo6REVGQVVMVCksIHN0YXRpY19jYXN0PHY4OjpQcm9wZXJ0eUF0dHJpYnV0ZT4o
djg6Ok5vbmUpLCAwIC8qIG9uIGluc3RhbmNlICovfSwKLSAgICAvLyBBdHRyaWJ1dGUgJ2F0dHIy
JyAoVHlwZTogJ3JlYWRvbmx5IGF0dHJpYnV0ZScgRXh0QXR0cjogJ0luaXRpYWxpemVkQnlFdmVu
dENvbnN0cnVjdG9yJykKLSAgICB7ImF0dHIyIiwgVGVzdEV2ZW50Q29uc3RydWN0b3JWOEludGVy
bmFsOjphdHRyMkF0dHJHZXR0ZXJDYWxsYmFja0Zvck1haW5Xb3JsZCwgMCwgMCAvKiBubyBkYXRh
ICovLCBzdGF0aWNfY2FzdDx2ODo6QWNjZXNzQ29udHJvbD4odjg6OkRFRkFVTFQpLCBzdGF0aWNf
Y2FzdDx2ODo6UHJvcGVydHlBdHRyaWJ1dGU+KHY4OjpOb25lKSwgMCAvKiBvbiBpbnN0YW5jZSAq
L30sCi19OwotCiBib29sIGZpbGxUZXN0RXZlbnRDb25zdHJ1Y3RvckluaXQoVGVzdEV2ZW50Q29u
c3RydWN0b3JJbml0JiBldmVudEluaXQsIGNvbnN0IERpY3Rpb25hcnkmIG9wdGlvbnMpCiB7CiAg
ICAgb3B0aW9ucy5nZXQoImF0dHIyIiwgZXZlbnRJbml0LmF0dHIyKTsKQEAgLTE2Niw3ICsxMzcs
NyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6Y29uc3Ry
dWN0b3JDYWxsYmFjayhjb25zdCB2ODo6QXJndQogICAgIHJldHVybiBUZXN0RXZlbnRDb25zdHJ1
Y3RvclY4SW50ZXJuYWw6OmNvbnN0cnVjdG9yKGFyZ3MpOwogfQogCi1zdGF0aWMgdjg6OlBlcnNp
c3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IENvbmZpZ3VyZVY4VGVzdEV2ZW50Q29uc3RydWN0
b3JUZW1wbGF0ZSh2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gZGVzYywgdjg6
Oklzb2xhdGUqIGlzb2xhdGUsIFdyYXBwZXJXb3JsZFR5cGUgY3VycmVudFdvcmxkVHlwZSkKK3N0
YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gQ29uZmlndXJlVjhUZXN0
RXZlbnRDb25zdHJ1Y3RvclRlbXBsYXRlKHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBs
YXRlPiBkZXNjLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSwgV3JhcHBlcldvcmxkVHlwZSB3b3JsZFR5
cGUpCiB7CiAgICAgZGVzYy0+UmVhZE9ubHlQcm90b3R5cGUoKTsKIApAQCAtMTc4LDMxICsxNDks
MjggQEAgc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBDb25maWd1
cmVWOFRlc3RFdmVudENvbnN0cnVjdG9yVGVtcGwKICAgICBkZXNjLT5TZXRDYWxsSGFuZGxlcihW
OFRlc3RFdmVudENvbnN0cnVjdG9yOjpjb25zdHJ1Y3RvckNhbGxiYWNrKTsKICAgICAKIAotICAg
IGlmIChjdXJyZW50V29ybGRUeXBlID09IE1haW5Xb3JsZCkKLSAgICAgICAgVjhET01Db25maWd1
cmF0aW9uOjphZGRUb1RlbXBsYXRlKGRlc2MsIFY4VGVzdEV2ZW50Q29uc3RydWN0b3JBdHRyc0Zv
ck1haW5Xb3JsZCwgV1RGX0FSUkFZX0xFTkdUSChWOFRlc3RFdmVudENvbnN0cnVjdG9yQXR0cnNG
b3JNYWluV29ybGQpLCAwLCAwLCBpc29sYXRlLCBkZWZhdWx0U2lnbmF0dXJlKTsKLQogICAgIC8v
IEN1c3RvbSB0b1N0cmluZyB0ZW1wbGF0ZQogICAgIGRlc2MtPlNldCh2ODo6U3RyaW5nOjpOZXdT
eW1ib2woInRvU3RyaW5nIiksIFY4UGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKS0+dG9TdHJpbmdU
ZW1wbGF0ZSgpKTsKICAgICByZXR1cm4gZGVzYzsKIH0KIAotdjg6OlBlcnNpc3RlbnQ8djg6OkZ1
bmN0aW9uVGVtcGxhdGU+IFY4VGVzdEV2ZW50Q29uc3RydWN0b3I6OkdldFRlbXBsYXRlKHY4OjpJ
c29sYXRlKiBpc29sYXRlLCBXcmFwcGVyV29ybGRUeXBlIGN1cnJlbnRXb3JsZFR5cGUpCit2ODo6
UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6
R2V0VGVtcGxhdGUodjg6Oklzb2xhdGUqIGlzb2xhdGUsIFdyYXBwZXJXb3JsZFR5cGUgd29ybGRU
eXBlKQogewogICAgIFY4UGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOFBlcklzb2xhdGVEYXRhOjpm
cm9tKGlzb2xhdGUpOwotICAgIFY4UGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVyYXRv
ciByZXN1bHQgPSBkYXRhLT50ZW1wbGF0ZU1hcChjdXJyZW50V29ybGRUeXBlKS5maW5kKCZpbmZv
KTsKLSAgICBpZiAocmVzdWx0ICE9IGRhdGEtPnRlbXBsYXRlTWFwKGN1cnJlbnRXb3JsZFR5cGUp
LmVuZCgpKQorICAgIFY4UGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVyYXRvciByZXN1
bHQgPSBkYXRhLT50ZW1wbGF0ZU1hcCh3b3JsZFR5cGUpLmZpbmQoJmluZm8pOworICAgIGlmIChy
ZXN1bHQgIT0gZGF0YS0+dGVtcGxhdGVNYXAod29ybGRUeXBlKS5lbmQoKSkKICAgICAgICAgcmV0
dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAg
ICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0KLSAgICAgICAg
Q29uZmlndXJlVjhUZXN0RXZlbnRDb25zdHJ1Y3RvclRlbXBsYXRlKGRhdGEtPnJhd1RlbXBsYXRl
KCZpbmZvLCBjdXJyZW50V29ybGRUeXBlKSwgaXNvbGF0ZSwgY3VycmVudFdvcmxkVHlwZSk7Ci0g
ICAgZGF0YS0+dGVtcGxhdGVNYXAoY3VycmVudFdvcmxkVHlwZSkuYWRkKCZpbmZvLCB0ZW1wbCk7
CisgICAgICAgIENvbmZpZ3VyZVY4VGVzdEV2ZW50Q29uc3RydWN0b3JUZW1wbGF0ZShkYXRhLT5y
YXdUZW1wbGF0ZSgmaW5mbywgd29ybGRUeXBlKSwgaXNvbGF0ZSwgd29ybGRUeXBlKTsKKyAgICBk
YXRhLT50ZW1wbGF0ZU1hcCh3b3JsZFR5cGUpLmFkZCgmaW5mbywgdGVtcGwpOwogICAgIHJldHVy
biB0ZW1wbDsKIH0KIAotYm9vbCBWOFRlc3RFdmVudENvbnN0cnVjdG9yOjpIYXNJbnN0YW5jZSh2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUsIHY4OjpJc29sYXRlKiBpc29sYXRlLCBXcmFwcGVy
V29ybGRUeXBlIGN1cnJlbnRXb3JsZFR5cGUpCitib29sIFY4VGVzdEV2ZW50Q29uc3RydWN0b3I6
Okhhc0luc3RhbmNlKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSwgdjg6Oklzb2xhdGUqIGlz
b2xhdGUsIFdyYXBwZXJXb3JsZFR5cGUgd29ybGRUeXBlKQogewotICAgIHJldHVybiBWOFBlcklz
b2xhdGVEYXRhOjpmcm9tKGlzb2xhdGUpLT5oYXNJbnN0YW5jZSgmaW5mbywgdmFsdWUsIGN1cnJl
bnRXb3JsZFR5cGUpOworICAgIHJldHVybiBWOFBlcklzb2xhdGVEYXRhOjpmcm9tKGlzb2xhdGUp
LT5oYXNJbnN0YW5jZSgmaW5mbywgdmFsdWUsIHdvcmxkVHlwZSk7CiB9CiAKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50Q29u
c3RydWN0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRl
c3RFdmVudENvbnN0cnVjdG9yLmgKaW5kZXggNDVkYzFkMTNjZDBhNGQyY2NiMjMxYzI0ZWE1ZDIw
ZGQ5MzMyYTY0Yi4uZWNkMTU5YmFjZDhjZTRjYTk5MWI1ZjUwNzUzZDJiMmUzNjRiZGEwOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2
ZW50Q29uc3RydWN0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvVjgvVjhUZXN0RXZlbnRDb25zdHJ1Y3Rvci5oCkBAIC03MCwxNyArNzAsNiBAQCBpbmxpbmUg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoVGVzdEV2ZW50Q29uc3RydWN0b3IqIGltcGwsIHY4
OjpIYW5kbGU8djg6Ok9iagogICAgIHJldHVybiB3cmFwKGltcGwsIGNyZWF0aW9uQ29udGV4dCwg
aXNvbGF0ZSk7CiB9CiAKLWlubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOEZvck1haW5X
b3JsZChUZXN0RXZlbnRDb25zdHJ1Y3RvciogaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBj
cmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQotewotICAgIEFTU0VSVCh3b3Js
ZFR5cGUoaXNvbGF0ZSkgPT0gTWFpbldvcmxkKTsKLSAgICBpZiAoVU5MSUtFTFkoIWltcGwpKQot
ICAgICAgICByZXR1cm4gdjhOdWxsV2l0aENoZWNrKGlzb2xhdGUpOwotICAgIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiB3cmFwcGVyID0gRE9NRGF0YVN0b3JlOjpnZXRXcmFwcGVyRm9yTWFpbldvcmxk
KGltcGwpOwotICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiB3cmFw
cGVyOwotICAgIHJldHVybiB3cmFwKGltcGwsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7Ci19
Ci0KIHRlbXBsYXRlPGNsYXNzIEhvbGRlckNvbnRhaW5lciwgY2xhc3MgV3JhcHBhYmxlPgogaW5s
aW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4RmFzdChUZXN0RXZlbnRDb25zdHJ1Y3Rvciog
aW1wbCwgY29uc3QgSG9sZGVyQ29udGFpbmVyJiBjb250YWluZXIsIFdyYXBwYWJsZSogd3JhcHBh
YmxlKQogewpAQCAtOTMsMjUgKzgyLDYgQEAgaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0
b1Y4RmFzdChUZXN0RXZlbnRDb25zdHJ1Y3RvciogaW1wbCwgY29uc3QgSG9sZGVyQ28KIH0KIAog
dGVtcGxhdGU8Y2xhc3MgSG9sZGVyQ29udGFpbmVyLCBjbGFzcyBXcmFwcGFibGU+Ci1pbmxpbmUg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjhGYXN0Rm9yTWFpbldvcmxkKFRlc3RFdmVudENvbnN0
cnVjdG9yKiBpbXBsLCBjb25zdCBIb2xkZXJDb250YWluZXImIGNvbnRhaW5lciwgV3JhcHBhYmxl
KiB3cmFwcGFibGUpCi17Ci0gICAgQVNTRVJUKHdvcmxkVHlwZShjb250YWluZXIuR2V0SXNvbGF0
ZSgpKSA9PSBNYWluV29ybGQpOwotICAgIGlmIChVTkxJS0VMWSghaW1wbCkpCi0gICAgICAgIHJl
dHVybiB2OE51bGwoY29udGFpbmVyLkdldElzb2xhdGUoKSk7Ci0gICAgdjg6OkhhbmRsZTx2ODo6
T2JqZWN0PiB3cmFwcGVyID0gRE9NRGF0YVN0b3JlOjpnZXRXcmFwcGVyRm9yTWFpbldvcmxkKGlt
cGwpOwotICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiB3cmFwcGVy
OwotICAgIHJldHVybiB3cmFwKGltcGwsIGNvbnRhaW5lci5Ib2xkZXIoKSwgY29udGFpbmVyLkdl
dElzb2xhdGUoKSk7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIEhvbGRlckNvbnRhaW5lciwgY2xhc3Mg
V3JhcHBhYmxlPgotaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4RmFzdEZvck1haW5X
b3JsZChQYXNzUmVmUHRyPCBUZXN0RXZlbnRDb25zdHJ1Y3RvciA+IGltcGwsIGNvbnN0IEhvbGRl
ckNvbnRhaW5lciYgY29udGFpbmVyLCBXcmFwcGFibGUqIHdyYXBwYWJsZSkKLXsKLSAgICByZXR1
cm4gdG9WOEZhc3RGb3JNYWluV29ybGQoaW1wbC5nZXQoKSwgY29udGFpbmVyLCB3cmFwcGFibGUp
OwotfQotCi0KLXRlbXBsYXRlPGNsYXNzIEhvbGRlckNvbnRhaW5lciwgY2xhc3MgV3JhcHBhYmxl
PgogaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4RmFzdChQYXNzUmVmUHRyPCBUZXN0
RXZlbnRDb25zdHJ1Y3RvciA+IGltcGwsIGNvbnN0IEhvbGRlckNvbnRhaW5lciYgY29udGFpbmVy
LCBXcmFwcGFibGUqIHdyYXBwYWJsZSkKIHsKICAgICByZXR1cm4gdG9WOEZhc3QoaW1wbC5nZXQo
KSwgY29udGFpbmVyLCB3cmFwcGFibGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50VGFyZ2V0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVudFRhcmdldC5jcHAKaW5kZXgg
ZjJhMDdjODgxNWU1OTAxMDIzNmUyYzIxY2MxYzMwNGRkY2I3ODZjNi4uODI1MzcwMDFjYzk3NWI3
MWYzYmIwOWVmMWJjN2VhMzUwMDcyMmJkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50VGFyZ2V0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXZlbnRUYXJnZXQuY3BwCkBA
IC0xNTksNyArMTU5LDcgQEAgc3RhdGljIGNvbnN0IFY4RE9NQ29uZmlndXJhdGlvbjo6QmF0Y2hl
ZE1ldGhvZCBWOFRlc3RFdmVudFRhcmdldE1ldGhvZHNbXSA9IHsKICAgICB7InJlbW92ZUV2ZW50
TGlzdGVuZXIiLCBUZXN0RXZlbnRUYXJnZXRWOEludGVybmFsOjpyZW1vdmVFdmVudExpc3RlbmVy
TWV0aG9kQ2FsbGJhY2t9LAogfTsKIAotc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlv
blRlbXBsYXRlPiBDb25maWd1cmVWOFRlc3RFdmVudFRhcmdldFRlbXBsYXRlKHY4OjpQZXJzaXN0
ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBkZXNjLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSwgV3Jh
cHBlcldvcmxkVHlwZSBjdXJyZW50V29ybGRUeXBlKQorc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4
OjpGdW5jdGlvblRlbXBsYXRlPiBDb25maWd1cmVWOFRlc3RFdmVudFRhcmdldFRlbXBsYXRlKHY4
OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBkZXNjLCB2ODo6SXNvbGF0ZSogaXNv
bGF0ZSwgV3JhcHBlcldvcmxkVHlwZSB3b3JsZFR5cGUpCiB7CiAgICAgZGVzYy0+UmVhZE9ubHlQ
cm90b3R5cGUoKTsKIApAQCAtMTc3LDEyICsxNzcsOSBAQCBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8
djg6OkZ1bmN0aW9uVGVtcGxhdGU+IENvbmZpZ3VyZVY4VGVzdEV2ZW50VGFyZ2V0VGVtcGxhdGUo
dgogICAgIGRlc2MtPkluc3RhbmNlVGVtcGxhdGUoKS0+U2V0TmFtZWRQcm9wZXJ0eUhhbmRsZXIo
VjhUZXN0RXZlbnRUYXJnZXQ6Om5hbWVkUHJvcGVydHlHZXR0ZXIsIDAsIDAsIDAsIDApOwogICAg
IGRlc2MtPkluc3RhbmNlVGVtcGxhdGUoKS0+TWFya0FzVW5kZXRlY3RhYmxlKCk7CiAKLSAgICBp
ZiAoY3VycmVudFdvcmxkVHlwZSA9PSBNYWluV29ybGQpCi0gICAgICAgIFY4RE9NQ29uZmlndXJh
dGlvbjo6YWRkVG9UZW1wbGF0ZShkZXNjLCAwLCAwLCAwLCAwLCBpc29sYXRlLCBkZWZhdWx0U2ln
bmF0dXJlKTsKLQogICAgIC8vIEN1c3RvbSBTaWduYXR1cmUgJ2Rpc3BhdGNoRXZlbnQnCiAgICAg
Y29uc3QgaW50IGRpc3BhdGNoRXZlbnRBcmdjID0gMTsKLSAgICB2ODo6SGFuZGxlPHY4OjpGdW5j
dGlvblRlbXBsYXRlPiBkaXNwYXRjaEV2ZW50QXJndltkaXNwYXRjaEV2ZW50QXJnY10gPSB7IFY4
UGVySXNvbGF0ZURhdGE6OmZyb20oaXNvbGF0ZSktPnJhd1RlbXBsYXRlKCZWOEV2ZW50OjppbmZv
LCBjdXJyZW50V29ybGRUeXBlKSB9OworICAgIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uVGVtcGxh
dGU+IGRpc3BhdGNoRXZlbnRBcmd2W2Rpc3BhdGNoRXZlbnRBcmdjXSA9IHsgVjhQZXJJc29sYXRl
RGF0YTo6ZnJvbShpc29sYXRlKS0+cmF3VGVtcGxhdGUoJlY4RXZlbnQ6OmluZm8sIHdvcmxkVHlw
ZSkgfTsKICAgICB2ODo6SGFuZGxlPHY4OjpTaWduYXR1cmU+IGRpc3BhdGNoRXZlbnRTaWduYXR1
cmUgPSB2ODo6U2lnbmF0dXJlOjpOZXcoZGVzYywgZGlzcGF0Y2hFdmVudEFyZ2MsIGRpc3BhdGNo
RXZlbnRBcmd2KTsKICAgICBwcm90by0+U2V0KHY4OjpTdHJpbmc6Ok5ld1N5bWJvbCgiZGlzcGF0
Y2hFdmVudCIpLCB2ODo6RnVuY3Rpb25UZW1wbGF0ZTo6TmV3KFRlc3RFdmVudFRhcmdldFY4SW50
ZXJuYWw6OmRpc3BhdGNoRXZlbnRNZXRob2RDYWxsYmFjaywgdjhVbmRlZmluZWQoKSwgZGlzcGF0
Y2hFdmVudFNpZ25hdHVyZSkpOwogCkBAIC0xOTEsMjMgKzE4OCwyMyBAQCBzdGF0aWMgdjg6OlBl
cnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IENvbmZpZ3VyZVY4VGVzdEV2ZW50VGFyZ2V0
VGVtcGxhdGUodgogICAgIHJldHVybiBkZXNjOwogfQogCi12ODo6UGVyc2lzdGVudDx2ODo6RnVu
Y3Rpb25UZW1wbGF0ZT4gVjhUZXN0RXZlbnRUYXJnZXQ6OkdldFRlbXBsYXRlKHY4OjpJc29sYXRl
KiBpc29sYXRlLCBXcmFwcGVyV29ybGRUeXBlIGN1cnJlbnRXb3JsZFR5cGUpCit2ODo6UGVyc2lz
dGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhUZXN0RXZlbnRUYXJnZXQ6OkdldFRlbXBsYXRl
KHY4OjpJc29sYXRlKiBpc29sYXRlLCBXcmFwcGVyV29ybGRUeXBlIHdvcmxkVHlwZSkKIHsKICAg
ICBWOFBlcklzb2xhdGVEYXRhKiBkYXRhID0gVjhQZXJJc29sYXRlRGF0YTo6ZnJvbShpc29sYXRl
KTsKLSAgICBWOFBlcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0g
ZGF0YS0+dGVtcGxhdGVNYXAoY3VycmVudFdvcmxkVHlwZSkuZmluZCgmaW5mbyk7Ci0gICAgaWYg
KHJlc3VsdCAhPSBkYXRhLT50ZW1wbGF0ZU1hcChjdXJyZW50V29ybGRUeXBlKS5lbmQoKSkKKyAg
ICBWOFBlcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+
dGVtcGxhdGVNYXAod29ybGRUeXBlKS5maW5kKCZpbmZvKTsKKyAgICBpZiAocmVzdWx0ICE9IGRh
dGEtPnRlbXBsYXRlTWFwKHdvcmxkVHlwZSkuZW5kKCkpCiAgICAgICAgIHJldHVybiByZXN1bHQt
PnZhbHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJz
aXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9Ci0gICAgICAgIENvbmZpZ3VyZVY4
VGVzdEV2ZW50VGFyZ2V0VGVtcGxhdGUoZGF0YS0+cmF3VGVtcGxhdGUoJmluZm8sIGN1cnJlbnRX
b3JsZFR5cGUpLCBpc29sYXRlLCBjdXJyZW50V29ybGRUeXBlKTsKLSAgICBkYXRhLT50ZW1wbGF0
ZU1hcChjdXJyZW50V29ybGRUeXBlKS5hZGQoJmluZm8sIHRlbXBsKTsKKyAgICAgICAgQ29uZmln
dXJlVjhUZXN0RXZlbnRUYXJnZXRUZW1wbGF0ZShkYXRhLT5yYXdUZW1wbGF0ZSgmaW5mbywgd29y
bGRUeXBlKSwgaXNvbGF0ZSwgd29ybGRUeXBlKTsKKyAgICBkYXRhLT50ZW1wbGF0ZU1hcCh3b3Js
ZFR5cGUpLmFkZCgmaW5mbywgdGVtcGwpOwogICAgIHJldHVybiB0ZW1wbDsKIH0KIAotYm9vbCBW
OFRlc3RFdmVudFRhcmdldDo6SGFzSW5zdGFuY2Uodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVl
LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSwgV3JhcHBlcldvcmxkVHlwZSBjdXJyZW50V29ybGRUeXBl
KQorYm9vbCBWOFRlc3RFdmVudFRhcmdldDo6SGFzSW5zdGFuY2Uodjg6OkhhbmRsZTx2ODo6VmFs
dWU+IHZhbHVlLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSwgV3JhcHBlcldvcmxkVHlwZSB3b3JsZFR5
cGUpCiB7Ci0gICAgcmV0dXJuIFY4UGVySXNvbGF0ZURhdGE6OmZyb20oaXNvbGF0ZSktPmhhc0lu
c3RhbmNlKCZpbmZvLCB2YWx1ZSwgY3VycmVudFdvcmxkVHlwZSk7CisgICAgcmV0dXJuIFY4UGVy
SXNvbGF0ZURhdGE6OmZyb20oaXNvbGF0ZSktPmhhc0luc3RhbmNlKCZpbmZvLCB2YWx1ZSwgd29y
bGRUeXBlKTsKIH0KIAogRXZlbnRUYXJnZXQqIFY4VGVzdEV2ZW50VGFyZ2V0Ojp0b0V2ZW50VGFy
Z2V0KHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gb2JqZWN0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50VGFyZ2V0LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXZlbnRUYXJnZXQuaApp
bmRleCBlODQwODJkMWRjYjk0OWJlYThjN2VkNjk5ZTRlYWVhZDRmOWFlMTk1Li4zZDM2NjJhMGI2
MzQyNDdkMTBmYTc2OGQ0ZmY1M2I3ZGU3NjFjNTRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXZlbnRUYXJnZXQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXZlbnRUYXJnZXQuaApA
QCAtNzIsMTcgKzcyLDYgQEAgaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KFRlc3RF
dmVudFRhcmdldCogaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PgogICAgIHJldHVybiB3cmFw
KGltcGwsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiB9CiAKLWlubGluZSB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gdG9WOEZvck1haW5Xb3JsZChUZXN0RXZlbnRUYXJnZXQqIGltcGwsIHY4OjpI
YW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkK
LXsKLSAgICBBU1NFUlQod29ybGRUeXBlKGlzb2xhdGUpID09IE1haW5Xb3JsZCk7Ci0gICAgaWYg
KFVOTElLRUxZKCFpbXBsKSkKLSAgICAgICAgcmV0dXJuIHY4TnVsbFdpdGhDaGVjayhpc29sYXRl
KTsKLSAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd3JhcHBlciA9IERPTURhdGFTdG9yZTo6Z2V0
V3JhcHBlckZvck1haW5Xb3JsZChpbXBsKTsKLSAgICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgpKQot
ICAgICAgICByZXR1cm4gd3JhcHBlcjsKLSAgICByZXR1cm4gd3JhcChpbXBsLCBjcmVhdGlvbkNv
bnRleHQsIGlzb2xhdGUpOwotfQotCiB0ZW1wbGF0ZTxjbGFzcyBIb2xkZXJDb250YWluZXIsIGNs
YXNzIFdyYXBwYWJsZT4KIGlubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOEZhc3QoVGVz
dEV2ZW50VGFyZ2V0KiBpbXBsLCBjb25zdCBIb2xkZXJDb250YWluZXImIGNvbnRhaW5lciwgV3Jh
cHBhYmxlKiB3cmFwcGFibGUpCiB7CkBAIC05NSwyNSArODQsNiBAQCBpbmxpbmUgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IHRvVjhGYXN0KFRlc3RFdmVudFRhcmdldCogaW1wbCwgY29uc3QgSG9sZGVy
Q29udGFpbgogfQogCiB0ZW1wbGF0ZTxjbGFzcyBIb2xkZXJDb250YWluZXIsIGNsYXNzIFdyYXBw
YWJsZT4KLWlubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOEZhc3RGb3JNYWluV29ybGQo
VGVzdEV2ZW50VGFyZ2V0KiBpbXBsLCBjb25zdCBIb2xkZXJDb250YWluZXImIGNvbnRhaW5lciwg
V3JhcHBhYmxlKiB3cmFwcGFibGUpCi17Ci0gICAgQVNTRVJUKHdvcmxkVHlwZShjb250YWluZXIu
R2V0SXNvbGF0ZSgpKSA9PSBNYWluV29ybGQpOwotICAgIGlmIChVTkxJS0VMWSghaW1wbCkpCi0g
ICAgICAgIHJldHVybiB2OE51bGwoY29udGFpbmVyLkdldElzb2xhdGUoKSk7Ci0gICAgdjg6Okhh
bmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gRE9NRGF0YVN0b3JlOjpnZXRXcmFwcGVyRm9yTWFp
bldvcmxkKGltcGwpOwotICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkpCi0gICAgICAgIHJldHVy
biB3cmFwcGVyOwotICAgIHJldHVybiB3cmFwKGltcGwsIGNvbnRhaW5lci5Ib2xkZXIoKSwgY29u
dGFpbmVyLkdldElzb2xhdGUoKSk7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIEhvbGRlckNvbnRhaW5l
ciwgY2xhc3MgV3JhcHBhYmxlPgotaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4RmFz
dEZvck1haW5Xb3JsZChQYXNzUmVmUHRyPCBUZXN0RXZlbnRUYXJnZXQgPiBpbXBsLCBjb25zdCBI
b2xkZXJDb250YWluZXImIGNvbnRhaW5lciwgV3JhcHBhYmxlKiB3cmFwcGFibGUpCi17Ci0gICAg
cmV0dXJuIHRvVjhGYXN0Rm9yTWFpbldvcmxkKGltcGwuZ2V0KCksIGNvbnRhaW5lciwgd3JhcHBh
YmxlKTsKLX0KLQotCi10ZW1wbGF0ZTxjbGFzcyBIb2xkZXJDb250YWluZXIsIGNsYXNzIFdyYXBw
YWJsZT4KIGlubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOEZhc3QoUGFzc1JlZlB0cjwg
VGVzdEV2ZW50VGFyZ2V0ID4gaW1wbCwgY29uc3QgSG9sZGVyQ29udGFpbmVyJiBjb250YWluZXIs
IFdyYXBwYWJsZSogd3JhcHBhYmxlKQogewogICAgIHJldHVybiB0b1Y4RmFzdChpbXBsLmdldCgp
LCBjb250YWluZXIsIHdyYXBwYWJsZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXhjZXB0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFeGNlcHRpb24uY3BwCmluZGV4IDUzMDgw
Y2Y3ZmIxYjY3ZjhlYzRiYjUxMmY1OTE5MjJlYjdkMGM2YzcuLjQ3Y2YxZmU4MmI2Y2VmNTcyZDc5
MTVkZWUzMzY5YTNkNWM0YzViZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFeGNlcHRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFeGNlcHRpb24uY3BwCkBAIC04MCwxNyAr
ODAsNiBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG5hbWVBdHRyR2V0dGVyQ2FsbGJh
Y2sodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsCiAgICAgcmV0dXJuIFRlc3RFeGNlcHRpb25W
OEludGVybmFsOjpuYW1lQXR0ckdldHRlcihuYW1lLCBpbmZvKTsKIH0KIAotc3RhdGljIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiBuYW1lQXR0ckdldHRlckZvck1haW5Xb3JsZCh2ODo6TG9jYWw8djg6
OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKLXsKLSAgICBUZXN0
RXhjZXB0aW9uKiBpbXAgPSBWOFRlc3RFeGNlcHRpb246OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkp
OwotICAgIHJldHVybiB2OFN0cmluZyhpbXAtPm5hbWUoKSwgaW5mby5HZXRJc29sYXRlKCksIFJl
dHVyblVuc2FmZUhhbmRsZSk7Ci19Ci0KLXN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbmFt
ZUF0dHJHZXR0ZXJDYWxsYmFja0Zvck1haW5Xb3JsZCh2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFt
ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKLXsKLSAgICByZXR1cm4gVGVzdEV4Y2Vw
dGlvblY4SW50ZXJuYWw6Om5hbWVBdHRyR2V0dGVyRm9yTWFpbldvcmxkKG5hbWUsIGluZm8pOwot
fQotCiB9IC8vIG5hbWVzcGFjZSBUZXN0RXhjZXB0aW9uVjhJbnRlcm5hbAogCiBzdGF0aWMgY29u
c3QgVjhET01Db25maWd1cmF0aW9uOjpCYXRjaGVkQXR0cmlidXRlIFY4VGVzdEV4Y2VwdGlvbkF0
dHJzW10gPSB7CkBAIC05OCwxMiArODcsNyBAQCBzdGF0aWMgY29uc3QgVjhET01Db25maWd1cmF0
aW9uOjpCYXRjaGVkQXR0cmlidXRlIFY4VGVzdEV4Y2VwdGlvbkF0dHJzW10gPSB7CiAgICAgeyJu
YW1lIiwgVGVzdEV4Y2VwdGlvblY4SW50ZXJuYWw6Om5hbWVBdHRyR2V0dGVyQ2FsbGJhY2ssIDAs
IDAgLyogbm8gZGF0YSAqLywgc3RhdGljX2Nhc3Q8djg6OkFjY2Vzc0NvbnRyb2w+KHY4OjpERUZB
VUxUKSwgc3RhdGljX2Nhc3Q8djg6OlByb3BlcnR5QXR0cmlidXRlPih2ODo6Tm9uZSksIDAgLyog
b24gaW5zdGFuY2UgKi99LAogfTsKIAotc3RhdGljIGNvbnN0IFY4RE9NQ29uZmlndXJhdGlvbjo6
QmF0Y2hlZEF0dHJpYnV0ZSBWOFRlc3RFeGNlcHRpb25BdHRyc0Zvck1haW5Xb3JsZFtdID0gewot
ICAgIC8vIEF0dHJpYnV0ZSAnbmFtZScgKFR5cGU6ICdyZWFkb25seSBhdHRyaWJ1dGUnIEV4dEF0
dHI6ICcnKQotICAgIHsibmFtZSIsIFRlc3RFeGNlcHRpb25WOEludGVybmFsOjpuYW1lQXR0ckdl
dHRlckNhbGxiYWNrRm9yTWFpbldvcmxkLCAwLCAwIC8qIG5vIGRhdGEgKi8sIHN0YXRpY19jYXN0
PHY4OjpBY2Nlc3NDb250cm9sPih2ODo6REVGQVVMVCksIHN0YXRpY19jYXN0PHY4OjpQcm9wZXJ0
eUF0dHJpYnV0ZT4odjg6Ok5vbmUpLCAwIC8qIG9uIGluc3RhbmNlICovfSwKLX07Ci0KLXN0YXRp
YyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gQ29uZmlndXJlVjhUZXN0RXhj
ZXB0aW9uVGVtcGxhdGUodjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IGRlc2Ms
IHY4OjpJc29sYXRlKiBpc29sYXRlLCBXcmFwcGVyV29ybGRUeXBlIGN1cnJlbnRXb3JsZFR5cGUp
CitzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IENvbmZpZ3VyZVY4
VGVzdEV4Y2VwdGlvblRlbXBsYXRlKHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRl
PiBkZXNjLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSwgV3JhcHBlcldvcmxkVHlwZSB3b3JsZFR5cGUp
CiB7CiAgICAgZGVzYy0+UmVhZE9ubHlQcm90b3R5cGUoKTsKIApAQCAtMTE0LDMxICs5OCwyOCBA
QCBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IENvbmZpZ3VyZVY4
VGVzdEV4Y2VwdGlvblRlbXBsYXRlKHY4OgogICAgIFVOVVNFRF9QQVJBTShkZWZhdWx0U2lnbmF0
dXJlKTsgLy8gSW4gc29tZSBjYXNlcywgaXQgd2lsbCBub3QgYmUgdXNlZC4KICAgICAKIAotICAg
IGlmIChjdXJyZW50V29ybGRUeXBlID09IE1haW5Xb3JsZCkKLSAgICAgICAgVjhET01Db25maWd1
cmF0aW9uOjphZGRUb1RlbXBsYXRlKGRlc2MsIFY4VGVzdEV4Y2VwdGlvbkF0dHJzRm9yTWFpbldv
cmxkLCBXVEZfQVJSQVlfTEVOR1RIKFY4VGVzdEV4Y2VwdGlvbkF0dHJzRm9yTWFpbldvcmxkKSwg
MCwgMCwgaXNvbGF0ZSwgZGVmYXVsdFNpZ25hdHVyZSk7Ci0KICAgICAvLyBDdXN0b20gdG9TdHJp
bmcgdGVtcGxhdGUKICAgICBkZXNjLT5TZXQodjg6OlN0cmluZzo6TmV3U3ltYm9sKCJ0b1N0cmlu
ZyIpLCBWOFBlcklzb2xhdGVEYXRhOjpjdXJyZW50KCktPnRvU3RyaW5nVGVtcGxhdGUoKSk7CiAg
ICAgcmV0dXJuIGRlc2M7CiB9CiAKLXY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRl
PiBWOFRlc3RFeGNlcHRpb246OkdldFRlbXBsYXRlKHY4OjpJc29sYXRlKiBpc29sYXRlLCBXcmFw
cGVyV29ybGRUeXBlIGN1cnJlbnRXb3JsZFR5cGUpCit2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rp
b25UZW1wbGF0ZT4gVjhUZXN0RXhjZXB0aW9uOjpHZXRUZW1wbGF0ZSh2ODo6SXNvbGF0ZSogaXNv
bGF0ZSwgV3JhcHBlcldvcmxkVHlwZSB3b3JsZFR5cGUpCiB7CiAgICAgVjhQZXJJc29sYXRlRGF0
YSogZGF0YSA9IFY4UGVySXNvbGF0ZURhdGE6OmZyb20oaXNvbGF0ZSk7Ci0gICAgVjhQZXJJc29s
YXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnRlbXBsYXRlTWFw
KGN1cnJlbnRXb3JsZFR5cGUpLmZpbmQoJmluZm8pOwotICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+
dGVtcGxhdGVNYXAoY3VycmVudFdvcmxkVHlwZSkuZW5kKCkpCisgICAgVjhQZXJJc29sYXRlRGF0
YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnRlbXBsYXRlTWFwKHdvcmxk
VHlwZSkuZmluZCgmaW5mbyk7CisgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT50ZW1wbGF0ZU1hcCh3
b3JsZFR5cGUpLmVuZCgpKQogICAgICAgICByZXR1cm4gcmVzdWx0LT52YWx1ZTsKIAogICAgIHY4
OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rp
b25UZW1wbGF0ZT4gdGVtcGwgPQotICAgICAgICBDb25maWd1cmVWOFRlc3RFeGNlcHRpb25UZW1w
bGF0ZShkYXRhLT5yYXdUZW1wbGF0ZSgmaW5mbywgY3VycmVudFdvcmxkVHlwZSksIGlzb2xhdGUs
IGN1cnJlbnRXb3JsZFR5cGUpOwotICAgIGRhdGEtPnRlbXBsYXRlTWFwKGN1cnJlbnRXb3JsZFR5
cGUpLmFkZCgmaW5mbywgdGVtcGwpOworICAgICAgICBDb25maWd1cmVWOFRlc3RFeGNlcHRpb25U
ZW1wbGF0ZShkYXRhLT5yYXdUZW1wbGF0ZSgmaW5mbywgd29ybGRUeXBlKSwgaXNvbGF0ZSwgd29y
bGRUeXBlKTsKKyAgICBkYXRhLT50ZW1wbGF0ZU1hcCh3b3JsZFR5cGUpLmFkZCgmaW5mbywgdGVt
cGwpOwogICAgIHJldHVybiB0ZW1wbDsKIH0KIAotYm9vbCBWOFRlc3RFeGNlcHRpb246Okhhc0lu
c3RhbmNlKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSwgdjg6Oklzb2xhdGUqIGlzb2xhdGUs
IFdyYXBwZXJXb3JsZFR5cGUgY3VycmVudFdvcmxkVHlwZSkKK2Jvb2wgVjhUZXN0RXhjZXB0aW9u
OjpIYXNJbnN0YW5jZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUsIHY4OjpJc29sYXRlKiBp
c29sYXRlLCBXcmFwcGVyV29ybGRUeXBlIHdvcmxkVHlwZSkKIHsKLSAgICByZXR1cm4gVjhQZXJJ
c29sYXRlRGF0YTo6ZnJvbShpc29sYXRlKS0+aGFzSW5zdGFuY2UoJmluZm8sIHZhbHVlLCBjdXJy
ZW50V29ybGRUeXBlKTsKKyAgICByZXR1cm4gVjhQZXJJc29sYXRlRGF0YTo6ZnJvbShpc29sYXRl
KS0+aGFzSW5zdGFuY2UoJmluZm8sIHZhbHVlLCB3b3JsZFR5cGUpOwogfQogCiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFeGNlcHRp
b24uaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFeGNl
cHRpb24uaAppbmRleCA5NjEyNDQzOTAxYjhhOTc1MmY0YTFjMDk0MmJhZWIwNDg3YTYwYzYzLi45
Y2Y4MzE5NTAyMGY2MGUwMjRiNjYwYjQ0ZDJiMGFlMzdiMWU0MDcwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXhjZXB0aW9uLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV4Y2VwdGlv
bi5oCkBAIC02OCwxNyArNjgsNiBAQCBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgo
VGVzdEV4Y2VwdGlvbiogaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcgogICAgIHJldHVy
biB3cmFwKGltcGwsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiB9CiAKLWlubGluZSB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOEZvck1haW5Xb3JsZChUZXN0RXhjZXB0aW9uKiBpbXBsLCB2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xh
dGUpCi17Ci0gICAgQVNTRVJUKHdvcmxkVHlwZShpc29sYXRlKSA9PSBNYWluV29ybGQpOwotICAg
IGlmIChVTkxJS0VMWSghaW1wbCkpCi0gICAgICAgIHJldHVybiB2OE51bGxXaXRoQ2hlY2soaXNv
bGF0ZSk7Ci0gICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdyYXBwZXIgPSBET01EYXRhU3RvcmU6
OmdldFdyYXBwZXJGb3JNYWluV29ybGQoaW1wbCk7Ci0gICAgaWYgKCF3cmFwcGVyLklzRW1wdHko
KSkKLSAgICAgICAgcmV0dXJuIHdyYXBwZXI7Ci0gICAgcmV0dXJuIHdyYXAoaW1wbCwgY3JlYXRp
b25Db250ZXh0LCBpc29sYXRlKTsKLX0KLQogdGVtcGxhdGU8Y2xhc3MgSG9sZGVyQ29udGFpbmVy
LCBjbGFzcyBXcmFwcGFibGU+CiBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjhGYXN0
KFRlc3RFeGNlcHRpb24qIGltcGwsIGNvbnN0IEhvbGRlckNvbnRhaW5lciYgY29udGFpbmVyLCBX
cmFwcGFibGUqIHdyYXBwYWJsZSkKIHsKQEAgLTkxLDI1ICs4MCw2IEBAIGlubGluZSB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gdG9WOEZhc3QoVGVzdEV4Y2VwdGlvbiogaW1wbCwgY29uc3QgSG9sZGVy
Q29udGFpbmVyCiB9CiAKIHRlbXBsYXRlPGNsYXNzIEhvbGRlckNvbnRhaW5lciwgY2xhc3MgV3Jh
cHBhYmxlPgotaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4RmFzdEZvck1haW5Xb3Js
ZChUZXN0RXhjZXB0aW9uKiBpbXBsLCBjb25zdCBIb2xkZXJDb250YWluZXImIGNvbnRhaW5lciwg
V3JhcHBhYmxlKiB3cmFwcGFibGUpCi17Ci0gICAgQVNTRVJUKHdvcmxkVHlwZShjb250YWluZXIu
R2V0SXNvbGF0ZSgpKSA9PSBNYWluV29ybGQpOwotICAgIGlmIChVTkxJS0VMWSghaW1wbCkpCi0g
ICAgICAgIHJldHVybiB2OE51bGwoY29udGFpbmVyLkdldElzb2xhdGUoKSk7Ci0gICAgdjg6Okhh
bmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gRE9NRGF0YVN0b3JlOjpnZXRXcmFwcGVyRm9yTWFp
bldvcmxkKGltcGwpOwotICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkpCi0gICAgICAgIHJldHVy
biB3cmFwcGVyOwotICAgIHJldHVybiB3cmFwKGltcGwsIGNvbnRhaW5lci5Ib2xkZXIoKSwgY29u
dGFpbmVyLkdldElzb2xhdGUoKSk7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIEhvbGRlckNvbnRhaW5l
ciwgY2xhc3MgV3JhcHBhYmxlPgotaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4RmFz
dEZvck1haW5Xb3JsZChQYXNzUmVmUHRyPCBUZXN0RXhjZXB0aW9uID4gaW1wbCwgY29uc3QgSG9s
ZGVyQ29udGFpbmVyJiBjb250YWluZXIsIFdyYXBwYWJsZSogd3JhcHBhYmxlKQotewotICAgIHJl
dHVybiB0b1Y4RmFzdEZvck1haW5Xb3JsZChpbXBsLmdldCgpLCBjb250YWluZXIsIHdyYXBwYWJs
ZSk7Ci19Ci0KLQotdGVtcGxhdGU8Y2xhc3MgSG9sZGVyQ29udGFpbmVyLCBjbGFzcyBXcmFwcGFi
bGU+CiBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjhGYXN0KFBhc3NSZWZQdHI8IFRl
c3RFeGNlcHRpb24gPiBpbXBsLCBjb25zdCBIb2xkZXJDb250YWluZXImIGNvbnRhaW5lciwgV3Jh
cHBhYmxlKiB3cmFwcGFibGUpCiB7CiAgICAgcmV0dXJuIHRvVjhGYXN0KGltcGwuZ2V0KCksIGNv
bnRhaW5lciwgd3JhcHBhYmxlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RJbnRlcmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEludGVyZmFjZS5jcHAKaW5kZXggZmU2MjNkMDAz
ODE5Y2NjZjhkMzM2ZGQ1N2IwMDUzYjkxNTA2YjhlOS4uZTBmOGNjYWI2ZTkxMzdiZGRlNjQ3YWRm
NTU2NTdlOGJmNWJjMGJkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Y4L1Y4VGVzdEludGVyZmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEludGVyZmFjZS5jcHAKQEAgLTk3LDI0ICs5Nyw2
IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gc3VwcGxlbWVudGFsU3RhdGljUmVhZE9u
bHlBdHRyQXR0ckdldHRlckNhbGxiYWNrKHY4CiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8
IEVOQUJMRShDb25kaXRpb24xMikKIAotc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBzdXBw
bGVtZW50YWxTdGF0aWNSZWFkT25seUF0dHJBdHRyR2V0dGVyRm9yTWFpbldvcmxkKHY4OjpMb2Nh
bDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQotewotICAg
IHJldHVybiB2OEludGVnZXIoVGVzdFN1cHBsZW1lbnRhbDo6c3VwcGxlbWVudGFsU3RhdGljUmVh
ZE9ubHlBdHRyKCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKLX0KLQotI2VuZGlmIC8vIEVOQUJMRShD
b25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKQotCi0jaWYgRU5BQkxFKENvbmRpdGlv
bjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCi0KLXN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gc3VwcGxlbWVudGFsU3RhdGljUmVhZE9ubHlBdHRyQXR0ckdldHRlckNhbGxiYWNrRm9yTWFp
bldvcmxkKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZv
JiBpbmZvKQotewotICAgIHJldHVybiBUZXN0SW50ZXJmYWNlVjhJbnRlcm5hbDo6c3VwcGxlbWVu
dGFsU3RhdGljUmVhZE9ubHlBdHRyQXR0ckdldHRlckZvck1haW5Xb3JsZChuYW1lLCBpbmZvKTsK
LX0KLQotI2VuZGlmIC8vIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEy
KQotCi0jaWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCi0KIHN0
YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gc3VwcGxlbWVudGFsU3RhdGljQXR0ckF0dHJHZXR0
ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGlu
Zm8pCiB7CiAgICAgcmV0dXJuIHY4U3RyaW5nKFRlc3RTdXBwbGVtZW50YWw6OnN1cHBsZW1lbnRh
bFN0YXRpY0F0dHIoKSwgaW5mby5HZXRJc29sYXRlKCksIFJldHVyblVuc2FmZUhhbmRsZSk7CkBA
IC0xMzMsMjQgKzExNSw2IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gc3VwcGxlbWVu
dGFsU3RhdGljQXR0ckF0dHJHZXR0ZXJDYWxsYmFjayh2ODo6TG9jYWw8CiAKICNpZiBFTkFCTEUo
Q29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikKIAotc3RhdGljIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiBzdXBwbGVtZW50YWxTdGF0aWNBdHRyQXR0ckdldHRlckZvck1haW5Xb3JsZCh2
ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykK
LXsKLSAgICByZXR1cm4gdjhTdHJpbmcoVGVzdFN1cHBsZW1lbnRhbDo6c3VwcGxlbWVudGFsU3Rh
dGljQXR0cigpLCBpbmZvLkdldElzb2xhdGUoKSwgUmV0dXJuVW5zYWZlSGFuZGxlKTsKLX0KLQot
I2VuZGlmIC8vIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKQotCi0j
aWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCi0KLXN0YXRpYyB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gc3VwcGxlbWVudGFsU3RhdGljQXR0ckF0dHJHZXR0ZXJDYWxs
YmFja0Zvck1haW5Xb3JsZCh2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFj
Y2Vzc29ySW5mbyYgaW5mbykKLXsKLSAgICByZXR1cm4gVGVzdEludGVyZmFjZVY4SW50ZXJuYWw6
OnN1cHBsZW1lbnRhbFN0YXRpY0F0dHJBdHRyR2V0dGVyRm9yTWFpbldvcmxkKG5hbWUsIGluZm8p
OwotfQotCi0jZW5kaWYgLy8gRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9u
MTIpCi0KLSNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikKLQog
c3RhdGljIHZvaWQgc3VwcGxlbWVudGFsU3RhdGljQXR0ckF0dHJTZXR0ZXIodjg6OkxvY2FsPHY4
OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNj
ZXNzb3JJbmZvJiBpbmZvKQogewogICAgIFY4VFJZQ0FUQ0hfRk9SX1Y4U1RSSU5HUkVTT1VSQ0Vf
Vk9JRChWOFN0cmluZ1Jlc291cmNlPD4sIHYsIHZhbHVlKTsKQEAgLTE3MSwyNiArMTM1LDYgQEAg
c3RhdGljIHZvaWQgc3VwcGxlbWVudGFsU3RhdGljQXR0ckF0dHJTZXR0ZXJDYWxsYmFjayh2ODo6
TG9jYWw8djg6OlN0cmluZz4gbmFtZSwKIAogI2lmIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5B
QkxFKENvbmRpdGlvbjEyKQogCi1zdGF0aWMgdm9pZCBzdXBwbGVtZW50YWxTdGF0aWNBdHRyQXR0
clNldHRlckZvck1haW5Xb3JsZCh2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2Fs
PHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCi17Ci0gICAg
VjhUUllDQVRDSF9GT1JfVjhTVFJJTkdSRVNPVVJDRV9WT0lEKFY4U3RyaW5nUmVzb3VyY2U8Piwg
diwgdmFsdWUpOwotICAgIFRlc3RTdXBwbGVtZW50YWw6OnNldFN1cHBsZW1lbnRhbFN0YXRpY0F0
dHIodik7Ci0gICAgcmV0dXJuOwotfQotCi0jZW5kaWYgLy8gRU5BQkxFKENvbmRpdGlvbjExKSB8
fCBFTkFCTEUoQ29uZGl0aW9uMTIpCi0KLSNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJM
RShDb25kaXRpb24xMikKLQotc3RhdGljIHZvaWQgc3VwcGxlbWVudGFsU3RhdGljQXR0ckF0dHJT
ZXR0ZXJDYWxsYmFja0Zvck1haW5Xb3JsZCh2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6
OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCi17
Ci0gICAgVGVzdEludGVyZmFjZVY4SW50ZXJuYWw6OnN1cHBsZW1lbnRhbFN0YXRpY0F0dHJBdHRy
U2V0dGVyRm9yTWFpbldvcmxkKG5hbWUsIHZhbHVlLCBpbmZvKTsKLX0KLQotI2VuZGlmIC8vIEVO
QUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKQotCi0jaWYgRU5BQkxFKENv
bmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCi0KIHN0YXRpYyB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gc3VwcGxlbWVudGFsU3RyMUF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+
IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCiB7CiAgICAgVGVzdEludGVyZmFj
ZSogaW1wID0gVjhUZXN0SW50ZXJmYWNlOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKQEAgLTIx
MCwyNSArMTU0LDYgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBzdXBwbGVtZW50YWxT
dHIxQXR0ckdldHRlckNhbGxiYWNrKHY4OjpMb2NhbDx2ODo6U3QKIAogI2lmIEVOQUJMRShDb25k
aXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKQogCi1zdGF0aWMgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IHN1cHBsZW1lbnRhbFN0cjFBdHRyR2V0dGVyRm9yTWFpbldvcmxkKHY4OjpMb2NhbDx2
ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQotewotICAgIFRl
c3RJbnRlcmZhY2UqIGltcCA9IFY4VGVzdEludGVyZmFjZTo6dG9OYXRpdmUoaW5mby5Ib2xkZXIo
KSk7Ci0gICAgcmV0dXJuIHY4U3RyaW5nKFRlc3RTdXBwbGVtZW50YWw6OnN1cHBsZW1lbnRhbFN0
cjEoaW1wKSwgaW5mby5HZXRJc29sYXRlKCksIFJldHVyblVuc2FmZUhhbmRsZSk7Ci19Ci0KLSNl
bmRpZiAvLyBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikKLQotI2lm
IEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKQotCi1zdGF0aWMgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IHN1cHBsZW1lbnRhbFN0cjFBdHRyR2V0dGVyQ2FsbGJhY2tGb3JN
YWluV29ybGQodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3Nvcklu
Zm8mIGluZm8pCi17Ci0gICAgcmV0dXJuIFRlc3RJbnRlcmZhY2VWOEludGVybmFsOjpzdXBwbGVt
ZW50YWxTdHIxQXR0ckdldHRlckZvck1haW5Xb3JsZChuYW1lLCBpbmZvKTsKLX0KLQotI2VuZGlm
IC8vIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKQotCi0jaWYgRU5B
QkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCi0KIHN0YXRpYyB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gc3VwcGxlbWVudGFsU3RyMkF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpT
dHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCiB7CiAgICAgVGVzdElu
dGVyZmFjZSogaW1wID0gVjhUZXN0SW50ZXJmYWNlOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsK
QEAgLTI0OCwyNSArMTczLDYgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBzdXBwbGVt
ZW50YWxTdHIyQXR0ckdldHRlckNhbGxiYWNrKHY4OjpMb2NhbDx2ODo6U3QKIAogI2lmIEVOQUJM
RShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKQogCi1zdGF0aWMgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IHN1cHBsZW1lbnRhbFN0cjJBdHRyR2V0dGVyRm9yTWFpbldvcmxkKHY4OjpM
b2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQotewot
ICAgIFRlc3RJbnRlcmZhY2UqIGltcCA9IFY4VGVzdEludGVyZmFjZTo6dG9OYXRpdmUoaW5mby5I
b2xkZXIoKSk7Ci0gICAgcmV0dXJuIHY4U3RyaW5nKFRlc3RTdXBwbGVtZW50YWw6OnN1cHBsZW1l
bnRhbFN0cjIoaW1wKSwgaW5mby5HZXRJc29sYXRlKCksIFJldHVyblVuc2FmZUhhbmRsZSk7Ci19
Ci0KLSNlbmRpZiAvLyBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikK
LQotI2lmIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKQotCi1zdGF0
aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHN1cHBsZW1lbnRhbFN0cjJBdHRyR2V0dGVyQ2FsbGJh
Y2tGb3JNYWluV29ybGQodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nl
c3NvckluZm8mIGluZm8pCi17Ci0gICAgcmV0dXJuIFRlc3RJbnRlcmZhY2VWOEludGVybmFsOjpz
dXBwbGVtZW50YWxTdHIyQXR0ckdldHRlckZvck1haW5Xb3JsZChuYW1lLCBpbmZvKTsKLX0KLQot
I2VuZGlmIC8vIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKQotCi0j
aWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCi0KIHN0YXRpYyB2
b2lkIHN1cHBsZW1lbnRhbFN0cjJBdHRyU2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1l
LCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5m
bykKIHsKICAgICBUZXN0SW50ZXJmYWNlKiBpbXAgPSBWOFRlc3RJbnRlcmZhY2U6OnRvTmF0aXZl
KGluZm8uSG9sZGVyKCkpOwpAQCAtMjg4LDI3ICsxOTQsNiBAQCBzdGF0aWMgdm9pZCBzdXBwbGVt
ZW50YWxTdHIyQXR0clNldHRlckNhbGxiYWNrKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2
ODo6TAogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCiAK
LXN0YXRpYyB2b2lkIHN1cHBsZW1lbnRhbFN0cjJBdHRyU2V0dGVyRm9yTWFpbldvcmxkKHY4OjpM
b2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qg
djg6OkFjY2Vzc29ySW5mbyYgaW5mbykKLXsKLSAgICBUZXN0SW50ZXJmYWNlKiBpbXAgPSBWOFRl
c3RJbnRlcmZhY2U6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwotICAgIFY4VFJZQ0FUQ0hfRk9S
X1Y4U1RSSU5HUkVTT1VSQ0VfVk9JRChWOFN0cmluZ1Jlc291cmNlPD4sIHYsIHZhbHVlKTsKLSAg
ICBUZXN0U3VwcGxlbWVudGFsOjpzZXRTdXBwbGVtZW50YWxTdHIyKGltcCwgdik7Ci0gICAgcmV0
dXJuOwotfQotCi0jZW5kaWYgLy8gRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0
aW9uMTIpCi0KLSNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikK
LQotc3RhdGljIHZvaWQgc3VwcGxlbWVudGFsU3RyMkF0dHJTZXR0ZXJDYWxsYmFja0Zvck1haW5X
b3JsZCh2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFs
dWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCi17Ci0gICAgVGVzdEludGVyZmFjZVY4
SW50ZXJuYWw6OnN1cHBsZW1lbnRhbFN0cjJBdHRyU2V0dGVyRm9yTWFpbldvcmxkKG5hbWUsIHZh
bHVlLCBpbmZvKTsKLX0KLQotI2VuZGlmIC8vIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxF
KENvbmRpdGlvbjEyKQotCi0jaWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0
aW9uMTIpCi0KIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gc3VwcGxlbWVudGFsU3RyM0F0
dHJHZXR0ZXJDYWxsYmFjayh2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFj
Y2Vzc29ySW5mbyYgaW5mbykKIHsKICAgICByZXR1cm4gVjhUZXN0SW50ZXJmYWNlOjpzdXBwbGVt
ZW50YWxTdHIzQXR0ckdldHRlckN1c3RvbShuYW1lLCBpbmZvKTsKQEAgLTMxOCwxNSArMjAzLDYg
QEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBzdXBwbGVtZW50YWxTdHIzQXR0ckdldHRl
ckNhbGxiYWNrKHY4OjpMb2NhbDx2ODo6U3QKIAogI2lmIEVOQUJMRShDb25kaXRpb24xMSkgfHwg
RU5BQkxFKENvbmRpdGlvbjEyKQogCi1zdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHN1cHBs
ZW1lbnRhbFN0cjNBdHRyR2V0dGVyQ2FsbGJhY2tGb3JNYWluV29ybGQodjg6OkxvY2FsPHY4OjpT
dHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCi17Ci0gICAgcmV0dXJu
IFY4VGVzdEludGVyZmFjZTo6c3VwcGxlbWVudGFsU3RyM0F0dHJHZXR0ZXJDdXN0b20obmFtZSwg
aW5mbyk7Ci19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25k
aXRpb24xMikKLQotI2lmIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEy
KQotCiBzdGF0aWMgdm9pZCBzdXBwbGVtZW50YWxTdHIzQXR0clNldHRlckNhbGxiYWNrKHY4OjpM
b2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qg
djg6OkFjY2Vzc29ySW5mbyYgaW5mbykKIHsKICAgICBWOFRlc3RJbnRlcmZhY2U6OnN1cHBsZW1l
bnRhbFN0cjNBdHRyU2V0dGVyQ3VzdG9tKG5hbWUsIHZhbHVlLCBpbmZvKTsKQEAgLTMzNiwxNSAr
MjEyLDYgQEAgc3RhdGljIHZvaWQgc3VwcGxlbWVudGFsU3RyM0F0dHJTZXR0ZXJDYWxsYmFjayh2
ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkwKIAogI2lmIEVOQUJMRShDb25kaXRpb24x
MSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKQogCi1zdGF0aWMgdm9pZCBzdXBwbGVtZW50YWxTdHIz
QXR0clNldHRlckNhbGxiYWNrRm9yTWFpbldvcmxkKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1l
LCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5m
bykKLXsKLSAgICBWOFRlc3RJbnRlcmZhY2U6OnN1cHBsZW1lbnRhbFN0cjNBdHRyU2V0dGVyQ3Vz
dG9tKG5hbWUsIHZhbHVlLCBpbmZvKTsKLX0KLQotI2VuZGlmIC8vIEVOQUJMRShDb25kaXRpb24x
MSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKQotCi0jaWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBF
TkFCTEUoQ29uZGl0aW9uMTIpCi0KIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gc3VwcGxl
bWVudGFsTm9kZUF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4
OjpBY2Nlc3NvckluZm8mIGluZm8pCiB7CiAgICAgVGVzdEludGVyZmFjZSogaW1wID0gVjhUZXN0
SW50ZXJmYWNlOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKQEAgLTM2NCwyNSArMjMxLDYgQEAg
c3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBzdXBwbGVtZW50YWxOb2RlQXR0ckdldHRlckNh
bGxiYWNrKHY4OjpMb2NhbDx2ODo6U3QKIAogI2lmIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5B
QkxFKENvbmRpdGlvbjEyKQogCi1zdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHN1cHBsZW1l
bnRhbE5vZGVBdHRyR2V0dGVyRm9yTWFpbldvcmxkKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1l
LCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQotewotICAgIFRlc3RJbnRlcmZhY2UqIGlt
cCA9IFY4VGVzdEludGVyZmFjZTo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAgcmV0dXJu
IHRvVjhGYXN0Rm9yTWFpbldvcmxkKFRlc3RTdXBwbGVtZW50YWw6OnN1cHBsZW1lbnRhbE5vZGUo
aW1wKSwgaW5mbywgaW1wKTsKLX0KLQotI2VuZGlmIC8vIEVOQUJMRShDb25kaXRpb24xMSkgfHwg
RU5BQkxFKENvbmRpdGlvbjEyKQotCi0jaWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUo
Q29uZGl0aW9uMTIpCi0KLXN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gc3VwcGxlbWVudGFs
Tm9kZUF0dHJHZXR0ZXJDYWxsYmFja0Zvck1haW5Xb3JsZCh2ODo6TG9jYWw8djg6OlN0cmluZz4g
bmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKLXsKLSAgICByZXR1cm4gVGVzdElu
dGVyZmFjZVY4SW50ZXJuYWw6OnN1cHBsZW1lbnRhbE5vZGVBdHRyR2V0dGVyRm9yTWFpbldvcmxk
KG5hbWUsIGluZm8pOwotfQotCi0jZW5kaWYgLy8gRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFC
TEUoQ29uZGl0aW9uMTIpCi0KLSNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25k
aXRpb24xMikKLQogc3RhdGljIHZvaWQgc3VwcGxlbWVudGFsTm9kZUF0dHJTZXR0ZXIodjg6Okxv
Y2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2
ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQogewogICAgIFRlc3RJbnRlcmZhY2UqIGltcCA9IFY4VGVz
dEludGVyZmFjZTo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7CkBAIC00MDQsMjcgKzI1Miw2IEBA
IHN0YXRpYyB2b2lkIHN1cHBsZW1lbnRhbE5vZGVBdHRyU2V0dGVyQ2FsbGJhY2sodjg6OkxvY2Fs
PHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVO
QUJMRShDb25kaXRpb24xMikKIAotc3RhdGljIHZvaWQgc3VwcGxlbWVudGFsTm9kZUF0dHJTZXR0
ZXJGb3JNYWluV29ybGQodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6
VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQotewotICAgIFRlc3RJ
bnRlcmZhY2UqIGltcCA9IFY4VGVzdEludGVyZmFjZTo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7
Ci0gICAgTm9kZSogdiA9IFY4Tm9kZTo6SGFzSW5zdGFuY2UodmFsdWUsIGluZm8uR2V0SXNvbGF0
ZSgpLCB3b3JsZFR5cGUoaW5mby5HZXRJc29sYXRlKCkpKSA/IFY4Tm9kZTo6dG9OYXRpdmUodjg6
OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdCh2YWx1ZSkpIDogMDsKLSAgICBUZXN0U3VwcGxlbWVu
dGFsOjpzZXRTdXBwbGVtZW50YWxOb2RlKGltcCwgV1RGOjpnZXRQdHIodikpOwotICAgIHJldHVy
bjsKLX0KLQotI2VuZGlmIC8vIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlv
bjEyKQotCi0jaWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCi0K
LXN0YXRpYyB2b2lkIHN1cHBsZW1lbnRhbE5vZGVBdHRyU2V0dGVyQ2FsbGJhY2tGb3JNYWluV29y
bGQodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVl
LCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQotewotICAgIFRlc3RJbnRlcmZhY2VWOElu
dGVybmFsOjpzdXBwbGVtZW50YWxOb2RlQXR0clNldHRlckZvck1haW5Xb3JsZChuYW1lLCB2YWx1
ZSwgaW5mbyk7Ci19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShD
b25kaXRpb24xMikKLQotI2lmIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlv
bjEyKQotCiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHN1cHBsZW1lbnRhbE1ldGhvZDFN
ZXRob2QoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKIHsKICAgICBUZXN0SW50ZXJmYWNlKiBp
bXAgPSBWOFRlc3RJbnRlcmZhY2U6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwpAQCAtNTU0LDMz
ICszODEsNiBAQCBzdGF0aWMgY29uc3QgVjhET01Db25maWd1cmF0aW9uOjpCYXRjaGVkQXR0cmli
dXRlIFY4VGVzdEludGVyZmFjZUF0dHJzW10gPSB7CiAjZW5kaWYgLy8gRU5BQkxFKENvbmRpdGlv
bjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCiB9OwogCi1zdGF0aWMgY29uc3QgVjhET01Db25m
aWd1cmF0aW9uOjpCYXRjaGVkQXR0cmlidXRlIFY4VGVzdEludGVyZmFjZUF0dHJzRm9yTWFpbldv
cmxkW10gPSB7Ci0jaWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIp
Ci0gICAgLy8gQXR0cmlidXRlICdzdXBwbGVtZW50YWxTdGF0aWNSZWFkT25seUF0dHInIChUeXBl
OiAncmVhZG9ubHkgYXR0cmlidXRlJyBFeHRBdHRyOiAnQ29uZGl0aW9uYWwgSW1wbGVtZW50ZWRC
eScpCi0gICAgeyJzdXBwbGVtZW50YWxTdGF0aWNSZWFkT25seUF0dHIiLCBUZXN0SW50ZXJmYWNl
VjhJbnRlcm5hbDo6c3VwcGxlbWVudGFsU3RhdGljUmVhZE9ubHlBdHRyQXR0ckdldHRlckNhbGxi
YWNrRm9yTWFpbldvcmxkLCAwLCAwIC8qIG5vIGRhdGEgKi8sIHN0YXRpY19jYXN0PHY4OjpBY2Nl
c3NDb250cm9sPih2ODo6REVGQVVMVCksIHN0YXRpY19jYXN0PHY4OjpQcm9wZXJ0eUF0dHJpYnV0
ZT4odjg6Ok5vbmUpLCAwIC8qIG9uIGluc3RhbmNlICovfSwKLSNlbmRpZiAvLyBFTkFCTEUoQ29u
ZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikKLSNpZiBFTkFCTEUoQ29uZGl0aW9uMTEp
IHx8IEVOQUJMRShDb25kaXRpb24xMikKLSAgICAvLyBBdHRyaWJ1dGUgJ3N1cHBsZW1lbnRhbFN0
YXRpY0F0dHInIChUeXBlOiAnYXR0cmlidXRlJyBFeHRBdHRyOiAnQ29uZGl0aW9uYWwgSW1wbGVt
ZW50ZWRCeScpCi0gICAgeyJzdXBwbGVtZW50YWxTdGF0aWNBdHRyIiwgVGVzdEludGVyZmFjZVY4
SW50ZXJuYWw6OnN1cHBsZW1lbnRhbFN0YXRpY0F0dHJBdHRyR2V0dGVyQ2FsbGJhY2tGb3JNYWlu
V29ybGQsIFRlc3RJbnRlcmZhY2VWOEludGVybmFsOjpzdXBwbGVtZW50YWxTdGF0aWNBdHRyQXR0
clNldHRlckNhbGxiYWNrRm9yTWFpbldvcmxkLCAwIC8qIG5vIGRhdGEgKi8sIHN0YXRpY19jYXN0
PHY4OjpBY2Nlc3NDb250cm9sPih2ODo6REVGQVVMVCksIHN0YXRpY19jYXN0PHY4OjpQcm9wZXJ0
eUF0dHJpYnV0ZT4odjg6Ok5vbmUpLCAwIC8qIG9uIGluc3RhbmNlICovfSwKLSNlbmRpZiAvLyBF
TkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikKLSNpZiBFTkFCTEUoQ29u
ZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikKLSAgICAvLyBBdHRyaWJ1dGUgJ3N1cHBs
ZW1lbnRhbFN0cjEnIChUeXBlOiAncmVhZG9ubHkgYXR0cmlidXRlJyBFeHRBdHRyOiAnQ29uZGl0
aW9uYWwgSW1wbGVtZW50ZWRCeScpCi0gICAgeyJzdXBwbGVtZW50YWxTdHIxIiwgVGVzdEludGVy
ZmFjZVY4SW50ZXJuYWw6OnN1cHBsZW1lbnRhbFN0cjFBdHRyR2V0dGVyQ2FsbGJhY2tGb3JNYWlu
V29ybGQsIDAsIDAgLyogbm8gZGF0YSAqLywgc3RhdGljX2Nhc3Q8djg6OkFjY2Vzc0NvbnRyb2w+
KHY4OjpERUZBVUxUKSwgc3RhdGljX2Nhc3Q8djg6OlByb3BlcnR5QXR0cmlidXRlPih2ODo6Tm9u
ZSksIDAgLyogb24gaW5zdGFuY2UgKi99LAotI2VuZGlmIC8vIEVOQUJMRShDb25kaXRpb24xMSkg
fHwgRU5BQkxFKENvbmRpdGlvbjEyKQotI2lmIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxF
KENvbmRpdGlvbjEyKQotICAgIC8vIEF0dHJpYnV0ZSAnc3VwcGxlbWVudGFsU3RyMicgKFR5cGU6
ICdhdHRyaWJ1dGUnIEV4dEF0dHI6ICdDb25kaXRpb25hbCBJbXBsZW1lbnRlZEJ5JykKLSAgICB7
InN1cHBsZW1lbnRhbFN0cjIiLCBUZXN0SW50ZXJmYWNlVjhJbnRlcm5hbDo6c3VwcGxlbWVudGFs
U3RyMkF0dHJHZXR0ZXJDYWxsYmFja0Zvck1haW5Xb3JsZCwgVGVzdEludGVyZmFjZVY4SW50ZXJu
YWw6OnN1cHBsZW1lbnRhbFN0cjJBdHRyU2V0dGVyQ2FsbGJhY2tGb3JNYWluV29ybGQsIDAgLyog
bm8gZGF0YSAqLywgc3RhdGljX2Nhc3Q8djg6OkFjY2Vzc0NvbnRyb2w+KHY4OjpERUZBVUxUKSwg
c3RhdGljX2Nhc3Q8djg6OlByb3BlcnR5QXR0cmlidXRlPih2ODo6Tm9uZSksIDAgLyogb24gaW5z
dGFuY2UgKi99LAotI2VuZGlmIC8vIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRp
dGlvbjEyKQotI2lmIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKQot
ICAgIC8vIEF0dHJpYnV0ZSAnc3VwcGxlbWVudGFsU3RyMycgKFR5cGU6ICdhdHRyaWJ1dGUnIEV4
dEF0dHI6ICdDdXN0b21TZXR0ZXIgQ3VzdG9tR2V0dGVyIENvbmRpdGlvbmFsIEltcGxlbWVudGVk
QnknKQotICAgIHsic3VwcGxlbWVudGFsU3RyMyIsIFRlc3RJbnRlcmZhY2VWOEludGVybmFsOjpz
dXBwbGVtZW50YWxTdHIzQXR0ckdldHRlckNhbGxiYWNrRm9yTWFpbldvcmxkLCBUZXN0SW50ZXJm
YWNlVjhJbnRlcm5hbDo6c3VwcGxlbWVudGFsU3RyM0F0dHJTZXR0ZXJDYWxsYmFja0Zvck1haW5X
b3JsZCwgMCAvKiBubyBkYXRhICovLCBzdGF0aWNfY2FzdDx2ODo6QWNjZXNzQ29udHJvbD4odjg6
OkRFRkFVTFQpLCBzdGF0aWNfY2FzdDx2ODo6UHJvcGVydHlBdHRyaWJ1dGU+KHY4OjpOb25lKSwg
MCAvKiBvbiBpbnN0YW5jZSAqL30sCi0jZW5kaWYgLy8gRU5BQkxFKENvbmRpdGlvbjExKSB8fCBF
TkFCTEUoQ29uZGl0aW9uMTIpCi0jaWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29u
ZGl0aW9uMTIpCi0gICAgLy8gQXR0cmlidXRlICdzdXBwbGVtZW50YWxOb2RlJyAoVHlwZTogJ2F0
dHJpYnV0ZScgRXh0QXR0cjogJ0NvbmRpdGlvbmFsIEltcGxlbWVudGVkQnknKQotICAgIHsic3Vw
cGxlbWVudGFsTm9kZSIsIFRlc3RJbnRlcmZhY2VWOEludGVybmFsOjpzdXBwbGVtZW50YWxOb2Rl
QXR0ckdldHRlckNhbGxiYWNrRm9yTWFpbldvcmxkLCBUZXN0SW50ZXJmYWNlVjhJbnRlcm5hbDo6
c3VwcGxlbWVudGFsTm9kZUF0dHJTZXR0ZXJDYWxsYmFja0Zvck1haW5Xb3JsZCwgMCAvKiBubyBk
YXRhICovLCBzdGF0aWNfY2FzdDx2ODo6QWNjZXNzQ29udHJvbD4odjg6OkRFRkFVTFQpLCBzdGF0
aWNfY2FzdDx2ODo6UHJvcGVydHlBdHRyaWJ1dGU+KHY4OjpOb25lKSwgMCAvKiBvbiBpbnN0YW5j
ZSAqL30sCi0jZW5kaWYgLy8gRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9u
MTIpCi19OwotCiBzdGF0aWMgY29uc3QgVjhET01Db25maWd1cmF0aW9uOjpCYXRjaGVkTWV0aG9k
IFY4VGVzdEludGVyZmFjZU1ldGhvZHNbXSA9IHsKICNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8
IEVOQUJMRShDb25kaXRpb24xMikKICAgICB7InN1cHBsZW1lbnRhbE1ldGhvZDEiLCBUZXN0SW50
ZXJmYWNlVjhJbnRlcm5hbDo6c3VwcGxlbWVudGFsTWV0aG9kMU1ldGhvZENhbGxiYWNrfSwKQEAg
LTYxOCw3ICs0MTgsNyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhUZXN0SW50ZXJmYWNlOjpj
b25zdHJ1Y3RvckNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmCiAgICAgcmV0dXJuIFRlc3RJ
bnRlcmZhY2VWOEludGVybmFsOjpjb25zdHJ1Y3RvcihhcmdzKTsKIH0KIAotc3RhdGljIHY4OjpQ
ZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBDb25maWd1cmVWOFRlc3RJbnRlcmZhY2VU
ZW1wbGF0ZSh2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gZGVzYywgdjg6Oklz
b2xhdGUqIGlzb2xhdGUsIFdyYXBwZXJXb3JsZFR5cGUgY3VycmVudFdvcmxkVHlwZSkKK3N0YXRp
YyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gQ29uZmlndXJlVjhUZXN0SW50
ZXJmYWNlVGVtcGxhdGUodjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IGRlc2Ms
IHY4OjpJc29sYXRlKiBpc29sYXRlLCBXcmFwcGVyV29ybGRUeXBlIHdvcmxkVHlwZSkKIHsKICAg
ICBkZXNjLT5SZWFkT25seVByb3RvdHlwZSgpOwogCkBAIC02MzYsMTIgKzQzNiw5IEBAIHN0YXRp
YyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gQ29uZmlndXJlVjhUZXN0SW50
ZXJmYWNlVGVtcGxhdGUodjg6CiAgICAgVU5VU0VEX1BBUkFNKHByb3RvKTsgLy8gSW4gc29tZSBj
YXNlcywgaXQgd2lsbCBub3QgYmUgdXNlZC4KICAgICAKIAotICAgIGlmIChjdXJyZW50V29ybGRU
eXBlID09IE1haW5Xb3JsZCkKLSAgICAgICAgVjhET01Db25maWd1cmF0aW9uOjphZGRUb1RlbXBs
YXRlKGRlc2MsIFY4VGVzdEludGVyZmFjZUF0dHJzRm9yTWFpbldvcmxkLCBXVEZfQVJSQVlfTEVO
R1RIKFY4VGVzdEludGVyZmFjZUF0dHJzRm9yTWFpbldvcmxkKSwgMCwgMCwgaXNvbGF0ZSwgZGVm
YXVsdFNpZ25hdHVyZSk7Ci0KICAgICAvLyBDdXN0b20gU2lnbmF0dXJlICdzdXBwbGVtZW50YWxN
ZXRob2QyJwogICAgIGNvbnN0IGludCBzdXBwbGVtZW50YWxNZXRob2QyQXJnYyA9IDI7Ci0gICAg
djg6OkhhbmRsZTx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gc3VwcGxlbWVudGFsTWV0aG9kMkFyZ3Zb
c3VwcGxlbWVudGFsTWV0aG9kMkFyZ2NdID0geyB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvblRlbXBs
YXRlPigpLCBWOFBlcklzb2xhdGVEYXRhOjpmcm9tKGlzb2xhdGUpLT5yYXdUZW1wbGF0ZSgmVjhU
ZXN0T2JqOjppbmZvLCBjdXJyZW50V29ybGRUeXBlKSB9OworICAgIHY4OjpIYW5kbGU8djg6OkZ1
bmN0aW9uVGVtcGxhdGU+IHN1cHBsZW1lbnRhbE1ldGhvZDJBcmd2W3N1cHBsZW1lbnRhbE1ldGhv
ZDJBcmdjXSA9IHsgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4oKSwgVjhQZXJJc29s
YXRlRGF0YTo6ZnJvbShpc29sYXRlKS0+cmF3VGVtcGxhdGUoJlY4VGVzdE9iajo6aW5mbywgd29y
bGRUeXBlKSB9OwogICAgIHY4OjpIYW5kbGU8djg6OlNpZ25hdHVyZT4gc3VwcGxlbWVudGFsTWV0
aG9kMlNpZ25hdHVyZSA9IHY4OjpTaWduYXR1cmU6Ok5ldyhkZXNjLCBzdXBwbGVtZW50YWxNZXRo
b2QyQXJnYywgc3VwcGxlbWVudGFsTWV0aG9kMkFyZ3YpOwogI2lmIEVOQUJMRShDb25kaXRpb24x
MSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKQogICAgIHByb3RvLT5TZXQodjg6OlN0cmluZzo6TmV3
U3ltYm9sKCJzdXBwbGVtZW50YWxNZXRob2QyIiksIHY4OjpGdW5jdGlvblRlbXBsYXRlOjpOZXco
VGVzdEludGVyZmFjZVY4SW50ZXJuYWw6OnN1cHBsZW1lbnRhbE1ldGhvZDJNZXRob2RDYWxsYmFj
aywgdjhVbmRlZmluZWQoKSwgc3VwcGxlbWVudGFsTWV0aG9kMlNpZ25hdHVyZSkpOwpAQCAtNjU2
LDIzICs0NTMsMjMgQEAgc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRl
PiBDb25maWd1cmVWOFRlc3RJbnRlcmZhY2VUZW1wbGF0ZSh2ODoKICAgICByZXR1cm4gZGVzYzsK
IH0KIAotdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdEludGVyZmFj
ZTo6R2V0VGVtcGxhdGUodjg6Oklzb2xhdGUqIGlzb2xhdGUsIFdyYXBwZXJXb3JsZFR5cGUgY3Vy
cmVudFdvcmxkVHlwZSkKK3Y4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRl
c3RJbnRlcmZhY2U6OkdldFRlbXBsYXRlKHY4OjpJc29sYXRlKiBpc29sYXRlLCBXcmFwcGVyV29y
bGRUeXBlIHdvcmxkVHlwZSkKIHsKICAgICBWOFBlcklzb2xhdGVEYXRhKiBkYXRhID0gVjhQZXJJ
c29sYXRlRGF0YTo6ZnJvbShpc29sYXRlKTsKLSAgICBWOFBlcklzb2xhdGVEYXRhOjpUZW1wbGF0
ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+dGVtcGxhdGVNYXAoY3VycmVudFdvcmxkVHlw
ZSkuZmluZCgmaW5mbyk7Ci0gICAgaWYgKHJlc3VsdCAhPSBkYXRhLT50ZW1wbGF0ZU1hcChjdXJy
ZW50V29ybGRUeXBlKS5lbmQoKSkKKyAgICBWOFBlcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6
aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+dGVtcGxhdGVNYXAod29ybGRUeXBlKS5maW5kKCZpbmZv
KTsKKyAgICBpZiAocmVzdWx0ICE9IGRhdGEtPnRlbXBsYXRlTWFwKHdvcmxkVHlwZSkuZW5kKCkp
CiAgICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhh
bmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1w
bCA9Ci0gICAgICAgIENvbmZpZ3VyZVY4VGVzdEludGVyZmFjZVRlbXBsYXRlKGRhdGEtPnJhd1Rl
bXBsYXRlKCZpbmZvLCBjdXJyZW50V29ybGRUeXBlKSwgaXNvbGF0ZSwgY3VycmVudFdvcmxkVHlw
ZSk7Ci0gICAgZGF0YS0+dGVtcGxhdGVNYXAoY3VycmVudFdvcmxkVHlwZSkuYWRkKCZpbmZvLCB0
ZW1wbCk7CisgICAgICAgIENvbmZpZ3VyZVY4VGVzdEludGVyZmFjZVRlbXBsYXRlKGRhdGEtPnJh
d1RlbXBsYXRlKCZpbmZvLCB3b3JsZFR5cGUpLCBpc29sYXRlLCB3b3JsZFR5cGUpOworICAgIGRh
dGEtPnRlbXBsYXRlTWFwKHdvcmxkVHlwZSkuYWRkKCZpbmZvLCB0ZW1wbCk7CiAgICAgcmV0dXJu
IHRlbXBsOwogfQogCi1ib29sIFY4VGVzdEludGVyZmFjZTo6SGFzSW5zdGFuY2Uodjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IHZhbHVlLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSwgV3JhcHBlcldvcmxkVHlw
ZSBjdXJyZW50V29ybGRUeXBlKQorYm9vbCBWOFRlc3RJbnRlcmZhY2U6Okhhc0luc3RhbmNlKHY4
OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSwgdjg6Oklzb2xhdGUqIGlzb2xhdGUsIFdyYXBwZXJX
b3JsZFR5cGUgd29ybGRUeXBlKQogewotICAgIHJldHVybiBWOFBlcklzb2xhdGVEYXRhOjpmcm9t
KGlzb2xhdGUpLT5oYXNJbnN0YW5jZSgmaW5mbywgdmFsdWUsIGN1cnJlbnRXb3JsZFR5cGUpOwor
ICAgIHJldHVybiBWOFBlcklzb2xhdGVEYXRhOjpmcm9tKGlzb2xhdGUpLT5oYXNJbnN0YW5jZSgm
aW5mbywgdmFsdWUsIHdvcmxkVHlwZSk7CiB9CiAKIEFjdGl2ZURPTU9iamVjdCogVjhUZXN0SW50
ZXJmYWNlOjp0b0FjdGl2ZURPTU9iamVjdCh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG9iamVjdCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRl
c3RJbnRlcmZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9W
OFRlc3RJbnRlcmZhY2UuaAppbmRleCAwNWQ0MGJkODA2NWIwYzZiMzUyMmU0Y2RmOTRmNmQ5Njdi
YmY1Y2FlLi4wNjE5NjI4NmM2MTMzZmM2NDM1Y2MwOWZiNzJkOTc0NzY5YWI0YzliIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0SW50ZXJm
YWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVz
dEludGVyZmFjZS5oCkBAIC03MiwxNyArNzIsNiBAQCBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IHRvVjgoVGVzdEludGVyZmFjZSogaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcgog
ICAgIHJldHVybiB3cmFwKGltcGwsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiB9CiAKLWlu
bGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOEZvck1haW5Xb3JsZChUZXN0SW50ZXJmYWNl
KiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xh
dGUqIGlzb2xhdGUpCi17Ci0gICAgQVNTRVJUKHdvcmxkVHlwZShpc29sYXRlKSA9PSBNYWluV29y
bGQpOwotICAgIGlmIChVTkxJS0VMWSghaW1wbCkpCi0gICAgICAgIHJldHVybiB2OE51bGxXaXRo
Q2hlY2soaXNvbGF0ZSk7Ci0gICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdyYXBwZXIgPSBET01E
YXRhU3RvcmU6OmdldFdyYXBwZXJGb3JNYWluV29ybGQoaW1wbCk7Ci0gICAgaWYgKCF3cmFwcGVy
LklzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHdyYXBwZXI7Ci0gICAgcmV0dXJuIHdyYXAoaW1w
bCwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKLX0KLQogdGVtcGxhdGU8Y2xhc3MgSG9sZGVy
Q29udGFpbmVyLCBjbGFzcyBXcmFwcGFibGU+CiBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IHRvVjhGYXN0KFRlc3RJbnRlcmZhY2UqIGltcGwsIGNvbnN0IEhvbGRlckNvbnRhaW5lciYgY29u
dGFpbmVyLCBXcmFwcGFibGUqIHdyYXBwYWJsZSkKIHsKQEAgLTk1LDI1ICs4NCw2IEBAIGlubGlu
ZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOEZhc3QoVGVzdEludGVyZmFjZSogaW1wbCwgY29u
c3QgSG9sZGVyQ29udGFpbmVyCiB9CiAKIHRlbXBsYXRlPGNsYXNzIEhvbGRlckNvbnRhaW5lciwg
Y2xhc3MgV3JhcHBhYmxlPgotaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4RmFzdEZv
ck1haW5Xb3JsZChUZXN0SW50ZXJmYWNlKiBpbXBsLCBjb25zdCBIb2xkZXJDb250YWluZXImIGNv
bnRhaW5lciwgV3JhcHBhYmxlKiB3cmFwcGFibGUpCi17Ci0gICAgQVNTRVJUKHdvcmxkVHlwZShj
b250YWluZXIuR2V0SXNvbGF0ZSgpKSA9PSBNYWluV29ybGQpOwotICAgIGlmIChVTkxJS0VMWSgh
aW1wbCkpCi0gICAgICAgIHJldHVybiB2OE51bGwoY29udGFpbmVyLkdldElzb2xhdGUoKSk7Ci0g
ICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gRE9NRGF0YVN0b3JlOjpnZXRXcmFw
cGVyRm9yTWFpbldvcmxkKGltcGwpOwotICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybiB3cmFwcGVyOwotICAgIHJldHVybiB3cmFwKGltcGwsIGNvbnRhaW5lci5Ib2xk
ZXIoKSwgY29udGFpbmVyLkdldElzb2xhdGUoKSk7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIEhvbGRl
ckNvbnRhaW5lciwgY2xhc3MgV3JhcHBhYmxlPgotaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiB0b1Y4RmFzdEZvck1haW5Xb3JsZChQYXNzUmVmUHRyPCBUZXN0SW50ZXJmYWNlID4gaW1wbCwg
Y29uc3QgSG9sZGVyQ29udGFpbmVyJiBjb250YWluZXIsIFdyYXBwYWJsZSogd3JhcHBhYmxlKQot
ewotICAgIHJldHVybiB0b1Y4RmFzdEZvck1haW5Xb3JsZChpbXBsLmdldCgpLCBjb250YWluZXIs
IHdyYXBwYWJsZSk7Ci19Ci0KLQotdGVtcGxhdGU8Y2xhc3MgSG9sZGVyQ29udGFpbmVyLCBjbGFz
cyBXcmFwcGFibGU+CiBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjhGYXN0KFBhc3NS
ZWZQdHI8IFRlc3RJbnRlcmZhY2UgPiBpbXBsLCBjb25zdCBIb2xkZXJDb250YWluZXImIGNvbnRh
aW5lciwgV3JhcHBhYmxlKiB3cmFwcGFibGUpCiB7CiAgICAgcmV0dXJuIHRvVjhGYXN0KGltcGwu
Z2V0KCksIGNvbnRhaW5lciwgd3JhcHBhYmxlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RNZWRpYVF1
ZXJ5TGlzdExpc3RlbmVyLmNwcAppbmRleCA1OWE4N2VjMmNhMmM3MzU4N2Y4MWU5NDVjYThmNDUx
OTk1NWQzMWYwLi5kMTQ3YzdiZmU0YTM2NDcxYjk4NDZkNjViZTUyYTBjNGFhNTZlZDljIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TWVk
aWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Y4L1Y4VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwCkBAIC05Miw3ICs5
Miw3IEBAIHN0YXRpYyBjb25zdCBWOERPTUNvbmZpZ3VyYXRpb246OkJhdGNoZWRNZXRob2QgVjhU
ZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lck1ldGhvCiAgICAgeyJtZXRob2QiLCBUZXN0TWVkaWFR
dWVyeUxpc3RMaXN0ZW5lclY4SW50ZXJuYWw6Om1ldGhvZE1ldGhvZENhbGxiYWNrfSwKIH07CiAK
LXN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gQ29uZmlndXJlVjhU
ZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclRlbXBsYXRlKHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5j
dGlvblRlbXBsYXRlPiBkZXNjLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSwgV3JhcHBlcldvcmxkVHlw
ZSBjdXJyZW50V29ybGRUeXBlKQorc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRl
bXBsYXRlPiBDb25maWd1cmVWOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyVGVtcGxhdGUodjg6
OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IGRlc2MsIHY4OjpJc29sYXRlKiBpc29s
YXRlLCBXcmFwcGVyV29ybGRUeXBlIHdvcmxkVHlwZSkKIHsKICAgICBkZXNjLT5SZWFkT25seVBy
b3RvdHlwZSgpOwogCkBAIC0xMDcsMzEgKzEwNywyOCBAQCBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8
djg6OkZ1bmN0aW9uVGVtcGxhdGU+IENvbmZpZ3VyZVY4VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVu
ZQogICAgIFVOVVNFRF9QQVJBTShwcm90byk7IC8vIEluIHNvbWUgY2FzZXMsIGl0IHdpbGwgbm90
IGJlIHVzZWQuCiAgICAgCiAKLSAgICBpZiAoY3VycmVudFdvcmxkVHlwZSA9PSBNYWluV29ybGQp
Ci0gICAgICAgIFY4RE9NQ29uZmlndXJhdGlvbjo6YWRkVG9UZW1wbGF0ZShkZXNjLCAwLCAwLCAw
LCAwLCBpc29sYXRlLCBkZWZhdWx0U2lnbmF0dXJlKTsKLQogICAgIC8vIEN1c3RvbSB0b1N0cmlu
ZyB0ZW1wbGF0ZQogICAgIGRlc2MtPlNldCh2ODo6U3RyaW5nOjpOZXdTeW1ib2woInRvU3RyaW5n
IiksIFY4UGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKS0+dG9TdHJpbmdUZW1wbGF0ZSgpKTsKICAg
ICByZXR1cm4gZGVzYzsKIH0KIAotdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+
IFY4VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI6OkdldFRlbXBsYXRlKHY4OjpJc29sYXRlKiBp
c29sYXRlLCBXcmFwcGVyV29ybGRUeXBlIGN1cnJlbnRXb3JsZFR5cGUpCit2ODo6UGVyc2lzdGVu
dDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjo6R2V0
VGVtcGxhdGUodjg6Oklzb2xhdGUqIGlzb2xhdGUsIFdyYXBwZXJXb3JsZFR5cGUgd29ybGRUeXBl
KQogewogICAgIFY4UGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOFBlcklzb2xhdGVEYXRhOjpmcm9t
KGlzb2xhdGUpOwotICAgIFY4UGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVyYXRvciBy
ZXN1bHQgPSBkYXRhLT50ZW1wbGF0ZU1hcChjdXJyZW50V29ybGRUeXBlKS5maW5kKCZpbmZvKTsK
LSAgICBpZiAocmVzdWx0ICE9IGRhdGEtPnRlbXBsYXRlTWFwKGN1cnJlbnRXb3JsZFR5cGUpLmVu
ZCgpKQorICAgIFY4UGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVyYXRvciByZXN1bHQg
PSBkYXRhLT50ZW1wbGF0ZU1hcCh3b3JsZFR5cGUpLmZpbmQoJmluZm8pOworICAgIGlmIChyZXN1
bHQgIT0gZGF0YS0+dGVtcGxhdGVNYXAod29ybGRUeXBlKS5lbmQoKSkKICAgICAgICAgcmV0dXJu
IHJlc3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAgICAg
djg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0KLSAgICAgICAgQ29u
ZmlndXJlVjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclRlbXBsYXRlKGRhdGEtPnJhd1RlbXBs
YXRlKCZpbmZvLCBjdXJyZW50V29ybGRUeXBlKSwgaXNvbGF0ZSwgY3VycmVudFdvcmxkVHlwZSk7
Ci0gICAgZGF0YS0+dGVtcGxhdGVNYXAoY3VycmVudFdvcmxkVHlwZSkuYWRkKCZpbmZvLCB0ZW1w
bCk7CisgICAgICAgIENvbmZpZ3VyZVY4VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJUZW1wbGF0
ZShkYXRhLT5yYXdUZW1wbGF0ZSgmaW5mbywgd29ybGRUeXBlKSwgaXNvbGF0ZSwgd29ybGRUeXBl
KTsKKyAgICBkYXRhLT50ZW1wbGF0ZU1hcCh3b3JsZFR5cGUpLmFkZCgmaW5mbywgdGVtcGwpOwog
ICAgIHJldHVybiB0ZW1wbDsKIH0KIAotYm9vbCBWOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVy
OjpIYXNJbnN0YW5jZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUsIHY4OjpJc29sYXRlKiBp
c29sYXRlLCBXcmFwcGVyV29ybGRUeXBlIGN1cnJlbnRXb3JsZFR5cGUpCitib29sIFY4VGVzdE1l
ZGlhUXVlcnlMaXN0TGlzdGVuZXI6Okhhc0luc3RhbmNlKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2
YWx1ZSwgdjg6Oklzb2xhdGUqIGlzb2xhdGUsIFdyYXBwZXJXb3JsZFR5cGUgd29ybGRUeXBlKQog
ewotICAgIHJldHVybiBWOFBlcklzb2xhdGVEYXRhOjpmcm9tKGlzb2xhdGUpLT5oYXNJbnN0YW5j
ZSgmaW5mbywgdmFsdWUsIGN1cnJlbnRXb3JsZFR5cGUpOworICAgIHJldHVybiBWOFBlcklzb2xh
dGVEYXRhOjpmcm9tKGlzb2xhdGUpLT5oYXNJbnN0YW5jZSgmaW5mbywgdmFsdWUsIHdvcmxkVHlw
ZSk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Y4L1Y4VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmgKaW5k
ZXggZDlhZGVjOTlhZDA4ZWE3YmQ0ZDk0NGExZWJmOTY3YzIzODkzZGViZS4uMzBiNWRlMDRkNjlm
ZGMyODRlMjc4MmM3YTc4Nzc5M2NiOTU5MTdmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TWVkaWFR
dWVyeUxpc3RMaXN0ZW5lci5oCkBAIC02OCwxNyArNjgsNiBAQCBpbmxpbmUgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IHRvVjgoVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIqIGltcGwsIHY4OjpIYW5k
bGU8dgogICAgIHJldHVybiB3cmFwKGltcGwsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiB9
CiAKLWlubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOEZvck1haW5Xb3JsZChUZXN0TWVk
aWFRdWVyeUxpc3RMaXN0ZW5lciogaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlv
bkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQotewotICAgIEFTU0VSVCh3b3JsZFR5cGUo
aXNvbGF0ZSkgPT0gTWFpbldvcmxkKTsKLSAgICBpZiAoVU5MSUtFTFkoIWltcGwpKQotICAgICAg
ICByZXR1cm4gdjhOdWxsV2l0aENoZWNrKGlzb2xhdGUpOwotICAgIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiB3cmFwcGVyID0gRE9NRGF0YVN0b3JlOjpnZXRXcmFwcGVyRm9yTWFpbldvcmxkKGltcGwp
OwotICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiB3cmFwcGVyOwot
ICAgIHJldHVybiB3cmFwKGltcGwsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7Ci19Ci0KIHRl
bXBsYXRlPGNsYXNzIEhvbGRlckNvbnRhaW5lciwgY2xhc3MgV3JhcHBhYmxlPgogaW5saW5lIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4RmFzdChUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lciog
aW1wbCwgY29uc3QgSG9sZGVyQ29udGFpbmVyJiBjb250YWluZXIsIFdyYXBwYWJsZSogd3JhcHBh
YmxlKQogewpAQCAtOTEsMjUgKzgwLDYgQEAgaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0
b1Y4RmFzdChUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lciogaW1wbCwgY29uc3QgSG8KIH0KIAog
dGVtcGxhdGU8Y2xhc3MgSG9sZGVyQ29udGFpbmVyLCBjbGFzcyBXcmFwcGFibGU+Ci1pbmxpbmUg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjhGYXN0Rm9yTWFpbldvcmxkKFRlc3RNZWRpYVF1ZXJ5
TGlzdExpc3RlbmVyKiBpbXBsLCBjb25zdCBIb2xkZXJDb250YWluZXImIGNvbnRhaW5lciwgV3Jh
cHBhYmxlKiB3cmFwcGFibGUpCi17Ci0gICAgQVNTRVJUKHdvcmxkVHlwZShjb250YWluZXIuR2V0
SXNvbGF0ZSgpKSA9PSBNYWluV29ybGQpOwotICAgIGlmIChVTkxJS0VMWSghaW1wbCkpCi0gICAg
ICAgIHJldHVybiB2OE51bGwoY29udGFpbmVyLkdldElzb2xhdGUoKSk7Ci0gICAgdjg6OkhhbmRs
ZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gRE9NRGF0YVN0b3JlOjpnZXRXcmFwcGVyRm9yTWFpbldv
cmxkKGltcGwpOwotICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiB3
cmFwcGVyOwotICAgIHJldHVybiB3cmFwKGltcGwsIGNvbnRhaW5lci5Ib2xkZXIoKSwgY29udGFp
bmVyLkdldElzb2xhdGUoKSk7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIEhvbGRlckNvbnRhaW5lciwg
Y2xhc3MgV3JhcHBhYmxlPgotaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4RmFzdEZv
ck1haW5Xb3JsZChQYXNzUmVmUHRyPCBUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lciA+IGltcGws
IGNvbnN0IEhvbGRlckNvbnRhaW5lciYgY29udGFpbmVyLCBXcmFwcGFibGUqIHdyYXBwYWJsZSkK
LXsKLSAgICByZXR1cm4gdG9WOEZhc3RGb3JNYWluV29ybGQoaW1wbC5nZXQoKSwgY29udGFpbmVy
LCB3cmFwcGFibGUpOwotfQotCi0KLXRlbXBsYXRlPGNsYXNzIEhvbGRlckNvbnRhaW5lciwgY2xh
c3MgV3JhcHBhYmxlPgogaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4RmFzdChQYXNz
UmVmUHRyPCBUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lciA+IGltcGwsIGNvbnN0IEhvbGRlckNv
bnRhaW5lciYgY29udGFpbmVyLCBXcmFwcGFibGUqIHdyYXBwYWJsZSkKIHsKICAgICByZXR1cm4g
dG9WOEZhc3QoaW1wbC5nZXQoKSwgY29udGFpbmVyLCB3cmFwcGFibGUpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE5hbWVkQ29uc3Ry
dWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVz
dE5hbWVkQ29uc3RydWN0b3IuY3BwCmluZGV4IDFhNjVhYWJkZTRmMWMxODU4NDZiNzFiODQ0YTEx
OTE4NzBjMzA5NjkuLjFlY2M0NGI3ZTE0ZjU2ZGZkYjYxZjk3YzE3MDc4M2Q0Y2ZjYWRhNGMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RO
YW1lZENvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvVjgvVjhUZXN0TmFtZWRDb25zdHJ1Y3Rvci5jcHAKQEAgLTEwOSw3ICsxMDksNyBAQCBz
dGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4VGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1
Y3RvckNhbGxiYWNrKGNvbnN0IHY4OgogICAgIHJldHVybiBzZXRET01FeGNlcHRpb24oZWMsIGFy
Z3MuR2V0SXNvbGF0ZSgpKTsKIH0KIAotdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxh
dGU+IFY4VGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1Y3Rvcjo6R2V0VGVtcGxhdGUodjg6Oklz
b2xhdGUqIGlzb2xhdGUsIFdyYXBwZXJXb3JsZFR5cGUgY3VycmVudFdvcmxkVHlwZSkKK3Y4OjpQ
ZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRlc3ROYW1lZENvbnN0cnVjdG9yQ29u
c3RydWN0b3I6OkdldFRlbXBsYXRlKHY4OjpJc29sYXRlKiBpc29sYXRlLCBXcmFwcGVyV29ybGRU
eXBlIHdvcmxkVHlwZSkKIHsKICAgICBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9u
VGVtcGxhdGU+IGNhY2hlZFRlbXBsYXRlOwogICAgIGlmICghY2FjaGVkVGVtcGxhdGUuSXNFbXB0
eSgpKQpAQCAtMTIxLDEzICsxMjEsMTMgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVt
cGxhdGU+IFY4VGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1Y3Rvcjo6R2V0VGVtcGwKICAgICB2
ODo6TG9jYWw8djg6Ok9iamVjdFRlbXBsYXRlPiBpbnN0YW5jZSA9IHJlc3VsdC0+SW5zdGFuY2VU
ZW1wbGF0ZSgpOwogICAgIGluc3RhbmNlLT5TZXRJbnRlcm5hbEZpZWxkQ291bnQoVjhUZXN0TmFt
ZWRDb25zdHJ1Y3Rvcjo6aW50ZXJuYWxGaWVsZENvdW50KTsKICAgICByZXN1bHQtPlNldENsYXNz
TmFtZSh2ODo6U3RyaW5nOjpOZXdTeW1ib2woIlRlc3ROYW1lZENvbnN0cnVjdG9yIikpOwotICAg
IHJlc3VsdC0+SW5oZXJpdChWOFRlc3ROYW1lZENvbnN0cnVjdG9yOjpHZXRUZW1wbGF0ZShpc29s
YXRlLCBjdXJyZW50V29ybGRUeXBlKSk7CisgICAgcmVzdWx0LT5Jbmhlcml0KFY4VGVzdE5hbWVk
Q29uc3RydWN0b3I6OkdldFRlbXBsYXRlKGlzb2xhdGUsIHdvcmxkVHlwZSkpOwogCiAgICAgY2Fj
aGVkVGVtcGxhdGUgPSB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT46Ok5ldyhp
c29sYXRlLCByZXN1bHQpOwogICAgIHJldHVybiBjYWNoZWRUZW1wbGF0ZTsKIH0KIAotc3RhdGlj
IHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBDb25maWd1cmVWOFRlc3ROYW1l
ZENvbnN0cnVjdG9yVGVtcGxhdGUodjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+
IGRlc2MsIHY4OjpJc29sYXRlKiBpc29sYXRlLCBXcmFwcGVyV29ybGRUeXBlIGN1cnJlbnRXb3Js
ZFR5cGUpCitzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IENvbmZp
Z3VyZVY4VGVzdE5hbWVkQ29uc3RydWN0b3JUZW1wbGF0ZSh2ODo6UGVyc2lzdGVudDx2ODo6RnVu
Y3Rpb25UZW1wbGF0ZT4gZGVzYywgdjg6Oklzb2xhdGUqIGlzb2xhdGUsIFdyYXBwZXJXb3JsZFR5
cGUgd29ybGRUeXBlKQogewogICAgIGRlc2MtPlJlYWRPbmx5UHJvdG90eXBlKCk7CiAKQEAgLTEz
OCwzMSArMTM4LDI4IEBAIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0
ZT4gQ29uZmlndXJlVjhUZXN0TmFtZWRDb25zdHJ1Y3RvclRlbXBsCiAgICAgVU5VU0VEX1BBUkFN
KGRlZmF1bHRTaWduYXR1cmUpOyAvLyBJbiBzb21lIGNhc2VzLCBpdCB3aWxsIG5vdCBiZSB1c2Vk
LgogICAgIAogCi0gICAgaWYgKGN1cnJlbnRXb3JsZFR5cGUgPT0gTWFpbldvcmxkKQotICAgICAg
ICBWOERPTUNvbmZpZ3VyYXRpb246OmFkZFRvVGVtcGxhdGUoZGVzYywgMCwgMCwgMCwgMCwgaXNv
bGF0ZSwgZGVmYXVsdFNpZ25hdHVyZSk7Ci0KICAgICAvLyBDdXN0b20gdG9TdHJpbmcgdGVtcGxh
dGUKICAgICBkZXNjLT5TZXQodjg6OlN0cmluZzo6TmV3U3ltYm9sKCJ0b1N0cmluZyIpLCBWOFBl
cklzb2xhdGVEYXRhOjpjdXJyZW50KCktPnRvU3RyaW5nVGVtcGxhdGUoKSk7CiAgICAgcmV0dXJu
IGRlc2M7CiB9CiAKLXY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRlc3RO
YW1lZENvbnN0cnVjdG9yOjpHZXRUZW1wbGF0ZSh2ODo6SXNvbGF0ZSogaXNvbGF0ZSwgV3JhcHBl
cldvcmxkVHlwZSBjdXJyZW50V29ybGRUeXBlKQordjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9u
VGVtcGxhdGU+IFY4VGVzdE5hbWVkQ29uc3RydWN0b3I6OkdldFRlbXBsYXRlKHY4OjpJc29sYXRl
KiBpc29sYXRlLCBXcmFwcGVyV29ybGRUeXBlIHdvcmxkVHlwZSkKIHsKICAgICBWOFBlcklzb2xh
dGVEYXRhKiBkYXRhID0gVjhQZXJJc29sYXRlRGF0YTo6ZnJvbShpc29sYXRlKTsKLSAgICBWOFBl
cklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+dGVtcGxh
dGVNYXAoY3VycmVudFdvcmxkVHlwZSkuZmluZCgmaW5mbyk7Ci0gICAgaWYgKHJlc3VsdCAhPSBk
YXRhLT50ZW1wbGF0ZU1hcChjdXJyZW50V29ybGRUeXBlKS5lbmQoKSkKKyAgICBWOFBlcklzb2xh
dGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+dGVtcGxhdGVNYXAo
d29ybGRUeXBlKS5maW5kKCZpbmZvKTsKKyAgICBpZiAocmVzdWx0ICE9IGRhdGEtPnRlbXBsYXRl
TWFwKHdvcmxkVHlwZSkuZW5kKCkpCiAgICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAg
ICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpG
dW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9Ci0gICAgICAgIENvbmZpZ3VyZVY4VGVzdE5hbWVkQ29u
c3RydWN0b3JUZW1wbGF0ZShkYXRhLT5yYXdUZW1wbGF0ZSgmaW5mbywgY3VycmVudFdvcmxkVHlw
ZSksIGlzb2xhdGUsIGN1cnJlbnRXb3JsZFR5cGUpOwotICAgIGRhdGEtPnRlbXBsYXRlTWFwKGN1
cnJlbnRXb3JsZFR5cGUpLmFkZCgmaW5mbywgdGVtcGwpOworICAgICAgICBDb25maWd1cmVWOFRl
c3ROYW1lZENvbnN0cnVjdG9yVGVtcGxhdGUoZGF0YS0+cmF3VGVtcGxhdGUoJmluZm8sIHdvcmxk
VHlwZSksIGlzb2xhdGUsIHdvcmxkVHlwZSk7CisgICAgZGF0YS0+dGVtcGxhdGVNYXAod29ybGRU
eXBlKS5hZGQoJmluZm8sIHRlbXBsKTsKICAgICByZXR1cm4gdGVtcGw7CiB9CiAKLWJvb2wgVjhU
ZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6SGFzSW5zdGFuY2Uodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZh
bHVlLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSwgV3JhcHBlcldvcmxkVHlwZSBjdXJyZW50V29ybGRU
eXBlKQorYm9vbCBWOFRlc3ROYW1lZENvbnN0cnVjdG9yOjpIYXNJbnN0YW5jZSh2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gdmFsdWUsIHY4OjpJc29sYXRlKiBpc29sYXRlLCBXcmFwcGVyV29ybGRUeXBl
IHdvcmxkVHlwZSkKIHsKLSAgICByZXR1cm4gVjhQZXJJc29sYXRlRGF0YTo6ZnJvbShpc29sYXRl
KS0+aGFzSW5zdGFuY2UoJmluZm8sIHZhbHVlLCBjdXJyZW50V29ybGRUeXBlKTsKKyAgICByZXR1
cm4gVjhQZXJJc29sYXRlRGF0YTo6ZnJvbShpc29sYXRlKS0+aGFzSW5zdGFuY2UoJmluZm8sIHZh
bHVlLCB3b3JsZFR5cGUpOwogfQogCiBBY3RpdmVET01PYmplY3QqIFY4VGVzdE5hbWVkQ29uc3Ry
dWN0b3I6OnRvQWN0aXZlRE9NT2JqZWN0KHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gb2JqZWN0KQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVz
dE5hbWVkQ29uc3RydWN0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9WOC9WOFRlc3ROYW1lZENvbnN0cnVjdG9yLmgKaW5kZXggOGU2YzY3MTA0ZGZlNjc0ZmI1YmYy
MzIyMjg4YTllZGNjZjczMDVhYy4uMzk0MzY0YTU3ZGJjZGJjMTJlYjYyNThlODY4NDMxNDgzZTQx
ZWFlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4
L1Y4VGVzdE5hbWVkQ29uc3RydWN0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvVjgvVjhUZXN0TmFtZWRDb25zdHJ1Y3Rvci5oCkBAIC03NSwxNyArNzUsNiBA
QCBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoVGVzdE5hbWVkQ29uc3RydWN0b3Iq
IGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iagogICAgIHJldHVybiB3cmFwKGltcGwsIGNyZWF0aW9u
Q29udGV4dCwgaXNvbGF0ZSk7CiB9CiAKLWlubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9W
OEZvck1haW5Xb3JsZChUZXN0TmFtZWRDb25zdHJ1Y3RvciogaW1wbCwgdjg6OkhhbmRsZTx2ODo6
T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQotewotICAgIEFT
U0VSVCh3b3JsZFR5cGUoaXNvbGF0ZSkgPT0gTWFpbldvcmxkKTsKLSAgICBpZiAoVU5MSUtFTFko
IWltcGwpKQotICAgICAgICByZXR1cm4gdjhOdWxsV2l0aENoZWNrKGlzb2xhdGUpOwotICAgIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiB3cmFwcGVyID0gRE9NRGF0YVN0b3JlOjpnZXRXcmFwcGVyRm9y
TWFpbldvcmxkKGltcGwpOwotICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkpCi0gICAgICAgIHJl
dHVybiB3cmFwcGVyOwotICAgIHJldHVybiB3cmFwKGltcGwsIGNyZWF0aW9uQ29udGV4dCwgaXNv
bGF0ZSk7Ci19Ci0KIHRlbXBsYXRlPGNsYXNzIEhvbGRlckNvbnRhaW5lciwgY2xhc3MgV3JhcHBh
YmxlPgogaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4RmFzdChUZXN0TmFtZWRDb25z
dHJ1Y3RvciogaW1wbCwgY29uc3QgSG9sZGVyQ29udGFpbmVyJiBjb250YWluZXIsIFdyYXBwYWJs
ZSogd3JhcHBhYmxlKQogewpAQCAtOTgsMjUgKzg3LDYgQEAgaW5saW5lIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiB0b1Y4RmFzdChUZXN0TmFtZWRDb25zdHJ1Y3RvciogaW1wbCwgY29uc3QgSG9sZGVy
Q28KIH0KIAogdGVtcGxhdGU8Y2xhc3MgSG9sZGVyQ29udGFpbmVyLCBjbGFzcyBXcmFwcGFibGU+
Ci1pbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjhGYXN0Rm9yTWFpbldvcmxkKFRlc3RO
YW1lZENvbnN0cnVjdG9yKiBpbXBsLCBjb25zdCBIb2xkZXJDb250YWluZXImIGNvbnRhaW5lciwg
V3JhcHBhYmxlKiB3cmFwcGFibGUpCi17Ci0gICAgQVNTRVJUKHdvcmxkVHlwZShjb250YWluZXIu
R2V0SXNvbGF0ZSgpKSA9PSBNYWluV29ybGQpOwotICAgIGlmIChVTkxJS0VMWSghaW1wbCkpCi0g
ICAgICAgIHJldHVybiB2OE51bGwoY29udGFpbmVyLkdldElzb2xhdGUoKSk7Ci0gICAgdjg6Okhh
bmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gRE9NRGF0YVN0b3JlOjpnZXRXcmFwcGVyRm9yTWFp
bldvcmxkKGltcGwpOwotICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkpCi0gICAgICAgIHJldHVy
biB3cmFwcGVyOwotICAgIHJldHVybiB3cmFwKGltcGwsIGNvbnRhaW5lci5Ib2xkZXIoKSwgY29u
dGFpbmVyLkdldElzb2xhdGUoKSk7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIEhvbGRlckNvbnRhaW5l
ciwgY2xhc3MgV3JhcHBhYmxlPgotaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4RmFz
dEZvck1haW5Xb3JsZChQYXNzUmVmUHRyPCBUZXN0TmFtZWRDb25zdHJ1Y3RvciA+IGltcGwsIGNv
bnN0IEhvbGRlckNvbnRhaW5lciYgY29udGFpbmVyLCBXcmFwcGFibGUqIHdyYXBwYWJsZSkKLXsK
LSAgICByZXR1cm4gdG9WOEZhc3RGb3JNYWluV29ybGQoaW1wbC5nZXQoKSwgY29udGFpbmVyLCB3
cmFwcGFibGUpOwotfQotCi0KLXRlbXBsYXRlPGNsYXNzIEhvbGRlckNvbnRhaW5lciwgY2xhc3Mg
V3JhcHBhYmxlPgogaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4RmFzdChQYXNzUmVm
UHRyPCBUZXN0TmFtZWRDb25zdHJ1Y3RvciA+IGltcGwsIGNvbnN0IEhvbGRlckNvbnRhaW5lciYg
Y29udGFpbmVyLCBXcmFwcGFibGUqIHdyYXBwYWJsZSkKIHsKICAgICByZXR1cm4gdG9WOEZhc3Qo
aW1wbC5nZXQoKSwgY29udGFpbmVyLCB3cmFwcGFibGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE5vZGUuY3BwIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE5vZGUuY3BwCmluZGV4IDk5NDEz
ZGQxODA5YmVhMjc5MWM0NGM0NWNhNjI4ODA5ZGQ1N2UwNDguLmYzN2Y2NjdhMjIwYmNhMGZkYzU2
ZDFmMGFhNjNhZTg1ODllNThlMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9WOC9WOFRlc3ROb2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Tm9kZS5jcHAKQEAgLTkzLDQzICs5Myw0MCBAQCB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhUZXN0Tm9kZTo6Y29uc3RydWN0b3JDYWxsYmFjayhjb25z
dCB2ODo6QXJndW1lbnRzJiBhcmdzKQogICAgIHJldHVybiBUZXN0Tm9kZVY4SW50ZXJuYWw6OmNv
bnN0cnVjdG9yKGFyZ3MpOwogfQogCi1zdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9u
VGVtcGxhdGU+IENvbmZpZ3VyZVY4VGVzdE5vZGVUZW1wbGF0ZSh2ODo6UGVyc2lzdGVudDx2ODo6
RnVuY3Rpb25UZW1wbGF0ZT4gZGVzYywgdjg6Oklzb2xhdGUqIGlzb2xhdGUsIFdyYXBwZXJXb3Js
ZFR5cGUgY3VycmVudFdvcmxkVHlwZSkKK3N0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rp
b25UZW1wbGF0ZT4gQ29uZmlndXJlVjhUZXN0Tm9kZVRlbXBsYXRlKHY4OjpQZXJzaXN0ZW50PHY4
OjpGdW5jdGlvblRlbXBsYXRlPiBkZXNjLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSwgV3JhcHBlcldv
cmxkVHlwZSB3b3JsZFR5cGUpCiB7CiAgICAgZGVzYy0+UmVhZE9ubHlQcm90b3R5cGUoKTsKIAog
ICAgIHY4OjpMb2NhbDx2ODo6U2lnbmF0dXJlPiBkZWZhdWx0U2lnbmF0dXJlOwotICAgIGRlZmF1
bHRTaWduYXR1cmUgPSBWOERPTUNvbmZpZ3VyYXRpb246OmNvbmZpZ3VyZVRlbXBsYXRlKGRlc2Ms
ICJUZXN0Tm9kZSIsIFY4Tm9kZTo6R2V0VGVtcGxhdGUoaXNvbGF0ZSwgY3VycmVudFdvcmxkVHlw
ZSksIFY4VGVzdE5vZGU6OmludGVybmFsRmllbGRDb3VudCwKKyAgICBkZWZhdWx0U2lnbmF0dXJl
ID0gVjhET01Db25maWd1cmF0aW9uOjpjb25maWd1cmVUZW1wbGF0ZShkZXNjLCAiVGVzdE5vZGUi
LCBWOE5vZGU6OkdldFRlbXBsYXRlKGlzb2xhdGUsIHdvcmxkVHlwZSksIFY4VGVzdE5vZGU6Omlu
dGVybmFsRmllbGRDb3VudCwKICAgICAgICAgMCwgMCwKICAgICAgICAgMCwgMCwgaXNvbGF0ZSk7
CiAgICAgVU5VU0VEX1BBUkFNKGRlZmF1bHRTaWduYXR1cmUpOyAvLyBJbiBzb21lIGNhc2VzLCBp
dCB3aWxsIG5vdCBiZSB1c2VkLgogICAgIGRlc2MtPlNldENhbGxIYW5kbGVyKFY4VGVzdE5vZGU6
OmNvbnN0cnVjdG9yQ2FsbGJhY2spOwogICAgIAogCi0gICAgaWYgKGN1cnJlbnRXb3JsZFR5cGUg
PT0gTWFpbldvcmxkKQotICAgICAgICBWOERPTUNvbmZpZ3VyYXRpb246OmFkZFRvVGVtcGxhdGUo
ZGVzYywgMCwgMCwgMCwgMCwgaXNvbGF0ZSwgZGVmYXVsdFNpZ25hdHVyZSk7Ci0KICAgICAvLyBD
dXN0b20gdG9TdHJpbmcgdGVtcGxhdGUKICAgICBkZXNjLT5TZXQodjg6OlN0cmluZzo6TmV3U3lt
Ym9sKCJ0b1N0cmluZyIpLCBWOFBlcklzb2xhdGVEYXRhOjpjdXJyZW50KCktPnRvU3RyaW5nVGVt
cGxhdGUoKSk7CiAgICAgcmV0dXJuIGRlc2M7CiB9CiAKLXY4OjpQZXJzaXN0ZW50PHY4OjpGdW5j
dGlvblRlbXBsYXRlPiBWOFRlc3ROb2RlOjpHZXRUZW1wbGF0ZSh2ODo6SXNvbGF0ZSogaXNvbGF0
ZSwgV3JhcHBlcldvcmxkVHlwZSBjdXJyZW50V29ybGRUeXBlKQordjg6OlBlcnNpc3RlbnQ8djg6
OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdE5vZGU6OkdldFRlbXBsYXRlKHY4OjpJc29sYXRlKiBp
c29sYXRlLCBXcmFwcGVyV29ybGRUeXBlIHdvcmxkVHlwZSkKIHsKICAgICBWOFBlcklzb2xhdGVE
YXRhKiBkYXRhID0gVjhQZXJJc29sYXRlRGF0YTo6ZnJvbShpc29sYXRlKTsKLSAgICBWOFBlcklz
b2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+dGVtcGxhdGVN
YXAoY3VycmVudFdvcmxkVHlwZSkuZmluZCgmaW5mbyk7Ci0gICAgaWYgKHJlc3VsdCAhPSBkYXRh
LT50ZW1wbGF0ZU1hcChjdXJyZW50V29ybGRUeXBlKS5lbmQoKSkKKyAgICBWOFBlcklzb2xhdGVE
YXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+dGVtcGxhdGVNYXAod29y
bGRUeXBlKS5maW5kKCZpbmZvKTsKKyAgICBpZiAocmVzdWx0ICE9IGRhdGEtPnRlbXBsYXRlTWFw
KHdvcmxkVHlwZSkuZW5kKCkpCiAgICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAgICAg
djg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5j
dGlvblRlbXBsYXRlPiB0ZW1wbCA9Ci0gICAgICAgIENvbmZpZ3VyZVY4VGVzdE5vZGVUZW1wbGF0
ZShkYXRhLT5yYXdUZW1wbGF0ZSgmaW5mbywgY3VycmVudFdvcmxkVHlwZSksIGlzb2xhdGUsIGN1
cnJlbnRXb3JsZFR5cGUpOwotICAgIGRhdGEtPnRlbXBsYXRlTWFwKGN1cnJlbnRXb3JsZFR5cGUp
LmFkZCgmaW5mbywgdGVtcGwpOworICAgICAgICBDb25maWd1cmVWOFRlc3ROb2RlVGVtcGxhdGUo
ZGF0YS0+cmF3VGVtcGxhdGUoJmluZm8sIHdvcmxkVHlwZSksIGlzb2xhdGUsIHdvcmxkVHlwZSk7
CisgICAgZGF0YS0+dGVtcGxhdGVNYXAod29ybGRUeXBlKS5hZGQoJmluZm8sIHRlbXBsKTsKICAg
ICByZXR1cm4gdGVtcGw7CiB9CiAKLWJvb2wgVjhUZXN0Tm9kZTo6SGFzSW5zdGFuY2Uodjg6Okhh
bmRsZTx2ODo6VmFsdWU+IHZhbHVlLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSwgV3JhcHBlcldvcmxk
VHlwZSBjdXJyZW50V29ybGRUeXBlKQorYm9vbCBWOFRlc3ROb2RlOjpIYXNJbnN0YW5jZSh2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUsIHY4OjpJc29sYXRlKiBpc29sYXRlLCBXcmFwcGVyV29y
bGRUeXBlIHdvcmxkVHlwZSkKIHsKLSAgICByZXR1cm4gVjhQZXJJc29sYXRlRGF0YTo6ZnJvbShp
c29sYXRlKS0+aGFzSW5zdGFuY2UoJmluZm8sIHZhbHVlLCBjdXJyZW50V29ybGRUeXBlKTsKKyAg
ICByZXR1cm4gVjhQZXJJc29sYXRlRGF0YTo6ZnJvbShpc29sYXRlKS0+aGFzSW5zdGFuY2UoJmlu
Zm8sIHZhbHVlLCB3b3JsZFR5cGUpOwogfQogCiBFdmVudFRhcmdldCogVjhUZXN0Tm9kZTo6dG9F
dmVudFRhcmdldCh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG9iamVjdCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3ROb2RlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Tm9kZS5oCmluZGV4IDFk
NmExMjEzZWExOWVjZjEwNmMwNjU5ODU2N2ZhZjI4OGZmZjgwYzguLjU4NjBlOTExNWMwYjAzNGJj
NTFjYTUwOTM1NjU3NzgwY2MzY2JhNTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3ROb2RlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE5vZGUuaApAQCAtNzAsMTcgKzcwLDYgQEAgaW5s
aW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KFRlc3ROb2RlKiBpbXBsLCB2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+IGNyZWF0aW8KICAgICByZXR1cm4gd3JhcChpbXBsLCBjcmVhdGlvbkNvbnRl
eHQsIGlzb2xhdGUpOwogfQogCi1pbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjhGb3JN
YWluV29ybGQoVGVzdE5vZGUqIGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25D
b250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKLXsKLSAgICBBU1NFUlQod29ybGRUeXBlKGlz
b2xhdGUpID09IE1haW5Xb3JsZCk7Ci0gICAgaWYgKFVOTElLRUxZKCFpbXBsKSkKLSAgICAgICAg
cmV0dXJuIHY4TnVsbFdpdGhDaGVjayhpc29sYXRlKTsKLSAgICB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gd3JhcHBlciA9IERPTURhdGFTdG9yZTo6Z2V0V3JhcHBlckZvck1haW5Xb3JsZChpbXBsKTsK
LSAgICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gd3JhcHBlcjsKLSAg
ICByZXR1cm4gd3JhcChpbXBsLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwotfQotCiB0ZW1w
bGF0ZTxjbGFzcyBIb2xkZXJDb250YWluZXIsIGNsYXNzIFdyYXBwYWJsZT4KIGlubGluZSB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOEZhc3QoVGVzdE5vZGUqIGltcGwsIGNvbnN0IEhvbGRlckNv
bnRhaW5lciYgY29udGFpbmVyLCBXcmFwcGFibGUqIHdyYXBwYWJsZSkKIHsKQEAgLTkzLDI1ICs4
Miw2IEBAIGlubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOEZhc3QoVGVzdE5vZGUqIGlt
cGwsIGNvbnN0IEhvbGRlckNvbnRhaW5lciYgY29uCiB9CiAKIHRlbXBsYXRlPGNsYXNzIEhvbGRl
ckNvbnRhaW5lciwgY2xhc3MgV3JhcHBhYmxlPgotaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiB0b1Y4RmFzdEZvck1haW5Xb3JsZChUZXN0Tm9kZSogaW1wbCwgY29uc3QgSG9sZGVyQ29udGFp
bmVyJiBjb250YWluZXIsIFdyYXBwYWJsZSogd3JhcHBhYmxlKQotewotICAgIEFTU0VSVCh3b3Js
ZFR5cGUoY29udGFpbmVyLkdldElzb2xhdGUoKSkgPT0gTWFpbldvcmxkKTsKLSAgICBpZiAoVU5M
SUtFTFkoIWltcGwpKQotICAgICAgICByZXR1cm4gdjhOdWxsKGNvbnRhaW5lci5HZXRJc29sYXRl
KCkpOwotICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IERPTURhdGFTdG9yZTo6
Z2V0V3JhcHBlckZvck1haW5Xb3JsZChpbXBsKTsKLSAgICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgp
KQotICAgICAgICByZXR1cm4gd3JhcHBlcjsKLSAgICByZXR1cm4gd3JhcChpbXBsLCBjb250YWlu
ZXIuSG9sZGVyKCksIGNvbnRhaW5lci5HZXRJc29sYXRlKCkpOwotfQotCi10ZW1wbGF0ZTxjbGFz
cyBIb2xkZXJDb250YWluZXIsIGNsYXNzIFdyYXBwYWJsZT4KLWlubGluZSB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gdG9WOEZhc3RGb3JNYWluV29ybGQoUGFzc1JlZlB0cjwgVGVzdE5vZGUgPiBpbXBs
LCBjb25zdCBIb2xkZXJDb250YWluZXImIGNvbnRhaW5lciwgV3JhcHBhYmxlKiB3cmFwcGFibGUp
Ci17Ci0gICAgcmV0dXJuIHRvVjhGYXN0Rm9yTWFpbldvcmxkKGltcGwuZ2V0KCksIGNvbnRhaW5l
ciwgd3JhcHBhYmxlKTsKLX0KLQotCi10ZW1wbGF0ZTxjbGFzcyBIb2xkZXJDb250YWluZXIsIGNs
YXNzIFdyYXBwYWJsZT4KIGlubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOEZhc3QoUGFz
c1JlZlB0cjwgVGVzdE5vZGUgPiBpbXBsLCBjb25zdCBIb2xkZXJDb250YWluZXImIGNvbnRhaW5l
ciwgV3JhcHBhYmxlKiB3cmFwcGFibGUpCiB7CiAgICAgcmV0dXJuIHRvVjhGYXN0KGltcGwuZ2V0
KCksIGNvbnRhaW5lciwgd3JhcHBhYmxlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAKaW5kZXggOTRlZDM2NTA2NmYyNjAy
OTkyZTA3NGZlZTRiNGNmZjZiNTkzNjdlYS4uMDc4OTIxMGY5ZmM5NjQwNjZkZmZmM2Q2ODc1MWRk
MWQyOGRhOWI4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Y4L1Y4VGVzdE9iai5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAKQEAgLTEyMywxNyArMTIzLDYgQEAgc3RhdGljIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiByZWFkT25seUxvbmdBdHRyQXR0ckdldHRlckNhbGxiYWNrKHY4OjpM
b2NhbDx2ODo6U3QKICAgICByZXR1cm4gVGVzdE9ialY4SW50ZXJuYWw6OnJlYWRPbmx5TG9uZ0F0
dHJBdHRyR2V0dGVyKG5hbWUsIGluZm8pOwogfQogCi1zdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IHJlYWRPbmx5TG9uZ0F0dHJBdHRyR2V0dGVyRm9yTWFpbldvcmxkKHY4OjpMb2NhbDx2ODo6
U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQotewotICAgIFRlc3RP
YmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAgcmV0dXJu
IHY4SW50ZWdlcihpbXAtPnJlYWRPbmx5TG9uZ0F0dHIoKSwgaW5mby5HZXRJc29sYXRlKCkpOwot
fQotCi1zdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHJlYWRPbmx5TG9uZ0F0dHJBdHRyR2V0
dGVyQ2FsbGJhY2tGb3JNYWluV29ybGQodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0
IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCi17Ci0gICAgcmV0dXJuIFRlc3RPYmpWOEludGVybmFs
OjpyZWFkT25seUxvbmdBdHRyQXR0ckdldHRlckZvck1haW5Xb3JsZChuYW1lLCBpbmZvKTsKLX0K
LQogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiByZWFkT25seVN0cmluZ0F0dHJBdHRyR2V0
dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBp
bmZvKQogewogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xk
ZXIoKSk7CkBAIC0xNDUsMTcgKzEzNCw2IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
cmVhZE9ubHlTdHJpbmdBdHRyQXR0ckdldHRlckNhbGxiYWNrKHY4OjpMb2NhbDx2ODo6CiAgICAg
cmV0dXJuIFRlc3RPYmpWOEludGVybmFsOjpyZWFkT25seVN0cmluZ0F0dHJBdHRyR2V0dGVyKG5h
bWUsIGluZm8pOwogfQogCi1zdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHJlYWRPbmx5U3Ry
aW5nQXR0ckF0dHJHZXR0ZXJGb3JNYWluV29ybGQodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUs
IGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCi17Ci0gICAgVGVzdE9iaiogaW1wID0gVjhU
ZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKLSAgICByZXR1cm4gdjhTdHJpbmcoaW1w
LT5yZWFkT25seVN0cmluZ0F0dHIoKSwgaW5mby5HZXRJc29sYXRlKCksIFJldHVyblVuc2FmZUhh
bmRsZSk7Ci19Ci0KLXN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcmVhZE9ubHlTdHJpbmdB
dHRyQXR0ckdldHRlckNhbGxiYWNrRm9yTWFpbldvcmxkKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBu
YW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQotewotICAgIHJldHVybiBUZXN0T2Jq
VjhJbnRlcm5hbDo6cmVhZE9ubHlTdHJpbmdBdHRyQXR0ckdldHRlckZvck1haW5Xb3JsZChuYW1l
LCBpbmZvKTsKLX0KLQogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiByZWFkT25seVRlc3RP
YmpBdHRyQXR0ckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFj
Y2Vzc29ySW5mbyYgaW5mbykKIHsKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0
aXZlKGluZm8uSG9sZGVyKCkpOwpAQCAtMTc0LDI0ICsxNTIsNiBAQCBzdGF0aWMgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IHJlYWRPbmx5VGVzdE9iakF0dHJBdHRyR2V0dGVyQ2FsbGJhY2sodjg6Okxv
Y2FsPHY4OgogICAgIHJldHVybiBUZXN0T2JqVjhJbnRlcm5hbDo6cmVhZE9ubHlUZXN0T2JqQXR0
ckF0dHJHZXR0ZXIobmFtZSwgaW5mbyk7CiB9CiAKLXN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gcmVhZE9ubHlUZXN0T2JqQXR0ckF0dHJHZXR0ZXJGb3JNYWluV29ybGQodjg6OkxvY2FsPHY4
OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCi17Ci0gICAgVGVz
dE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKLSAgICBSZWZQ
dHI8VGVzdE9iaj4gcmVzdWx0ID0gaW1wLT5yZWFkT25seVRlc3RPYmpBdHRyKCk7Ci0gICAgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IHdyYXBwZXIgPSByZXN1bHQuZ2V0KCkgPyB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4oRE9NRGF0YVN0b3JlOjpnZXRXcmFwcGVyKHJlc3VsdC5nZXQoKSwgaW5mby5HZXRJ
c29sYXRlKCkpKSA6IHY4VW5kZWZpbmVkKCk7Ci0gICAgaWYgKHdyYXBwZXIuSXNFbXB0eSgpKSB7
Ci0gICAgICAgIHdyYXBwZXIgPSB0b1Y4KHJlc3VsdC5nZXQoKSwgaW5mby5Ib2xkZXIoKSwgaW5m
by5HZXRJc29sYXRlKCkpOwotICAgICAgICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgpKQotICAgICAg
ICAgICAgVjhIaWRkZW5Qcm9wZXJ0eU5hbWU6OnNldE5hbWVkSGlkZGVuUmVmZXJlbmNlKGluZm8u
SG9sZGVyKCksICJyZWFkT25seVRlc3RPYmpBdHRyIiwgd3JhcHBlcik7Ci0gICAgfQotICAgIHJl
dHVybiB3cmFwcGVyOwotfQotCi1zdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHJlYWRPbmx5
VGVzdE9iakF0dHJBdHRyR2V0dGVyQ2FsbGJhY2tGb3JNYWluV29ybGQodjg6OkxvY2FsPHY4OjpT
dHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCi17Ci0gICAgcmV0dXJu
IFRlc3RPYmpWOEludGVybmFsOjpyZWFkT25seVRlc3RPYmpBdHRyQXR0ckdldHRlckZvck1haW5X
b3JsZChuYW1lLCBpbmZvKTsKLX0KLQogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBzdGF0
aWNSZWFkT25seUxvbmdBdHRyQXR0ckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwg
Y29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKIHsKICAgICByZXR1cm4gdjhJbnRlZ2VyKFRl
c3RPYmo6OnN0YXRpY1JlYWRPbmx5TG9uZ0F0dHIoKSwgaW5mby5HZXRJc29sYXRlKCkpOwpAQCAt
MjAyLDE2ICsxNjIsNiBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHN0YXRpY1JlYWRP
bmx5TG9uZ0F0dHJBdHRyR2V0dGVyQ2FsbGJhY2sodjg6OkxvY2FsPAogICAgIHJldHVybiBUZXN0
T2JqVjhJbnRlcm5hbDo6c3RhdGljUmVhZE9ubHlMb25nQXR0ckF0dHJHZXR0ZXIobmFtZSwgaW5m
byk7CiB9CiAKLXN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gc3RhdGljUmVhZE9ubHlMb25n
QXR0ckF0dHJHZXR0ZXJGb3JNYWluV29ybGQodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNv
bnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCi17Ci0gICAgcmV0dXJuIHY4SW50ZWdlcihUZXN0
T2JqOjpzdGF0aWNSZWFkT25seUxvbmdBdHRyKCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKLX0KLQot
c3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBzdGF0aWNSZWFkT25seUxvbmdBdHRyQXR0ckdl
dHRlckNhbGxiYWNrRm9yTWFpbldvcmxkKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25z
dCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQotewotICAgIHJldHVybiBUZXN0T2JqVjhJbnRlcm5h
bDo6c3RhdGljUmVhZE9ubHlMb25nQXR0ckF0dHJHZXR0ZXJGb3JNYWluV29ybGQobmFtZSwgaW5m
byk7Ci19Ci0KIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gc3RhdGljU3RyaW5nQXR0ckF0
dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3Nvcklu
Zm8mIGluZm8pCiB7CiAgICAgcmV0dXJuIHY4U3RyaW5nKFRlc3RPYmo6OnN0YXRpY1N0cmluZ0F0
dHIoKSwgaW5mby5HZXRJc29sYXRlKCksIFJldHVyblVuc2FmZUhhbmRsZSk7CkBAIC0yMjIsMTYg
KzE3Miw2IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gc3RhdGljU3RyaW5nQXR0ckF0
dHJHZXR0ZXJDYWxsYmFjayh2ODo6TG9jYWw8djg6OlN0CiAgICAgcmV0dXJuIFRlc3RPYmpWOElu
dGVybmFsOjpzdGF0aWNTdHJpbmdBdHRyQXR0ckdldHRlcihuYW1lLCBpbmZvKTsKIH0KIAotc3Rh
dGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBzdGF0aWNTdHJpbmdBdHRyQXR0ckdldHRlckZvck1h
aW5Xb3JsZCh2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5m
byYgaW5mbykKLXsKLSAgICByZXR1cm4gdjhTdHJpbmcoVGVzdE9iajo6c3RhdGljU3RyaW5nQXR0
cigpLCBpbmZvLkdldElzb2xhdGUoKSwgUmV0dXJuVW5zYWZlSGFuZGxlKTsKLX0KLQotc3RhdGlj
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiBzdGF0aWNTdHJpbmdBdHRyQXR0ckdldHRlckNhbGxiYWNr
Rm9yTWFpbldvcmxkKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNz
b3JJbmZvJiBpbmZvKQotewotICAgIHJldHVybiBUZXN0T2JqVjhJbnRlcm5hbDo6c3RhdGljU3Ry
aW5nQXR0ckF0dHJHZXR0ZXJGb3JNYWluV29ybGQobmFtZSwgaW5mbyk7Ci19Ci0KIHN0YXRpYyB2
b2lkIHN0YXRpY1N0cmluZ0F0dHJBdHRyU2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1l
LCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5m
bykKIHsKICAgICBWOFRSWUNBVENIX0ZPUl9WOFNUUklOR1JFU09VUkNFX1ZPSUQoVjhTdHJpbmdS
ZXNvdXJjZTw+LCB2LCB2YWx1ZSk7CkBAIC0yNDQsMTggKzE4NCw2IEBAIHN0YXRpYyB2b2lkIHN0
YXRpY1N0cmluZ0F0dHJBdHRyU2V0dGVyQ2FsbGJhY2sodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5h
bWUsIHY4OjpMCiAgICAgVGVzdE9ialY4SW50ZXJuYWw6OnN0YXRpY1N0cmluZ0F0dHJBdHRyU2V0
dGVyKG5hbWUsIHZhbHVlLCBpbmZvKTsKIH0KIAotc3RhdGljIHZvaWQgc3RhdGljU3RyaW5nQXR0
ckF0dHJTZXR0ZXJGb3JNYWluV29ybGQodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpM
b2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQotewot
ICAgIFY4VFJZQ0FUQ0hfRk9SX1Y4U1RSSU5HUkVTT1VSQ0VfVk9JRChWOFN0cmluZ1Jlc291cmNl
PD4sIHYsIHZhbHVlKTsKLSAgICBUZXN0T2JqOjpzZXRTdGF0aWNTdHJpbmdBdHRyKHYpOwotICAg
IHJldHVybjsKLX0KLQotc3RhdGljIHZvaWQgc3RhdGljU3RyaW5nQXR0ckF0dHJTZXR0ZXJDYWxs
YmFja0Zvck1haW5Xb3JsZCh2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4
OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCi17Ci0gICAgVGVz
dE9ialY4SW50ZXJuYWw6OnN0YXRpY1N0cmluZ0F0dHJBdHRyU2V0dGVyRm9yTWFpbldvcmxkKG5h
bWUsIHZhbHVlLCBpbmZvKTsKLX0KLQogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBlbnVt
QXR0ckF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nl
c3NvckluZm8mIGluZm8pCiB7CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2
ZShpbmZvLkhvbGRlcigpKTsKQEAgLTI2NywxNyArMTk1LDYgQEAgc3RhdGljIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiBlbnVtQXR0ckF0dHJHZXR0ZXJDYWxsYmFjayh2ODo6TG9jYWw8djg6OlN0cmlu
Zz4gbmEKICAgICByZXR1cm4gVGVzdE9ialY4SW50ZXJuYWw6OmVudW1BdHRyQXR0ckdldHRlcihu
YW1lLCBpbmZvKTsKIH0KIAotc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBlbnVtQXR0ckF0
dHJHZXR0ZXJGb3JNYWluV29ybGQodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4
OjpBY2Nlc3NvckluZm8mIGluZm8pCi17Ci0gICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0
b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKLSAgICByZXR1cm4gdjhTdHJpbmcoaW1wLT5lbnVtQXR0
cigpLCBpbmZvLkdldElzb2xhdGUoKSwgUmV0dXJuVW5zYWZlSGFuZGxlKTsKLX0KLQotc3RhdGlj
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiBlbnVtQXR0ckF0dHJHZXR0ZXJDYWxsYmFja0Zvck1haW5X
b3JsZCh2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYg
aW5mbykKLXsKLSAgICByZXR1cm4gVGVzdE9ialY4SW50ZXJuYWw6OmVudW1BdHRyQXR0ckdldHRl
ckZvck1haW5Xb3JsZChuYW1lLCBpbmZvKTsKLX0KLQogc3RhdGljIHZvaWQgZW51bUF0dHJBdHRy
U2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2
YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKIHsKICAgICBUZXN0T2JqKiBpbXAg
PSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwpAQCAtMjk0LDIyICsyMTEsNiBA
QCBzdGF0aWMgdm9pZCBlbnVtQXR0ckF0dHJTZXR0ZXJDYWxsYmFjayh2ODo6TG9jYWw8djg6OlN0
cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OgogICAgIFRlc3RPYmpWOEludGVybmFsOjplbnVtQXR0
ckF0dHJTZXR0ZXIobmFtZSwgdmFsdWUsIGluZm8pOwogfQogCi1zdGF0aWMgdm9pZCBlbnVtQXR0
ckF0dHJTZXR0ZXJGb3JNYWluV29ybGQodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpM
b2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQotewot
ICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0g
ICAgVjhUUllDQVRDSF9GT1JfVjhTVFJJTkdSRVNPVVJDRV9WT0lEKFY4U3RyaW5nUmVzb3VyY2U8
PiwgdiwgdmFsdWUpOwotICAgIFN0cmluZyBzdHJpbmcgPSB2OwotICAgIGlmICghKHN0cmluZyA9
PSAiIiB8fCBzdHJpbmcgPT0gIkVudW1WYWx1ZTEiIHx8IHN0cmluZyA9PSAiRW51bVZhbHVlMiIg
fHwgc3RyaW5nID09ICJFbnVtVmFsdWUzIikpCi0gICAgICAgIHJldHVybjsKLSAgICBpbXAtPnNl
dEVudW1BdHRyKHYpOwotICAgIHJldHVybjsKLX0KLQotc3RhdGljIHZvaWQgZW51bUF0dHJBdHRy
U2V0dGVyQ2FsbGJhY2tGb3JNYWluV29ybGQodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4
OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQot
ewotICAgIFRlc3RPYmpWOEludGVybmFsOjplbnVtQXR0ckF0dHJTZXR0ZXJGb3JNYWluV29ybGQo
bmFtZSwgdmFsdWUsIGluZm8pOwotfQotCiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHNo
b3J0QXR0ckF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpB
Y2Nlc3NvckluZm8mIGluZm8pCiB7CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05h
dGl2ZShpbmZvLkhvbGRlcigpKTsKQEAgLTMyMSwxNyArMjIyLDYgQEAgc3RhdGljIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiBzaG9ydEF0dHJBdHRyR2V0dGVyQ2FsbGJhY2sodjg6OkxvY2FsPHY4OjpT
dHJpbmc+IG4KICAgICByZXR1cm4gVGVzdE9ialY4SW50ZXJuYWw6OnNob3J0QXR0ckF0dHJHZXR0
ZXIobmFtZSwgaW5mbyk7CiB9CiAKLXN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gc2hvcnRB
dHRyQXR0ckdldHRlckZvck1haW5Xb3JsZCh2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29u
c3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKLXsKLSAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RP
Ymo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwotICAgIHJldHVybiB2OEludGVnZXIoaW1wLT5z
aG9ydEF0dHIoKSwgaW5mby5HZXRJc29sYXRlKCkpOwotfQotCi1zdGF0aWMgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IHNob3J0QXR0ckF0dHJHZXR0ZXJDYWxsYmFja0Zvck1haW5Xb3JsZCh2ODo6TG9j
YWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKLXsKLSAg
ICByZXR1cm4gVGVzdE9ialY4SW50ZXJuYWw6OnNob3J0QXR0ckF0dHJHZXR0ZXJGb3JNYWluV29y
bGQobmFtZSwgaW5mbyk7Ci19Ci0KIHN0YXRpYyB2b2lkIHNob3J0QXR0ckF0dHJTZXR0ZXIodjg6
OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25z
dCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQogewogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9i
ajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7CkBAIC0zNDUsMTkgKzIzNSw2IEBAIHN0YXRpYyB2
b2lkIHNob3J0QXR0ckF0dHJTZXR0ZXJDYWxsYmFjayh2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFt
ZSwgdjg6OkxvY2FsPHY4CiAgICAgVGVzdE9ialY4SW50ZXJuYWw6OnNob3J0QXR0ckF0dHJTZXR0
ZXIobmFtZSwgdmFsdWUsIGluZm8pOwogfQogCi1zdGF0aWMgdm9pZCBzaG9ydEF0dHJBdHRyU2V0
dGVyRm9yTWFpbldvcmxkKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6
OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKLXsKLSAgICBUZXN0
T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwotICAgIGludCB2
ID0gdG9JbnQzMih2YWx1ZSk7Ci0gICAgaW1wLT5zZXRTaG9ydEF0dHIodik7Ci0gICAgcmV0dXJu
OwotfQotCi1zdGF0aWMgdm9pZCBzaG9ydEF0dHJBdHRyU2V0dGVyQ2FsbGJhY2tGb3JNYWluV29y
bGQodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVl
LCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQotewotICAgIFRlc3RPYmpWOEludGVybmFs
OjpzaG9ydEF0dHJBdHRyU2V0dGVyRm9yTWFpbldvcmxkKG5hbWUsIHZhbHVlLCBpbmZvKTsKLX0K
LQogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB1bnNpZ25lZFNob3J0QXR0ckF0dHJHZXR0
ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGlu
Zm8pCiB7CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRl
cigpKTsKQEAgLTM2OSwxNyArMjQ2LDYgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB1
bnNpZ25lZFNob3J0QXR0ckF0dHJHZXR0ZXJDYWxsYmFjayh2ODo6TG9jYWw8djg6OlMKICAgICBy
ZXR1cm4gVGVzdE9ialY4SW50ZXJuYWw6OnVuc2lnbmVkU2hvcnRBdHRyQXR0ckdldHRlcihuYW1l
LCBpbmZvKTsKIH0KIAotc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB1bnNpZ25lZFNob3J0
QXR0ckF0dHJHZXR0ZXJGb3JNYWluV29ybGQodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNv
bnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCi17Ci0gICAgVGVzdE9iaiogaW1wID0gVjhUZXN0
T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKLSAgICByZXR1cm4gdjhJbnRlZ2VyKGltcC0+
dW5zaWduZWRTaG9ydEF0dHIoKSwgaW5mby5HZXRJc29sYXRlKCkpOwotfQotCi1zdGF0aWMgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IHVuc2lnbmVkU2hvcnRBdHRyQXR0ckdldHRlckNhbGxiYWNrRm9y
TWFpbldvcmxkKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJ
bmZvJiBpbmZvKQotewotICAgIHJldHVybiBUZXN0T2JqVjhJbnRlcm5hbDo6dW5zaWduZWRTaG9y
dEF0dHJBdHRyR2V0dGVyRm9yTWFpbldvcmxkKG5hbWUsIGluZm8pOwotfQotCiBzdGF0aWMgdm9p
ZCB1bnNpZ25lZFNob3J0QXR0ckF0dHJTZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUs
IHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZv
KQogewogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIo
KSk7CkBAIC0zOTMsMTkgKzI1OSw2IEBAIHN0YXRpYyB2b2lkIHVuc2lnbmVkU2hvcnRBdHRyQXR0
clNldHRlckNhbGxiYWNrKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6CiAgICAgVGVz
dE9ialY4SW50ZXJuYWw6OnVuc2lnbmVkU2hvcnRBdHRyQXR0clNldHRlcihuYW1lLCB2YWx1ZSwg
aW5mbyk7CiB9CiAKLXN0YXRpYyB2b2lkIHVuc2lnbmVkU2hvcnRBdHRyQXR0clNldHRlckZvck1h
aW5Xb3JsZCh2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4g
dmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCi17Ci0gICAgVGVzdE9iaiogaW1w
ID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKLSAgICBpbnQgdiA9IHRvVUlu
dDMyKHZhbHVlKTsKLSAgICBpbXAtPnNldFVuc2lnbmVkU2hvcnRBdHRyKHYpOwotICAgIHJldHVy
bjsKLX0KLQotc3RhdGljIHZvaWQgdW5zaWduZWRTaG9ydEF0dHJBdHRyU2V0dGVyQ2FsbGJhY2tG
b3JNYWluV29ybGQodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFs
dWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQotewotICAgIFRlc3RPYmpW
OEludGVybmFsOjp1bnNpZ25lZFNob3J0QXR0ckF0dHJTZXR0ZXJGb3JNYWluV29ybGQobmFtZSwg
dmFsdWUsIGluZm8pOwotfQotCiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGxvbmdBdHRy
QXR0ckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29y
SW5mbyYgaW5mbykKIHsKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGlu
Zm8uSG9sZGVyKCkpOwpAQCAtNDE3LDE3ICsyNzAsNiBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IGxvbmdBdHRyQXR0ckdldHRlckNhbGxiYWNrKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBu
YQogICAgIHJldHVybiBUZXN0T2JqVjhJbnRlcm5hbDo6bG9uZ0F0dHJBdHRyR2V0dGVyKG5hbWUs
IGluZm8pOwogfQogCi1zdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGxvbmdBdHRyQXR0ckdl
dHRlckZvck1haW5Xb3JsZCh2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFj
Y2Vzc29ySW5mbyYgaW5mbykKLXsKLSAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0
aXZlKGluZm8uSG9sZGVyKCkpOwotICAgIHJldHVybiB2OEludGVnZXIoaW1wLT5sb25nQXR0cigp
LCBpbmZvLkdldElzb2xhdGUoKSk7Ci19Ci0KLXN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
bG9uZ0F0dHJBdHRyR2V0dGVyQ2FsbGJhY2tGb3JNYWluV29ybGQodjg6OkxvY2FsPHY4OjpTdHJp
bmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCi17Ci0gICAgcmV0dXJuIFRl
c3RPYmpWOEludGVybmFsOjpsb25nQXR0ckF0dHJHZXR0ZXJGb3JNYWluV29ybGQobmFtZSwgaW5m
byk7Ci19Ci0KIHN0YXRpYyB2b2lkIGxvbmdBdHRyQXR0clNldHRlcih2ODo6TG9jYWw8djg6OlN0
cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3Nv
ckluZm8mIGluZm8pCiB7CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShp
bmZvLkhvbGRlcigpKTsKQEAgLTQ0MSwxOSArMjgzLDYgQEAgc3RhdGljIHZvaWQgbG9uZ0F0dHJB
dHRyU2V0dGVyQ2FsbGJhY2sodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2
ODoKICAgICBUZXN0T2JqVjhJbnRlcm5hbDo6bG9uZ0F0dHJBdHRyU2V0dGVyKG5hbWUsIHZhbHVl
LCBpbmZvKTsKIH0KIAotc3RhdGljIHZvaWQgbG9uZ0F0dHJBdHRyU2V0dGVyRm9yTWFpbldvcmxk
KHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwg
Y29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKLXsKLSAgICBUZXN0T2JqKiBpbXAgPSBWOFRl
c3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwotICAgIGludCB2ID0gdG9JbnQzMih2YWx1
ZSk7Ci0gICAgaW1wLT5zZXRMb25nQXR0cih2KTsKLSAgICByZXR1cm47Ci19Ci0KLXN0YXRpYyB2
b2lkIGxvbmdBdHRyQXR0clNldHRlckNhbGxiYWNrRm9yTWFpbldvcmxkKHY4OjpMb2NhbDx2ODo6
U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vz
c29ySW5mbyYgaW5mbykKLXsKLSAgICBUZXN0T2JqVjhJbnRlcm5hbDo6bG9uZ0F0dHJBdHRyU2V0
dGVyRm9yTWFpbldvcmxkKG5hbWUsIHZhbHVlLCBpbmZvKTsKLX0KLQogc3RhdGljIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiBsb25nTG9uZ0F0dHJBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5n
PiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQogewogICAgIFRlc3RPYmoqIGlt
cCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7CkBAIC00NjUsMTcgKzI5NCw2
IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbG9uZ0xvbmdBdHRyQXR0ckdldHRlckNh
bGxiYWNrKHY4OjpMb2NhbDx2ODo6U3RyaW5nCiAgICAgcmV0dXJuIFRlc3RPYmpWOEludGVybmFs
Ojpsb25nTG9uZ0F0dHJBdHRyR2V0dGVyKG5hbWUsIGluZm8pOwogfQogCi1zdGF0aWMgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IGxvbmdMb25nQXR0ckF0dHJHZXR0ZXJGb3JNYWluV29ybGQodjg6Okxv
Y2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCi17Ci0g
ICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKLSAg
ICByZXR1cm4gdjg6Ok51bWJlcjo6TmV3KHN0YXRpY19jYXN0PGRvdWJsZT4oaW1wLT5sb25nTG9u
Z0F0dHIoKSkpOwotfQotCi1zdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGxvbmdMb25nQXR0
ckF0dHJHZXR0ZXJDYWxsYmFja0Zvck1haW5Xb3JsZCh2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFt
ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKLXsKLSAgICByZXR1cm4gVGVzdE9ialY4
SW50ZXJuYWw6OmxvbmdMb25nQXR0ckF0dHJHZXR0ZXJGb3JNYWluV29ybGQobmFtZSwgaW5mbyk7
Ci19Ci0KIHN0YXRpYyB2b2lkIGxvbmdMb25nQXR0ckF0dHJTZXR0ZXIodjg6OkxvY2FsPHY4OjpT
dHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNz
b3JJbmZvJiBpbmZvKQogewogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUo
aW5mby5Ib2xkZXIoKSk7CkBAIC00ODksMTkgKzMwNyw2IEBAIHN0YXRpYyB2b2lkIGxvbmdMb25n
QXR0ckF0dHJTZXR0ZXJDYWxsYmFjayh2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6Okxv
Y2FsCiAgICAgVGVzdE9ialY4SW50ZXJuYWw6OmxvbmdMb25nQXR0ckF0dHJTZXR0ZXIobmFtZSwg
dmFsdWUsIGluZm8pOwogfQogCi1zdGF0aWMgdm9pZCBsb25nTG9uZ0F0dHJBdHRyU2V0dGVyRm9y
TWFpbldvcmxkKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVl
PiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKLXsKLSAgICBUZXN0T2JqKiBp
bXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwotICAgIGxvbmcgbG9uZyB2
ID0gdG9JbnQ2NCh2YWx1ZSk7Ci0gICAgaW1wLT5zZXRMb25nTG9uZ0F0dHIodik7Ci0gICAgcmV0
dXJuOwotfQotCi1zdGF0aWMgdm9pZCBsb25nTG9uZ0F0dHJBdHRyU2V0dGVyQ2FsbGJhY2tGb3JN
YWluV29ybGQodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+
IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQotewotICAgIFRlc3RPYmpWOElu
dGVybmFsOjpsb25nTG9uZ0F0dHJBdHRyU2V0dGVyRm9yTWFpbldvcmxkKG5hbWUsIHZhbHVlLCBp
bmZvKTsKLX0KLQogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB1bnNpZ25lZExvbmdMb25n
QXR0ckF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nl
c3NvckluZm8mIGluZm8pCiB7CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2
ZShpbmZvLkhvbGRlcigpKTsKQEAgLTUxMywxNyArMzE4LDYgQEAgc3RhdGljIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiB1bnNpZ25lZExvbmdMb25nQXR0ckF0dHJHZXR0ZXJDYWxsYmFjayh2ODo6TG9j
YWw8djgKICAgICByZXR1cm4gVGVzdE9ialY4SW50ZXJuYWw6OnVuc2lnbmVkTG9uZ0xvbmdBdHRy
QXR0ckdldHRlcihuYW1lLCBpbmZvKTsKIH0KIAotc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiB1bnNpZ25lZExvbmdMb25nQXR0ckF0dHJHZXR0ZXJGb3JNYWluV29ybGQodjg6OkxvY2FsPHY4
OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCi17Ci0gICAgVGVz
dE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKLSAgICByZXR1
cm4gdjg6Ok51bWJlcjo6TmV3KHN0YXRpY19jYXN0PGRvdWJsZT4oaW1wLT51bnNpZ25lZExvbmdM
b25nQXR0cigpKSk7Ci19Ci0KLXN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdW5zaWduZWRM
b25nTG9uZ0F0dHJBdHRyR2V0dGVyQ2FsbGJhY2tGb3JNYWluV29ybGQodjg6OkxvY2FsPHY4OjpT
dHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCi17Ci0gICAgcmV0dXJu
IFRlc3RPYmpWOEludGVybmFsOjp1bnNpZ25lZExvbmdMb25nQXR0ckF0dHJHZXR0ZXJGb3JNYWlu
V29ybGQobmFtZSwgaW5mbyk7Ci19Ci0KIHN0YXRpYyB2b2lkIHVuc2lnbmVkTG9uZ0xvbmdBdHRy
QXR0clNldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1
ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCiB7CiAgICAgVGVzdE9iaiog
aW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKQEAgLTUzNywxOSArMzMx
LDYgQEAgc3RhdGljIHZvaWQgdW5zaWduZWRMb25nTG9uZ0F0dHJBdHRyU2V0dGVyQ2FsbGJhY2so
djg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHYKICAgICBUZXN0T2JqVjhJbnRlcm5hbDo6dW5z
aWduZWRMb25nTG9uZ0F0dHJBdHRyU2V0dGVyKG5hbWUsIHZhbHVlLCBpbmZvKTsKIH0KIAotc3Rh
dGljIHZvaWQgdW5zaWduZWRMb25nTG9uZ0F0dHJBdHRyU2V0dGVyRm9yTWFpbldvcmxkKHY4OjpM
b2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qg
djg6OkFjY2Vzc29ySW5mbyYgaW5mbykKLXsKLSAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6
OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwotICAgIHVuc2lnbmVkIGxvbmcgbG9uZyB2ID0gdG9J
bnQ2NCh2YWx1ZSk7Ci0gICAgaW1wLT5zZXRVbnNpZ25lZExvbmdMb25nQXR0cih2KTsKLSAgICBy
ZXR1cm47Ci19Ci0KLXN0YXRpYyB2b2lkIHVuc2lnbmVkTG9uZ0xvbmdBdHRyQXR0clNldHRlckNh
bGxiYWNrRm9yTWFpbldvcmxkKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8
djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKLXsKLSAgICBU
ZXN0T2JqVjhJbnRlcm5hbDo6dW5zaWduZWRMb25nTG9uZ0F0dHJBdHRyU2V0dGVyRm9yTWFpbldv
cmxkKG5hbWUsIHZhbHVlLCBpbmZvKTsKLX0KLQogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiBzdHJpbmdBdHRyQXR0ckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qg
djg6OkFjY2Vzc29ySW5mbyYgaW5mbykKIHsKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6
OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwpAQCAtNTYxLDE3ICszNDIsNiBAQCBzdGF0aWMgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IHN0cmluZ0F0dHJBdHRyR2V0dGVyQ2FsbGJhY2sodjg6OkxvY2Fs
PHY4OjpTdHJpbmc+CiAgICAgcmV0dXJuIFRlc3RPYmpWOEludGVybmFsOjpzdHJpbmdBdHRyQXR0
ckdldHRlcihuYW1lLCBpbmZvKTsKIH0KIAotc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBz
dHJpbmdBdHRyQXR0ckdldHRlckZvck1haW5Xb3JsZCh2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFt
ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKLXsKLSAgICBUZXN0T2JqKiBpbXAgPSBW
OFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwotICAgIHJldHVybiB2OFN0cmluZyhp
bXAtPnN0cmluZ0F0dHIoKSwgaW5mby5HZXRJc29sYXRlKCksIFJldHVyblVuc2FmZUhhbmRsZSk7
Ci19Ci0KLXN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gc3RyaW5nQXR0ckF0dHJHZXR0ZXJD
YWxsYmFja0Zvck1haW5Xb3JsZCh2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6
OkFjY2Vzc29ySW5mbyYgaW5mbykKLXsKLSAgICByZXR1cm4gVGVzdE9ialY4SW50ZXJuYWw6OnN0
cmluZ0F0dHJBdHRyR2V0dGVyRm9yTWFpbldvcmxkKG5hbWUsIGluZm8pOwotfQotCiBzdGF0aWMg
dm9pZCBzdHJpbmdBdHRyQXR0clNldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6
OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCiB7
CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsK
QEAgLTU4NSwxOSArMzU1LDYgQEAgc3RhdGljIHZvaWQgc3RyaW5nQXR0ckF0dHJTZXR0ZXJDYWxs
YmFjayh2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHYKICAgICBUZXN0T2Jq
VjhJbnRlcm5hbDo6c3RyaW5nQXR0ckF0dHJTZXR0ZXIobmFtZSwgdmFsdWUsIGluZm8pOwogfQog
Ci1zdGF0aWMgdm9pZCBzdHJpbmdBdHRyQXR0clNldHRlckZvck1haW5Xb3JsZCh2ODo6TG9jYWw8
djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpB
Y2Nlc3NvckluZm8mIGluZm8pCi17Ci0gICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05h
dGl2ZShpbmZvLkhvbGRlcigpKTsKLSAgICBWOFRSWUNBVENIX0ZPUl9WOFNUUklOR1JFU09VUkNF
X1ZPSUQoVjhTdHJpbmdSZXNvdXJjZTw+LCB2LCB2YWx1ZSk7Ci0gICAgaW1wLT5zZXRTdHJpbmdB
dHRyKHYpOwotICAgIHJldHVybjsKLX0KLQotc3RhdGljIHZvaWQgc3RyaW5nQXR0ckF0dHJTZXR0
ZXJDYWxsYmFja0Zvck1haW5Xb3JsZCh2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6Okxv
Y2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCi17Ci0g
ICAgVGVzdE9ialY4SW50ZXJuYWw6OnN0cmluZ0F0dHJBdHRyU2V0dGVyRm9yTWFpbldvcmxkKG5h
bWUsIHZhbHVlLCBpbmZvKTsKLX0KLQogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0ZXN0
T2JqQXR0ckF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpB
Y2Nlc3NvckluZm8mIGluZm8pCiB7CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05h
dGl2ZShpbmZvLkhvbGRlcigpKTsKQEAgLTYxMCwxOCArMzY3LDYgQEAgc3RhdGljIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiB0ZXN0T2JqQXR0ckF0dHJHZXR0ZXJDYWxsYmFjayh2ODo6TG9jYWw8djg6
OlN0cmluZz4KICAgICByZXR1cm4gVGVzdE9ialY4SW50ZXJuYWw6OnRlc3RPYmpBdHRyQXR0ckdl
dHRlcihuYW1lLCBpbmZvKTsKIH0KIAotc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0ZXN0
T2JqQXR0ckF0dHJHZXR0ZXJGb3JNYWluV29ybGQodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUs
IGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCi17Ci0gICAgVGVzdE9iaiogaW1wID0gVjhU
ZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKLSAgICByZXR1cm4gdG9WOEZhc3RGb3JN
YWluV29ybGQoaW1wLT50ZXN0T2JqQXR0cigpLCBpbmZvLCBpbXApOwotfQotCi1zdGF0aWMgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IHRlc3RPYmpBdHRyQXR0ckdldHRlckNhbGxiYWNrRm9yTWFpbldv
cmxkKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBp
bmZvKQotewotICAgIEZlYXR1cmVPYnNlcnZlcjo6b2JzZXJ2ZShhY3RpdmVET01XaW5kb3coQmlu
ZGluZ1N0YXRlOjppbnN0YW5jZSgpKSwgRmVhdHVyZU9ic2VydmVyOjpUZXN0RmVhdHVyZSk7Ci0g
ICAgcmV0dXJuIFRlc3RPYmpWOEludGVybmFsOjp0ZXN0T2JqQXR0ckF0dHJHZXR0ZXJGb3JNYWlu
V29ybGQobmFtZSwgaW5mbyk7Ci19Ci0KIHN0YXRpYyB2b2lkIHRlc3RPYmpBdHRyQXR0clNldHRl
cih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUs
IGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCiB7CiAgICAgVGVzdE9iaiogaW1wID0gVjhU
ZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKQEAgLTYzNiwyMCArMzgxLDYgQEAgc3Rh
dGljIHZvaWQgdGVzdE9iakF0dHJBdHRyU2V0dGVyQ2FsbGJhY2sodjg6OkxvY2FsPHY4OjpTdHJp
bmc+IG5hbWUsIHY4OjpMb2NhbDwKICAgICBUZXN0T2JqVjhJbnRlcm5hbDo6dGVzdE9iakF0dHJB
dHRyU2V0dGVyKG5hbWUsIHZhbHVlLCBpbmZvKTsKIH0KIAotc3RhdGljIHZvaWQgdGVzdE9iakF0
dHJBdHRyU2V0dGVyRm9yTWFpbldvcmxkKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6
TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKLXsK
LSAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwot
ICAgIFRlc3RPYmoqIHYgPSBWOFRlc3RPYmo6Okhhc0luc3RhbmNlKHZhbHVlLCBpbmZvLkdldElz
b2xhdGUoKSwgd29ybGRUeXBlKGluZm8uR2V0SXNvbGF0ZSgpKSkgPyBWOFRlc3RPYmo6OnRvTmF0
aXZlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QodmFsdWUpKSA6IDA7Ci0gICAgaW1wLT5z
ZXRUZXN0T2JqQXR0cihXVEY6OmdldFB0cih2KSk7Ci0gICAgcmV0dXJuOwotfQotCi1zdGF0aWMg
dm9pZCB0ZXN0T2JqQXR0ckF0dHJTZXR0ZXJDYWxsYmFja0Zvck1haW5Xb3JsZCh2ODo6TG9jYWw8
djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpB
Y2Nlc3NvckluZm8mIGluZm8pCi17Ci0gICAgRmVhdHVyZU9ic2VydmVyOjpvYnNlcnZlKGFjdGl2
ZURPTVdpbmRvdyhCaW5kaW5nU3RhdGU6Omluc3RhbmNlKCkpLCBGZWF0dXJlT2JzZXJ2ZXI6OlRl
c3RGZWF0dXJlKTsKLSAgICBUZXN0T2JqVjhJbnRlcm5hbDo6dGVzdE9iakF0dHJBdHRyU2V0dGVy
Rm9yTWFpbldvcmxkKG5hbWUsIHZhbHVlLCBpbmZvKTsKLX0KLQogc3RhdGljIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiBYTUxPYmpBdHRyQXR0ckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFt
ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKIHsKICAgICBUZXN0T2JqKiBpbXAgPSBW
OFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwpAQCAtNjYxLDE3ICszOTIsNiBAQCBz
dGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFhNTE9iakF0dHJBdHRyR2V0dGVyQ2FsbGJhY2so
djg6OkxvY2FsPHY4OjpTdHJpbmc+CiAgICAgcmV0dXJuIFRlc3RPYmpWOEludGVybmFsOjpYTUxP
YmpBdHRyQXR0ckdldHRlcihuYW1lLCBpbmZvKTsKIH0KIAotc3RhdGljIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBYTUxPYmpBdHRyQXR0ckdldHRlckZvck1haW5Xb3JsZCh2ODo6TG9jYWw8djg6OlN0
cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKLXsKLSAgICBUZXN0T2Jq
KiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwotICAgIHJldHVybiB0
b1Y4RmFzdEZvck1haW5Xb3JsZChpbXAtPnhtbE9iakF0dHIoKSwgaW5mbywgaW1wKTsKLX0KLQot
c3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBYTUxPYmpBdHRyQXR0ckdldHRlckNhbGxiYWNr
Rm9yTWFpbldvcmxkKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNz
b3JJbmZvJiBpbmZvKQotewotICAgIHJldHVybiBUZXN0T2JqVjhJbnRlcm5hbDo6WE1MT2JqQXR0
ckF0dHJHZXR0ZXJGb3JNYWluV29ybGQobmFtZSwgaW5mbyk7Ci19Ci0KIHN0YXRpYyB2b2lkIFhN
TE9iakF0dHJBdHRyU2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8
djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKIHsKICAgICBU
ZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwpAQCAtNjg1
LDE5ICs0MDUsNiBAQCBzdGF0aWMgdm9pZCBYTUxPYmpBdHRyQXR0clNldHRlckNhbGxiYWNrKHY4
OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8dgogICAgIFRlc3RPYmpWOEludGVy
bmFsOjpYTUxPYmpBdHRyQXR0clNldHRlcihuYW1lLCB2YWx1ZSwgaW5mbyk7CiB9CiAKLXN0YXRp
YyB2b2lkIFhNTE9iakF0dHJBdHRyU2V0dGVyRm9yTWFpbldvcmxkKHY4OjpMb2NhbDx2ODo6U3Ry
aW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29y
SW5mbyYgaW5mbykKLXsKLSAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGlu
Zm8uSG9sZGVyKCkpOwotICAgIFRlc3RPYmoqIHYgPSBWOFRlc3RPYmo6Okhhc0luc3RhbmNlKHZh
bHVlLCBpbmZvLkdldElzb2xhdGUoKSwgd29ybGRUeXBlKGluZm8uR2V0SXNvbGF0ZSgpKSkgPyBW
OFRlc3RPYmo6OnRvTmF0aXZlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QodmFsdWUpKSA6
IDA7Ci0gICAgaW1wLT5zZXRYTUxPYmpBdHRyKFdURjo6Z2V0UHRyKHYpKTsKLSAgICByZXR1cm47
Ci19Ci0KLXN0YXRpYyB2b2lkIFhNTE9iakF0dHJBdHRyU2V0dGVyQ2FsbGJhY2tGb3JNYWluV29y
bGQodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVl
LCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQotewotICAgIFRlc3RPYmpWOEludGVybmFs
OjpYTUxPYmpBdHRyQXR0clNldHRlckZvck1haW5Xb3JsZChuYW1lLCB2YWx1ZSwgaW5mbyk7Ci19
Ci0KIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY3JlYXRlQXR0ckdldHRlcih2ODo6TG9j
YWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKIHsKICAg
ICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwpAQCAt
NzA5LDE3ICs0MTYsNiBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNyZWF0ZUF0dHJH
ZXR0ZXJDYWxsYmFjayh2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZQogICAgIHJldHVybiBUZXN0
T2JqVjhJbnRlcm5hbDo6Y3JlYXRlQXR0ckdldHRlcihuYW1lLCBpbmZvKTsKIH0KIAotc3RhdGlj
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjcmVhdGVBdHRyR2V0dGVyRm9yTWFpbldvcmxkKHY4OjpM
b2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQotewot
ICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0g
ICAgcmV0dXJuIHY4Qm9vbGVhbihpbXAtPmlzQ3JlYXRlKCksIGluZm8uR2V0SXNvbGF0ZSgpKTsK
LX0KLQotc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjcmVhdGVBdHRyR2V0dGVyQ2FsbGJh
Y2tGb3JNYWluV29ybGQodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nl
c3NvckluZm8mIGluZm8pCi17Ci0gICAgcmV0dXJuIFRlc3RPYmpWOEludGVybmFsOjpjcmVhdGVB
dHRyR2V0dGVyRm9yTWFpbldvcmxkKG5hbWUsIGluZm8pOwotfQotCiBzdGF0aWMgdm9pZCBjcmVh
dGVBdHRyU2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZh
bHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKIHsKICAgICBUZXN0T2Jq
KiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwpAQCAtNzMzLDE5ICs0
MjksNiBAQCBzdGF0aWMgdm9pZCBjcmVhdGVBdHRyU2V0dGVyQ2FsbGJhY2sodjg6OkxvY2FsPHY4
OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VgogICAgIFRlc3RPYmpWOEludGVybmFsOjpj
cmVhdGVBdHRyU2V0dGVyKG5hbWUsIHZhbHVlLCBpbmZvKTsKIH0KIAotc3RhdGljIHZvaWQgY3Jl
YXRlQXR0clNldHRlckZvck1haW5Xb3JsZCh2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6
OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCi17
Ci0gICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsK
LSAgICBib29sIHYgPSB2YWx1ZS0+Qm9vbGVhblZhbHVlKCk7Ci0gICAgaW1wLT5zZXRDcmVhdGUo
dik7Ci0gICAgcmV0dXJuOwotfQotCi1zdGF0aWMgdm9pZCBjcmVhdGVBdHRyU2V0dGVyQ2FsbGJh
Y2tGb3JNYWluV29ybGQodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6
VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQotewotICAgIFRlc3RP
YmpWOEludGVybmFsOjpjcmVhdGVBdHRyU2V0dGVyRm9yTWFpbldvcmxkKG5hbWUsIHZhbHVlLCBp
bmZvKTsKLX0KLQogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiByZWZsZWN0ZWRTdHJpbmdB
dHRyQXR0ckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vz
c29ySW5mbyYgaW5mbykKIHsKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZl
KGluZm8uSG9sZGVyKCkpOwpAQCAtNzU3LDE3ICs0NDAsNiBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IHJlZmxlY3RlZFN0cmluZ0F0dHJBdHRyR2V0dGVyQ2FsbGJhY2sodjg6OkxvY2Fs
PHY4OgogICAgIHJldHVybiBUZXN0T2JqVjhJbnRlcm5hbDo6cmVmbGVjdGVkU3RyaW5nQXR0ckF0
dHJHZXR0ZXIobmFtZSwgaW5mbyk7CiB9CiAKLXN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
cmVmbGVjdGVkU3RyaW5nQXR0ckF0dHJHZXR0ZXJGb3JNYWluV29ybGQodjg6OkxvY2FsPHY4OjpT
dHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCi17Ci0gICAgVGVzdE9i
aiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKLSAgICByZXR1cm4g
djhTdHJpbmcoaW1wLT5mYXN0R2V0QXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVj
dGVkc3RyaW5nYXR0ckF0dHIpLCBpbmZvLkdldElzb2xhdGUoKSwgUmV0dXJuVW5zYWZlSGFuZGxl
KTsKLX0KLQotc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiByZWZsZWN0ZWRTdHJpbmdBdHRy
QXR0ckdldHRlckNhbGxiYWNrRm9yTWFpbldvcmxkKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1l
LCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQotewotICAgIHJldHVybiBUZXN0T2JqVjhJ
bnRlcm5hbDo6cmVmbGVjdGVkU3RyaW5nQXR0ckF0dHJHZXR0ZXJGb3JNYWluV29ybGQobmFtZSwg
aW5mbyk7Ci19Ci0KIHN0YXRpYyB2b2lkIHJlZmxlY3RlZFN0cmluZ0F0dHJBdHRyU2V0dGVyKHY4
OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29u
c3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKIHsKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RP
Ymo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwpAQCAtNzgxLDE5ICs0NTMsNiBAQCBzdGF0aWMg
dm9pZCByZWZsZWN0ZWRTdHJpbmdBdHRyQXR0clNldHRlckNhbGxiYWNrKHY4OjpMb2NhbDx2ODo6
U3RyaW5nPiBuYW1lLCB2OAogICAgIFRlc3RPYmpWOEludGVybmFsOjpyZWZsZWN0ZWRTdHJpbmdB
dHRyQXR0clNldHRlcihuYW1lLCB2YWx1ZSwgaW5mbyk7CiB9CiAKLXN0YXRpYyB2b2lkIHJlZmxl
Y3RlZFN0cmluZ0F0dHJBdHRyU2V0dGVyRm9yTWFpbldvcmxkKHY4OjpMb2NhbDx2ODo6U3RyaW5n
PiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5m
byYgaW5mbykKLXsKLSAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8u
SG9sZGVyKCkpOwotICAgIFY4VFJZQ0FUQ0hfRk9SX1Y4U1RSSU5HUkVTT1VSQ0VfVk9JRChWOFN0
cmluZ1Jlc291cmNlPFdpdGhOdWxsQ2hlY2s+LCB2LCB2YWx1ZSk7Ci0gICAgaW1wLT5zZXRBdHRy
aWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRzdHJpbmdhdHRyQXR0ciwgdik7Ci0g
ICAgcmV0dXJuOwotfQotCi1zdGF0aWMgdm9pZCByZWZsZWN0ZWRTdHJpbmdBdHRyQXR0clNldHRl
ckNhbGxiYWNrRm9yTWFpbldvcmxkKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9j
YWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKLXsKLSAg
ICBUZXN0T2JqVjhJbnRlcm5hbDo6cmVmbGVjdGVkU3RyaW5nQXR0ckF0dHJTZXR0ZXJGb3JNYWlu
V29ybGQobmFtZSwgdmFsdWUsIGluZm8pOwotfQotCiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IHJlZmxlY3RlZEludGVncmFsQXR0ckF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+
IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCiB7CiAgICAgVGVzdE9iaiogaW1w
ID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKQEAgLTgwNSwxNyArNDY0LDYg
QEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiByZWZsZWN0ZWRJbnRlZ3JhbEF0dHJBdHRy
R2V0dGVyQ2FsbGJhY2sodjg6OkxvY2FsPHYKICAgICByZXR1cm4gVGVzdE9ialY4SW50ZXJuYWw6
OnJlZmxlY3RlZEludGVncmFsQXR0ckF0dHJHZXR0ZXIobmFtZSwgaW5mbyk7CiB9CiAKLXN0YXRp
YyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcmVmbGVjdGVkSW50ZWdyYWxBdHRyQXR0ckdldHRlckZv
ck1haW5Xb3JsZCh2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29y
SW5mbyYgaW5mbykKLXsKLSAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGlu
Zm8uSG9sZGVyKCkpOwotICAgIHJldHVybiB2OEludGVnZXIoaW1wLT5nZXRJbnRlZ3JhbEF0dHJp
YnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZGludGVncmFsYXR0ckF0dHIpLCBpbmZv
LkdldElzb2xhdGUoKSk7Ci19Ci0KLXN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcmVmbGVj
dGVkSW50ZWdyYWxBdHRyQXR0ckdldHRlckNhbGxiYWNrRm9yTWFpbldvcmxkKHY4OjpMb2NhbDx2
ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQotewotICAgIHJl
dHVybiBUZXN0T2JqVjhJbnRlcm5hbDo6cmVmbGVjdGVkSW50ZWdyYWxBdHRyQXR0ckdldHRlckZv
ck1haW5Xb3JsZChuYW1lLCBpbmZvKTsKLX0KLQogc3RhdGljIHZvaWQgcmVmbGVjdGVkSW50ZWdy
YWxBdHRyQXR0clNldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4
OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCiB7CiAgICAgVGVz
dE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKQEAgLTgyOSwx
OSArNDc3LDYgQEAgc3RhdGljIHZvaWQgcmVmbGVjdGVkSW50ZWdyYWxBdHRyQXR0clNldHRlckNh
bGxiYWNrKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLAogICAgIFRlc3RPYmpWOEludGVybmFs
OjpyZWZsZWN0ZWRJbnRlZ3JhbEF0dHJBdHRyU2V0dGVyKG5hbWUsIHZhbHVlLCBpbmZvKTsKIH0K
IAotc3RhdGljIHZvaWQgcmVmbGVjdGVkSW50ZWdyYWxBdHRyQXR0clNldHRlckZvck1haW5Xb3Js
ZCh2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUs
IGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCi17Ci0gICAgVGVzdE9iaiogaW1wID0gVjhU
ZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKLSAgICBpbnQgdiA9IHRvSW50MzIodmFs
dWUpOwotICAgIGltcC0+c2V0SW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpy
ZWZsZWN0ZWRpbnRlZ3JhbGF0dHJBdHRyLCB2KTsKLSAgICByZXR1cm47Ci19Ci0KLXN0YXRpYyB2
b2lkIHJlZmxlY3RlZEludGVncmFsQXR0ckF0dHJTZXR0ZXJDYWxsYmFja0Zvck1haW5Xb3JsZCh2
ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNv
bnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCi17Ci0gICAgVGVzdE9ialY4SW50ZXJuYWw6OnJl
ZmxlY3RlZEludGVncmFsQXR0ckF0dHJTZXR0ZXJGb3JNYWluV29ybGQobmFtZSwgdmFsdWUsIGlu
Zm8pOwotfQotCiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHJlZmxlY3RlZFVuc2lnbmVk
SW50ZWdyYWxBdHRyQXR0ckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qg
djg6OkFjY2Vzc29ySW5mbyYgaW5mbykKIHsKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6
OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwpAQCAtODUzLDE3ICs0ODgsNiBAQCBzdGF0aWMgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IHJlZmxlY3RlZFVuc2lnbmVkSW50ZWdyYWxBdHRyQXR0ckdldHRl
ckNhbGxiYWNrKHY4OgogICAgIHJldHVybiBUZXN0T2JqVjhJbnRlcm5hbDo6cmVmbGVjdGVkVW5z
aWduZWRJbnRlZ3JhbEF0dHJBdHRyR2V0dGVyKG5hbWUsIGluZm8pOwogfQogCi1zdGF0aWMgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IHJlZmxlY3RlZFVuc2lnbmVkSW50ZWdyYWxBdHRyQXR0ckdldHRl
ckZvck1haW5Xb3JsZCh2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vz
c29ySW5mbyYgaW5mbykKLXsKLSAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZl
KGluZm8uSG9sZGVyKCkpOwotICAgIHJldHVybiB2OFVuc2lnbmVkSW50ZWdlcihzdGQ6Om1heCgw
LCBpbXAtPmdldEludGVncmFsQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVk
dW5zaWduZWRpbnRlZ3JhbGF0dHJBdHRyKSksIGluZm8uR2V0SXNvbGF0ZSgpKTsKLX0KLQotc3Rh
dGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiByZWZsZWN0ZWRVbnNpZ25lZEludGVncmFsQXR0ckF0
dHJHZXR0ZXJDYWxsYmFja0Zvck1haW5Xb3JsZCh2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwg
Y29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKLXsKLSAgICByZXR1cm4gVGVzdE9ialY4SW50
ZXJuYWw6OnJlZmxlY3RlZFVuc2lnbmVkSW50ZWdyYWxBdHRyQXR0ckdldHRlckZvck1haW5Xb3Js
ZChuYW1lLCBpbmZvKTsKLX0KLQogc3RhdGljIHZvaWQgcmVmbGVjdGVkVW5zaWduZWRJbnRlZ3Jh
bEF0dHJBdHRyU2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6
OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKIHsKICAgICBUZXN0
T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwpAQCAtODc3LDE5
ICs1MDEsNiBAQCBzdGF0aWMgdm9pZCByZWZsZWN0ZWRVbnNpZ25lZEludGVncmFsQXR0ckF0dHJT
ZXR0ZXJDYWxsYmFjayh2ODo6TG9jYWw8djg6OlN0cmluZwogICAgIFRlc3RPYmpWOEludGVybmFs
OjpyZWZsZWN0ZWRVbnNpZ25lZEludGVncmFsQXR0ckF0dHJTZXR0ZXIobmFtZSwgdmFsdWUsIGlu
Zm8pOwogfQogCi1zdGF0aWMgdm9pZCByZWZsZWN0ZWRVbnNpZ25lZEludGVncmFsQXR0ckF0dHJT
ZXR0ZXJGb3JNYWluV29ybGQodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2
ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQotewotICAgIFRl
c3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAgdW5z
aWduZWQgdiA9IHRvVUludDMyKHZhbHVlKTsKLSAgICBpbXAtPnNldFVuc2lnbmVkSW50ZWdyYWxB
dHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWR1bnNpZ25lZGludGVncmFsYXR0
ckF0dHIsIHYpOwotICAgIHJldHVybjsKLX0KLQotc3RhdGljIHZvaWQgcmVmbGVjdGVkVW5zaWdu
ZWRJbnRlZ3JhbEF0dHJBdHRyU2V0dGVyQ2FsbGJhY2tGb3JNYWluV29ybGQodjg6OkxvY2FsPHY4
OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNj
ZXNzb3JJbmZvJiBpbmZvKQotewotICAgIFRlc3RPYmpWOEludGVybmFsOjpyZWZsZWN0ZWRVbnNp
Z25lZEludGVncmFsQXR0ckF0dHJTZXR0ZXJGb3JNYWluV29ybGQobmFtZSwgdmFsdWUsIGluZm8p
OwotfQotCiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHJlZmxlY3RlZEJvb2xlYW5BdHRy
QXR0ckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29y
SW5mbyYgaW5mbykKIHsKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGlu
Zm8uSG9sZGVyKCkpOwpAQCAtOTAxLDE3ICs1MTIsNiBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IHJlZmxlY3RlZEJvb2xlYW5BdHRyQXR0ckdldHRlckNhbGxiYWNrKHY4OjpMb2NhbDx2
OAogICAgIHJldHVybiBUZXN0T2JqVjhJbnRlcm5hbDo6cmVmbGVjdGVkQm9vbGVhbkF0dHJBdHRy
R2V0dGVyKG5hbWUsIGluZm8pOwogfQogCi1zdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHJl
ZmxlY3RlZEJvb2xlYW5BdHRyQXR0ckdldHRlckZvck1haW5Xb3JsZCh2ODo6TG9jYWw8djg6OlN0
cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKLXsKLSAgICBUZXN0T2Jq
KiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwotICAgIHJldHVybiB2
OEJvb2xlYW4oaW1wLT5mYXN0SGFzQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVj
dGVkYm9vbGVhbmF0dHJBdHRyKSwgaW5mby5HZXRJc29sYXRlKCkpOwotfQotCi1zdGF0aWMgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IHJlZmxlY3RlZEJvb2xlYW5BdHRyQXR0ckdldHRlckNhbGxiYWNr
Rm9yTWFpbldvcmxkKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNz
b3JJbmZvJiBpbmZvKQotewotICAgIHJldHVybiBUZXN0T2JqVjhJbnRlcm5hbDo6cmVmbGVjdGVk
Qm9vbGVhbkF0dHJBdHRyR2V0dGVyRm9yTWFpbldvcmxkKG5hbWUsIGluZm8pOwotfQotCiBzdGF0
aWMgdm9pZCByZWZsZWN0ZWRCb29sZWFuQXR0ckF0dHJTZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJp
bmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJ
bmZvJiBpbmZvKQogewogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5m
by5Ib2xkZXIoKSk7CkBAIC05MjUsMTkgKzUyNSw2IEBAIHN0YXRpYyB2b2lkIHJlZmxlY3RlZEJv
b2xlYW5BdHRyQXR0clNldHRlckNhbGxiYWNrKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2
CiAgICAgVGVzdE9ialY4SW50ZXJuYWw6OnJlZmxlY3RlZEJvb2xlYW5BdHRyQXR0clNldHRlcihu
YW1lLCB2YWx1ZSwgaW5mbyk7CiB9CiAKLXN0YXRpYyB2b2lkIHJlZmxlY3RlZEJvb2xlYW5BdHRy
QXR0clNldHRlckZvck1haW5Xb3JsZCh2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6Okxv
Y2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCi17Ci0g
ICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKLSAg
ICBib29sIHYgPSB2YWx1ZS0+Qm9vbGVhblZhbHVlKCk7Ci0gICAgaW1wLT5zZXRCb29sZWFuQXR0
cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkYm9vbGVhbmF0dHJBdHRyLCB2KTsK
LSAgICByZXR1cm47Ci19Ci0KLXN0YXRpYyB2b2lkIHJlZmxlY3RlZEJvb2xlYW5BdHRyQXR0clNl
dHRlckNhbGxiYWNrRm9yTWFpbldvcmxkKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6
TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKLXsK
LSAgICBUZXN0T2JqVjhJbnRlcm5hbDo6cmVmbGVjdGVkQm9vbGVhbkF0dHJBdHRyU2V0dGVyRm9y
TWFpbldvcmxkKG5hbWUsIHZhbHVlLCBpbmZvKTsKLX0KLQogc3RhdGljIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiByZWZsZWN0ZWRVUkxBdHRyQXR0ckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4g
bmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKIHsKICAgICBUZXN0T2JqKiBpbXAg
PSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwpAQCAtOTQ5LDE3ICs1MzYsNiBA
QCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHJlZmxlY3RlZFVSTEF0dHJBdHRyR2V0dGVy
Q2FsbGJhY2sodjg6OkxvY2FsPHY4OjpTdAogICAgIHJldHVybiBUZXN0T2JqVjhJbnRlcm5hbDo6
cmVmbGVjdGVkVVJMQXR0ckF0dHJHZXR0ZXIobmFtZSwgaW5mbyk7CiB9CiAKLXN0YXRpYyB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gcmVmbGVjdGVkVVJMQXR0ckF0dHJHZXR0ZXJGb3JNYWluV29ybGQo
djg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8p
Ci17Ci0gICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigp
KTsKLSAgICByZXR1cm4gdjhTdHJpbmcoaW1wLT5nZXRVUkxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRN
TE5hbWVzOjpyZWZsZWN0ZWR1cmxhdHRyQXR0ciksIGluZm8uR2V0SXNvbGF0ZSgpLCBSZXR1cm5V
bnNhZmVIYW5kbGUpOwotfQotCi1zdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHJlZmxlY3Rl
ZFVSTEF0dHJBdHRyR2V0dGVyQ2FsbGJhY2tGb3JNYWluV29ybGQodjg6OkxvY2FsPHY4OjpTdHJp
bmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCi17Ci0gICAgcmV0dXJuIFRl
c3RPYmpWOEludGVybmFsOjpyZWZsZWN0ZWRVUkxBdHRyQXR0ckdldHRlckZvck1haW5Xb3JsZChu
YW1lLCBpbmZvKTsKLX0KLQogc3RhdGljIHZvaWQgcmVmbGVjdGVkVVJMQXR0ckF0dHJTZXR0ZXIo
djg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBj
b25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQogewogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVz
dE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7CkBAIC05NzMsMTkgKzU0OSw2IEBAIHN0YXRp
YyB2b2lkIHJlZmxlY3RlZFVSTEF0dHJBdHRyU2V0dGVyQ2FsbGJhY2sodjg6OkxvY2FsPHY4OjpT
dHJpbmc+IG5hbWUsIHY4OjpMCiAgICAgVGVzdE9ialY4SW50ZXJuYWw6OnJlZmxlY3RlZFVSTEF0
dHJBdHRyU2V0dGVyKG5hbWUsIHZhbHVlLCBpbmZvKTsKIH0KIAotc3RhdGljIHZvaWQgcmVmbGVj
dGVkVVJMQXR0ckF0dHJTZXR0ZXJGb3JNYWluV29ybGQodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5h
bWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBp
bmZvKQotewotICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xk
ZXIoKSk7Ci0gICAgVjhUUllDQVRDSF9GT1JfVjhTVFJJTkdSRVNPVVJDRV9WT0lEKFY4U3RyaW5n
UmVzb3VyY2U8V2l0aE51bGxDaGVjaz4sIHYsIHZhbHVlKTsKLSAgICBpbXAtPnNldEF0dHJpYnV0
ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZHVybGF0dHJBdHRyLCB2KTsKLSAgICByZXR1
cm47Ci19Ci0KLXN0YXRpYyB2b2lkIHJlZmxlY3RlZFVSTEF0dHJBdHRyU2V0dGVyQ2FsbGJhY2tG
b3JNYWluV29ybGQodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFs
dWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQotewotICAgIFRlc3RPYmpW
OEludGVybmFsOjpyZWZsZWN0ZWRVUkxBdHRyQXR0clNldHRlckZvck1haW5Xb3JsZChuYW1lLCB2
YWx1ZSwgaW5mbyk7Ci19Ci0KIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcmVmbGVjdGVk
U3RyaW5nQXR0ckF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4
OjpBY2Nlc3NvckluZm8mIGluZm8pCiB7CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0
b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKQEAgLTk5NywxNyArNTYwLDYgQEAgc3RhdGljIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiByZWZsZWN0ZWRTdHJpbmdBdHRyQXR0ckdldHRlckNhbGxiYWNrKHY4
OjpMb2NhbDx2ODoKICAgICByZXR1cm4gVGVzdE9ialY4SW50ZXJuYWw6OnJlZmxlY3RlZFN0cmlu
Z0F0dHJBdHRyR2V0dGVyKG5hbWUsIGluZm8pOwogfQogCi1zdGF0aWMgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IHJlZmxlY3RlZFN0cmluZ0F0dHJBdHRyR2V0dGVyRm9yTWFpbldvcmxkKHY4OjpMb2Nh
bDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQotewotICAg
IFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAg
cmV0dXJuIHY4U3RyaW5nKGltcC0+ZmFzdEdldEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6
OmN1c3RvbUNvbnRlbnRTdHJpbmdBdHRyQXR0ciksIGluZm8uR2V0SXNvbGF0ZSgpLCBSZXR1cm5V
bnNhZmVIYW5kbGUpOwotfQotCi1zdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHJlZmxlY3Rl
ZFN0cmluZ0F0dHJBdHRyR2V0dGVyQ2FsbGJhY2tGb3JNYWluV29ybGQodjg6OkxvY2FsPHY4OjpT
dHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCi17Ci0gICAgcmV0dXJu
IFRlc3RPYmpWOEludGVybmFsOjpyZWZsZWN0ZWRTdHJpbmdBdHRyQXR0ckdldHRlckZvck1haW5X
b3JsZChuYW1lLCBpbmZvKTsKLX0KLQogc3RhdGljIHZvaWQgcmVmbGVjdGVkU3RyaW5nQXR0ckF0
dHJTZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+
IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQogewogICAgIFRlc3RPYmoqIGlt
cCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7CkBAIC0xMDIxLDE5ICs1NzMs
NiBAQCBzdGF0aWMgdm9pZCByZWZsZWN0ZWRTdHJpbmdBdHRyQXR0clNldHRlckNhbGxiYWNrKHY4
OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2OAogICAgIFRlc3RPYmpWOEludGVybmFsOjpyZWZs
ZWN0ZWRTdHJpbmdBdHRyQXR0clNldHRlcihuYW1lLCB2YWx1ZSwgaW5mbyk7CiB9CiAKLXN0YXRp
YyB2b2lkIHJlZmxlY3RlZFN0cmluZ0F0dHJBdHRyU2V0dGVyRm9yTWFpbldvcmxkKHY4OjpMb2Nh
bDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6
OkFjY2Vzc29ySW5mbyYgaW5mbykKLXsKLSAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRv
TmF0aXZlKGluZm8uSG9sZGVyKCkpOwotICAgIFY4VFJZQ0FUQ0hfRk9SX1Y4U1RSSU5HUkVTT1VS
Q0VfVk9JRChWOFN0cmluZ1Jlc291cmNlPFdpdGhOdWxsQ2hlY2s+LCB2LCB2YWx1ZSk7Ci0gICAg
aW1wLT5zZXRBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50U3RyaW5n
QXR0ckF0dHIsIHYpOwotICAgIHJldHVybjsKLX0KLQotc3RhdGljIHZvaWQgcmVmbGVjdGVkU3Ry
aW5nQXR0ckF0dHJTZXR0ZXJDYWxsYmFja0Zvck1haW5Xb3JsZCh2ODo6TG9jYWw8djg6OlN0cmlu
Zz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3Nvcklu
Zm8mIGluZm8pCi17Ci0gICAgVGVzdE9ialY4SW50ZXJuYWw6OnJlZmxlY3RlZFN0cmluZ0F0dHJB
dHRyU2V0dGVyRm9yTWFpbldvcmxkKG5hbWUsIHZhbHVlLCBpbmZvKTsKLX0KLQogc3RhdGljIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiByZWZsZWN0ZWRDdXN0b21JbnRlZ3JhbEF0dHJBdHRyR2V0dGVy
KHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZv
KQogewogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIo
KSk7CkBAIC0xMDQ1LDE3ICs1ODQsNiBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHJl
ZmxlY3RlZEN1c3RvbUludGVncmFsQXR0ckF0dHJHZXR0ZXJDYWxsYmFjayh2ODo6TAogICAgIHJl
dHVybiBUZXN0T2JqVjhJbnRlcm5hbDo6cmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWxBdHRyQXR0ckdl
dHRlcihuYW1lLCBpbmZvKTsKIH0KIAotc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiByZWZs
ZWN0ZWRDdXN0b21JbnRlZ3JhbEF0dHJBdHRyR2V0dGVyRm9yTWFpbldvcmxkKHY4OjpMb2NhbDx2
ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQotewotICAgIFRl
c3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAgcmV0
dXJuIHY4SW50ZWdlcihpbXAtPmdldEludGVncmFsQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1l
czo6Y3VzdG9tQ29udGVudEludGVncmFsQXR0ckF0dHIpLCBpbmZvLkdldElzb2xhdGUoKSk7Ci19
Ci0KLXN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWxB
dHRyQXR0ckdldHRlckNhbGxiYWNrRm9yTWFpbldvcmxkKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBu
YW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQotewotICAgIHJldHVybiBUZXN0T2Jq
VjhJbnRlcm5hbDo6cmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWxBdHRyQXR0ckdldHRlckZvck1haW5X
b3JsZChuYW1lLCBpbmZvKTsKLX0KLQogc3RhdGljIHZvaWQgcmVmbGVjdGVkQ3VzdG9tSW50ZWdy
YWxBdHRyQXR0clNldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4
OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCiB7CiAgICAgVGVz
dE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKQEAgLTEwNjks
MTkgKzU5Nyw2IEBAIHN0YXRpYyB2b2lkIHJlZmxlY3RlZEN1c3RvbUludGVncmFsQXR0ckF0dHJT
ZXR0ZXJDYWxsYmFjayh2ODo6TG9jYWw8djg6OlN0cmluZz4KICAgICBUZXN0T2JqVjhJbnRlcm5h
bDo6cmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWxBdHRyQXR0clNldHRlcihuYW1lLCB2YWx1ZSwgaW5m
byk7CiB9CiAKLXN0YXRpYyB2b2lkIHJlZmxlY3RlZEN1c3RvbUludGVncmFsQXR0ckF0dHJTZXR0
ZXJGb3JNYWluV29ybGQodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6
VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQotewotICAgIFRlc3RP
YmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAgaW50IHYg
PSB0b0ludDMyKHZhbHVlKTsKLSAgICBpbXAtPnNldEludGVncmFsQXR0cmlidXRlKFdlYkNvcmU6
OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudEludGVncmFsQXR0ckF0dHIsIHYpOwotICAgIHJldHVy
bjsKLX0KLQotc3RhdGljIHZvaWQgcmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWxBdHRyQXR0clNldHRl
ckNhbGxiYWNrRm9yTWFpbldvcmxkKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9j
YWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKLXsKLSAg
ICBUZXN0T2JqVjhJbnRlcm5hbDo6cmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWxBdHRyQXR0clNldHRl
ckZvck1haW5Xb3JsZChuYW1lLCB2YWx1ZSwgaW5mbyk7Ci19Ci0KIHN0YXRpYyB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gcmVmbGVjdGVkQ3VzdG9tQm9vbGVhbkF0dHJBdHRyR2V0dGVyKHY4OjpMb2Nh
bDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQogewogICAg
IFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7CkBAIC0x
MDkzLDE3ICs2MDgsNiBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHJlZmxlY3RlZEN1
c3RvbUJvb2xlYW5BdHRyQXR0ckdldHRlckNhbGxiYWNrKHY4OjpMbwogICAgIHJldHVybiBUZXN0
T2JqVjhJbnRlcm5hbDo6cmVmbGVjdGVkQ3VzdG9tQm9vbGVhbkF0dHJBdHRyR2V0dGVyKG5hbWUs
IGluZm8pOwogfQogCi1zdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHJlZmxlY3RlZEN1c3Rv
bUJvb2xlYW5BdHRyQXR0ckdldHRlckZvck1haW5Xb3JsZCh2ODo6TG9jYWw8djg6OlN0cmluZz4g
bmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKLXsKLSAgICBUZXN0T2JqKiBpbXAg
PSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwotICAgIHJldHVybiB2OEJvb2xl
YW4oaW1wLT5mYXN0SGFzQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVu
dEJvb2xlYW5BdHRyQXR0ciksIGluZm8uR2V0SXNvbGF0ZSgpKTsKLX0KLQotc3RhdGljIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiByZWZsZWN0ZWRDdXN0b21Cb29sZWFuQXR0ckF0dHJHZXR0ZXJDYWxs
YmFja0Zvck1haW5Xb3JsZCh2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFj
Y2Vzc29ySW5mbyYgaW5mbykKLXsKLSAgICByZXR1cm4gVGVzdE9ialY4SW50ZXJuYWw6OnJlZmxl
Y3RlZEN1c3RvbUJvb2xlYW5BdHRyQXR0ckdldHRlckZvck1haW5Xb3JsZChuYW1lLCBpbmZvKTsK
LX0KLQogc3RhdGljIHZvaWQgcmVmbGVjdGVkQ3VzdG9tQm9vbGVhbkF0dHJBdHRyU2V0dGVyKHY4
OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29u
c3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKIHsKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RP
Ymo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwpAQCAtMTExNywxOSArNjIxLDYgQEAgc3RhdGlj
IHZvaWQgcmVmbGVjdGVkQ3VzdG9tQm9vbGVhbkF0dHJBdHRyU2V0dGVyQ2FsbGJhY2sodjg6Okxv
Y2FsPHY4OjpTdHJpbmc+IG4KICAgICBUZXN0T2JqVjhJbnRlcm5hbDo6cmVmbGVjdGVkQ3VzdG9t
Qm9vbGVhbkF0dHJBdHRyU2V0dGVyKG5hbWUsIHZhbHVlLCBpbmZvKTsKIH0KIAotc3RhdGljIHZv
aWQgcmVmbGVjdGVkQ3VzdG9tQm9vbGVhbkF0dHJBdHRyU2V0dGVyRm9yTWFpbldvcmxkKHY4OjpM
b2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qg
djg6OkFjY2Vzc29ySW5mbyYgaW5mbykKLXsKLSAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6
OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwotICAgIGJvb2wgdiA9IHZhbHVlLT5Cb29sZWFuVmFs
dWUoKTsKLSAgICBpbXAtPnNldEJvb2xlYW5BdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpj
dXN0b21Db250ZW50Qm9vbGVhbkF0dHJBdHRyLCB2KTsKLSAgICByZXR1cm47Ci19Ci0KLXN0YXRp
YyB2b2lkIHJlZmxlY3RlZEN1c3RvbUJvb2xlYW5BdHRyQXR0clNldHRlckNhbGxiYWNrRm9yTWFp
bldvcmxkKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2
YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKLXsKLSAgICBUZXN0T2JqVjhJbnRl
cm5hbDo6cmVmbGVjdGVkQ3VzdG9tQm9vbGVhbkF0dHJBdHRyU2V0dGVyRm9yTWFpbldvcmxkKG5h
bWUsIHZhbHVlLCBpbmZvKTsKLX0KLQogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiByZWZs
ZWN0ZWRDdXN0b21VUkxBdHRyQXR0ckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwg
Y29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKIHsKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRl
c3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwpAQCAtMTE0MSwxNyArNjMyLDYgQEAgc3Rh
dGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiByZWZsZWN0ZWRDdXN0b21VUkxBdHRyQXR0ckdldHRl
ckNhbGxiYWNrKHY4OjpMb2NhbDwKICAgICByZXR1cm4gVGVzdE9ialY4SW50ZXJuYWw6OnJlZmxl
Y3RlZEN1c3RvbVVSTEF0dHJBdHRyR2V0dGVyKG5hbWUsIGluZm8pOwogfQogCi1zdGF0aWMgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IHJlZmxlY3RlZEN1c3RvbVVSTEF0dHJBdHRyR2V0dGVyRm9yTWFp
bldvcmxkKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZv
JiBpbmZvKQotewotICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5I
b2xkZXIoKSk7Ci0gICAgcmV0dXJuIHY4U3RyaW5nKGltcC0+Z2V0VVJMQXR0cmlidXRlKFdlYkNv
cmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudFVSTEF0dHJBdHRyKSwgaW5mby5HZXRJc29sYXRl
KCksIFJldHVyblVuc2FmZUhhbmRsZSk7Ci19Ci0KLXN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gcmVmbGVjdGVkQ3VzdG9tVVJMQXR0ckF0dHJHZXR0ZXJDYWxsYmFja0Zvck1haW5Xb3JsZCh2
ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykK
LXsKLSAgICByZXR1cm4gVGVzdE9ialY4SW50ZXJuYWw6OnJlZmxlY3RlZEN1c3RvbVVSTEF0dHJB
dHRyR2V0dGVyRm9yTWFpbldvcmxkKG5hbWUsIGluZm8pOwotfQotCiBzdGF0aWMgdm9pZCByZWZs
ZWN0ZWRDdXN0b21VUkxBdHRyQXR0clNldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwg
djg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8p
CiB7CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigp
KTsKQEAgLTExNjUsMTkgKzY0NSw2IEBAIHN0YXRpYyB2b2lkIHJlZmxlY3RlZEN1c3RvbVVSTEF0
dHJBdHRyU2V0dGVyQ2FsbGJhY2sodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsCiAgICAgVGVz
dE9ialY4SW50ZXJuYWw6OnJlZmxlY3RlZEN1c3RvbVVSTEF0dHJBdHRyU2V0dGVyKG5hbWUsIHZh
bHVlLCBpbmZvKTsKIH0KIAotc3RhdGljIHZvaWQgcmVmbGVjdGVkQ3VzdG9tVVJMQXR0ckF0dHJT
ZXR0ZXJGb3JNYWluV29ybGQodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2
ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQotewotICAgIFRl
c3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAgVjhU
UllDQVRDSF9GT1JfVjhTVFJJTkdSRVNPVVJDRV9WT0lEKFY4U3RyaW5nUmVzb3VyY2U8V2l0aE51
bGxDaGVjaz4sIHYsIHZhbHVlKTsKLSAgICBpbXAtPnNldEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1M
TmFtZXM6OmN1c3RvbUNvbnRlbnRVUkxBdHRyQXR0ciwgdik7Ci0gICAgcmV0dXJuOwotfQotCi1z
dGF0aWMgdm9pZCByZWZsZWN0ZWRDdXN0b21VUkxBdHRyQXR0clNldHRlckNhbGxiYWNrRm9yTWFp
bldvcmxkKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2
YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKLXsKLSAgICBUZXN0T2JqVjhJbnRl
cm5hbDo6cmVmbGVjdGVkQ3VzdG9tVVJMQXR0ckF0dHJTZXR0ZXJGb3JNYWluV29ybGQobmFtZSwg
dmFsdWUsIGluZm8pOwotfQotCiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHR5cGVkQXJy
YXlBdHRyQXR0ckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFj
Y2Vzc29ySW5mbyYgaW5mbykKIHsKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0
aXZlKGluZm8uSG9sZGVyKCkpOwpAQCAtMTE4OSwxNyArNjU2LDYgQEAgc3RhdGljIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiB0eXBlZEFycmF5QXR0ckF0dHJHZXR0ZXJDYWxsYmFjayh2ODo6TG9jYWw8
djg6OlN0cmkKICAgICByZXR1cm4gVGVzdE9ialY4SW50ZXJuYWw6OnR5cGVkQXJyYXlBdHRyQXR0
ckdldHRlcihuYW1lLCBpbmZvKTsKIH0KIAotc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0
eXBlZEFycmF5QXR0ckF0dHJHZXR0ZXJGb3JNYWluV29ybGQodjg6OkxvY2FsPHY4OjpTdHJpbmc+
IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCi17Ci0gICAgVGVzdE9iaiogaW1w
ID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKLSAgICByZXR1cm4gdG9WOEZh
c3RGb3JNYWluV29ybGQoaW1wLT50eXBlZEFycmF5QXR0cigpLCBpbmZvLCBpbXApOwotfQotCi1z
dGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHR5cGVkQXJyYXlBdHRyQXR0ckdldHRlckNhbGxi
YWNrRm9yTWFpbldvcmxkKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNj
ZXNzb3JJbmZvJiBpbmZvKQotewotICAgIHJldHVybiBUZXN0T2JqVjhJbnRlcm5hbDo6dHlwZWRB
cnJheUF0dHJBdHRyR2V0dGVyRm9yTWFpbldvcmxkKG5hbWUsIGluZm8pOwotfQotCiBzdGF0aWMg
dm9pZCB0eXBlZEFycmF5QXR0ckF0dHJTZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUs
IHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZv
KQogewogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIo
KSk7CkBAIC0xMjEzLDE5ICs2NjksNiBAQCBzdGF0aWMgdm9pZCB0eXBlZEFycmF5QXR0ckF0dHJT
ZXR0ZXJDYWxsYmFjayh2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvYwogICAgIFRl
c3RPYmpWOEludGVybmFsOjp0eXBlZEFycmF5QXR0ckF0dHJTZXR0ZXIobmFtZSwgdmFsdWUsIGlu
Zm8pOwogfQogCi1zdGF0aWMgdm9pZCB0eXBlZEFycmF5QXR0ckF0dHJTZXR0ZXJGb3JNYWluV29y
bGQodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVl
LCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQotewotICAgIFRlc3RPYmoqIGltcCA9IFY4
VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAgRmxvYXQzMkFycmF5KiB2ID0g
VjhGbG9hdDMyQXJyYXk6Okhhc0luc3RhbmNlKHZhbHVlLCBpbmZvLkdldElzb2xhdGUoKSwgd29y
bGRUeXBlKGluZm8uR2V0SXNvbGF0ZSgpKSkgPyBWOEZsb2F0MzJBcnJheTo6dG9OYXRpdmUodjg6
OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdCh2YWx1ZSkpIDogMDsKLSAgICBpbXAtPnNldFR5cGVk
QXJyYXlBdHRyKFdURjo6Z2V0UHRyKHYpKTsKLSAgICByZXR1cm47Ci19Ci0KLXN0YXRpYyB2b2lk
IHR5cGVkQXJyYXlBdHRyQXR0clNldHRlckNhbGxiYWNrRm9yTWFpbldvcmxkKHY4OjpMb2NhbDx2
ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFj
Y2Vzc29ySW5mbyYgaW5mbykKLXsKLSAgICBUZXN0T2JqVjhJbnRlcm5hbDo6dHlwZWRBcnJheUF0
dHJBdHRyU2V0dGVyRm9yTWFpbldvcmxkKG5hbWUsIHZhbHVlLCBpbmZvKTsKLX0KLQogc3RhdGlj
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiBhdHRyV2l0aEdldHRlckV4Y2VwdGlvbkF0dHJHZXR0ZXIo
djg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8p
CiB7CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigp
KTsKQEAgLTEyNDEsMjEgKzY4NCw2IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gYXR0
cldpdGhHZXR0ZXJFeGNlcHRpb25BdHRyR2V0dGVyQ2FsbGJhY2sodjg6OkxvY2FsCiAgICAgcmV0
dXJuIFRlc3RPYmpWOEludGVybmFsOjphdHRyV2l0aEdldHRlckV4Y2VwdGlvbkF0dHJHZXR0ZXIo
bmFtZSwgaW5mbyk7CiB9CiAKLXN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gYXR0cldpdGhH
ZXR0ZXJFeGNlcHRpb25BdHRyR2V0dGVyRm9yTWFpbldvcmxkKHY4OjpMb2NhbDx2ODo6U3RyaW5n
PiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQotewotICAgIFRlc3RPYmoqIGlt
cCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAgRXhjZXB0aW9uQ29k
ZSBlYyA9IDA7Ci0gICAgaW50IHYgPSBpbXAtPmF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKGVjKTsK
LSAgICBpZiAoVU5MSUtFTFkoZWMpKQotICAgICAgICByZXR1cm4gc2V0RE9NRXhjZXB0aW9uKGVj
LCBpbmZvLkdldElzb2xhdGUoKSk7Ci0gICAgcmV0dXJuIHY4SW50ZWdlcih2LCBpbmZvLkdldElz
b2xhdGUoKSk7Ci19Ci0KLXN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gYXR0cldpdGhHZXR0
ZXJFeGNlcHRpb25BdHRyR2V0dGVyQ2FsbGJhY2tGb3JNYWluV29ybGQodjg6OkxvY2FsPHY4OjpT
dHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCi17Ci0gICAgcmV0dXJu
IFRlc3RPYmpWOEludGVybmFsOjphdHRyV2l0aEdldHRlckV4Y2VwdGlvbkF0dHJHZXR0ZXJGb3JN
YWluV29ybGQobmFtZSwgaW5mbyk7Ci19Ci0KIHN0YXRpYyB2b2lkIGF0dHJXaXRoR2V0dGVyRXhj
ZXB0aW9uQXR0clNldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4
OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCiB7CiAgICAgVGVz
dE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKQEAgLTEyNjks
MTkgKzY5Nyw2IEBAIHN0YXRpYyB2b2lkIGF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uQXR0clNldHRl
ckNhbGxiYWNrKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lCiAgICAgVGVzdE9ialY4SW50ZXJu
YWw6OmF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uQXR0clNldHRlcihuYW1lLCB2YWx1ZSwgaW5mbyk7
CiB9CiAKLXN0YXRpYyB2b2lkIGF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uQXR0clNldHRlckZvck1h
aW5Xb3JsZCh2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4g
dmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCi17Ci0gICAgVGVzdE9iaiogaW1w
ID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKLSAgICBpbnQgdiA9IHRvSW50
MzIodmFsdWUpOwotICAgIGltcC0+c2V0QXR0cldpdGhHZXR0ZXJFeGNlcHRpb24odik7Ci0gICAg
cmV0dXJuOwotfQotCi1zdGF0aWMgdm9pZCBhdHRyV2l0aEdldHRlckV4Y2VwdGlvbkF0dHJTZXR0
ZXJDYWxsYmFja0Zvck1haW5Xb3JsZCh2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6Okxv
Y2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCi17Ci0g
ICAgVGVzdE9ialY4SW50ZXJuYWw6OmF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uQXR0clNldHRlckZv
ck1haW5Xb3JsZChuYW1lLCB2YWx1ZSwgaW5mbyk7Ci19Ci0KIHN0YXRpYyB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gYXR0cldpdGhTZXR0ZXJFeGNlcHRpb25BdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6
U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQogewogICAgIFRlc3RP
YmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7CkBAIC0xMjkzLDE3
ICs3MDgsNiBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGF0dHJXaXRoU2V0dGVyRXhj
ZXB0aW9uQXR0ckdldHRlckNhbGxiYWNrKHY4OjpMb2NhbAogICAgIHJldHVybiBUZXN0T2JqVjhJ
bnRlcm5hbDo6YXR0cldpdGhTZXR0ZXJFeGNlcHRpb25BdHRyR2V0dGVyKG5hbWUsIGluZm8pOwog
fQogCi1zdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGF0dHJXaXRoU2V0dGVyRXhjZXB0aW9u
QXR0ckdldHRlckZvck1haW5Xb3JsZCh2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qg
djg6OkFjY2Vzc29ySW5mbyYgaW5mbykKLXsKLSAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6
OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwotICAgIHJldHVybiB2OEludGVnZXIoaW1wLT5hdHRy
V2l0aFNldHRlckV4Y2VwdGlvbigpLCBpbmZvLkdldElzb2xhdGUoKSk7Ci19Ci0KLXN0YXRpYyB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gYXR0cldpdGhTZXR0ZXJFeGNlcHRpb25BdHRyR2V0dGVyQ2Fs
bGJhY2tGb3JNYWluV29ybGQodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpB
Y2Nlc3NvckluZm8mIGluZm8pCi17Ci0gICAgcmV0dXJuIFRlc3RPYmpWOEludGVybmFsOjphdHRy
V2l0aFNldHRlckV4Y2VwdGlvbkF0dHJHZXR0ZXJGb3JNYWluV29ybGQobmFtZSwgaW5mbyk7Ci19
Ci0KIHN0YXRpYyB2b2lkIGF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uQXR0clNldHRlcih2ODo6TG9j
YWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4
OjpBY2Nlc3NvckluZm8mIGluZm8pCiB7CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0
b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKQEAgLTEzMjAsMjIgKzcyNCw2IEBAIHN0YXRpYyB2b2lk
IGF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uQXR0clNldHRlckNhbGxiYWNrKHY4OjpMb2NhbDx2ODo6
U3RyaW5nPiBuYW1lCiAgICAgVGVzdE9ialY4SW50ZXJuYWw6OmF0dHJXaXRoU2V0dGVyRXhjZXB0
aW9uQXR0clNldHRlcihuYW1lLCB2YWx1ZSwgaW5mbyk7CiB9CiAKLXN0YXRpYyB2b2lkIGF0dHJX
aXRoU2V0dGVyRXhjZXB0aW9uQXR0clNldHRlckZvck1haW5Xb3JsZCh2ODo6TG9jYWw8djg6OlN0
cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3Nv
ckluZm8mIGluZm8pCi17Ci0gICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShp
bmZvLkhvbGRlcigpKTsKLSAgICBpbnQgdiA9IHRvSW50MzIodmFsdWUpOwotICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwOwotICAgIGltcC0+c2V0QXR0cldpdGhTZXR0ZXJFeGNlcHRpb24odiwgZWMp
OwotICAgIGlmIChVTkxJS0VMWShlYykpCi0gICAgICAgIHNldERPTUV4Y2VwdGlvbihlYywgaW5m
by5HZXRJc29sYXRlKCkpOwotICAgIHJldHVybjsKLX0KLQotc3RhdGljIHZvaWQgYXR0cldpdGhT
ZXR0ZXJFeGNlcHRpb25BdHRyU2V0dGVyQ2FsbGJhY2tGb3JNYWluV29ybGQodjg6OkxvY2FsPHY4
OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNj
ZXNzb3JJbmZvJiBpbmZvKQotewotICAgIFRlc3RPYmpWOEludGVybmFsOjphdHRyV2l0aFNldHRl
ckV4Y2VwdGlvbkF0dHJTZXR0ZXJGb3JNYWluV29ybGQobmFtZSwgdmFsdWUsIGluZm8pOwotfQot
CiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0
aW9uQXR0ckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vz
c29ySW5mbyYgaW5mbykKIHsKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZl
KGluZm8uSG9sZGVyKCkpOwpAQCAtMTM1MSwyMSArNzM5LDYgQEAgc3RhdGljIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiBzdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbkF0dHJHZXR0ZXJDYWxsYmFj
ayh2ODoKICAgICByZXR1cm4gVGVzdE9ialY4SW50ZXJuYWw6OnN0cmluZ0F0dHJXaXRoR2V0dGVy
RXhjZXB0aW9uQXR0ckdldHRlcihuYW1lLCBpbmZvKTsKIH0KIAotc3RhdGljIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiBzdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbkF0dHJHZXR0ZXJGb3JNYWlu
V29ybGQodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8m
IGluZm8pCi17Ci0gICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhv
bGRlcigpKTsKLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBTdHJpbmcgdiA9IGltcC0+
c3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oZWMpOwotICAgIGlmIChVTkxJS0VMWShlYykp
Ci0gICAgICAgIHJldHVybiBzZXRET01FeGNlcHRpb24oZWMsIGluZm8uR2V0SXNvbGF0ZSgpKTsK
LSAgICByZXR1cm4gdjhTdHJpbmcodiwgaW5mby5HZXRJc29sYXRlKCksIFJldHVyblVuc2FmZUhh
bmRsZSk7Ci19Ci0KLXN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gc3RyaW5nQXR0cldpdGhH
ZXR0ZXJFeGNlcHRpb25BdHRyR2V0dGVyQ2FsbGJhY2tGb3JNYWluV29ybGQodjg6OkxvY2FsPHY4
OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCi17Ci0gICAgcmV0
dXJuIFRlc3RPYmpWOEludGVybmFsOjpzdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbkF0dHJH
ZXR0ZXJGb3JNYWluV29ybGQobmFtZSwgaW5mbyk7Ci19Ci0KIHN0YXRpYyB2b2lkIHN0cmluZ0F0
dHJXaXRoR2V0dGVyRXhjZXB0aW9uQXR0clNldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFt
ZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGlu
Zm8pCiB7CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRl
cigpKTsKQEAgLTEzNzksMTkgKzc1Miw2IEBAIHN0YXRpYyB2b2lkIHN0cmluZ0F0dHJXaXRoR2V0
dGVyRXhjZXB0aW9uQXR0clNldHRlckNhbGxiYWNrKHY4OjpMb2NhbDx2ODo6U3RyaW5nCiAgICAg
VGVzdE9ialY4SW50ZXJuYWw6OnN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uQXR0clNldHRl
cihuYW1lLCB2YWx1ZSwgaW5mbyk7CiB9CiAKLXN0YXRpYyB2b2lkIHN0cmluZ0F0dHJXaXRoR2V0
dGVyRXhjZXB0aW9uQXR0clNldHRlckZvck1haW5Xb3JsZCh2ODo6TG9jYWw8djg6OlN0cmluZz4g
bmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8m
IGluZm8pCi17Ci0gICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhv
bGRlcigpKTsKLSAgICBWOFRSWUNBVENIX0ZPUl9WOFNUUklOR1JFU09VUkNFX1ZPSUQoVjhTdHJp
bmdSZXNvdXJjZTw+LCB2LCB2YWx1ZSk7Ci0gICAgaW1wLT5zZXRTdHJpbmdBdHRyV2l0aEdldHRl
ckV4Y2VwdGlvbih2KTsKLSAgICByZXR1cm47Ci19Ci0KLXN0YXRpYyB2b2lkIHN0cmluZ0F0dHJX
aXRoR2V0dGVyRXhjZXB0aW9uQXR0clNldHRlckNhbGxiYWNrRm9yTWFpbldvcmxkKHY4OjpMb2Nh
bDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6
OkFjY2Vzc29ySW5mbyYgaW5mbykKLXsKLSAgICBUZXN0T2JqVjhJbnRlcm5hbDo6c3RyaW5nQXR0
cldpdGhHZXR0ZXJFeGNlcHRpb25BdHRyU2V0dGVyRm9yTWFpbldvcmxkKG5hbWUsIHZhbHVlLCBp
bmZvKTsKLX0KLQogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBzdHJpbmdBdHRyV2l0aFNl
dHRlckV4Y2VwdGlvbkF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0
IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCiB7CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2Jq
Ojp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKQEAgLTE0MDMsMTcgKzc2Myw2IEBAIHN0YXRpYyB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gc3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb25BdHRyR2V0
dGVyQ2FsbGJhY2sodjg6CiAgICAgcmV0dXJuIFRlc3RPYmpWOEludGVybmFsOjpzdHJpbmdBdHRy
V2l0aFNldHRlckV4Y2VwdGlvbkF0dHJHZXR0ZXIobmFtZSwgaW5mbyk7CiB9CiAKLXN0YXRpYyB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gc3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb25BdHRyR2V0
dGVyRm9yTWFpbldvcmxkKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNj
ZXNzb3JJbmZvJiBpbmZvKQotewotICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRp
dmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAgcmV0dXJuIHY4U3RyaW5nKGltcC0+c3RyaW5nQXR0cldp
dGhTZXR0ZXJFeGNlcHRpb24oKSwgaW5mby5HZXRJc29sYXRlKCksIFJldHVyblVuc2FmZUhhbmRs
ZSk7Ci19Ci0KLXN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gc3RyaW5nQXR0cldpdGhTZXR0
ZXJFeGNlcHRpb25BdHRyR2V0dGVyQ2FsbGJhY2tGb3JNYWluV29ybGQodjg6OkxvY2FsPHY4OjpT
dHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCi17Ci0gICAgcmV0dXJu
IFRlc3RPYmpWOEludGVybmFsOjpzdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbkF0dHJHZXR0
ZXJGb3JNYWluV29ybGQobmFtZSwgaW5mbyk7Ci19Ci0KIHN0YXRpYyB2b2lkIHN0cmluZ0F0dHJX
aXRoU2V0dGVyRXhjZXB0aW9uQXR0clNldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwg
djg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8p
CiB7CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigp
KTsKQEAgLTE0MzAsNDIgKzc3OSwxNiBAQCBzdGF0aWMgdm9pZCBzdHJpbmdBdHRyV2l0aFNldHRl
ckV4Y2VwdGlvbkF0dHJTZXR0ZXJDYWxsYmFjayh2ODo6TG9jYWw8djg6OlN0cmluZwogICAgIFRl
c3RPYmpWOEludGVybmFsOjpzdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbkF0dHJTZXR0ZXIo
bmFtZSwgdmFsdWUsIGluZm8pOwogfQogCi1zdGF0aWMgdm9pZCBzdHJpbmdBdHRyV2l0aFNldHRl
ckV4Y2VwdGlvbkF0dHJTZXR0ZXJGb3JNYWluV29ybGQodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5h
bWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBp
bmZvKQotewotICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xk
ZXIoKSk7Ci0gICAgVjhUUllDQVRDSF9GT1JfVjhTVFJJTkdSRVNPVVJDRV9WT0lEKFY4U3RyaW5n
UmVzb3VyY2U8PiwgdiwgdmFsdWUpOwotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGlt
cC0+c2V0U3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24odiwgZWMpOwotICAgIGlmIChVTkxJ
S0VMWShlYykpCi0gICAgICAgIHNldERPTUV4Y2VwdGlvbihlYywgaW5mby5HZXRJc29sYXRlKCkp
OwotICAgIHJldHVybjsKLX0KLQotc3RhdGljIHZvaWQgc3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNl
cHRpb25BdHRyU2V0dGVyQ2FsbGJhY2tGb3JNYWluV29ybGQodjg6OkxvY2FsPHY4OjpTdHJpbmc+
IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZv
JiBpbmZvKQotewotICAgIFRlc3RPYmpWOEludGVybmFsOjpzdHJpbmdBdHRyV2l0aFNldHRlckV4
Y2VwdGlvbkF0dHJTZXR0ZXJGb3JNYWluV29ybGQobmFtZSwgdmFsdWUsIGluZm8pOwotfQotCiBz
dGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGN1c3RvbUF0dHJBdHRyR2V0dGVyQ2FsbGJhY2so
djg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8p
CiB7CiAgICAgcmV0dXJuIFY4VGVzdE9iajo6Y3VzdG9tQXR0ckF0dHJHZXR0ZXJDdXN0b20obmFt
ZSwgaW5mbyk7CiB9CiAKLXN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY3VzdG9tQXR0ckF0
dHJHZXR0ZXJDYWxsYmFja0Zvck1haW5Xb3JsZCh2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwg
Y29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKLXsKLSAgICByZXR1cm4gVjhUZXN0T2JqOjpj
dXN0b21BdHRyQXR0ckdldHRlckN1c3RvbShuYW1lLCBpbmZvKTsKLX0KLQogc3RhdGljIHZvaWQg
Y3VzdG9tQXR0ckF0dHJTZXR0ZXJDYWxsYmFjayh2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwg
djg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8p
CiB7CiAgICAgVjhUZXN0T2JqOjpjdXN0b21BdHRyQXR0clNldHRlckN1c3RvbShuYW1lLCB2YWx1
ZSwgaW5mbyk7CiB9CiAKLXN0YXRpYyB2b2lkIGN1c3RvbUF0dHJBdHRyU2V0dGVyQ2FsbGJhY2tG
b3JNYWluV29ybGQodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFs
dWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQotewotICAgIFY4VGVzdE9i
ajo6Y3VzdG9tQXR0ckF0dHJTZXR0ZXJDdXN0b20obmFtZSwgdmFsdWUsIGluZm8pOwotfQotCiBz
dGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZUF0dHJH
ZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8m
IGluZm8pCiB7CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhv
bGRlcigpKTsKQEAgLTE0ODEsMjEgKzgwNCw2IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gd2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlQXR0ckdldHRlckNhbGxiYWNrKHY4OjpMb2NhCiAg
ICAgcmV0dXJuIFRlc3RPYmpWOEludGVybmFsOjp3aXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVBdHRy
R2V0dGVyKG5hbWUsIGluZm8pOwogfQogCi1zdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdp
dGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZUF0dHJHZXR0ZXJGb3JNYWluV29ybGQodjg6OkxvY2FsPHY4
OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCi17Ci0gICAgVGVz
dE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKLSAgICBTY3Jp
cHRTdGF0ZSogY3VycmVudFN0YXRlID0gU2NyaXB0U3RhdGU6OmN1cnJlbnQoKTsKLSAgICBpZiAo
IWN1cnJlbnRTdGF0ZSkKLSAgICAgICAgcmV0dXJuIHY4VW5kZWZpbmVkKCk7Ci0gICAgU2NyaXB0
U3RhdGUmIHN0YXRlID0gKmN1cnJlbnRTdGF0ZTsKLSAgICByZXR1cm4gdjhJbnRlZ2VyKGltcC0+
d2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlKCZzdGF0ZSksIGluZm8uR2V0SXNvbGF0ZSgpKTsKLX0K
LQotc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB3aXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVB
dHRyR2V0dGVyQ2FsbGJhY2tGb3JNYWluV29ybGQodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUs
IGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCi17Ci0gICAgcmV0dXJuIFRlc3RPYmpWOElu
dGVybmFsOjp3aXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVBdHRyR2V0dGVyRm9yTWFpbldvcmxkKG5h
bWUsIGluZm8pOwotfQotCiBzdGF0aWMgdm9pZCB3aXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVBdHRy
U2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2
YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKIHsKICAgICBUZXN0T2JqKiBpbXAg
PSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwpAQCAtMTUxNSwyNSArODIzLDYg
QEAgc3RhdGljIHZvaWQgd2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlQXR0clNldHRlckNhbGxiYWNr
KHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW0KICAgICBUZXN0T2JqVjhJbnRlcm5hbDo6d2l0aFNj
cmlwdFN0YXRlQXR0cmlidXRlQXR0clNldHRlcihuYW1lLCB2YWx1ZSwgaW5mbyk7CiB9CiAKLXN0
YXRpYyB2b2lkIHdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZUF0dHJTZXR0ZXJGb3JNYWluV29ybGQo
djg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBj
b25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQotewotICAgIFRlc3RPYmoqIGltcCA9IFY4VGVz
dE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAgaW50IHYgPSB0b0ludDMyKHZhbHVl
KTsKLSAgICBTY3JpcHRTdGF0ZSogY3VycmVudFN0YXRlID0gU2NyaXB0U3RhdGU6OmN1cnJlbnQo
KTsKLSAgICBpZiAoIWN1cnJlbnRTdGF0ZSkKLSAgICAgICAgcmV0dXJuOwotICAgIFNjcmlwdFN0
YXRlJiBzdGF0ZSA9ICpjdXJyZW50U3RhdGU7Ci0gICAgaW1wLT5zZXRXaXRoU2NyaXB0U3RhdGVB
dHRyaWJ1dGUoJnN0YXRlLCB2KTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCi0gICAg
ICAgIHRocm93RXJyb3Ioc3RhdGUuZXhjZXB0aW9uKCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKLSAg
ICByZXR1cm47Ci19Ci0KLXN0YXRpYyB2b2lkIHdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZUF0dHJT
ZXR0ZXJDYWxsYmFja0Zvck1haW5Xb3JsZCh2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6
OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCi17
Ci0gICAgVGVzdE9ialY4SW50ZXJuYWw6OndpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZUF0dHJTZXR0
ZXJGb3JNYWluV29ybGQobmFtZSwgdmFsdWUsIGluZm8pOwotfQotCiBzdGF0aWMgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IHdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlQXR0ckdldHRl
cih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5m
bykKIHsKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVy
KCkpOwpAQCAtMTU0NiwxOCArODM1LDYgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB3
aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZUF0dHJHZXR0ZXJDYWxsYmEKICAgICBy
ZXR1cm4gVGVzdE9ialY4SW50ZXJuYWw6OndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmli
dXRlQXR0ckdldHRlcihuYW1lLCBpbmZvKTsKIH0KIAotc3RhdGljIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiB3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZUF0dHJHZXR0ZXJGb3JNYWlu
V29ybGQodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8m
IGluZm8pCi17Ci0gICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhv
bGRlcigpKTsKLSAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRDb250ZXh0ID0gZ2V0
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwotICAgIHJldHVybiB0b1Y4RmFzdEZvck1haW5Xb3Js
ZChpbXAtPndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlKHNjcmlwdENvbnRleHQp
LCBpbmZvLCBpbXApOwotfQotCi1zdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdpdGhTY3Jp
cHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlQXR0ckdldHRlckNhbGxiYWNrRm9yTWFpbldvcmxk
KHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZv
KQotewotICAgIHJldHVybiBUZXN0T2JqVjhJbnRlcm5hbDo6d2l0aFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHRBdHRyaWJ1dGVBdHRyR2V0dGVyRm9yTWFpbldvcmxkKG5hbWUsIGluZm8pOwotfQotCiBz
dGF0aWMgdm9pZCB3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZUF0dHJTZXR0ZXIo
djg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBj
b25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQogewogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVz
dE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7CkBAIC0xNTcyLDIwICs4NDksNiBAQCBzdGF0
aWMgdm9pZCB3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZUF0dHJTZXR0ZXJDYWxs
YmFjayh2ODo6TG9jYWw8djg6OgogICAgIFRlc3RPYmpWOEludGVybmFsOjp3aXRoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dEF0dHJpYnV0ZUF0dHJTZXR0ZXIobmFtZSwgdmFsdWUsIGluZm8pOwogfQog
Ci1zdGF0aWMgdm9pZCB3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZUF0dHJTZXR0
ZXJGb3JNYWluV29ybGQodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6
VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQotewotICAgIFRlc3RP
YmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAgVGVzdE9i
aiogdiA9IFY4VGVzdE9iajo6SGFzSW5zdGFuY2UodmFsdWUsIGluZm8uR2V0SXNvbGF0ZSgpLCB3
b3JsZFR5cGUoaW5mby5HZXRJc29sYXRlKCkpKSA/IFY4VGVzdE9iajo6dG9OYXRpdmUodjg6Okhh
bmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdCh2YWx1ZSkpIDogMDsKLSAgICBTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBzY3JpcHRDb250ZXh0ID0gZ2V0U2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwotICAg
IGltcC0+c2V0V2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGUoc2NyaXB0Q29udGV4
dCwgV1RGOjpnZXRQdHIodikpOwotICAgIHJldHVybjsKLX0KLQotc3RhdGljIHZvaWQgd2l0aFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVBdHRyU2V0dGVyQ2FsbGJhY2tGb3JNYWluV29y
bGQodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVl
LCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQotewotICAgIFRlc3RPYmpWOEludGVybmFs
Ojp3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZUF0dHJTZXR0ZXJGb3JNYWluV29y
bGQobmFtZSwgdmFsdWUsIGluZm8pOwotfQotCiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IHdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlc0F0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpT
dHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCiB7CiAgICAgVGVzdE9i
aiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKQEAgLTE2MDcsMjcg
Kzg3MCw2IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd2l0aFNjcmlwdFN0YXRlQXR0
cmlidXRlUmFpc2VzQXR0ckdldHRlckNhbGxiYWNrKHY4CiAgICAgcmV0dXJuIFRlc3RPYmpWOElu
dGVybmFsOjp3aXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXNBdHRyR2V0dGVyKG5hbWUsIGlu
Zm8pOwogfQogCi1zdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdpdGhTY3JpcHRTdGF0ZUF0
dHJpYnV0ZVJhaXNlc0F0dHJHZXR0ZXJGb3JNYWluV29ybGQodjg6OkxvY2FsPHY4OjpTdHJpbmc+
IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCi17Ci0gICAgVGVzdE9iaiogaW1w
ID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKLSAgICBFeGNlcHRpb25Db2Rl
IGVjID0gMDsKLSAgICBTY3JpcHRTdGF0ZSogY3VycmVudFN0YXRlID0gU2NyaXB0U3RhdGU6OmN1
cnJlbnQoKTsKLSAgICBpZiAoIWN1cnJlbnRTdGF0ZSkKLSAgICAgICAgcmV0dXJuIHY4VW5kZWZp
bmVkKCk7Ci0gICAgU2NyaXB0U3RhdGUmIHN0YXRlID0gKmN1cnJlbnRTdGF0ZTsKLSAgICBSZWZQ
dHI8VGVzdE9iaj4gdiA9IGltcC0+d2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzKCZzdGF0
ZSwgZWMpOwotICAgIGlmIChVTkxJS0VMWShlYykpCi0gICAgICAgIHJldHVybiBzZXRET01FeGNl
cHRpb24oZWMsIGluZm8uR2V0SXNvbGF0ZSgpKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9u
KCkpCi0gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKHN0YXRlLmV4Y2VwdGlvbigpLCBpbmZvLkdl
dElzb2xhdGUoKSk7Ci0gICAgcmV0dXJuIHRvVjhGYXN0Rm9yTWFpbldvcmxkKHYucmVsZWFzZSgp
LCBpbmZvLCBpbXApOwotfQotCi1zdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdpdGhTY3Jp
cHRTdGF0ZUF0dHJpYnV0ZVJhaXNlc0F0dHJHZXR0ZXJDYWxsYmFja0Zvck1haW5Xb3JsZCh2ODo6
TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKLXsK
LSAgICByZXR1cm4gVGVzdE9ialY4SW50ZXJuYWw6OndpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJh
aXNlc0F0dHJHZXR0ZXJGb3JNYWluV29ybGQobmFtZSwgaW5mbyk7Ci19Ci0KIHN0YXRpYyB2b2lk
IHdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlc0F0dHJTZXR0ZXIodjg6OkxvY2FsPHY4OjpT
dHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNz
b3JJbmZvJiBpbmZvKQogewogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUo
aW5mby5Ib2xkZXIoKSk7CkBAIC0xNjQ3LDI1ICs4ODksNiBAQCBzdGF0aWMgdm9pZCB3aXRoU2Ny
aXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXNBdHRyU2V0dGVyQ2FsbGJhY2sodjg6OkxvY2FsPHY4OjpT
dHJpbgogICAgIFRlc3RPYmpWOEludGVybmFsOjp3aXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlz
ZXNBdHRyU2V0dGVyKG5hbWUsIHZhbHVlLCBpbmZvKTsKIH0KIAotc3RhdGljIHZvaWQgd2l0aFNj
cmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzQXR0clNldHRlckZvck1haW5Xb3JsZCh2ODo6TG9jYWw8
djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpB
Y2Nlc3NvckluZm8mIGluZm8pCi17Ci0gICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05h
dGl2ZShpbmZvLkhvbGRlcigpKTsKLSAgICBUZXN0T2JqKiB2ID0gVjhUZXN0T2JqOjpIYXNJbnN0
YW5jZSh2YWx1ZSwgaW5mby5HZXRJc29sYXRlKCksIHdvcmxkVHlwZShpbmZvLkdldElzb2xhdGUo
KSkpID8gVjhUZXN0T2JqOjp0b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KHZh
bHVlKSkgOiAwOwotICAgIFNjcmlwdFN0YXRlKiBjdXJyZW50U3RhdGUgPSBTY3JpcHRTdGF0ZTo6
Y3VycmVudCgpOwotICAgIGlmICghY3VycmVudFN0YXRlKQotICAgICAgICByZXR1cm47Ci0gICAg
U2NyaXB0U3RhdGUmIHN0YXRlID0gKmN1cnJlbnRTdGF0ZTsKLSAgICBpbXAtPnNldFdpdGhTY3Jp
cHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcygmc3RhdGUsIFdURjo6Z2V0UHRyKHYpKTsKLSAgICBpZiAo
c3RhdGUuaGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHRocm93RXJyb3Ioc3RhdGUuZXhjZXB0aW9u
KCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKLSAgICByZXR1cm47Ci19Ci0KLXN0YXRpYyB2b2lkIHdp
dGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlc0F0dHJTZXR0ZXJDYWxsYmFja0Zvck1haW5Xb3Js
ZCh2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUs
IGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCi17Ci0gICAgVGVzdE9ialY4SW50ZXJuYWw6
OndpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlc0F0dHJTZXR0ZXJGb3JNYWluV29ybGQobmFt
ZSwgdmFsdWUsIGluZm8pOwotfQotCiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdpdGhT
Y3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlUmFpc2VzQXR0ckdldHRlcih2ODo6TG9jYWw8
djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKIHsKICAgICBU
ZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwpAQCAtMTY4
MiwyMiArOTA1LDYgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB3aXRoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJhaXNlc0F0dHJHZXR0ZXIKICAgICByZXR1cm4gVGVzdE9i
alY4SW50ZXJuYWw6OndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlUmFpc2VzQXR0
ckdldHRlcihuYW1lLCBpbmZvKTsKIH0KIAotc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB3
aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJhaXNlc0F0dHJHZXR0ZXJGb3JNYWlu
V29ybGQodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8m
IGluZm8pCi17Ci0gICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhv
bGRlcigpKTsKLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBzY3JpcHRDb250ZXh0ID0gZ2V0U2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwotICAg
IFJlZlB0cjxUZXN0T2JqPiB2ID0gaW1wLT53aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJp
YnV0ZVJhaXNlcyhzY3JpcHRDb250ZXh0LCBlYyk7Ci0gICAgaWYgKFVOTElLRUxZKGVjKSkKLSAg
ICAgICAgcmV0dXJuIHNldERPTUV4Y2VwdGlvbihlYywgaW5mby5HZXRJc29sYXRlKCkpOwotICAg
IHJldHVybiB0b1Y4RmFzdEZvck1haW5Xb3JsZCh2LnJlbGVhc2UoKSwgaW5mbywgaW1wKTsKLX0K
LQotc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dEF0dHJpYnV0ZVJhaXNlc0F0dHJHZXR0ZXJDYWxsYmFja0Zvck1haW5Xb3JsZCh2ODo6TG9jYWw8
djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKLXsKLSAgICBy
ZXR1cm4gVGVzdE9ialY4SW50ZXJuYWw6OndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmli
dXRlUmFpc2VzQXR0ckdldHRlckZvck1haW5Xb3JsZChuYW1lLCBpbmZvKTsKLX0KLQogc3RhdGlj
IHZvaWQgd2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVSYWlzZXNBdHRyU2V0dGVy
KHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwg
Y29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKIHsKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRl
c3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwpAQCAtMTcxMiwyMCArOTE5LDYgQEAgc3Rh
dGljIHZvaWQgd2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVSYWlzZXNBdHRyU2V0
dGVyQ2FsbGJhY2sodjg6OkxvY2EKICAgICBUZXN0T2JqVjhJbnRlcm5hbDo6d2l0aFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVSYWlzZXNBdHRyU2V0dGVyKG5hbWUsIHZhbHVlLCBpbmZv
KTsKIH0KIAotc3RhdGljIHZvaWQgd2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVS
YWlzZXNBdHRyU2V0dGVyRm9yTWFpbldvcmxkKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2
ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykK
LXsKLSAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkp
OwotICAgIFRlc3RPYmoqIHYgPSBWOFRlc3RPYmo6Okhhc0luc3RhbmNlKHZhbHVlLCBpbmZvLkdl
dElzb2xhdGUoKSwgd29ybGRUeXBlKGluZm8uR2V0SXNvbGF0ZSgpKSkgPyBWOFRlc3RPYmo6OnRv
TmF0aXZlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QodmFsdWUpKSA6IDA7Ci0gICAgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0Q29udGV4dCA9IGdldFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKTsKLSAgICBpbXAtPnNldFdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRl
UmFpc2VzKHNjcmlwdENvbnRleHQsIFdURjo6Z2V0UHRyKHYpKTsKLSAgICByZXR1cm47Ci19Ci0K
LXN0YXRpYyB2b2lkIHdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlUmFpc2VzQXR0
clNldHRlckNhbGxiYWNrRm9yTWFpbldvcmxkKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2
ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykK
LXsKLSAgICBUZXN0T2JqVjhJbnRlcm5hbDo6d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRy
aWJ1dGVSYWlzZXNBdHRyU2V0dGVyRm9yTWFpbldvcmxkKG5hbWUsIHZhbHVlLCBpbmZvKTsKLX0K
LQogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlQXR0ckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4g
bmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKIHsKICAgICBUZXN0T2JqKiBpbXAg
PSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwpAQCAtMTc0MiwyMiArOTM1LDYg
QEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlQXQKICAgICByZXR1cm4gVGVzdE9ialY4SW50ZXJuYWw6
OndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVBdHRyR2V0
dGVyKG5hbWUsIGluZm8pOwogfQogCi1zdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdpdGhT
Y3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVBdHRyR2V0dGVyRm9y
TWFpbldvcmxkKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJ
bmZvJiBpbmZvKQotewotICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5m
by5Ib2xkZXIoKSk7Ci0gICAgU2NyaXB0U3RhdGUqIGN1cnJlbnRTdGF0ZSA9IFNjcmlwdFN0YXRl
OjpjdXJyZW50KCk7Ci0gICAgaWYgKCFjdXJyZW50U3RhdGUpCi0gICAgICAgIHJldHVybiB2OFVu
ZGVmaW5lZCgpOwotICAgIFNjcmlwdFN0YXRlJiBzdGF0ZSA9ICpjdXJyZW50U3RhdGU7Ci0gICAg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0Q29udGV4dCA9IGdldFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKTsKLSAgICByZXR1cm4gdG9WOEZhc3RGb3JNYWluV29ybGQoaW1wLT53aXRoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlKCZzdGF0ZSwgc2NyaXB0
Q29udGV4dCksIGluZm8sIGltcCk7Ci19Ci0KLXN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZUF0dHJHZXR0
ZXJDYWxsYmFja0Zvck1haW5Xb3JsZCh2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qg
djg6OkFjY2Vzc29ySW5mbyYgaW5mbykKLXsKLSAgICByZXR1cm4gVGVzdE9ialY4SW50ZXJuYWw6
OndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVBdHRyR2V0
dGVyRm9yTWFpbldvcmxkKG5hbWUsIGluZm8pOwotfQotCiBzdGF0aWMgdm9pZCB3aXRoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlQXR0clNldHRlcih2ODo6TG9j
YWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4
OjpBY2Nlc3NvckluZm8mIGluZm8pCiB7CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0
b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKQEAgLTE3NzgsMjYgKzk1NSw2IEBAIHN0YXRpYyB2b2lk
IHdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVBdHRyU2V0
dGVyQ2FsbGJhY2soCiAgICAgVGVzdE9ialY4SW50ZXJuYWw6OndpdGhTY3JpcHRFeGVjdXRpb25D
b250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVBdHRyU2V0dGVyKG5hbWUsIHZhbHVlLCBpbmZv
KTsKIH0KIAotc3RhdGljIHZvaWQgd2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRT
dGF0ZUF0dHJpYnV0ZUF0dHJTZXR0ZXJGb3JNYWluV29ybGQodjg6OkxvY2FsPHY4OjpTdHJpbmc+
IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZv
JiBpbmZvKQotewotICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5I
b2xkZXIoKSk7Ci0gICAgVGVzdE9iaiogdiA9IFY4VGVzdE9iajo6SGFzSW5zdGFuY2UodmFsdWUs
IGluZm8uR2V0SXNvbGF0ZSgpLCB3b3JsZFR5cGUoaW5mby5HZXRJc29sYXRlKCkpKSA/IFY4VGVz
dE9iajo6dG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdCh2YWx1ZSkpIDogMDsK
LSAgICBTY3JpcHRTdGF0ZSogY3VycmVudFN0YXRlID0gU2NyaXB0U3RhdGU6OmN1cnJlbnQoKTsK
LSAgICBpZiAoIWN1cnJlbnRTdGF0ZSkKLSAgICAgICAgcmV0dXJuOwotICAgIFNjcmlwdFN0YXRl
JiBzdGF0ZSA9ICpjdXJyZW50U3RhdGU7Ci0gICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2Ny
aXB0Q29udGV4dCA9IGdldFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKLSAgICBpbXAtPnNldFdp
dGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGUoJnN0YXRlLCBz
Y3JpcHRDb250ZXh0LCBXVEY6OmdldFB0cih2KSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlv
bigpKQotICAgICAgICB0aHJvd0Vycm9yKHN0YXRlLmV4Y2VwdGlvbigpLCBpbmZvLkdldElzb2xh
dGUoKSk7Ci0gICAgcmV0dXJuOwotfQotCi1zdGF0aWMgdm9pZCB3aXRoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlQXR0clNldHRlckNhbGxiYWNrRm9yTWFpbldv
cmxkKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1
ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKLXsKLSAgICBUZXN0T2JqVjhJbnRlcm5h
bDo6d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZUF0dHJT
ZXR0ZXJGb3JNYWluV29ybGQobmFtZSwgdmFsdWUsIGluZm8pOwotfQotCiBzdGF0aWMgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IHdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVB
dHRyaWJ1dGVSYWlzZXNBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25z
dCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQogewogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9i
ajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7CkBAIC0xODIwLDI4ICs5NzcsNiBAQCBzdGF0aWMg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IHdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0
U3RhdGVBdHRyaWJ1dGVSYQogICAgIHJldHVybiBUZXN0T2JqVjhJbnRlcm5hbDo6d2l0aFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlc0F0dHJHZXR0ZXIo
bmFtZSwgaW5mbyk7CiB9CiAKLXN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd2l0aFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlc0F0dHJHZXR0ZXJG
b3JNYWluV29ybGQodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3Nv
ckluZm8mIGluZm8pCi17Ci0gICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShp
bmZvLkhvbGRlcigpKTsKLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBTY3JpcHRTdGF0
ZSogY3VycmVudFN0YXRlID0gU2NyaXB0U3RhdGU6OmN1cnJlbnQoKTsKLSAgICBpZiAoIWN1cnJl
bnRTdGF0ZSkKLSAgICAgICAgcmV0dXJuIHY4VW5kZWZpbmVkKCk7Ci0gICAgU2NyaXB0U3RhdGUm
IHN0YXRlID0gKmN1cnJlbnRTdGF0ZTsKLSAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3Jp
cHRDb250ZXh0ID0gZ2V0U2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwotICAgIFJlZlB0cjxUZXN0
T2JqPiB2ID0gaW1wLT53aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0
cmlidXRlUmFpc2VzKCZzdGF0ZSwgc2NyaXB0Q29udGV4dCwgZWMpOwotICAgIGlmIChVTkxJS0VM
WShlYykpCi0gICAgICAgIHJldHVybiBzZXRET01FeGNlcHRpb24oZWMsIGluZm8uR2V0SXNvbGF0
ZSgpKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiB0aHJv
d0Vycm9yKHN0YXRlLmV4Y2VwdGlvbigpLCBpbmZvLkdldElzb2xhdGUoKSk7Ci0gICAgcmV0dXJu
IHRvVjhGYXN0Rm9yTWFpbldvcmxkKHYucmVsZWFzZSgpLCBpbmZvLCBpbXApOwotfQotCi1zdGF0
aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2Ny
aXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXNBdHRyR2V0dGVyQ2FsbGJhY2tGb3JNYWluV29ybGQodjg6
OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCi17
Ci0gICAgcmV0dXJuIFRlc3RPYmpWOEludGVybmFsOjp3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzQXR0ckdldHRlckZvck1haW5Xb3JsZChuYW1l
LCBpbmZvKTsKLX0KLQogc3RhdGljIHZvaWQgd2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRT
Y3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlc0F0dHJTZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+
IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZv
JiBpbmZvKQogewogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5I
b2xkZXIoKSk7CkBAIC0xODYyLDI2ICs5OTcsNiBAQCBzdGF0aWMgdm9pZCB3aXRoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzQXR0clNldHRlckNhbAog
ICAgIFRlc3RPYmpWOEludGVybmFsOjp3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlw
dFN0YXRlQXR0cmlidXRlUmFpc2VzQXR0clNldHRlcihuYW1lLCB2YWx1ZSwgaW5mbyk7CiB9CiAK
LXN0YXRpYyB2b2lkIHdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRy
aWJ1dGVSYWlzZXNBdHRyU2V0dGVyRm9yTWFpbldvcmxkKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBu
YW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYg
aW5mbykKLXsKLSAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9s
ZGVyKCkpOwotICAgIFRlc3RPYmoqIHYgPSBWOFRlc3RPYmo6Okhhc0luc3RhbmNlKHZhbHVlLCBp
bmZvLkdldElzb2xhdGUoKSwgd29ybGRUeXBlKGluZm8uR2V0SXNvbGF0ZSgpKSkgPyBWOFRlc3RP
Ymo6OnRvTmF0aXZlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QodmFsdWUpKSA6IDA7Ci0g
ICAgU2NyaXB0U3RhdGUqIGN1cnJlbnRTdGF0ZSA9IFNjcmlwdFN0YXRlOjpjdXJyZW50KCk7Ci0g
ICAgaWYgKCFjdXJyZW50U3RhdGUpCi0gICAgICAgIHJldHVybjsKLSAgICBTY3JpcHRTdGF0ZSYg
c3RhdGUgPSAqY3VycmVudFN0YXRlOwotICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlw
dENvbnRleHQgPSBnZXRTY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7Ci0gICAgaW1wLT5zZXRXaXRo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzKCZzdGF0
ZSwgc2NyaXB0Q29udGV4dCwgV1RGOjpnZXRQdHIodikpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNl
cHRpb24oKSkKLSAgICAgICAgdGhyb3dFcnJvcihzdGF0ZS5leGNlcHRpb24oKSwgaW5mby5HZXRJ
c29sYXRlKCkpOwotICAgIHJldHVybjsKLX0KLQotc3RhdGljIHZvaWQgd2l0aFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlc0F0dHJTZXR0ZXJDYWxsYmFj
a0Zvck1haW5Xb3JsZCh2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpW
YWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCi17Ci0gICAgVGVzdE9i
alY4SW50ZXJuYWw6OndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRy
aWJ1dGVSYWlzZXNBdHRyU2V0dGVyRm9yTWFpbldvcmxkKG5hbWUsIHZhbHVlLCBpbmZvKTsKLX0K
LQogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNlc0F0dHJpYnV0ZUF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4
OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCiB7CiAgICAgVGVz
dE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKQEAgLTE4OTgs
MjIgKzEwMTMsNiBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdpdGhTY3JpcHRFeGVj
dXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzQQogICAgIHJldHVybiBUZXN0T2Jq
VjhJbnRlcm5hbDo6d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhT
cGFjZXNBdHRyaWJ1dGVBdHRyR2V0dGVyKG5hbWUsIGluZm8pOwogfQogCi1zdGF0aWMgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IHdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVX
aXRoU3BhY2VzQXR0cmlidXRlQXR0ckdldHRlckZvck1haW5Xb3JsZCh2ODo6TG9jYWw8djg6OlN0
cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKLXsKLSAgICBUZXN0T2Jq
KiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwotICAgIFNjcmlwdFN0
YXRlKiBjdXJyZW50U3RhdGUgPSBTY3JpcHRTdGF0ZTo6Y3VycmVudCgpOwotICAgIGlmICghY3Vy
cmVudFN0YXRlKQotICAgICAgICByZXR1cm4gdjhVbmRlZmluZWQoKTsKLSAgICBTY3JpcHRTdGF0
ZSYgc3RhdGUgPSAqY3VycmVudFN0YXRlOwotICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNj
cmlwdENvbnRleHQgPSBnZXRTY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7Ci0gICAgcmV0dXJuIHRv
VjhGYXN0Rm9yTWFpbldvcmxkKGltcC0+d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3Jp
cHRTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1dGUoJnN0YXRlLCBzY3JpcHRDb250ZXh0KSwgaW5mbywg
aW1wKTsKLX0KLQotc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB3aXRoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNlc0F0dHJpYnV0ZUF0dHJHZXR0ZXJDYWxs
YmFja0Zvck1haW5Xb3JsZCh2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFj
Y2Vzc29ySW5mbyYgaW5mbykKLXsKLSAgICByZXR1cm4gVGVzdE9ialY4SW50ZXJuYWw6OndpdGhT
Y3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzQXR0cmlidXRlQXR0
ckdldHRlckZvck1haW5Xb3JsZChuYW1lLCBpbmZvKTsKLX0KLQogc3RhdGljIHZvaWQgd2l0aFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1dGVBdHRy
U2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2
YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKIHsKICAgICBUZXN0T2JqKiBpbXAg
PSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwpAQCAtMTkzNCwyNiArMTAzMyw2
IEBAIHN0YXRpYyB2b2lkIHdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVX
aXRoU3BhY2VzQXR0cmlidXRlQXR0clNldHRlCiAgICAgVGVzdE9ialY4SW50ZXJuYWw6OndpdGhT
Y3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzQXR0cmlidXRlQXR0
clNldHRlcihuYW1lLCB2YWx1ZSwgaW5mbyk7CiB9CiAKLXN0YXRpYyB2b2lkIHdpdGhTY3JpcHRF
eGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzQXR0cmlidXRlQXR0clNldHRl
ckZvck1haW5Xb3JsZCh2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpW
YWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCi17Ci0gICAgVGVzdE9i
aiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKLSAgICBUZXN0T2Jq
KiB2ID0gVjhUZXN0T2JqOjpIYXNJbnN0YW5jZSh2YWx1ZSwgaW5mby5HZXRJc29sYXRlKCksIHdv
cmxkVHlwZShpbmZvLkdldElzb2xhdGUoKSkpID8gVjhUZXN0T2JqOjp0b05hdGl2ZSh2ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+OjpDYXN0KHZhbHVlKSkgOiAwOwotICAgIFNjcmlwdFN0YXRlKiBjdXJy
ZW50U3RhdGUgPSBTY3JpcHRTdGF0ZTo6Y3VycmVudCgpOwotICAgIGlmICghY3VycmVudFN0YXRl
KQotICAgICAgICByZXR1cm47Ci0gICAgU2NyaXB0U3RhdGUmIHN0YXRlID0gKmN1cnJlbnRTdGF0
ZTsKLSAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRDb250ZXh0ID0gZ2V0U2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpOwotICAgIGltcC0+c2V0V2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1dGUoJnN0YXRlLCBzY3JpcHRDb250ZXh0
LCBXVEY6OmdldFB0cih2KSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQotICAgICAg
ICB0aHJvd0Vycm9yKHN0YXRlLmV4Y2VwdGlvbigpLCBpbmZvLkdldElzb2xhdGUoKSk7Ci0gICAg
cmV0dXJuOwotfQotCi1zdGF0aWMgdm9pZCB3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNj
cmlwdFN0YXRlV2l0aFNwYWNlc0F0dHJpYnV0ZUF0dHJTZXR0ZXJDYWxsYmFja0Zvck1haW5Xb3Js
ZCh2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUs
IGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCi17Ci0gICAgVGVzdE9ialY4SW50ZXJuYWw6
OndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzQXR0cmli
dXRlQXR0clNldHRlckZvck1haW5Xb3JsZChuYW1lLCB2YWx1ZSwgaW5mbyk7Ci19Ci0KIHN0YXRp
YyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd2l0aFNjcmlwdEFyZ3VtZW50c0FuZENhbGxTdGFja0F0
dHJpYnV0ZUF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpB
Y2Nlc3NvckluZm8mIGluZm8pCiB7CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05h
dGl2ZShpbmZvLkhvbGRlcigpKTsKQEAgLTE5NjUsMTcgKzEwNDQsNiBAQCBzdGF0aWMgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IHdpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tBdHRyaWJ1dGVB
dHRyR2V0dGVyQwogICAgIHJldHVybiBUZXN0T2JqVjhJbnRlcm5hbDo6d2l0aFNjcmlwdEFyZ3Vt
ZW50c0FuZENhbGxTdGFja0F0dHJpYnV0ZUF0dHJHZXR0ZXIobmFtZSwgaW5mbyk7CiB9CiAKLXN0
YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd2l0aFNjcmlwdEFyZ3VtZW50c0FuZENhbGxTdGFj
a0F0dHJpYnV0ZUF0dHJHZXR0ZXJGb3JNYWluV29ybGQodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5h
bWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCi17Ci0gICAgVGVzdE9iaiogaW1wID0g
VjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKLSAgICByZXR1cm4gdG9WOEZhc3RG
b3JNYWluV29ybGQoaW1wLT53aXRoU2NyaXB0QXJndW1lbnRzQW5kQ2FsbFN0YWNrQXR0cmlidXRl
KCksIGluZm8sIGltcCk7Ci19Ci0KLXN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd2l0aFNj
cmlwdEFyZ3VtZW50c0FuZENhbGxTdGFja0F0dHJpYnV0ZUF0dHJHZXR0ZXJDYWxsYmFja0Zvck1h
aW5Xb3JsZCh2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5m
byYgaW5mbykKLXsKLSAgICByZXR1cm4gVGVzdE9ialY4SW50ZXJuYWw6OndpdGhTY3JpcHRBcmd1
bWVudHNBbmRDYWxsU3RhY2tBdHRyaWJ1dGVBdHRyR2V0dGVyRm9yTWFpbldvcmxkKG5hbWUsIGlu
Zm8pOwotfQotCiBzdGF0aWMgdm9pZCB3aXRoU2NyaXB0QXJndW1lbnRzQW5kQ2FsbFN0YWNrQXR0
cmlidXRlQXR0clNldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4
OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCiB7CiAgICAgVGVz
dE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKQEAgLTE5ODks
MTkgKzEwNTcsNiBAQCBzdGF0aWMgdm9pZCB3aXRoU2NyaXB0QXJndW1lbnRzQW5kQ2FsbFN0YWNr
QXR0cmlidXRlQXR0clNldHRlckNhbGxiYWNrKHY4OjpMb2NhbAogICAgIFRlc3RPYmpWOEludGVy
bmFsOjp3aXRoU2NyaXB0QXJndW1lbnRzQW5kQ2FsbFN0YWNrQXR0cmlidXRlQXR0clNldHRlcihu
YW1lLCB2YWx1ZSwgaW5mbyk7CiB9CiAKLXN0YXRpYyB2b2lkIHdpdGhTY3JpcHRBcmd1bWVudHNB
bmRDYWxsU3RhY2tBdHRyaWJ1dGVBdHRyU2V0dGVyRm9yTWFpbldvcmxkKHY4OjpMb2NhbDx2ODo6
U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vz
c29ySW5mbyYgaW5mbykKLXsKLSAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZl
KGluZm8uSG9sZGVyKCkpOwotICAgIFRlc3RPYmoqIHYgPSBWOFRlc3RPYmo6Okhhc0luc3RhbmNl
KHZhbHVlLCBpbmZvLkdldElzb2xhdGUoKSwgd29ybGRUeXBlKGluZm8uR2V0SXNvbGF0ZSgpKSkg
PyBWOFRlc3RPYmo6OnRvTmF0aXZlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QodmFsdWUp
KSA6IDA7Ci0gICAgaW1wLT5zZXRXaXRoU2NyaXB0QXJndW1lbnRzQW5kQ2FsbFN0YWNrQXR0cmli
dXRlKFdURjo6Z2V0UHRyKHYpKTsKLSAgICByZXR1cm47Ci19Ci0KLXN0YXRpYyB2b2lkIHdpdGhT
Y3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tBdHRyaWJ1dGVBdHRyU2V0dGVyQ2FsbGJhY2tGb3JN
YWluV29ybGQodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+
IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQotewotICAgIFRlc3RPYmpWOElu
dGVybmFsOjp3aXRoU2NyaXB0QXJndW1lbnRzQW5kQ2FsbFN0YWNrQXR0cmlidXRlQXR0clNldHRl
ckZvck1haW5Xb3JsZChuYW1lLCB2YWx1ZSwgaW5mbyk7Ci19Ci0KICNpZiBFTkFCTEUoQ29uZGl0
aW9uMSkKIAogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjb25kaXRpb25hbEF0dHIxQXR0
ckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5m
byYgaW5mbykKQEAgLTIwMjMsMjUgKzEwNzgsNiBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IGNvbmRpdGlvbmFsQXR0cjFBdHRyR2V0dGVyQ2FsbGJhY2sodjg6OkxvY2FsPHY4OjpTdAog
CiAjaWYgRU5BQkxFKENvbmRpdGlvbjEpCiAKLXN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
Y29uZGl0aW9uYWxBdHRyMUF0dHJHZXR0ZXJGb3JNYWluV29ybGQodjg6OkxvY2FsPHY4OjpTdHJp
bmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCi17Ci0gICAgVGVzdE9iaiog
aW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKLSAgICByZXR1cm4gdjhJ
bnRlZ2VyKGltcC0+Y29uZGl0aW9uYWxBdHRyMSgpLCBpbmZvLkdldElzb2xhdGUoKSk7Ci19Ci0K
LSNlbmRpZiAvLyBFTkFCTEUoQ29uZGl0aW9uMSkKLQotI2lmIEVOQUJMRShDb25kaXRpb24xKQot
Ci1zdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbmRpdGlvbmFsQXR0cjFBdHRyR2V0dGVy
Q2FsbGJhY2tGb3JNYWluV29ybGQodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4
OjpBY2Nlc3NvckluZm8mIGluZm8pCi17Ci0gICAgcmV0dXJuIFRlc3RPYmpWOEludGVybmFsOjpj
b25kaXRpb25hbEF0dHIxQXR0ckdldHRlckZvck1haW5Xb3JsZChuYW1lLCBpbmZvKTsKLX0KLQot
I2VuZGlmIC8vIEVOQUJMRShDb25kaXRpb24xKQotCi0jaWYgRU5BQkxFKENvbmRpdGlvbjEpCi0K
IHN0YXRpYyB2b2lkIGNvbmRpdGlvbmFsQXR0cjFBdHRyU2V0dGVyKHY4OjpMb2NhbDx2ODo6U3Ry
aW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29y
SW5mbyYgaW5mbykKIHsKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGlu
Zm8uSG9sZGVyKCkpOwpAQCAtMjA2MSwyNyArMTA5Nyw2IEBAIHN0YXRpYyB2b2lkIGNvbmRpdGlv
bmFsQXR0cjFBdHRyU2V0dGVyQ2FsbGJhY2sodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4
OjpMCiAKICNlbmRpZiAvLyBFTkFCTEUoQ29uZGl0aW9uMSkKIAotI2lmIEVOQUJMRShDb25kaXRp
b24xKQotCi1zdGF0aWMgdm9pZCBjb25kaXRpb25hbEF0dHIxQXR0clNldHRlckZvck1haW5Xb3Js
ZCh2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUs
IGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCi17Ci0gICAgVGVzdE9iaiogaW1wID0gVjhU
ZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKLSAgICBpbnQgdiA9IHRvSW50MzIodmFs
dWUpOwotICAgIGltcC0+c2V0Q29uZGl0aW9uYWxBdHRyMSh2KTsKLSAgICByZXR1cm47Ci19Ci0K
LSNlbmRpZiAvLyBFTkFCTEUoQ29uZGl0aW9uMSkKLQotI2lmIEVOQUJMRShDb25kaXRpb24xKQot
Ci1zdGF0aWMgdm9pZCBjb25kaXRpb25hbEF0dHIxQXR0clNldHRlckNhbGxiYWNrRm9yTWFpbldv
cmxkKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1
ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKLXsKLSAgICBUZXN0T2JqVjhJbnRlcm5h
bDo6Y29uZGl0aW9uYWxBdHRyMUF0dHJTZXR0ZXJGb3JNYWluV29ybGQobmFtZSwgdmFsdWUsIGlu
Zm8pOwotfQotCi0jZW5kaWYgLy8gRU5BQkxFKENvbmRpdGlvbjEpCi0KICNpZiBFTkFCTEUoQ29u
ZGl0aW9uMSkgJiYgRU5BQkxFKENvbmRpdGlvbjIpCiAKIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gY29uZGl0aW9uYWxBdHRyMkF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5h
bWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCkBAIC0yMTAzLDI1ICsxMTE4LDYgQEAg
c3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjb25kaXRpb25hbEF0dHIyQXR0ckdldHRlckNh
bGxiYWNrKHY4OjpMb2NhbDx2ODo6U3QKIAogI2lmIEVOQUJMRShDb25kaXRpb24xKSAmJiBFTkFC
TEUoQ29uZGl0aW9uMikKIAotc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjb25kaXRpb25h
bEF0dHIyQXR0ckdldHRlckZvck1haW5Xb3JsZCh2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwg
Y29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKLXsKLSAgICBUZXN0T2JqKiBpbXAgPSBWOFRl
c3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwotICAgIHJldHVybiB2OEludGVnZXIoaW1w
LT5jb25kaXRpb25hbEF0dHIyKCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKLX0KLQotI2VuZGlmIC8v
IEVOQUJMRShDb25kaXRpb24xKSAmJiBFTkFCTEUoQ29uZGl0aW9uMikKLQotI2lmIEVOQUJMRShD
b25kaXRpb24xKSAmJiBFTkFCTEUoQ29uZGl0aW9uMikKLQotc3RhdGljIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBjb25kaXRpb25hbEF0dHIyQXR0ckdldHRlckNhbGxiYWNrRm9yTWFpbldvcmxkKHY4
OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQot
ewotICAgIHJldHVybiBUZXN0T2JqVjhJbnRlcm5hbDo6Y29uZGl0aW9uYWxBdHRyMkF0dHJHZXR0
ZXJGb3JNYWluV29ybGQobmFtZSwgaW5mbyk7Ci19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoQ29uZGl0
aW9uMSkgJiYgRU5BQkxFKENvbmRpdGlvbjIpCi0KLSNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgJiYg
RU5BQkxFKENvbmRpdGlvbjIpCi0KIHN0YXRpYyB2b2lkIGNvbmRpdGlvbmFsQXR0cjJBdHRyU2V0
dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1
ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKIHsKICAgICBUZXN0T2JqKiBpbXAgPSBW
OFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwpAQCAtMjE0MSwyNyArMTEzNyw2IEBA
IHN0YXRpYyB2b2lkIGNvbmRpdGlvbmFsQXR0cjJBdHRyU2V0dGVyQ2FsbGJhY2sodjg6OkxvY2Fs
PHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMCiAKICNlbmRpZiAvLyBFTkFCTEUoQ29uZGl0aW9uMSkg
JiYgRU5BQkxFKENvbmRpdGlvbjIpCiAKLSNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgJiYgRU5BQkxF
KENvbmRpdGlvbjIpCi0KLXN0YXRpYyB2b2lkIGNvbmRpdGlvbmFsQXR0cjJBdHRyU2V0dGVyRm9y
TWFpbldvcmxkKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVl
PiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKLXsKLSAgICBUZXN0T2JqKiBp
bXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwotICAgIGludCB2ID0gdG9J
bnQzMih2YWx1ZSk7Ci0gICAgaW1wLT5zZXRDb25kaXRpb25hbEF0dHIyKHYpOwotICAgIHJldHVy
bjsKLX0KLQotI2VuZGlmIC8vIEVOQUJMRShDb25kaXRpb24xKSAmJiBFTkFCTEUoQ29uZGl0aW9u
MikKLQotI2lmIEVOQUJMRShDb25kaXRpb24xKSAmJiBFTkFCTEUoQ29uZGl0aW9uMikKLQotc3Rh
dGljIHZvaWQgY29uZGl0aW9uYWxBdHRyMkF0dHJTZXR0ZXJDYWxsYmFja0Zvck1haW5Xb3JsZCh2
ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNv
bnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCi17Ci0gICAgVGVzdE9ialY4SW50ZXJuYWw6OmNv
bmRpdGlvbmFsQXR0cjJBdHRyU2V0dGVyRm9yTWFpbldvcmxkKG5hbWUsIHZhbHVlLCBpbmZvKTsK
LX0KLQotI2VuZGlmIC8vIEVOQUJMRShDb25kaXRpb24xKSAmJiBFTkFCTEUoQ29uZGl0aW9uMikK
LQogI2lmIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKIAogc3RhdGlj
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjb25kaXRpb25hbEF0dHIzQXR0ckdldHRlcih2ODo6TG9j
YWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKQEAgLTIx
ODMsMjUgKzExNTgsNiBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbmRpdGlvbmFs
QXR0cjNBdHRyR2V0dGVyQ2FsbGJhY2sodjg6OkxvY2FsPHY4OjpTdAogCiAjaWYgRU5BQkxFKENv
bmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQogCi1zdGF0aWMgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IGNvbmRpdGlvbmFsQXR0cjNBdHRyR2V0dGVyRm9yTWFpbldvcmxkKHY4OjpMb2NhbDx2
ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQotewotICAgIFRl
c3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAgcmV0
dXJuIHY4SW50ZWdlcihpbXAtPmNvbmRpdGlvbmFsQXR0cjMoKSwgaW5mby5HZXRJc29sYXRlKCkp
OwotfQotCi0jZW5kaWYgLy8gRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24y
KQotCi0jaWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQotCi1zdGF0
aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbmRpdGlvbmFsQXR0cjNBdHRyR2V0dGVyQ2FsbGJh
Y2tGb3JNYWluV29ybGQodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nl
c3NvckluZm8mIGluZm8pCi17Ci0gICAgcmV0dXJuIFRlc3RPYmpWOEludGVybmFsOjpjb25kaXRp
b25hbEF0dHIzQXR0ckdldHRlckZvck1haW5Xb3JsZChuYW1lLCBpbmZvKTsKLX0KLQotI2VuZGlm
IC8vIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKLQotI2lmIEVOQUJM
RShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKLQogc3RhdGljIHZvaWQgY29uZGl0
aW9uYWxBdHRyM0F0dHJTZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2Nh
bDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQogewogICAg
IFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7CkBAIC0y
MjIxLDI3ICsxMTc3LDYgQEAgc3RhdGljIHZvaWQgY29uZGl0aW9uYWxBdHRyM0F0dHJTZXR0ZXJD
YWxsYmFjayh2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkwKIAogI2VuZGlmIC8vIEVO
QUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKIAotI2lmIEVOQUJMRShDb25k
aXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKLQotc3RhdGljIHZvaWQgY29uZGl0aW9uYWxB
dHRyM0F0dHJTZXR0ZXJGb3JNYWluV29ybGQodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4
OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQot
ewotICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7
Ci0gICAgaW50IHYgPSB0b0ludDMyKHZhbHVlKTsKLSAgICBpbXAtPnNldENvbmRpdGlvbmFsQXR0
cjModik7Ci0gICAgcmV0dXJuOwotfQotCi0jZW5kaWYgLy8gRU5BQkxFKENvbmRpdGlvbjEpIHx8
IEVOQUJMRShDb25kaXRpb24yKQotCi0jaWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShD
b25kaXRpb24yKQotCi1zdGF0aWMgdm9pZCBjb25kaXRpb25hbEF0dHIzQXR0clNldHRlckNhbGxi
YWNrRm9yTWFpbldvcmxkKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6
OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKLXsKLSAgICBUZXN0
T2JqVjhJbnRlcm5hbDo6Y29uZGl0aW9uYWxBdHRyM0F0dHJTZXR0ZXJGb3JNYWluV29ybGQobmFt
ZSwgdmFsdWUsIGluZm8pOwotfQotCi0jZW5kaWYgLy8gRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVO
QUJMRShDb25kaXRpb24yKQotCiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNhY2hlZEF0
dHJpYnV0ZTFBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6
QWNjZXNzb3JJbmZvJiBpbmZvKQogewogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9O
YXRpdmUoaW5mby5Ib2xkZXIoKSk7CkBAIC0yMjUzLDE3ICsxMTg4LDYgQEAgc3RhdGljIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiBjYWNoZWRBdHRyaWJ1dGUxQXR0ckdldHRlckNhbGxiYWNrKHY4OjpM
b2NhbDx2ODo6U3QKICAgICByZXR1cm4gVGVzdE9ialY4SW50ZXJuYWw6OmNhY2hlZEF0dHJpYnV0
ZTFBdHRyR2V0dGVyKG5hbWUsIGluZm8pOwogfQogCi1zdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IGNhY2hlZEF0dHJpYnV0ZTFBdHRyR2V0dGVyRm9yTWFpbldvcmxkKHY4OjpMb2NhbDx2ODo6
U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQotewotICAgIFRlc3RP
YmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAgcmV0dXJu
IGltcC0+Y2FjaGVkQXR0cmlidXRlMSgpLnY4VmFsdWUoKTsKLX0KLQotc3RhdGljIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiBjYWNoZWRBdHRyaWJ1dGUxQXR0ckdldHRlckNhbGxiYWNrRm9yTWFpbldv
cmxkKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBp
bmZvKQotewotICAgIHJldHVybiBUZXN0T2JqVjhJbnRlcm5hbDo6Y2FjaGVkQXR0cmlidXRlMUF0
dHJHZXR0ZXJGb3JNYWluV29ybGQobmFtZSwgaW5mbyk7Ci19Ci0KIHN0YXRpYyB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gY2FjaGVkQXR0cmlidXRlMkF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJp
bmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCiB7CiAgICAgVGVzdE9iaiog
aW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKQEAgLTIyNzUsMTcgKzEx
OTksNiBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNhY2hlZEF0dHJpYnV0ZTJBdHRy
R2V0dGVyQ2FsbGJhY2sodjg6OkxvY2FsPHY4OjpTdAogICAgIHJldHVybiBUZXN0T2JqVjhJbnRl
cm5hbDo6Y2FjaGVkQXR0cmlidXRlMkF0dHJHZXR0ZXIobmFtZSwgaW5mbyk7CiB9CiAKLXN0YXRp
YyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY2FjaGVkQXR0cmlidXRlMkF0dHJHZXR0ZXJGb3JNYWlu
V29ybGQodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8m
IGluZm8pCi17Ci0gICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhv
bGRlcigpKTsKLSAgICByZXR1cm4gaW1wLT5jYWNoZWRBdHRyaWJ1dGUyKCkudjhWYWx1ZSgpOwot
fQotCi1zdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNhY2hlZEF0dHJpYnV0ZTJBdHRyR2V0
dGVyQ2FsbGJhY2tGb3JNYWluV29ybGQodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0
IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCi17Ci0gICAgcmV0dXJuIFRlc3RPYmpWOEludGVybmFs
OjpjYWNoZWRBdHRyaWJ1dGUyQXR0ckdldHRlckZvck1haW5Xb3JsZChuYW1lLCBpbmZvKTsKLX0K
LQogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBhbnlBdHRyaWJ1dGVBdHRyR2V0dGVyKHY4
OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQog
ewogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7
CkBAIC0yMjk3LDE3ICsxMjEwLDYgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBhbnlB
dHRyaWJ1dGVBdHRyR2V0dGVyQ2FsbGJhY2sodjg6OkxvY2FsPHY4OjpTdHJpbmcKICAgICByZXR1
cm4gVGVzdE9ialY4SW50ZXJuYWw6OmFueUF0dHJpYnV0ZUF0dHJHZXR0ZXIobmFtZSwgaW5mbyk7
CiB9CiAKLXN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gYW55QXR0cmlidXRlQXR0ckdldHRl
ckZvck1haW5Xb3JsZCh2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vz
c29ySW5mbyYgaW5mbykKLXsKLSAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZl
KGluZm8uSG9sZGVyKCkpOwotICAgIHJldHVybiBpbXAtPmFueUF0dHJpYnV0ZSgpLnY4VmFsdWUo
KTsKLX0KLQotc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBhbnlBdHRyaWJ1dGVBdHRyR2V0
dGVyQ2FsbGJhY2tGb3JNYWluV29ybGQodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0
IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCi17Ci0gICAgcmV0dXJuIFRlc3RPYmpWOEludGVybmFs
OjphbnlBdHRyaWJ1dGVBdHRyR2V0dGVyRm9yTWFpbldvcmxkKG5hbWUsIGluZm8pOwotfQotCiBz
dGF0aWMgdm9pZCBhbnlBdHRyaWJ1dGVBdHRyU2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBu
YW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYg
aW5mbykKIHsKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9s
ZGVyKCkpOwpAQCAtMjMyMSwxOSArMTIyMyw2IEBAIHN0YXRpYyB2b2lkIGFueUF0dHJpYnV0ZUF0
dHJTZXR0ZXJDYWxsYmFjayh2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsCiAg
ICAgVGVzdE9ialY4SW50ZXJuYWw6OmFueUF0dHJpYnV0ZUF0dHJTZXR0ZXIobmFtZSwgdmFsdWUs
IGluZm8pOwogfQogCi1zdGF0aWMgdm9pZCBhbnlBdHRyaWJ1dGVBdHRyU2V0dGVyRm9yTWFpbldv
cmxkKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1
ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKLXsKLSAgICBUZXN0T2JqKiBpbXAgPSBW
OFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwotICAgIFNjcmlwdFZhbHVlIHYgPSBT
Y3JpcHRWYWx1ZSh2YWx1ZSk7Ci0gICAgaW1wLT5zZXRBbnlBdHRyaWJ1dGUoV1RGOjpnZXRQdHIo
dikpOwotICAgIHJldHVybjsKLX0KLQotc3RhdGljIHZvaWQgYW55QXR0cmlidXRlQXR0clNldHRl
ckNhbGxiYWNrRm9yTWFpbldvcmxkKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9j
YWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKLXsKLSAg
ICBUZXN0T2JqVjhJbnRlcm5hbDo6YW55QXR0cmlidXRlQXR0clNldHRlckZvck1haW5Xb3JsZChu
YW1lLCB2YWx1ZSwgaW5mbyk7Ci19Ci0KIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZW5h
YmxlZEF0UnVudGltZUF0dHIxQXR0ckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwg
Y29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKIHsKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRl
c3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwpAQCAtMjM0NSwxNyArMTIzNCw2IEBAIHN0
YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZW5hYmxlZEF0UnVudGltZUF0dHIxQXR0ckdldHRl
ckNhbGxiYWNrKHY4OjpMb2NhbDx2CiAgICAgcmV0dXJuIFRlc3RPYmpWOEludGVybmFsOjplbmFi
bGVkQXRSdW50aW1lQXR0cjFBdHRyR2V0dGVyKG5hbWUsIGluZm8pOwogfQogCi1zdGF0aWMgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IGVuYWJsZWRBdFJ1bnRpbWVBdHRyMUF0dHJHZXR0ZXJGb3JNYWlu
V29ybGQodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8m
IGluZm8pCi17Ci0gICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhv
bGRlcigpKTsKLSAgICByZXR1cm4gdjhJbnRlZ2VyKGltcC0+ZW5hYmxlZEF0UnVudGltZUF0dHIx
KCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKLX0KLQotc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiBlbmFibGVkQXRSdW50aW1lQXR0cjFBdHRyR2V0dGVyQ2FsbGJhY2tGb3JNYWluV29ybGQodjg6
OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCi17
Ci0gICAgcmV0dXJuIFRlc3RPYmpWOEludGVybmFsOjplbmFibGVkQXRSdW50aW1lQXR0cjFBdHRy
R2V0dGVyRm9yTWFpbldvcmxkKG5hbWUsIGluZm8pOwotfQotCiBzdGF0aWMgdm9pZCBlbmFibGVk
QXRSdW50aW1lQXR0cjFBdHRyU2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6
TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKIHsK
ICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwpA
QCAtMjM2OSwxOSArMTI0Nyw2IEBAIHN0YXRpYyB2b2lkIGVuYWJsZWRBdFJ1bnRpbWVBdHRyMUF0
dHJTZXR0ZXJDYWxsYmFjayh2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwKICAgICBUZXN0T2Jq
VjhJbnRlcm5hbDo6ZW5hYmxlZEF0UnVudGltZUF0dHIxQXR0clNldHRlcihuYW1lLCB2YWx1ZSwg
aW5mbyk7CiB9CiAKLXN0YXRpYyB2b2lkIGVuYWJsZWRBdFJ1bnRpbWVBdHRyMUF0dHJTZXR0ZXJG
b3JNYWluV29ybGQodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFs
dWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQotewotICAgIFRlc3RPYmoq
IGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAgaW50IHYgPSB0
b0ludDMyKHZhbHVlKTsKLSAgICBpbXAtPnNldEVuYWJsZWRBdFJ1bnRpbWVBdHRyMSh2KTsKLSAg
ICByZXR1cm47Ci19Ci0KLXN0YXRpYyB2b2lkIGVuYWJsZWRBdFJ1bnRpbWVBdHRyMUF0dHJTZXR0
ZXJDYWxsYmFja0Zvck1haW5Xb3JsZCh2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6Okxv
Y2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCi17Ci0g
ICAgVGVzdE9ialY4SW50ZXJuYWw6OmVuYWJsZWRBdFJ1bnRpbWVBdHRyMUF0dHJTZXR0ZXJGb3JN
YWluV29ybGQobmFtZSwgdmFsdWUsIGluZm8pOwotfQotCiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IGVuYWJsZWRBdFJ1bnRpbWVBdHRyMkF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJp
bmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCiB7CiAgICAgVGVzdE9iaiog
aW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKQEAgLTIzOTMsMTcgKzEy
NTgsNiBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGVuYWJsZWRBdFJ1bnRpbWVBdHRy
MkF0dHJHZXR0ZXJDYWxsYmFjayh2ODo6TG9jYWw8dgogICAgIHJldHVybiBUZXN0T2JqVjhJbnRl
cm5hbDo6ZW5hYmxlZEF0UnVudGltZUF0dHIyQXR0ckdldHRlcihuYW1lLCBpbmZvKTsKIH0KIAot
c3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBlbmFibGVkQXRSdW50aW1lQXR0cjJBdHRyR2V0
dGVyRm9yTWFpbldvcmxkKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNj
ZXNzb3JJbmZvJiBpbmZvKQotewotICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRp
dmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAgcmV0dXJuIHY4SW50ZWdlcihpbXAtPmVuYWJsZWRBdFJ1
bnRpbWVBdHRyMigpLCBpbmZvLkdldElzb2xhdGUoKSk7Ci19Ci0KLXN0YXRpYyB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gZW5hYmxlZEF0UnVudGltZUF0dHIyQXR0ckdldHRlckNhbGxiYWNrRm9yTWFp
bldvcmxkKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZv
JiBpbmZvKQotewotICAgIHJldHVybiBUZXN0T2JqVjhJbnRlcm5hbDo6ZW5hYmxlZEF0UnVudGlt
ZUF0dHIyQXR0ckdldHRlckZvck1haW5Xb3JsZChuYW1lLCBpbmZvKTsKLX0KLQogc3RhdGljIHZv
aWQgZW5hYmxlZEF0UnVudGltZUF0dHIyQXR0clNldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4g
bmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8m
IGluZm8pCiB7CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhv
bGRlcigpKTsKQEAgLTI0MTcsMTkgKzEyNzEsNiBAQCBzdGF0aWMgdm9pZCBlbmFibGVkQXRSdW50
aW1lQXR0cjJBdHRyU2V0dGVyQ2FsbGJhY2sodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsCiAg
ICAgVGVzdE9ialY4SW50ZXJuYWw6OmVuYWJsZWRBdFJ1bnRpbWVBdHRyMkF0dHJTZXR0ZXIobmFt
ZSwgdmFsdWUsIGluZm8pOwogfQogCi1zdGF0aWMgdm9pZCBlbmFibGVkQXRSdW50aW1lQXR0cjJB
dHRyU2V0dGVyRm9yTWFpbldvcmxkKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9j
YWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKLXsKLSAg
ICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwotICAg
IGludCB2ID0gdG9JbnQzMih2YWx1ZSk7Ci0gICAgaW1wLT5zZXRFbmFibGVkQXRSdW50aW1lQXR0
cjIodik7Ci0gICAgcmV0dXJuOwotfQotCi1zdGF0aWMgdm9pZCBlbmFibGVkQXRSdW50aW1lQXR0
cjJBdHRyU2V0dGVyQ2FsbGJhY2tGb3JNYWluV29ybGQodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5h
bWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBp
bmZvKQotewotICAgIFRlc3RPYmpWOEludGVybmFsOjplbmFibGVkQXRSdW50aW1lQXR0cjJBdHRy
U2V0dGVyRm9yTWFpbldvcmxkKG5hbWUsIHZhbHVlLCBpbmZvKTsKLX0KLQogc3RhdGljIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiBlbmFibGVkUGVyQ29udGV4dEF0dHIxQXR0ckdldHRlcih2ODo6TG9j
YWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKIHsKICAg
ICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwpAQCAt
MjQ4OSwxNyArMTMzMCw2IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZmxvYXRBcnJh
eUF0dHJHZXR0ZXJDYWxsYmFjayh2ODo6TG9jYWw8djg6OlN0cmluZz4KICAgICByZXR1cm4gVGVz
dE9ialY4SW50ZXJuYWw6OmZsb2F0QXJyYXlBdHRyR2V0dGVyKG5hbWUsIGluZm8pOwogfQogCi1z
dGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGZsb2F0QXJyYXlBdHRyR2V0dGVyRm9yTWFpbldv
cmxkKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBp
bmZvKQotewotICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xk
ZXIoKSk7Ci0gICAgcmV0dXJuIHY4QXJyYXkoaW1wLT5mbG9hdEFycmF5KCksIGluZm8uR2V0SXNv
bGF0ZSgpKTsKLX0KLQotc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBmbG9hdEFycmF5QXR0
ckdldHRlckNhbGxiYWNrRm9yTWFpbldvcmxkKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBj
b25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQotewotICAgIHJldHVybiBUZXN0T2JqVjhJbnRl
cm5hbDo6ZmxvYXRBcnJheUF0dHJHZXR0ZXJGb3JNYWluV29ybGQobmFtZSwgaW5mbyk7Ci19Ci0K
IHN0YXRpYyB2b2lkIGZsb2F0QXJyYXlBdHRyU2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBu
YW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYg
aW5mbykKIHsKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9s
ZGVyKCkpOwpAQCAtMjUxMywxOSArMTM0Myw2IEBAIHN0YXRpYyB2b2lkIGZsb2F0QXJyYXlBdHRy
U2V0dGVyQ2FsbGJhY2sodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2CiAg
ICAgVGVzdE9ialY4SW50ZXJuYWw6OmZsb2F0QXJyYXlBdHRyU2V0dGVyKG5hbWUsIHZhbHVlLCBp
bmZvKTsKIH0KIAotc3RhdGljIHZvaWQgZmxvYXRBcnJheUF0dHJTZXR0ZXJGb3JNYWluV29ybGQo
djg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBj
b25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQotewotICAgIFRlc3RPYmoqIGltcCA9IFY4VGVz
dE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAgVmVjdG9yPGZsb2F0PiB2ID0gdG9O
YXRpdmVBcnJheTxmbG9hdD4odmFsdWUpOwotICAgIGltcC0+c2V0RmxvYXRBcnJheSh2KTsKLSAg
ICByZXR1cm47Ci19Ci0KLXN0YXRpYyB2b2lkIGZsb2F0QXJyYXlBdHRyU2V0dGVyQ2FsbGJhY2tG
b3JNYWluV29ybGQodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFs
dWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQotewotICAgIFRlc3RPYmpW
OEludGVybmFsOjpmbG9hdEFycmF5QXR0clNldHRlckZvck1haW5Xb3JsZChuYW1lLCB2YWx1ZSwg
aW5mbyk7Ci19Ci0KIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZG91YmxlQXJyYXlBdHRy
R2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZv
JiBpbmZvKQogewogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5I
b2xkZXIoKSk7CkBAIC0yNTM3LDE3ICsxMzU0LDYgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiBkb3VibGVBcnJheUF0dHJHZXR0ZXJDYWxsYmFjayh2ODo6TG9jYWw8djg6OlN0cmluZz4K
ICAgICByZXR1cm4gVGVzdE9ialY4SW50ZXJuYWw6OmRvdWJsZUFycmF5QXR0ckdldHRlcihuYW1l
LCBpbmZvKTsKIH0KIAotc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBkb3VibGVBcnJheUF0
dHJHZXR0ZXJGb3JNYWluV29ybGQodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4
OjpBY2Nlc3NvckluZm8mIGluZm8pCi17Ci0gICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0
b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKLSAgICByZXR1cm4gdjhBcnJheShpbXAtPmRvdWJsZUFy
cmF5KCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKLX0KLQotc3RhdGljIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiBkb3VibGVBcnJheUF0dHJHZXR0ZXJDYWxsYmFja0Zvck1haW5Xb3JsZCh2ODo6TG9jYWw8
djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKLXsKLSAgICBy
ZXR1cm4gVGVzdE9ialY4SW50ZXJuYWw6OmRvdWJsZUFycmF5QXR0ckdldHRlckZvck1haW5Xb3Js
ZChuYW1lLCBpbmZvKTsKLX0KLQogc3RhdGljIHZvaWQgZG91YmxlQXJyYXlBdHRyU2V0dGVyKHY4
OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29u
c3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKIHsKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RP
Ymo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwpAQCAtMjU2MSwxOSArMTM2Nyw2IEBAIHN0YXRp
YyB2b2lkIGRvdWJsZUFycmF5QXR0clNldHRlckNhbGxiYWNrKHY4OjpMb2NhbDx2ODo6U3RyaW5n
PiBuYW1lLCB2ODo6TG9jYWw8CiAgICAgVGVzdE9ialY4SW50ZXJuYWw6OmRvdWJsZUFycmF5QXR0
clNldHRlcihuYW1lLCB2YWx1ZSwgaW5mbyk7CiB9CiAKLXN0YXRpYyB2b2lkIGRvdWJsZUFycmF5
QXR0clNldHRlckZvck1haW5Xb3JsZCh2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6Okxv
Y2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCi17Ci0g
ICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKLSAg
ICBWZWN0b3I8ZG91YmxlPiB2ID0gdG9OYXRpdmVBcnJheTxkb3VibGU+KHZhbHVlKTsKLSAgICBp
bXAtPnNldERvdWJsZUFycmF5KHYpOwotICAgIHJldHVybjsKLX0KLQotc3RhdGljIHZvaWQgZG91
YmxlQXJyYXlBdHRyU2V0dGVyQ2FsbGJhY2tGb3JNYWluV29ybGQodjg6OkxvY2FsPHY4OjpTdHJp
bmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJ
bmZvJiBpbmZvKQotewotICAgIFRlc3RPYmpWOEludGVybmFsOjpkb3VibGVBcnJheUF0dHJTZXR0
ZXJGb3JNYWluV29ybGQobmFtZSwgdmFsdWUsIGluZm8pOwotfQotCiBzdGF0aWMgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IGNvbnRlbnREb2N1bWVudEF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJp
bmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCiB7CiAgICAgVGVzdE9iaiog
aW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKQEAgLTI1ODgsMjAgKzEz
ODEsNiBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbnRlbnREb2N1bWVudEF0dHJH
ZXR0ZXJDYWxsYmFjayh2ODo6TG9jYWw8djg6OlN0cgogICAgIHJldHVybiBUZXN0T2JqVjhJbnRl
cm5hbDo6Y29udGVudERvY3VtZW50QXR0ckdldHRlcihuYW1lLCBpbmZvKTsKIH0KIAotc3RhdGlj
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjb250ZW50RG9jdW1lbnRBdHRyR2V0dGVyRm9yTWFpbldv
cmxkKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBp
bmZvKQotewotICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xk
ZXIoKSk7Ci0gICAgaWYgKCFCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9Ob2Rl
KEJpbmRpbmdTdGF0ZTo6aW5zdGFuY2UoKSwgaW1wLT5jb250ZW50RG9jdW1lbnQoKSkpCi0gICAg
ICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4odjhOdWxsKGluZm8uR2V0SXNvbGF0ZSgp
KSk7Ci0KLSAgICByZXR1cm4gdG9WOEZhc3RGb3JNYWluV29ybGQoaW1wLT5jb250ZW50RG9jdW1l
bnQoKSwgaW5mbywgaW1wKTsKLX0KLQotc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjb250
ZW50RG9jdW1lbnRBdHRyR2V0dGVyQ2FsbGJhY2tGb3JNYWluV29ybGQodjg6OkxvY2FsPHY4OjpT
dHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCi17Ci0gICAgcmV0dXJu
IFRlc3RPYmpWOEludGVybmFsOjpjb250ZW50RG9jdW1lbnRBdHRyR2V0dGVyRm9yTWFpbldvcmxk
KG5hbWUsIGluZm8pOwotfQotCiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG11dGFibGVQ
b2ludEF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nl
c3NvckluZm8mIGluZm8pCiB7CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2
ZShpbmZvLkhvbGRlcigpKTsKQEAgLTI2MTMsMTcgKzEzOTIsNiBAQCBzdGF0aWMgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IG11dGFibGVQb2ludEF0dHJHZXR0ZXJDYWxsYmFjayh2ODo6TG9jYWw8djg6
OlN0cmluZwogICAgIHJldHVybiBUZXN0T2JqVjhJbnRlcm5hbDo6bXV0YWJsZVBvaW50QXR0ckdl
dHRlcihuYW1lLCBpbmZvKTsKIH0KIAotc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBtdXRh
YmxlUG9pbnRBdHRyR2V0dGVyRm9yTWFpbldvcmxkKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1l
LCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQotewotICAgIFRlc3RPYmoqIGltcCA9IFY4
VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAgcmV0dXJuIHRvVjhGYXN0Rm9y
TWFpbldvcmxkKFdURjo6Z2V0UHRyKFNWR1N0YXRpY1Byb3BlcnR5VGVhck9mZjxUZXN0T2JqLCBG
bG9hdFBvaW50Pjo6Y3JlYXRlKGltcCwgaW1wLT5tdXRhYmxlUG9pbnQoKSwgJlRlc3RPYmo6OnVw
ZGF0ZU11dGFibGVQb2ludCkpLCBpbmZvLCBpbXApOwotfQotCi1zdGF0aWMgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IG11dGFibGVQb2ludEF0dHJHZXR0ZXJDYWxsYmFja0Zvck1haW5Xb3JsZCh2ODo6
TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKLXsK
LSAgICByZXR1cm4gVGVzdE9ialY4SW50ZXJuYWw6Om11dGFibGVQb2ludEF0dHJHZXR0ZXJGb3JN
YWluV29ybGQobmFtZSwgaW5mbyk7Ci19Ci0KIHN0YXRpYyB2b2lkIG11dGFibGVQb2ludEF0dHJT
ZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZh
bHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQogewogICAgIFRlc3RPYmoqIGltcCA9
IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7CkBAIC0yNjM3LDE5ICsxNDA1LDYg
QEAgc3RhdGljIHZvaWQgbXV0YWJsZVBvaW50QXR0clNldHRlckNhbGxiYWNrKHY4OjpMb2NhbDx2
ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWwKICAgICBUZXN0T2JqVjhJbnRlcm5hbDo6bXV0YWJs
ZVBvaW50QXR0clNldHRlcihuYW1lLCB2YWx1ZSwgaW5mbyk7CiB9CiAKLXN0YXRpYyB2b2lkIG11
dGFibGVQb2ludEF0dHJTZXR0ZXJGb3JNYWluV29ybGQodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5h
bWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBp
bmZvKQotewotICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xk
ZXIoKSk7Ci0gICAgUmVmUHRyPFNWR1Byb3BlcnR5VGVhck9mZjxGbG9hdFBvaW50PiA+IHYgPSBW
OFNWR1BvaW50OjpIYXNJbnN0YW5jZSh2YWx1ZSwgaW5mby5HZXRJc29sYXRlKCksIHdvcmxkVHlw
ZShpbmZvLkdldElzb2xhdGUoKSkpID8gVjhTVkdQb2ludDo6dG9OYXRpdmUodjg6OkhhbmRsZTx2
ODo6T2JqZWN0Pjo6Q2FzdCh2YWx1ZSkpIDogMDsKLSAgICBpbXAtPnNldE11dGFibGVQb2ludChX
VEY6OmdldFB0cih2KSk7Ci0gICAgcmV0dXJuOwotfQotCi1zdGF0aWMgdm9pZCBtdXRhYmxlUG9p
bnRBdHRyU2V0dGVyQ2FsbGJhY2tGb3JNYWluV29ybGQodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5h
bWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBp
bmZvKQotewotICAgIFRlc3RPYmpWOEludGVybmFsOjptdXRhYmxlUG9pbnRBdHRyU2V0dGVyRm9y
TWFpbldvcmxkKG5hbWUsIHZhbHVlLCBpbmZvKTsKLX0KLQogc3RhdGljIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBpbW11dGFibGVQb2ludEF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5h
bWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCiB7CiAgICAgVGVzdE9iaiogaW1wID0g
VjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKQEAgLTI2NjEsMTcgKzE0MTYsNiBA
QCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGltbXV0YWJsZVBvaW50QXR0ckdldHRlckNh
bGxiYWNrKHY4OjpMb2NhbDx2ODo6U3RyaQogICAgIHJldHVybiBUZXN0T2JqVjhJbnRlcm5hbDo6
aW1tdXRhYmxlUG9pbnRBdHRyR2V0dGVyKG5hbWUsIGluZm8pOwogfQogCi1zdGF0aWMgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IGltbXV0YWJsZVBvaW50QXR0ckdldHRlckZvck1haW5Xb3JsZCh2ODo6
TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKLXsK
LSAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwot
ICAgIHJldHVybiB0b1Y4RmFzdEZvck1haW5Xb3JsZChXVEY6OmdldFB0cihTVkdQcm9wZXJ0eVRl
YXJPZmY8RmxvYXRQb2ludD46OmNyZWF0ZShpbXAtPmltbXV0YWJsZVBvaW50KCkpKSwgaW5mbywg
aW1wKTsKLX0KLQotc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBpbW11dGFibGVQb2ludEF0
dHJHZXR0ZXJDYWxsYmFja0Zvck1haW5Xb3JsZCh2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwg
Y29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKLXsKLSAgICByZXR1cm4gVGVzdE9ialY4SW50
ZXJuYWw6OmltbXV0YWJsZVBvaW50QXR0ckdldHRlckZvck1haW5Xb3JsZChuYW1lLCBpbmZvKTsK
LX0KLQogc3RhdGljIHZvaWQgaW1tdXRhYmxlUG9pbnRBdHRyU2V0dGVyKHY4OjpMb2NhbDx2ODo6
U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vz
c29ySW5mbyYgaW5mbykKIHsKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZl
KGluZm8uSG9sZGVyKCkpOwpAQCAtMjY4NSwxOSArMTQyOSw2IEBAIHN0YXRpYyB2b2lkIGltbXV0
YWJsZVBvaW50QXR0clNldHRlckNhbGxiYWNrKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2
ODo6TG9jCiAgICAgVGVzdE9ialY4SW50ZXJuYWw6OmltbXV0YWJsZVBvaW50QXR0clNldHRlcihu
YW1lLCB2YWx1ZSwgaW5mbyk7CiB9CiAKLXN0YXRpYyB2b2lkIGltbXV0YWJsZVBvaW50QXR0clNl
dHRlckZvck1haW5Xb3JsZCh2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4
OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCi17Ci0gICAgVGVz
dE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKLSAgICBSZWZQ
dHI8U1ZHUHJvcGVydHlUZWFyT2ZmPEZsb2F0UG9pbnQ+ID4gdiA9IFY4U1ZHUG9pbnQ6Okhhc0lu
c3RhbmNlKHZhbHVlLCBpbmZvLkdldElzb2xhdGUoKSwgd29ybGRUeXBlKGluZm8uR2V0SXNvbGF0
ZSgpKSkgPyBWOFNWR1BvaW50Ojp0b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0
KHZhbHVlKSkgOiAwOwotICAgIGltcC0+c2V0SW1tdXRhYmxlUG9pbnQoV1RGOjpnZXRQdHIodikp
OwotICAgIHJldHVybjsKLX0KLQotc3RhdGljIHZvaWQgaW1tdXRhYmxlUG9pbnRBdHRyU2V0dGVy
Q2FsbGJhY2tGb3JNYWluV29ybGQodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2Nh
bDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQotewotICAg
IFRlc3RPYmpWOEludGVybmFsOjppbW11dGFibGVQb2ludEF0dHJTZXR0ZXJGb3JNYWluV29ybGQo
bmFtZSwgdmFsdWUsIGluZm8pOwotfQotCiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHN0
cmF3YmVycnlBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6
QWNjZXNzb3JJbmZvJiBpbmZvKQogewogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9O
YXRpdmUoaW5mby5Ib2xkZXIoKSk7CkBAIC0yNzA5LDE3ICsxNDQwLDYgQEAgc3RhdGljIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiBzdHJhd2JlcnJ5QXR0ckdldHRlckNhbGxiYWNrKHY4OjpMb2NhbDx2
ODo6U3RyaW5nPgogICAgIHJldHVybiBUZXN0T2JqVjhJbnRlcm5hbDo6c3RyYXdiZXJyeUF0dHJH
ZXR0ZXIobmFtZSwgaW5mbyk7CiB9CiAKLXN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gc3Ry
YXdiZXJyeUF0dHJHZXR0ZXJGb3JNYWluV29ybGQodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUs
IGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCi17Ci0gICAgVGVzdE9iaiogaW1wID0gVjhU
ZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKLSAgICByZXR1cm4gdjhJbnRlZ2VyKGlt
cC0+Ymx1ZWJlcnJ5KCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKLX0KLQotc3RhdGljIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiBzdHJhd2JlcnJ5QXR0ckdldHRlckNhbGxiYWNrRm9yTWFpbldvcmxkKHY4
OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQot
ewotICAgIHJldHVybiBUZXN0T2JqVjhJbnRlcm5hbDo6c3RyYXdiZXJyeUF0dHJHZXR0ZXJGb3JN
YWluV29ybGQobmFtZSwgaW5mbyk7Ci19Ci0KIHN0YXRpYyB2b2lkIHN0cmF3YmVycnlBdHRyU2V0
dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1
ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKIHsKICAgICBUZXN0T2JqKiBpbXAgPSBW
OFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwpAQCAtMjczMywxOSArMTQ1Myw2IEBA
IHN0YXRpYyB2b2lkIHN0cmF3YmVycnlBdHRyU2V0dGVyQ2FsbGJhY2sodjg6OkxvY2FsPHY4OjpT
dHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2CiAgICAgVGVzdE9ialY4SW50ZXJuYWw6OnN0cmF3YmVy
cnlBdHRyU2V0dGVyKG5hbWUsIHZhbHVlLCBpbmZvKTsKIH0KIAotc3RhdGljIHZvaWQgc3RyYXdi
ZXJyeUF0dHJTZXR0ZXJGb3JNYWluV29ybGQodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4
OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQot
ewotICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7
Ci0gICAgaW50IHYgPSB0b0ludDMyKHZhbHVlKTsKLSAgICBpbXAtPnNldEJsdWViZXJyeSh2KTsK
LSAgICByZXR1cm47Ci19Ci0KLXN0YXRpYyB2b2lkIHN0cmF3YmVycnlBdHRyU2V0dGVyQ2FsbGJh
Y2tGb3JNYWluV29ybGQodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6
VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQotewotICAgIFRlc3RP
YmpWOEludGVybmFsOjpzdHJhd2JlcnJ5QXR0clNldHRlckZvck1haW5Xb3JsZChuYW1lLCB2YWx1
ZSwgaW5mbyk7Ci19Ci0KIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gc3RyaWN0RmxvYXRB
dHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJ
bmZvJiBpbmZvKQogewogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5m
by5Ib2xkZXIoKSk7CkBAIC0yNzU3LDE3ICsxNDY0LDYgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBzdHJpY3RGbG9hdEF0dHJHZXR0ZXJDYWxsYmFjayh2ODo6TG9jYWw8djg6OlN0cmlu
Zz4KICAgICByZXR1cm4gVGVzdE9ialY4SW50ZXJuYWw6OnN0cmljdEZsb2F0QXR0ckdldHRlcihu
YW1lLCBpbmZvKTsKIH0KIAotc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBzdHJpY3RGbG9h
dEF0dHJHZXR0ZXJGb3JNYWluV29ybGQodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0
IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCi17Ci0gICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2Jq
Ojp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKLSAgICByZXR1cm4gdjg6Ok51bWJlcjo6TmV3KGlt
cC0+c3RyaWN0RmxvYXQoKSk7Ci19Ci0KLXN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gc3Ry
aWN0RmxvYXRBdHRyR2V0dGVyQ2FsbGJhY2tGb3JNYWluV29ybGQodjg6OkxvY2FsPHY4OjpTdHJp
bmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCi17Ci0gICAgcmV0dXJuIFRl
c3RPYmpWOEludGVybmFsOjpzdHJpY3RGbG9hdEF0dHJHZXR0ZXJGb3JNYWluV29ybGQobmFtZSwg
aW5mbyk7Ci19Ci0KIHN0YXRpYyB2b2lkIHN0cmljdEZsb2F0QXR0clNldHRlcih2ODo6TG9jYWw8
djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpB
Y2Nlc3NvckluZm8mIGluZm8pCiB7CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05h
dGl2ZShpbmZvLkhvbGRlcigpKTsKQEAgLTI3ODEsMTkgKzE0NzcsNiBAQCBzdGF0aWMgdm9pZCBz
dHJpY3RGbG9hdEF0dHJTZXR0ZXJDYWxsYmFjayh2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwg
djg6OkxvY2FsPAogICAgIFRlc3RPYmpWOEludGVybmFsOjpzdHJpY3RGbG9hdEF0dHJTZXR0ZXIo
bmFtZSwgdmFsdWUsIGluZm8pOwogfQogCi1zdGF0aWMgdm9pZCBzdHJpY3RGbG9hdEF0dHJTZXR0
ZXJGb3JNYWluV29ybGQodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6
VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQotewotICAgIFRlc3RP
YmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAgZmxvYXQg
diA9IHN0YXRpY19jYXN0PGZsb2F0Pih2YWx1ZS0+TnVtYmVyVmFsdWUoKSk7Ci0gICAgaW1wLT5z
ZXRTdHJpY3RGbG9hdCh2KTsKLSAgICByZXR1cm47Ci19Ci0KLXN0YXRpYyB2b2lkIHN0cmljdEZs
b2F0QXR0clNldHRlckNhbGxiYWNrRm9yTWFpbldvcmxkKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBu
YW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYg
aW5mbykKLXsKLSAgICBUZXN0T2JqVjhJbnRlcm5hbDo6c3RyaWN0RmxvYXRBdHRyU2V0dGVyRm9y
TWFpbldvcmxkKG5hbWUsIHZhbHVlLCBpbmZvKTsKLX0KLQogc3RhdGljIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBkZXNjcmlwdGlvbkF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUs
IGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCiB7CiAgICAgVGVzdE9iaiogaW1wID0gVjhU
ZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKQEAgLTI4MDUsMTcgKzE0ODgsNiBAQCBz
dGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGRlc2NyaXB0aW9uQXR0ckdldHRlckNhbGxiYWNr
KHY4OjpMb2NhbDx2ODo6U3RyaW5nPgogICAgIHJldHVybiBUZXN0T2JqVjhJbnRlcm5hbDo6ZGVz
Y3JpcHRpb25BdHRyR2V0dGVyKG5hbWUsIGluZm8pOwogfQogCi1zdGF0aWMgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IGRlc2NyaXB0aW9uQXR0ckdldHRlckZvck1haW5Xb3JsZCh2ODo6TG9jYWw8djg6
OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKLXsKLSAgICBUZXN0
T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwotICAgIHJldHVy
biB2OEludGVnZXIoaW1wLT5kZXNjcmlwdGlvbigpLCBpbmZvLkdldElzb2xhdGUoKSk7Ci19Ci0K
LXN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZGVzY3JpcHRpb25BdHRyR2V0dGVyQ2FsbGJh
Y2tGb3JNYWluV29ybGQodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nl
c3NvckluZm8mIGluZm8pCi17Ci0gICAgcmV0dXJuIFRlc3RPYmpWOEludGVybmFsOjpkZXNjcmlw
dGlvbkF0dHJHZXR0ZXJGb3JNYWluV29ybGQobmFtZSwgaW5mbyk7Ci19Ci0KIHN0YXRpYyB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gaWRBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1l
LCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQogewogICAgIFRlc3RPYmoqIGltcCA9IFY4
VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7CkBAIC0yODI3LDE3ICsxNDk5LDYgQEAg
c3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBpZEF0dHJHZXR0ZXJDYWxsYmFjayh2ODo6TG9j
YWw8djg6OlN0cmluZz4gbmFtZSwgY28KICAgICByZXR1cm4gVGVzdE9ialY4SW50ZXJuYWw6Omlk
QXR0ckdldHRlcihuYW1lLCBpbmZvKTsKIH0KIAotc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiBpZEF0dHJHZXR0ZXJGb3JNYWluV29ybGQodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNv
bnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCi17Ci0gICAgVGVzdE9iaiogaW1wID0gVjhUZXN0
T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKLSAgICByZXR1cm4gdjhJbnRlZ2VyKGltcC0+
aWQoKSwgaW5mby5HZXRJc29sYXRlKCkpOwotfQotCi1zdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IGlkQXR0ckdldHRlckNhbGxiYWNrRm9yTWFpbldvcmxkKHY4OjpMb2NhbDx2ODo6U3RyaW5n
PiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQotewotICAgIHJldHVybiBUZXN0
T2JqVjhJbnRlcm5hbDo6aWRBdHRyR2V0dGVyRm9yTWFpbldvcmxkKG5hbWUsIGluZm8pOwotfQot
CiBzdGF0aWMgdm9pZCBpZEF0dHJTZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4
OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQog
ewogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7
CkBAIC0yODUxLDE5ICsxNTEyLDYgQEAgc3RhdGljIHZvaWQgaWRBdHRyU2V0dGVyQ2FsbGJhY2so
djg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWUKICAgICBUZXN0
T2JqVjhJbnRlcm5hbDo6aWRBdHRyU2V0dGVyKG5hbWUsIHZhbHVlLCBpbmZvKTsKIH0KIAotc3Rh
dGljIHZvaWQgaWRBdHRyU2V0dGVyRm9yTWFpbldvcmxkKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBu
YW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYg
aW5mbykKLXsKLSAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9s
ZGVyKCkpOwotICAgIGludCB2ID0gdG9JbnQzMih2YWx1ZSk7Ci0gICAgaW1wLT5zZXRJZCh2KTsK
LSAgICByZXR1cm47Ci19Ci0KLXN0YXRpYyB2b2lkIGlkQXR0clNldHRlckNhbGxiYWNrRm9yTWFp
bldvcmxkKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2
YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKLXsKLSAgICBUZXN0T2JqVjhJbnRl
cm5hbDo6aWRBdHRyU2V0dGVyRm9yTWFpbldvcmxkKG5hbWUsIHZhbHVlLCBpbmZvKTsKLX0KLQog
c3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBoYXNoQXR0ckdldHRlcih2ODo6TG9jYWw8djg6
OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKIHsKICAgICBUZXN0
T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwpAQCAtMjg3NSwx
NyArMTUyMyw2IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gaGFzaEF0dHJHZXR0ZXJD
YWxsYmFjayh2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwKICAgICByZXR1cm4gVGVzdE9ialY4
SW50ZXJuYWw6Omhhc2hBdHRyR2V0dGVyKG5hbWUsIGluZm8pOwogfQogCi1zdGF0aWMgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IGhhc2hBdHRyR2V0dGVyRm9yTWFpbldvcmxkKHY4OjpMb2NhbDx2ODo6
U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQotewotICAgIFRlc3RP
YmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAgcmV0dXJu
IHY4U3RyaW5nKGltcC0+aGFzaCgpLCBpbmZvLkdldElzb2xhdGUoKSwgUmV0dXJuVW5zYWZlSGFu
ZGxlKTsKLX0KLQotc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBoYXNoQXR0ckdldHRlckNh
bGxiYWNrRm9yTWFpbldvcmxkKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6
QWNjZXNzb3JJbmZvJiBpbmZvKQotewotICAgIHJldHVybiBUZXN0T2JqVjhJbnRlcm5hbDo6aGFz
aEF0dHJHZXR0ZXJGb3JNYWluV29ybGQobmFtZSwgaW5mbyk7Ci19Ci0KIHN0YXRpYyB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gcmVwbGFjZWFibGVBdHRyaWJ1dGVBdHRyR2V0dGVyKHY4OjpMb2NhbDx2
ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQogewogICAgIFRl
c3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7CkBAIC0yODk3
LDE3ICsxNTM0LDYgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiByZXBsYWNlYWJsZUF0
dHJpYnV0ZUF0dHJHZXR0ZXJDYWxsYmFjayh2ODo6TG9jYWw8djgKICAgICByZXR1cm4gVGVzdE9i
alY4SW50ZXJuYWw6OnJlcGxhY2VhYmxlQXR0cmlidXRlQXR0ckdldHRlcihuYW1lLCBpbmZvKTsK
IH0KIAotc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiByZXBsYWNlYWJsZUF0dHJpYnV0ZUF0
dHJHZXR0ZXJGb3JNYWluV29ybGQodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4
OjpBY2Nlc3NvckluZm8mIGluZm8pCi17Ci0gICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0
b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKLSAgICByZXR1cm4gdjhJbnRlZ2VyKGltcC0+cmVwbGFj
ZWFibGVBdHRyaWJ1dGUoKSwgaW5mby5HZXRJc29sYXRlKCkpOwotfQotCi1zdGF0aWMgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IHJlcGxhY2VhYmxlQXR0cmlidXRlQXR0ckdldHRlckNhbGxiYWNrRm9y
TWFpbldvcmxkKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJ
bmZvJiBpbmZvKQotewotICAgIHJldHVybiBUZXN0T2JqVjhJbnRlcm5hbDo6cmVwbGFjZWFibGVB
dHRyaWJ1dGVBdHRyR2V0dGVyRm9yTWFpbldvcmxkKG5hbWUsIGluZm8pOwotfQotCiBzdGF0aWMg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IFRlc3RPYmpDb25zdHJ1Y3RvckdldHRlcih2ODo6TG9jYWw8
djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKIHsKICAgICB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZGF0YSA9IGluZm8uRGF0YSgpOwpAQCAtNDMxMCwxMzkgKzI5
MzYsNiBAQCBzdGF0aWMgY29uc3QgVjhET01Db25maWd1cmF0aW9uOjpCYXRjaGVkQXR0cmlidXRl
IFY4VGVzdE9iakF0dHJzW10gPSB7CiAgICAgeyJyZXBsYWNlYWJsZUF0dHJpYnV0ZSIsIFRlc3RP
YmpWOEludGVybmFsOjpyZXBsYWNlYWJsZUF0dHJpYnV0ZUF0dHJHZXR0ZXJDYWxsYmFjaywgVGVz
dE9ialY4SW50ZXJuYWw6OlRlc3RPYmpSZXBsYWNlYWJsZUF0dHJTZXR0ZXJDYWxsYmFjaywgMCAv
KiBubyBkYXRhICovLCBzdGF0aWNfY2FzdDx2ODo6QWNjZXNzQ29udHJvbD4odjg6OkRFRkFVTFQp
LCBzdGF0aWNfY2FzdDx2ODo6UHJvcGVydHlBdHRyaWJ1dGU+KHY4OjpOb25lKSwgMCAvKiBvbiBp
bnN0YW5jZSAqL30sCiB9OwogCi1zdGF0aWMgY29uc3QgVjhET01Db25maWd1cmF0aW9uOjpCYXRj
aGVkQXR0cmlidXRlIFY4VGVzdE9iakF0dHJzRm9yTWFpbldvcmxkW10gPSB7Ci0gICAgLy8gQXR0
cmlidXRlICdyZWFkT25seUxvbmdBdHRyJyAoVHlwZTogJ3JlYWRvbmx5IGF0dHJpYnV0ZScgRXh0
QXR0cjogJycpCi0gICAgeyJyZWFkT25seUxvbmdBdHRyIiwgVGVzdE9ialY4SW50ZXJuYWw6OnJl
YWRPbmx5TG9uZ0F0dHJBdHRyR2V0dGVyQ2FsbGJhY2tGb3JNYWluV29ybGQsIDAsIDAgLyogbm8g
ZGF0YSAqLywgc3RhdGljX2Nhc3Q8djg6OkFjY2Vzc0NvbnRyb2w+KHY4OjpERUZBVUxUKSwgc3Rh
dGljX2Nhc3Q8djg6OlByb3BlcnR5QXR0cmlidXRlPih2ODo6Tm9uZSksIDAgLyogb24gaW5zdGFu
Y2UgKi99LAotICAgIC8vIEF0dHJpYnV0ZSAncmVhZE9ubHlTdHJpbmdBdHRyJyAoVHlwZTogJ3Jl
YWRvbmx5IGF0dHJpYnV0ZScgRXh0QXR0cjogJycpCi0gICAgeyJyZWFkT25seVN0cmluZ0F0dHIi
LCBUZXN0T2JqVjhJbnRlcm5hbDo6cmVhZE9ubHlTdHJpbmdBdHRyQXR0ckdldHRlckNhbGxiYWNr
Rm9yTWFpbldvcmxkLCAwLCAwIC8qIG5vIGRhdGEgKi8sIHN0YXRpY19jYXN0PHY4OjpBY2Nlc3ND
b250cm9sPih2ODo6REVGQVVMVCksIHN0YXRpY19jYXN0PHY4OjpQcm9wZXJ0eUF0dHJpYnV0ZT4o
djg6Ok5vbmUpLCAwIC8qIG9uIGluc3RhbmNlICovfSwKLSAgICAvLyBBdHRyaWJ1dGUgJ3JlYWRP
bmx5VGVzdE9iakF0dHInIChUeXBlOiAncmVhZG9ubHkgYXR0cmlidXRlJyBFeHRBdHRyOiAnJykK
LSAgICB7InJlYWRPbmx5VGVzdE9iakF0dHIiLCBUZXN0T2JqVjhJbnRlcm5hbDo6cmVhZE9ubHlU
ZXN0T2JqQXR0ckF0dHJHZXR0ZXJDYWxsYmFja0Zvck1haW5Xb3JsZCwgMCwgMCAvKiBubyBkYXRh
ICovLCBzdGF0aWNfY2FzdDx2ODo6QWNjZXNzQ29udHJvbD4odjg6OkRFRkFVTFQpLCBzdGF0aWNf
Y2FzdDx2ODo6UHJvcGVydHlBdHRyaWJ1dGU+KHY4OjpOb25lKSwgMCAvKiBvbiBpbnN0YW5jZSAq
L30sCi0gICAgLy8gQXR0cmlidXRlICdzdGF0aWNSZWFkT25seUxvbmdBdHRyJyAoVHlwZTogJ3Jl
YWRvbmx5IGF0dHJpYnV0ZScgRXh0QXR0cjogJycpCi0gICAgeyJzdGF0aWNSZWFkT25seUxvbmdB
dHRyIiwgVGVzdE9ialY4SW50ZXJuYWw6OnN0YXRpY1JlYWRPbmx5TG9uZ0F0dHJBdHRyR2V0dGVy
Q2FsbGJhY2tGb3JNYWluV29ybGQsIDAsIDAgLyogbm8gZGF0YSAqLywgc3RhdGljX2Nhc3Q8djg6
OkFjY2Vzc0NvbnRyb2w+KHY4OjpERUZBVUxUKSwgc3RhdGljX2Nhc3Q8djg6OlByb3BlcnR5QXR0
cmlidXRlPih2ODo6Tm9uZSksIDAgLyogb24gaW5zdGFuY2UgKi99LAotICAgIC8vIEF0dHJpYnV0
ZSAnc3RhdGljU3RyaW5nQXR0cicgKFR5cGU6ICdhdHRyaWJ1dGUnIEV4dEF0dHI6ICcnKQotICAg
IHsic3RhdGljU3RyaW5nQXR0ciIsIFRlc3RPYmpWOEludGVybmFsOjpzdGF0aWNTdHJpbmdBdHRy
QXR0ckdldHRlckNhbGxiYWNrRm9yTWFpbldvcmxkLCBUZXN0T2JqVjhJbnRlcm5hbDo6c3RhdGlj
U3RyaW5nQXR0ckF0dHJTZXR0ZXJDYWxsYmFja0Zvck1haW5Xb3JsZCwgMCAvKiBubyBkYXRhICov
LCBzdGF0aWNfY2FzdDx2ODo6QWNjZXNzQ29udHJvbD4odjg6OkRFRkFVTFQpLCBzdGF0aWNfY2Fz
dDx2ODo6UHJvcGVydHlBdHRyaWJ1dGU+KHY4OjpOb25lKSwgMCAvKiBvbiBpbnN0YW5jZSAqL30s
Ci0gICAgLy8gQXR0cmlidXRlICdUZXN0U3ViT2JqJyAoVHlwZTogJ3JlYWRvbmx5IGF0dHJpYnV0
ZScgRXh0QXR0cjogJycpCi0gICAgeyJUZXN0U3ViT2JqIiwgVGVzdE9ialY4SW50ZXJuYWw6OlRl
c3RPYmpDb25zdHJ1Y3RvckdldHRlciwgMCwgJlY4VGVzdFN1Yk9iajo6aW5mbywgc3RhdGljX2Nh
c3Q8djg6OkFjY2Vzc0NvbnRyb2w+KHY4OjpERUZBVUxUKSwgc3RhdGljX2Nhc3Q8djg6OlByb3Bl
cnR5QXR0cmlidXRlPih2ODo6Tm9uZSksIDAgLyogb24gaW5zdGFuY2UgKi99LAotICAgIC8vIEF0
dHJpYnV0ZSAnZW51bUF0dHInIChUeXBlOiAnYXR0cmlidXRlJyBFeHRBdHRyOiAnJykKLSAgICB7
ImVudW1BdHRyIiwgVGVzdE9ialY4SW50ZXJuYWw6OmVudW1BdHRyQXR0ckdldHRlckNhbGxiYWNr
Rm9yTWFpbldvcmxkLCBUZXN0T2JqVjhJbnRlcm5hbDo6ZW51bUF0dHJBdHRyU2V0dGVyQ2FsbGJh
Y2tGb3JNYWluV29ybGQsIDAgLyogbm8gZGF0YSAqLywgc3RhdGljX2Nhc3Q8djg6OkFjY2Vzc0Nv
bnRyb2w+KHY4OjpERUZBVUxUKSwgc3RhdGljX2Nhc3Q8djg6OlByb3BlcnR5QXR0cmlidXRlPih2
ODo6Tm9uZSksIDAgLyogb24gaW5zdGFuY2UgKi99LAotICAgIC8vIEF0dHJpYnV0ZSAnc2hvcnRB
dHRyJyAoVHlwZTogJ2F0dHJpYnV0ZScgRXh0QXR0cjogJycpCi0gICAgeyJzaG9ydEF0dHIiLCBU
ZXN0T2JqVjhJbnRlcm5hbDo6c2hvcnRBdHRyQXR0ckdldHRlckNhbGxiYWNrRm9yTWFpbldvcmxk
LCBUZXN0T2JqVjhJbnRlcm5hbDo6c2hvcnRBdHRyQXR0clNldHRlckNhbGxiYWNrRm9yTWFpbldv
cmxkLCAwIC8qIG5vIGRhdGEgKi8sIHN0YXRpY19jYXN0PHY4OjpBY2Nlc3NDb250cm9sPih2ODo6
REVGQVVMVCksIHN0YXRpY19jYXN0PHY4OjpQcm9wZXJ0eUF0dHJpYnV0ZT4odjg6Ok5vbmUpLCAw
IC8qIG9uIGluc3RhbmNlICovfSwKLSAgICAvLyBBdHRyaWJ1dGUgJ3Vuc2lnbmVkU2hvcnRBdHRy
JyAoVHlwZTogJ2F0dHJpYnV0ZScgRXh0QXR0cjogJycpCi0gICAgeyJ1bnNpZ25lZFNob3J0QXR0
ciIsIFRlc3RPYmpWOEludGVybmFsOjp1bnNpZ25lZFNob3J0QXR0ckF0dHJHZXR0ZXJDYWxsYmFj
a0Zvck1haW5Xb3JsZCwgVGVzdE9ialY4SW50ZXJuYWw6OnVuc2lnbmVkU2hvcnRBdHRyQXR0clNl
dHRlckNhbGxiYWNrRm9yTWFpbldvcmxkLCAwIC8qIG5vIGRhdGEgKi8sIHN0YXRpY19jYXN0PHY4
OjpBY2Nlc3NDb250cm9sPih2ODo6REVGQVVMVCksIHN0YXRpY19jYXN0PHY4OjpQcm9wZXJ0eUF0
dHJpYnV0ZT4odjg6Ok5vbmUpLCAwIC8qIG9uIGluc3RhbmNlICovfSwKLSAgICAvLyBBdHRyaWJ1
dGUgJ2xvbmdBdHRyJyAoVHlwZTogJ2F0dHJpYnV0ZScgRXh0QXR0cjogJycpCi0gICAgeyJsb25n
QXR0ciIsIFRlc3RPYmpWOEludGVybmFsOjpsb25nQXR0ckF0dHJHZXR0ZXJDYWxsYmFja0Zvck1h
aW5Xb3JsZCwgVGVzdE9ialY4SW50ZXJuYWw6OmxvbmdBdHRyQXR0clNldHRlckNhbGxiYWNrRm9y
TWFpbldvcmxkLCAwIC8qIG5vIGRhdGEgKi8sIHN0YXRpY19jYXN0PHY4OjpBY2Nlc3NDb250cm9s
Pih2ODo6REVGQVVMVCksIHN0YXRpY19jYXN0PHY4OjpQcm9wZXJ0eUF0dHJpYnV0ZT4odjg6Ok5v
bmUpLCAwIC8qIG9uIGluc3RhbmNlICovfSwKLSAgICAvLyBBdHRyaWJ1dGUgJ2xvbmdMb25nQXR0
cicgKFR5cGU6ICdhdHRyaWJ1dGUnIEV4dEF0dHI6ICcnKQotICAgIHsibG9uZ0xvbmdBdHRyIiwg
VGVzdE9ialY4SW50ZXJuYWw6OmxvbmdMb25nQXR0ckF0dHJHZXR0ZXJDYWxsYmFja0Zvck1haW5X
b3JsZCwgVGVzdE9ialY4SW50ZXJuYWw6OmxvbmdMb25nQXR0ckF0dHJTZXR0ZXJDYWxsYmFja0Zv
ck1haW5Xb3JsZCwgMCAvKiBubyBkYXRhICovLCBzdGF0aWNfY2FzdDx2ODo6QWNjZXNzQ29udHJv
bD4odjg6OkRFRkFVTFQpLCBzdGF0aWNfY2FzdDx2ODo6UHJvcGVydHlBdHRyaWJ1dGU+KHY4OjpO
b25lKSwgMCAvKiBvbiBpbnN0YW5jZSAqL30sCi0gICAgLy8gQXR0cmlidXRlICd1bnNpZ25lZExv
bmdMb25nQXR0cicgKFR5cGU6ICdhdHRyaWJ1dGUnIEV4dEF0dHI6ICcnKQotICAgIHsidW5zaWdu
ZWRMb25nTG9uZ0F0dHIiLCBUZXN0T2JqVjhJbnRlcm5hbDo6dW5zaWduZWRMb25nTG9uZ0F0dHJB
dHRyR2V0dGVyQ2FsbGJhY2tGb3JNYWluV29ybGQsIFRlc3RPYmpWOEludGVybmFsOjp1bnNpZ25l
ZExvbmdMb25nQXR0ckF0dHJTZXR0ZXJDYWxsYmFja0Zvck1haW5Xb3JsZCwgMCAvKiBubyBkYXRh
ICovLCBzdGF0aWNfY2FzdDx2ODo6QWNjZXNzQ29udHJvbD4odjg6OkRFRkFVTFQpLCBzdGF0aWNf
Y2FzdDx2ODo6UHJvcGVydHlBdHRyaWJ1dGU+KHY4OjpOb25lKSwgMCAvKiBvbiBpbnN0YW5jZSAq
L30sCi0gICAgLy8gQXR0cmlidXRlICdzdHJpbmdBdHRyJyAoVHlwZTogJ2F0dHJpYnV0ZScgRXh0
QXR0cjogJycpCi0gICAgeyJzdHJpbmdBdHRyIiwgVGVzdE9ialY4SW50ZXJuYWw6OnN0cmluZ0F0
dHJBdHRyR2V0dGVyQ2FsbGJhY2tGb3JNYWluV29ybGQsIFRlc3RPYmpWOEludGVybmFsOjpzdHJp
bmdBdHRyQXR0clNldHRlckNhbGxiYWNrRm9yTWFpbldvcmxkLCAwIC8qIG5vIGRhdGEgKi8sIHN0
YXRpY19jYXN0PHY4OjpBY2Nlc3NDb250cm9sPih2ODo6REVGQVVMVCksIHN0YXRpY19jYXN0PHY4
OjpQcm9wZXJ0eUF0dHJpYnV0ZT4odjg6Ok5vbmUpLCAwIC8qIG9uIGluc3RhbmNlICovfSwKLSAg
ICAvLyBBdHRyaWJ1dGUgJ3Rlc3RPYmpBdHRyJyAoVHlwZTogJ2F0dHJpYnV0ZScgRXh0QXR0cjog
J1Y4TWVhc3VyZUFzJykKLSAgICB7InRlc3RPYmpBdHRyIiwgVGVzdE9ialY4SW50ZXJuYWw6OnRl
c3RPYmpBdHRyQXR0ckdldHRlckNhbGxiYWNrRm9yTWFpbldvcmxkLCBUZXN0T2JqVjhJbnRlcm5h
bDo6dGVzdE9iakF0dHJBdHRyU2V0dGVyQ2FsbGJhY2tGb3JNYWluV29ybGQsIDAgLyogbm8gZGF0
YSAqLywgc3RhdGljX2Nhc3Q8djg6OkFjY2Vzc0NvbnRyb2w+KHY4OjpERUZBVUxUKSwgc3RhdGlj
X2Nhc3Q8djg6OlByb3BlcnR5QXR0cmlidXRlPih2ODo6Tm9uZSksIDAgLyogb24gaW5zdGFuY2Ug
Ki99LAotICAgIC8vIEF0dHJpYnV0ZSAnWE1MT2JqQXR0cicgKFR5cGU6ICdhdHRyaWJ1dGUnIEV4
dEF0dHI6ICcnKQotICAgIHsiWE1MT2JqQXR0ciIsIFRlc3RPYmpWOEludGVybmFsOjpYTUxPYmpB
dHRyQXR0ckdldHRlckNhbGxiYWNrRm9yTWFpbldvcmxkLCBUZXN0T2JqVjhJbnRlcm5hbDo6WE1M
T2JqQXR0ckF0dHJTZXR0ZXJDYWxsYmFja0Zvck1haW5Xb3JsZCwgMCAvKiBubyBkYXRhICovLCBz
dGF0aWNfY2FzdDx2ODo6QWNjZXNzQ29udHJvbD4odjg6OkRFRkFVTFQpLCBzdGF0aWNfY2FzdDx2
ODo6UHJvcGVydHlBdHRyaWJ1dGU+KHY4OjpOb25lKSwgMCAvKiBvbiBpbnN0YW5jZSAqL30sCi0g
ICAgLy8gQXR0cmlidXRlICdjcmVhdGUnIChUeXBlOiAnYXR0cmlidXRlJyBFeHRBdHRyOiAnJykK
LSAgICB7ImNyZWF0ZSIsIFRlc3RPYmpWOEludGVybmFsOjpjcmVhdGVBdHRyR2V0dGVyQ2FsbGJh
Y2tGb3JNYWluV29ybGQsIFRlc3RPYmpWOEludGVybmFsOjpjcmVhdGVBdHRyU2V0dGVyQ2FsbGJh
Y2tGb3JNYWluV29ybGQsIDAgLyogbm8gZGF0YSAqLywgc3RhdGljX2Nhc3Q8djg6OkFjY2Vzc0Nv
bnRyb2w+KHY4OjpERUZBVUxUKSwgc3RhdGljX2Nhc3Q8djg6OlByb3BlcnR5QXR0cmlidXRlPih2
ODo6Tm9uZSksIDAgLyogb24gaW5zdGFuY2UgKi99LAotICAgIC8vIEF0dHJpYnV0ZSAncmVmbGVj
dGVkU3RyaW5nQXR0cicgKFR5cGU6ICdhdHRyaWJ1dGUnIEV4dEF0dHI6ICdSZWZsZWN0JykKLSAg
ICB7InJlZmxlY3RlZFN0cmluZ0F0dHIiLCBUZXN0T2JqVjhJbnRlcm5hbDo6cmVmbGVjdGVkU3Ry
aW5nQXR0ckF0dHJHZXR0ZXJDYWxsYmFja0Zvck1haW5Xb3JsZCwgVGVzdE9ialY4SW50ZXJuYWw6
OnJlZmxlY3RlZFN0cmluZ0F0dHJBdHRyU2V0dGVyQ2FsbGJhY2tGb3JNYWluV29ybGQsIDAgLyog
bm8gZGF0YSAqLywgc3RhdGljX2Nhc3Q8djg6OkFjY2Vzc0NvbnRyb2w+KHY4OjpERUZBVUxUKSwg
c3RhdGljX2Nhc3Q8djg6OlByb3BlcnR5QXR0cmlidXRlPih2ODo6Tm9uZSksIDAgLyogb24gaW5z
dGFuY2UgKi99LAotICAgIC8vIEF0dHJpYnV0ZSAncmVmbGVjdGVkSW50ZWdyYWxBdHRyJyAoVHlw
ZTogJ2F0dHJpYnV0ZScgRXh0QXR0cjogJ1JlZmxlY3QnKQotICAgIHsicmVmbGVjdGVkSW50ZWdy
YWxBdHRyIiwgVGVzdE9ialY4SW50ZXJuYWw6OnJlZmxlY3RlZEludGVncmFsQXR0ckF0dHJHZXR0
ZXJDYWxsYmFja0Zvck1haW5Xb3JsZCwgVGVzdE9ialY4SW50ZXJuYWw6OnJlZmxlY3RlZEludGVn
cmFsQXR0ckF0dHJTZXR0ZXJDYWxsYmFja0Zvck1haW5Xb3JsZCwgMCAvKiBubyBkYXRhICovLCBz
dGF0aWNfY2FzdDx2ODo6QWNjZXNzQ29udHJvbD4odjg6OkRFRkFVTFQpLCBzdGF0aWNfY2FzdDx2
ODo6UHJvcGVydHlBdHRyaWJ1dGU+KHY4OjpOb25lKSwgMCAvKiBvbiBpbnN0YW5jZSAqL30sCi0g
ICAgLy8gQXR0cmlidXRlICdyZWZsZWN0ZWRVbnNpZ25lZEludGVncmFsQXR0cicgKFR5cGU6ICdh
dHRyaWJ1dGUnIEV4dEF0dHI6ICdSZWZsZWN0JykKLSAgICB7InJlZmxlY3RlZFVuc2lnbmVkSW50
ZWdyYWxBdHRyIiwgVGVzdE9ialY4SW50ZXJuYWw6OnJlZmxlY3RlZFVuc2lnbmVkSW50ZWdyYWxB
dHRyQXR0ckdldHRlckNhbGxiYWNrRm9yTWFpbldvcmxkLCBUZXN0T2JqVjhJbnRlcm5hbDo6cmVm
bGVjdGVkVW5zaWduZWRJbnRlZ3JhbEF0dHJBdHRyU2V0dGVyQ2FsbGJhY2tGb3JNYWluV29ybGQs
IDAgLyogbm8gZGF0YSAqLywgc3RhdGljX2Nhc3Q8djg6OkFjY2Vzc0NvbnRyb2w+KHY4OjpERUZB
VUxUKSwgc3RhdGljX2Nhc3Q8djg6OlByb3BlcnR5QXR0cmlidXRlPih2ODo6Tm9uZSksIDAgLyog
b24gaW5zdGFuY2UgKi99LAotICAgIC8vIEF0dHJpYnV0ZSAncmVmbGVjdGVkQm9vbGVhbkF0dHIn
IChUeXBlOiAnYXR0cmlidXRlJyBFeHRBdHRyOiAnUmVmbGVjdCcpCi0gICAgeyJyZWZsZWN0ZWRC
b29sZWFuQXR0ciIsIFRlc3RPYmpWOEludGVybmFsOjpyZWZsZWN0ZWRCb29sZWFuQXR0ckF0dHJH
ZXR0ZXJDYWxsYmFja0Zvck1haW5Xb3JsZCwgVGVzdE9ialY4SW50ZXJuYWw6OnJlZmxlY3RlZEJv
b2xlYW5BdHRyQXR0clNldHRlckNhbGxiYWNrRm9yTWFpbldvcmxkLCAwIC8qIG5vIGRhdGEgKi8s
IHN0YXRpY19jYXN0PHY4OjpBY2Nlc3NDb250cm9sPih2ODo6REVGQVVMVCksIHN0YXRpY19jYXN0
PHY4OjpQcm9wZXJ0eUF0dHJpYnV0ZT4odjg6Ok5vbmUpLCAwIC8qIG9uIGluc3RhbmNlICovfSwK
LSAgICAvLyBBdHRyaWJ1dGUgJ3JlZmxlY3RlZFVSTEF0dHInIChUeXBlOiAnYXR0cmlidXRlJyBF
eHRBdHRyOiAnVVJMIFJlZmxlY3QnKQotICAgIHsicmVmbGVjdGVkVVJMQXR0ciIsIFRlc3RPYmpW
OEludGVybmFsOjpyZWZsZWN0ZWRVUkxBdHRyQXR0ckdldHRlckNhbGxiYWNrRm9yTWFpbldvcmxk
LCBUZXN0T2JqVjhJbnRlcm5hbDo6cmVmbGVjdGVkVVJMQXR0ckF0dHJTZXR0ZXJDYWxsYmFja0Zv
ck1haW5Xb3JsZCwgMCAvKiBubyBkYXRhICovLCBzdGF0aWNfY2FzdDx2ODo6QWNjZXNzQ29udHJv
bD4odjg6OkRFRkFVTFQpLCBzdGF0aWNfY2FzdDx2ODo6UHJvcGVydHlBdHRyaWJ1dGU+KHY4OjpO
b25lKSwgMCAvKiBvbiBpbnN0YW5jZSAqL30sCi0gICAgLy8gQXR0cmlidXRlICdyZWZsZWN0ZWRT
dHJpbmdBdHRyJyAoVHlwZTogJ2F0dHJpYnV0ZScgRXh0QXR0cjogJ1JlZmxlY3QnKQotICAgIHsi
cmVmbGVjdGVkU3RyaW5nQXR0ciIsIFRlc3RPYmpWOEludGVybmFsOjpyZWZsZWN0ZWRTdHJpbmdB
dHRyQXR0ckdldHRlckNhbGxiYWNrRm9yTWFpbldvcmxkLCBUZXN0T2JqVjhJbnRlcm5hbDo6cmVm
bGVjdGVkU3RyaW5nQXR0ckF0dHJTZXR0ZXJDYWxsYmFja0Zvck1haW5Xb3JsZCwgMCAvKiBubyBk
YXRhICovLCBzdGF0aWNfY2FzdDx2ODo6QWNjZXNzQ29udHJvbD4odjg6OkRFRkFVTFQpLCBzdGF0
aWNfY2FzdDx2ODo6UHJvcGVydHlBdHRyaWJ1dGU+KHY4OjpOb25lKSwgMCAvKiBvbiBpbnN0YW5j
ZSAqL30sCi0gICAgLy8gQXR0cmlidXRlICdyZWZsZWN0ZWRDdXN0b21JbnRlZ3JhbEF0dHInIChU
eXBlOiAnYXR0cmlidXRlJyBFeHRBdHRyOiAnUmVmbGVjdCcpCi0gICAgeyJyZWZsZWN0ZWRDdXN0
b21JbnRlZ3JhbEF0dHIiLCBUZXN0T2JqVjhJbnRlcm5hbDo6cmVmbGVjdGVkQ3VzdG9tSW50ZWdy
YWxBdHRyQXR0ckdldHRlckNhbGxiYWNrRm9yTWFpbldvcmxkLCBUZXN0T2JqVjhJbnRlcm5hbDo6
cmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWxBdHRyQXR0clNldHRlckNhbGxiYWNrRm9yTWFpbldvcmxk
LCAwIC8qIG5vIGRhdGEgKi8sIHN0YXRpY19jYXN0PHY4OjpBY2Nlc3NDb250cm9sPih2ODo6REVG
QVVMVCksIHN0YXRpY19jYXN0PHY4OjpQcm9wZXJ0eUF0dHJpYnV0ZT4odjg6Ok5vbmUpLCAwIC8q
IG9uIGluc3RhbmNlICovfSwKLSAgICAvLyBBdHRyaWJ1dGUgJ3JlZmxlY3RlZEN1c3RvbUJvb2xl
YW5BdHRyJyAoVHlwZTogJ2F0dHJpYnV0ZScgRXh0QXR0cjogJ1JlZmxlY3QnKQotICAgIHsicmVm
bGVjdGVkQ3VzdG9tQm9vbGVhbkF0dHIiLCBUZXN0T2JqVjhJbnRlcm5hbDo6cmVmbGVjdGVkQ3Vz
dG9tQm9vbGVhbkF0dHJBdHRyR2V0dGVyQ2FsbGJhY2tGb3JNYWluV29ybGQsIFRlc3RPYmpWOElu
dGVybmFsOjpyZWZsZWN0ZWRDdXN0b21Cb29sZWFuQXR0ckF0dHJTZXR0ZXJDYWxsYmFja0Zvck1h
aW5Xb3JsZCwgMCAvKiBubyBkYXRhICovLCBzdGF0aWNfY2FzdDx2ODo6QWNjZXNzQ29udHJvbD4o
djg6OkRFRkFVTFQpLCBzdGF0aWNfY2FzdDx2ODo6UHJvcGVydHlBdHRyaWJ1dGU+KHY4OjpOb25l
KSwgMCAvKiBvbiBpbnN0YW5jZSAqL30sCi0gICAgLy8gQXR0cmlidXRlICdyZWZsZWN0ZWRDdXN0
b21VUkxBdHRyJyAoVHlwZTogJ2F0dHJpYnV0ZScgRXh0QXR0cjogJ1VSTCBSZWZsZWN0JykKLSAg
ICB7InJlZmxlY3RlZEN1c3RvbVVSTEF0dHIiLCBUZXN0T2JqVjhJbnRlcm5hbDo6cmVmbGVjdGVk
Q3VzdG9tVVJMQXR0ckF0dHJHZXR0ZXJDYWxsYmFja0Zvck1haW5Xb3JsZCwgVGVzdE9ialY4SW50
ZXJuYWw6OnJlZmxlY3RlZEN1c3RvbVVSTEF0dHJBdHRyU2V0dGVyQ2FsbGJhY2tGb3JNYWluV29y
bGQsIDAgLyogbm8gZGF0YSAqLywgc3RhdGljX2Nhc3Q8djg6OkFjY2Vzc0NvbnRyb2w+KHY4OjpE
RUZBVUxUKSwgc3RhdGljX2Nhc3Q8djg6OlByb3BlcnR5QXR0cmlidXRlPih2ODo6Tm9uZSksIDAg
Lyogb24gaW5zdGFuY2UgKi99LAotICAgIC8vIEF0dHJpYnV0ZSAndHlwZWRBcnJheUF0dHInIChU
eXBlOiAnYXR0cmlidXRlJyBFeHRBdHRyOiAnJykKLSAgICB7InR5cGVkQXJyYXlBdHRyIiwgVGVz
dE9ialY4SW50ZXJuYWw6OnR5cGVkQXJyYXlBdHRyQXR0ckdldHRlckNhbGxiYWNrRm9yTWFpbldv
cmxkLCBUZXN0T2JqVjhJbnRlcm5hbDo6dHlwZWRBcnJheUF0dHJBdHRyU2V0dGVyQ2FsbGJhY2tG
b3JNYWluV29ybGQsIDAgLyogbm8gZGF0YSAqLywgc3RhdGljX2Nhc3Q8djg6OkFjY2Vzc0NvbnRy
b2w+KHY4OjpERUZBVUxUKSwgc3RhdGljX2Nhc3Q8djg6OlByb3BlcnR5QXR0cmlidXRlPih2ODo6
Tm9uZSksIDAgLyogb24gaW5zdGFuY2UgKi99LAotICAgIC8vIEF0dHJpYnV0ZSAnYXR0cldpdGhH
ZXR0ZXJFeGNlcHRpb24nIChUeXBlOiAnYXR0cmlidXRlJyBFeHRBdHRyOiAnJykKLSAgICB7ImF0
dHJXaXRoR2V0dGVyRXhjZXB0aW9uIiwgVGVzdE9ialY4SW50ZXJuYWw6OmF0dHJXaXRoR2V0dGVy
RXhjZXB0aW9uQXR0ckdldHRlckNhbGxiYWNrRm9yTWFpbldvcmxkLCBUZXN0T2JqVjhJbnRlcm5h
bDo6YXR0cldpdGhHZXR0ZXJFeGNlcHRpb25BdHRyU2V0dGVyQ2FsbGJhY2tGb3JNYWluV29ybGQs
IDAgLyogbm8gZGF0YSAqLywgc3RhdGljX2Nhc3Q8djg6OkFjY2Vzc0NvbnRyb2w+KHY4OjpERUZB
VUxUKSwgc3RhdGljX2Nhc3Q8djg6OlByb3BlcnR5QXR0cmlidXRlPih2ODo6Tm9uZSksIDAgLyog
b24gaW5zdGFuY2UgKi99LAotICAgIC8vIEF0dHJpYnV0ZSAnYXR0cldpdGhTZXR0ZXJFeGNlcHRp
b24nIChUeXBlOiAnYXR0cmlidXRlJyBFeHRBdHRyOiAnJykKLSAgICB7ImF0dHJXaXRoU2V0dGVy
RXhjZXB0aW9uIiwgVGVzdE9ialY4SW50ZXJuYWw6OmF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uQXR0
ckdldHRlckNhbGxiYWNrRm9yTWFpbldvcmxkLCBUZXN0T2JqVjhJbnRlcm5hbDo6YXR0cldpdGhT
ZXR0ZXJFeGNlcHRpb25BdHRyU2V0dGVyQ2FsbGJhY2tGb3JNYWluV29ybGQsIDAgLyogbm8gZGF0
YSAqLywgc3RhdGljX2Nhc3Q8djg6OkFjY2Vzc0NvbnRyb2w+KHY4OjpERUZBVUxUKSwgc3RhdGlj
X2Nhc3Q8djg6OlByb3BlcnR5QXR0cmlidXRlPih2ODo6Tm9uZSksIDAgLyogb24gaW5zdGFuY2Ug
Ki99LAotICAgIC8vIEF0dHJpYnV0ZSAnc3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24nIChU
eXBlOiAnYXR0cmlidXRlJyBFeHRBdHRyOiAnJykKLSAgICB7InN0cmluZ0F0dHJXaXRoR2V0dGVy
RXhjZXB0aW9uIiwgVGVzdE9ialY4SW50ZXJuYWw6OnN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0
aW9uQXR0ckdldHRlckNhbGxiYWNrRm9yTWFpbldvcmxkLCBUZXN0T2JqVjhJbnRlcm5hbDo6c3Ry
aW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb25BdHRyU2V0dGVyQ2FsbGJhY2tGb3JNYWluV29ybGQs
IDAgLyogbm8gZGF0YSAqLywgc3RhdGljX2Nhc3Q8djg6OkFjY2Vzc0NvbnRyb2w+KHY4OjpERUZB
VUxUKSwgc3RhdGljX2Nhc3Q8djg6OlByb3BlcnR5QXR0cmlidXRlPih2ODo6Tm9uZSksIDAgLyog
b24gaW5zdGFuY2UgKi99LAotICAgIC8vIEF0dHJpYnV0ZSAnc3RyaW5nQXR0cldpdGhTZXR0ZXJF
eGNlcHRpb24nIChUeXBlOiAnYXR0cmlidXRlJyBFeHRBdHRyOiAnJykKLSAgICB7InN0cmluZ0F0
dHJXaXRoU2V0dGVyRXhjZXB0aW9uIiwgVGVzdE9ialY4SW50ZXJuYWw6OnN0cmluZ0F0dHJXaXRo
U2V0dGVyRXhjZXB0aW9uQXR0ckdldHRlckNhbGxiYWNrRm9yTWFpbldvcmxkLCBUZXN0T2JqVjhJ
bnRlcm5hbDo6c3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb25BdHRyU2V0dGVyQ2FsbGJhY2tG
b3JNYWluV29ybGQsIDAgLyogbm8gZGF0YSAqLywgc3RhdGljX2Nhc3Q8djg6OkFjY2Vzc0NvbnRy
b2w+KHY4OjpERUZBVUxUKSwgc3RhdGljX2Nhc3Q8djg6OlByb3BlcnR5QXR0cmlidXRlPih2ODo6
Tm9uZSksIDAgLyogb24gaW5zdGFuY2UgKi99LAotICAgIC8vIEF0dHJpYnV0ZSAnY3VzdG9tQXR0
cicgKFR5cGU6ICdhdHRyaWJ1dGUnIEV4dEF0dHI6ICdDdXN0b20nKQotICAgIHsiY3VzdG9tQXR0
ciIsIFRlc3RPYmpWOEludGVybmFsOjpjdXN0b21BdHRyQXR0ckdldHRlckNhbGxiYWNrRm9yTWFp
bldvcmxkLCBUZXN0T2JqVjhJbnRlcm5hbDo6Y3VzdG9tQXR0ckF0dHJTZXR0ZXJDYWxsYmFja0Zv
ck1haW5Xb3JsZCwgMCAvKiBubyBkYXRhICovLCBzdGF0aWNfY2FzdDx2ODo6QWNjZXNzQ29udHJv
bD4odjg6OkRFRkFVTFQpLCBzdGF0aWNfY2FzdDx2ODo6UHJvcGVydHlBdHRyaWJ1dGU+KHY4OjpO
b25lKSwgMCAvKiBvbiBpbnN0YW5jZSAqL30sCi0gICAgLy8gQXR0cmlidXRlICd3aXRoU2NyaXB0
U3RhdGVBdHRyaWJ1dGUnIChUeXBlOiAnYXR0cmlidXRlJyBFeHRBdHRyOiAnQ2FsbFdpdGgnKQot
ICAgIHsid2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlIiwgVGVzdE9ialY4SW50ZXJuYWw6OndpdGhT
Y3JpcHRTdGF0ZUF0dHJpYnV0ZUF0dHJHZXR0ZXJDYWxsYmFja0Zvck1haW5Xb3JsZCwgVGVzdE9i
alY4SW50ZXJuYWw6OndpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZUF0dHJTZXR0ZXJDYWxsYmFja0Zv
ck1haW5Xb3JsZCwgMCAvKiBubyBkYXRhICovLCBzdGF0aWNfY2FzdDx2ODo6QWNjZXNzQ29udHJv
bD4odjg6OkRFRkFVTFQpLCBzdGF0aWNfY2FzdDx2ODo6UHJvcGVydHlBdHRyaWJ1dGU+KHY4OjpO
b25lKSwgMCAvKiBvbiBpbnN0YW5jZSAqL30sCi0gICAgLy8gQXR0cmlidXRlICd3aXRoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZScgKFR5cGU6ICdhdHRyaWJ1dGUnIEV4dEF0dHI6ICdD
YWxsV2l0aCcpCi0gICAgeyJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZSIsIFRl
c3RPYmpWOEludGVybmFsOjp3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZUF0dHJH
ZXR0ZXJDYWxsYmFja0Zvck1haW5Xb3JsZCwgVGVzdE9ialY4SW50ZXJuYWw6OndpdGhTY3JpcHRF
eGVjdXRpb25Db250ZXh0QXR0cmlidXRlQXR0clNldHRlckNhbGxiYWNrRm9yTWFpbldvcmxkLCAw
IC8qIG5vIGRhdGEgKi8sIHN0YXRpY19jYXN0PHY4OjpBY2Nlc3NDb250cm9sPih2ODo6REVGQVVM
VCksIHN0YXRpY19jYXN0PHY4OjpQcm9wZXJ0eUF0dHJpYnV0ZT4odjg6Ok5vbmUpLCAwIC8qIG9u
IGluc3RhbmNlICovfSwKLSAgICAvLyBBdHRyaWJ1dGUgJ3dpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0
ZVJhaXNlcycgKFR5cGU6ICdhdHRyaWJ1dGUnIEV4dEF0dHI6ICdDYWxsV2l0aCcpCi0gICAgeyJ3
aXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMiLCBUZXN0T2JqVjhJbnRlcm5hbDo6d2l0aFNj
cmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzQXR0ckdldHRlckNhbGxiYWNrRm9yTWFpbldvcmxkLCBU
ZXN0T2JqVjhJbnRlcm5hbDo6d2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzQXR0clNldHRl
ckNhbGxiYWNrRm9yTWFpbldvcmxkLCAwIC8qIG5vIGRhdGEgKi8sIHN0YXRpY19jYXN0PHY4OjpB
Y2Nlc3NDb250cm9sPih2ODo6REVGQVVMVCksIHN0YXRpY19jYXN0PHY4OjpQcm9wZXJ0eUF0dHJp
YnV0ZT4odjg6Ok5vbmUpLCAwIC8qIG9uIGluc3RhbmNlICovfSwKLSAgICAvLyBBdHRyaWJ1dGUg
J3dpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlUmFpc2VzJyAoVHlwZTogJ2F0dHJp
YnV0ZScgRXh0QXR0cjogJ0NhbGxXaXRoJykKLSAgICB7IndpdGhTY3JpcHRFeGVjdXRpb25Db250
ZXh0QXR0cmlidXRlUmFpc2VzIiwgVGVzdE9ialY4SW50ZXJuYWw6OndpdGhTY3JpcHRFeGVjdXRp
b25Db250ZXh0QXR0cmlidXRlUmFpc2VzQXR0ckdldHRlckNhbGxiYWNrRm9yTWFpbldvcmxkLCBU
ZXN0T2JqVjhJbnRlcm5hbDo6d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVSYWlz
ZXNBdHRyU2V0dGVyQ2FsbGJhY2tGb3JNYWluV29ybGQsIDAgLyogbm8gZGF0YSAqLywgc3RhdGlj
X2Nhc3Q8djg6OkFjY2Vzc0NvbnRyb2w+KHY4OjpERUZBVUxUKSwgc3RhdGljX2Nhc3Q8djg6OlBy
b3BlcnR5QXR0cmlidXRlPih2ODo6Tm9uZSksIDAgLyogb24gaW5zdGFuY2UgKi99LAotICAgIC8v
IEF0dHJpYnV0ZSAnd2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJp
YnV0ZScgKFR5cGU6ICdhdHRyaWJ1dGUnIEV4dEF0dHI6ICdDYWxsV2l0aCcpCi0gICAgeyJ3aXRo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlIiwgVGVzdE9ialY4
SW50ZXJuYWw6OndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1
dGVBdHRyR2V0dGVyQ2FsbGJhY2tGb3JNYWluV29ybGQsIFRlc3RPYmpWOEludGVybmFsOjp3aXRo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlQXR0clNldHRlckNh
bGxiYWNrRm9yTWFpbldvcmxkLCAwIC8qIG5vIGRhdGEgKi8sIHN0YXRpY19jYXN0PHY4OjpBY2Nl
c3NDb250cm9sPih2ODo6REVGQVVMVCksIHN0YXRpY19jYXN0PHY4OjpQcm9wZXJ0eUF0dHJpYnV0
ZT4odjg6Ok5vbmUpLCAwIC8qIG9uIGluc3RhbmNlICovfSwKLSAgICAvLyBBdHRyaWJ1dGUgJ3dp
dGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMnIChU
eXBlOiAnYXR0cmlidXRlJyBFeHRBdHRyOiAnQ2FsbFdpdGgnKQotICAgIHsid2l0aFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcyIsIFRlc3RPYmpWOElu
dGVybmFsOjp3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRl
UmFpc2VzQXR0ckdldHRlckNhbGxiYWNrRm9yTWFpbldvcmxkLCBUZXN0T2JqVjhJbnRlcm5hbDo6
d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlc0F0
dHJTZXR0ZXJDYWxsYmFja0Zvck1haW5Xb3JsZCwgMCAvKiBubyBkYXRhICovLCBzdGF0aWNfY2Fz
dDx2ODo6QWNjZXNzQ29udHJvbD4odjg6OkRFRkFVTFQpLCBzdGF0aWNfY2FzdDx2ODo6UHJvcGVy
dHlBdHRyaWJ1dGU+KHY4OjpOb25lKSwgMCAvKiBvbiBpbnN0YW5jZSAqL30sCi0gICAgLy8gQXR0
cmlidXRlICd3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNl
c0F0dHJpYnV0ZScgKFR5cGU6ICdhdHRyaWJ1dGUnIEV4dEF0dHI6ICdDYWxsV2l0aCcpCi0gICAg
eyJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNlc0F0dHJp
YnV0ZSIsIFRlc3RPYmpWOEludGVybmFsOjp3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNj
cmlwdFN0YXRlV2l0aFNwYWNlc0F0dHJpYnV0ZUF0dHJHZXR0ZXJDYWxsYmFja0Zvck1haW5Xb3Js
ZCwgVGVzdE9ialY4SW50ZXJuYWw6OndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0
U3RhdGVXaXRoU3BhY2VzQXR0cmlidXRlQXR0clNldHRlckNhbGxiYWNrRm9yTWFpbldvcmxkLCAw
IC8qIG5vIGRhdGEgKi8sIHN0YXRpY19jYXN0PHY4OjpBY2Nlc3NDb250cm9sPih2ODo6REVGQVVM
VCksIHN0YXRpY19jYXN0PHY4OjpQcm9wZXJ0eUF0dHJpYnV0ZT4odjg6Ok5vbmUpLCAwIC8qIG9u
IGluc3RhbmNlICovfSwKLSAgICAvLyBBdHRyaWJ1dGUgJ3dpdGhTY3JpcHRBcmd1bWVudHNBbmRD
YWxsU3RhY2tBdHRyaWJ1dGUnIChUeXBlOiAnYXR0cmlidXRlJyBFeHRBdHRyOiAnQ2FsbFdpdGgn
KQotICAgIHsid2l0aFNjcmlwdEFyZ3VtZW50c0FuZENhbGxTdGFja0F0dHJpYnV0ZSIsIFRlc3RP
YmpWOEludGVybmFsOjp3aXRoU2NyaXB0QXJndW1lbnRzQW5kQ2FsbFN0YWNrQXR0cmlidXRlQXR0
ckdldHRlckNhbGxiYWNrRm9yTWFpbldvcmxkLCBUZXN0T2JqVjhJbnRlcm5hbDo6d2l0aFNjcmlw
dEFyZ3VtZW50c0FuZENhbGxTdGFja0F0dHJpYnV0ZUF0dHJTZXR0ZXJDYWxsYmFja0Zvck1haW5X
b3JsZCwgMCAvKiBubyBkYXRhICovLCBzdGF0aWNfY2FzdDx2ODo6QWNjZXNzQ29udHJvbD4odjg6
OkRFRkFVTFQpLCBzdGF0aWNfY2FzdDx2ODo6UHJvcGVydHlBdHRyaWJ1dGU+KHY4OjpOb25lKSwg
MCAvKiBvbiBpbnN0YW5jZSAqL30sCi0jaWYgRU5BQkxFKENvbmRpdGlvbjEpCi0gICAgLy8gQXR0
cmlidXRlICdjb25kaXRpb25hbEF0dHIxJyAoVHlwZTogJ2F0dHJpYnV0ZScgRXh0QXR0cjogJ0Nv
bmRpdGlvbmFsJykKLSAgICB7ImNvbmRpdGlvbmFsQXR0cjEiLCBUZXN0T2JqVjhJbnRlcm5hbDo6
Y29uZGl0aW9uYWxBdHRyMUF0dHJHZXR0ZXJDYWxsYmFja0Zvck1haW5Xb3JsZCwgVGVzdE9ialY4
SW50ZXJuYWw6OmNvbmRpdGlvbmFsQXR0cjFBdHRyU2V0dGVyQ2FsbGJhY2tGb3JNYWluV29ybGQs
IDAgLyogbm8gZGF0YSAqLywgc3RhdGljX2Nhc3Q8djg6OkFjY2Vzc0NvbnRyb2w+KHY4OjpERUZB
VUxUKSwgc3RhdGljX2Nhc3Q8djg6OlByb3BlcnR5QXR0cmlidXRlPih2ODo6Tm9uZSksIDAgLyog
b24gaW5zdGFuY2UgKi99LAotI2VuZGlmIC8vIEVOQUJMRShDb25kaXRpb24xKQotI2lmIEVOQUJM
RShDb25kaXRpb24xKSAmJiBFTkFCTEUoQ29uZGl0aW9uMikKLSAgICAvLyBBdHRyaWJ1dGUgJ2Nv
bmRpdGlvbmFsQXR0cjInIChUeXBlOiAnYXR0cmlidXRlJyBFeHRBdHRyOiAnQ29uZGl0aW9uYWwn
KQotICAgIHsiY29uZGl0aW9uYWxBdHRyMiIsIFRlc3RPYmpWOEludGVybmFsOjpjb25kaXRpb25h
bEF0dHIyQXR0ckdldHRlckNhbGxiYWNrRm9yTWFpbldvcmxkLCBUZXN0T2JqVjhJbnRlcm5hbDo6
Y29uZGl0aW9uYWxBdHRyMkF0dHJTZXR0ZXJDYWxsYmFja0Zvck1haW5Xb3JsZCwgMCAvKiBubyBk
YXRhICovLCBzdGF0aWNfY2FzdDx2ODo6QWNjZXNzQ29udHJvbD4odjg6OkRFRkFVTFQpLCBzdGF0
aWNfY2FzdDx2ODo6UHJvcGVydHlBdHRyaWJ1dGU+KHY4OjpOb25lKSwgMCAvKiBvbiBpbnN0YW5j
ZSAqL30sCi0jZW5kaWYgLy8gRU5BQkxFKENvbmRpdGlvbjEpICYmIEVOQUJMRShDb25kaXRpb24y
KQotI2lmIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKLSAgICAvLyBB
dHRyaWJ1dGUgJ2NvbmRpdGlvbmFsQXR0cjMnIChUeXBlOiAnYXR0cmlidXRlJyBFeHRBdHRyOiAn
Q29uZGl0aW9uYWwnKQotICAgIHsiY29uZGl0aW9uYWxBdHRyMyIsIFRlc3RPYmpWOEludGVybmFs
Ojpjb25kaXRpb25hbEF0dHIzQXR0ckdldHRlckNhbGxiYWNrRm9yTWFpbldvcmxkLCBUZXN0T2Jq
VjhJbnRlcm5hbDo6Y29uZGl0aW9uYWxBdHRyM0F0dHJTZXR0ZXJDYWxsYmFja0Zvck1haW5Xb3Js
ZCwgMCAvKiBubyBkYXRhICovLCBzdGF0aWNfY2FzdDx2ODo6QWNjZXNzQ29udHJvbD4odjg6OkRF
RkFVTFQpLCBzdGF0aWNfY2FzdDx2ODo6UHJvcGVydHlBdHRyaWJ1dGU+KHY4OjpOb25lKSwgMCAv
KiBvbiBpbnN0YW5jZSAqL30sCi0jZW5kaWYgLy8gRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJM
RShDb25kaXRpb24yKQotI2lmIEVOQUJMRShDb25kaXRpb24xKQotICAgIC8vIEF0dHJpYnV0ZSAn
Y29uZGl0aW9uYWxBdHRyNCcgKFR5cGU6ICdhdHRyaWJ1dGUnIEV4dEF0dHI6ICdDb25kaXRpb25h
bCcpCi0gICAgeyJjb25kaXRpb25hbEF0dHI0IiwgVGVzdE9ialY4SW50ZXJuYWw6OlRlc3RPYmpD
b25zdHJ1Y3RvckdldHRlciwgVGVzdE9ialY4SW50ZXJuYWw6OlRlc3RPYmpSZXBsYWNlYWJsZUF0
dHJTZXR0ZXJDYWxsYmFjaywgJlY4VGVzdE9iamVjdEE6OmluZm8sIHN0YXRpY19jYXN0PHY4OjpB
Y2Nlc3NDb250cm9sPih2ODo6REVGQVVMVCksIHN0YXRpY19jYXN0PHY4OjpQcm9wZXJ0eUF0dHJp
YnV0ZT4odjg6Ok5vbmUpLCAwIC8qIG9uIGluc3RhbmNlICovfSwKLSNlbmRpZiAvLyBFTkFCTEUo
Q29uZGl0aW9uMSkKLSNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgJiYgRU5BQkxFKENvbmRpdGlvbjIp
Ci0gICAgLy8gQXR0cmlidXRlICdjb25kaXRpb25hbEF0dHI1JyAoVHlwZTogJ2F0dHJpYnV0ZScg
RXh0QXR0cjogJ0NvbmRpdGlvbmFsJykKLSAgICB7ImNvbmRpdGlvbmFsQXR0cjUiLCBUZXN0T2Jq
VjhJbnRlcm5hbDo6VGVzdE9iakNvbnN0cnVjdG9yR2V0dGVyLCBUZXN0T2JqVjhJbnRlcm5hbDo6
VGVzdE9ialJlcGxhY2VhYmxlQXR0clNldHRlckNhbGxiYWNrLCAmVjhUZXN0T2JqZWN0Qjo6aW5m
bywgc3RhdGljX2Nhc3Q8djg6OkFjY2Vzc0NvbnRyb2w+KHY4OjpERUZBVUxUKSwgc3RhdGljX2Nh
c3Q8djg6OlByb3BlcnR5QXR0cmlidXRlPih2ODo6Tm9uZSksIDAgLyogb24gaW5zdGFuY2UgKi99
LAotI2VuZGlmIC8vIEVOQUJMRShDb25kaXRpb24xKSAmJiBFTkFCTEUoQ29uZGl0aW9uMikKLSNp
ZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCi0gICAgLy8gQXR0cmli
dXRlICdjb25kaXRpb25hbEF0dHI2JyAoVHlwZTogJ2F0dHJpYnV0ZScgRXh0QXR0cjogJ0NvbmRp
dGlvbmFsJykKLSAgICB7ImNvbmRpdGlvbmFsQXR0cjYiLCBUZXN0T2JqVjhJbnRlcm5hbDo6VGVz
dE9iakNvbnN0cnVjdG9yR2V0dGVyLCBUZXN0T2JqVjhJbnRlcm5hbDo6VGVzdE9ialJlcGxhY2Vh
YmxlQXR0clNldHRlckNhbGxiYWNrLCAmVjhUZXN0T2JqZWN0Qzo6aW5mbywgc3RhdGljX2Nhc3Q8
djg6OkFjY2Vzc0NvbnRyb2w+KHY4OjpERUZBVUxUKSwgc3RhdGljX2Nhc3Q8djg6OlByb3BlcnR5
QXR0cmlidXRlPih2ODo6Tm9uZSksIDAgLyogb24gaW5zdGFuY2UgKi99LAotI2VuZGlmIC8vIEVO
QUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKLSAgICAvLyBBdHRyaWJ1dGUg
J2NhY2hlZEF0dHJpYnV0ZTEnIChUeXBlOiAncmVhZG9ubHkgYXR0cmlidXRlJyBFeHRBdHRyOiAn
Q2FjaGVkQXR0cmlidXRlJykKLSAgICB7ImNhY2hlZEF0dHJpYnV0ZTEiLCBUZXN0T2JqVjhJbnRl
cm5hbDo6Y2FjaGVkQXR0cmlidXRlMUF0dHJHZXR0ZXJDYWxsYmFja0Zvck1haW5Xb3JsZCwgMCwg
MCAvKiBubyBkYXRhICovLCBzdGF0aWNfY2FzdDx2ODo6QWNjZXNzQ29udHJvbD4odjg6OkRFRkFV
TFQpLCBzdGF0aWNfY2FzdDx2ODo6UHJvcGVydHlBdHRyaWJ1dGU+KHY4OjpOb25lKSwgMCAvKiBv
biBpbnN0YW5jZSAqL30sCi0gICAgLy8gQXR0cmlidXRlICdjYWNoZWRBdHRyaWJ1dGUyJyAoVHlw
ZTogJ3JlYWRvbmx5IGF0dHJpYnV0ZScgRXh0QXR0cjogJ0NhY2hlZEF0dHJpYnV0ZScpCi0gICAg
eyJjYWNoZWRBdHRyaWJ1dGUyIiwgVGVzdE9ialY4SW50ZXJuYWw6OmNhY2hlZEF0dHJpYnV0ZTJB
dHRyR2V0dGVyQ2FsbGJhY2tGb3JNYWluV29ybGQsIDAsIDAgLyogbm8gZGF0YSAqLywgc3RhdGlj
X2Nhc3Q8djg6OkFjY2Vzc0NvbnRyb2w+KHY4OjpERUZBVUxUKSwgc3RhdGljX2Nhc3Q8djg6OlBy
b3BlcnR5QXR0cmlidXRlPih2ODo6Tm9uZSksIDAgLyogb24gaW5zdGFuY2UgKi99LAotICAgIC8v
IEF0dHJpYnV0ZSAnYW55QXR0cmlidXRlJyAoVHlwZTogJ2F0dHJpYnV0ZScgRXh0QXR0cjogJycp
Ci0gICAgeyJhbnlBdHRyaWJ1dGUiLCBUZXN0T2JqVjhJbnRlcm5hbDo6YW55QXR0cmlidXRlQXR0
ckdldHRlckNhbGxiYWNrRm9yTWFpbldvcmxkLCBUZXN0T2JqVjhJbnRlcm5hbDo6YW55QXR0cmli
dXRlQXR0clNldHRlckNhbGxiYWNrRm9yTWFpbldvcmxkLCAwIC8qIG5vIGRhdGEgKi8sIHN0YXRp
Y19jYXN0PHY4OjpBY2Nlc3NDb250cm9sPih2ODo6REVGQVVMVCksIHN0YXRpY19jYXN0PHY4OjpQ
cm9wZXJ0eUF0dHJpYnV0ZT4odjg6Ok5vbmUpLCAwIC8qIG9uIGluc3RhbmNlICovfSwKLSAgICAv
LyBBdHRyaWJ1dGUgJ2Zsb2F0QXJyYXknIChUeXBlOiAnYXR0cmlidXRlJyBFeHRBdHRyOiAnJykK
LSAgICB7ImZsb2F0QXJyYXkiLCBUZXN0T2JqVjhJbnRlcm5hbDo6ZmxvYXRBcnJheUF0dHJHZXR0
ZXJDYWxsYmFja0Zvck1haW5Xb3JsZCwgVGVzdE9ialY4SW50ZXJuYWw6OmZsb2F0QXJyYXlBdHRy
U2V0dGVyQ2FsbGJhY2tGb3JNYWluV29ybGQsIDAgLyogbm8gZGF0YSAqLywgc3RhdGljX2Nhc3Q8
djg6OkFjY2Vzc0NvbnRyb2w+KHY4OjpERUZBVUxUKSwgc3RhdGljX2Nhc3Q8djg6OlByb3BlcnR5
QXR0cmlidXRlPih2ODo6Tm9uZSksIDAgLyogb24gaW5zdGFuY2UgKi99LAotICAgIC8vIEF0dHJp
YnV0ZSAnZG91YmxlQXJyYXknIChUeXBlOiAnYXR0cmlidXRlJyBFeHRBdHRyOiAnJykKLSAgICB7
ImRvdWJsZUFycmF5IiwgVGVzdE9ialY4SW50ZXJuYWw6OmRvdWJsZUFycmF5QXR0ckdldHRlckNh
bGxiYWNrRm9yTWFpbldvcmxkLCBUZXN0T2JqVjhJbnRlcm5hbDo6ZG91YmxlQXJyYXlBdHRyU2V0
dGVyQ2FsbGJhY2tGb3JNYWluV29ybGQsIDAgLyogbm8gZGF0YSAqLywgc3RhdGljX2Nhc3Q8djg6
OkFjY2Vzc0NvbnRyb2w+KHY4OjpERUZBVUxUKSwgc3RhdGljX2Nhc3Q8djg6OlByb3BlcnR5QXR0
cmlidXRlPih2ODo6Tm9uZSksIDAgLyogb24gaW5zdGFuY2UgKi99LAotICAgIC8vIEF0dHJpYnV0
ZSAnY29udGVudERvY3VtZW50JyAoVHlwZTogJ3JlYWRvbmx5IGF0dHJpYnV0ZScgRXh0QXR0cjog
J0NoZWNrU2VjdXJpdHlGb3JOb2RlJykKLSAgICB7ImNvbnRlbnREb2N1bWVudCIsIFRlc3RPYmpW
OEludGVybmFsOjpjb250ZW50RG9jdW1lbnRBdHRyR2V0dGVyQ2FsbGJhY2tGb3JNYWluV29ybGQs
IDAsIDAgLyogbm8gZGF0YSAqLywgc3RhdGljX2Nhc3Q8djg6OkFjY2Vzc0NvbnRyb2w+KHY4OjpE
RUZBVUxUKSwgc3RhdGljX2Nhc3Q8djg6OlByb3BlcnR5QXR0cmlidXRlPih2ODo6Tm9uZSksIDAg
Lyogb24gaW5zdGFuY2UgKi99LAotICAgIC8vIEF0dHJpYnV0ZSAnbXV0YWJsZVBvaW50JyAoVHlw
ZTogJ2F0dHJpYnV0ZScgRXh0QXR0cjogJycpCi0gICAgeyJtdXRhYmxlUG9pbnQiLCBUZXN0T2Jq
VjhJbnRlcm5hbDo6bXV0YWJsZVBvaW50QXR0ckdldHRlckNhbGxiYWNrRm9yTWFpbldvcmxkLCBU
ZXN0T2JqVjhJbnRlcm5hbDo6bXV0YWJsZVBvaW50QXR0clNldHRlckNhbGxiYWNrRm9yTWFpbldv
cmxkLCAwIC8qIG5vIGRhdGEgKi8sIHN0YXRpY19jYXN0PHY4OjpBY2Nlc3NDb250cm9sPih2ODo6
REVGQVVMVCksIHN0YXRpY19jYXN0PHY4OjpQcm9wZXJ0eUF0dHJpYnV0ZT4odjg6Ok5vbmUpLCAw
IC8qIG9uIGluc3RhbmNlICovfSwKLSAgICAvLyBBdHRyaWJ1dGUgJ2ltbXV0YWJsZVBvaW50JyAo
VHlwZTogJ2F0dHJpYnV0ZScgRXh0QXR0cjogJ0ltbXV0YWJsZScpCi0gICAgeyJpbW11dGFibGVQ
b2ludCIsIFRlc3RPYmpWOEludGVybmFsOjppbW11dGFibGVQb2ludEF0dHJHZXR0ZXJDYWxsYmFj
a0Zvck1haW5Xb3JsZCwgVGVzdE9ialY4SW50ZXJuYWw6OmltbXV0YWJsZVBvaW50QXR0clNldHRl
ckNhbGxiYWNrRm9yTWFpbldvcmxkLCAwIC8qIG5vIGRhdGEgKi8sIHN0YXRpY19jYXN0PHY4OjpB
Y2Nlc3NDb250cm9sPih2ODo6REVGQVVMVCksIHN0YXRpY19jYXN0PHY4OjpQcm9wZXJ0eUF0dHJp
YnV0ZT4odjg6Ok5vbmUpLCAwIC8qIG9uIGluc3RhbmNlICovfSwKLSAgICAvLyBBdHRyaWJ1dGUg
J3N0cmF3YmVycnknIChUeXBlOiAnYXR0cmlidXRlJyBFeHRBdHRyOiAnSW1wbGVtZW50ZWRBcycp
Ci0gICAgeyJzdHJhd2JlcnJ5IiwgVGVzdE9ialY4SW50ZXJuYWw6OnN0cmF3YmVycnlBdHRyR2V0
dGVyQ2FsbGJhY2tGb3JNYWluV29ybGQsIFRlc3RPYmpWOEludGVybmFsOjpzdHJhd2JlcnJ5QXR0
clNldHRlckNhbGxiYWNrRm9yTWFpbldvcmxkLCAwIC8qIG5vIGRhdGEgKi8sIHN0YXRpY19jYXN0
PHY4OjpBY2Nlc3NDb250cm9sPih2ODo6REVGQVVMVCksIHN0YXRpY19jYXN0PHY4OjpQcm9wZXJ0
eUF0dHJpYnV0ZT4odjg6Ok5vbmUpLCAwIC8qIG9uIGluc3RhbmNlICovfSwKLSAgICAvLyBBdHRy
aWJ1dGUgJ3N0cmljdEZsb2F0JyAoVHlwZTogJ2F0dHJpYnV0ZScgRXh0QXR0cjogJ1N0cmljdFR5
cGVDaGVja2luZycpCi0gICAgeyJzdHJpY3RGbG9hdCIsIFRlc3RPYmpWOEludGVybmFsOjpzdHJp
Y3RGbG9hdEF0dHJHZXR0ZXJDYWxsYmFja0Zvck1haW5Xb3JsZCwgVGVzdE9ialY4SW50ZXJuYWw6
OnN0cmljdEZsb2F0QXR0clNldHRlckNhbGxiYWNrRm9yTWFpbldvcmxkLCAwIC8qIG5vIGRhdGEg
Ki8sIHN0YXRpY19jYXN0PHY4OjpBY2Nlc3NDb250cm9sPih2ODo6REVGQVVMVCksIHN0YXRpY19j
YXN0PHY4OjpQcm9wZXJ0eUF0dHJpYnV0ZT4odjg6Ok5vbmUpLCAwIC8qIG9uIGluc3RhbmNlICov
fSwKLSAgICAvLyBBdHRyaWJ1dGUgJ2Rlc2NyaXB0aW9uJyAoVHlwZTogJ3JlYWRvbmx5IGF0dHJp
YnV0ZScgRXh0QXR0cjogJycpCi0gICAgeyJkZXNjcmlwdGlvbiIsIFRlc3RPYmpWOEludGVybmFs
OjpkZXNjcmlwdGlvbkF0dHJHZXR0ZXJDYWxsYmFja0Zvck1haW5Xb3JsZCwgMCwgMCAvKiBubyBk
YXRhICovLCBzdGF0aWNfY2FzdDx2ODo6QWNjZXNzQ29udHJvbD4odjg6OkRFRkFVTFQpLCBzdGF0
aWNfY2FzdDx2ODo6UHJvcGVydHlBdHRyaWJ1dGU+KHY4OjpOb25lKSwgMCAvKiBvbiBpbnN0YW5j
ZSAqL30sCi0gICAgLy8gQXR0cmlidXRlICdpZCcgKFR5cGU6ICdhdHRyaWJ1dGUnIEV4dEF0dHI6
ICcnKQotICAgIHsiaWQiLCBUZXN0T2JqVjhJbnRlcm5hbDo6aWRBdHRyR2V0dGVyQ2FsbGJhY2tG
b3JNYWluV29ybGQsIFRlc3RPYmpWOEludGVybmFsOjppZEF0dHJTZXR0ZXJDYWxsYmFja0Zvck1h
aW5Xb3JsZCwgMCAvKiBubyBkYXRhICovLCBzdGF0aWNfY2FzdDx2ODo6QWNjZXNzQ29udHJvbD4o
djg6OkRFRkFVTFQpLCBzdGF0aWNfY2FzdDx2ODo6UHJvcGVydHlBdHRyaWJ1dGU+KHY4OjpOb25l
KSwgMCAvKiBvbiBpbnN0YW5jZSAqL30sCi0gICAgLy8gQXR0cmlidXRlICdoYXNoJyAoVHlwZTog
J3JlYWRvbmx5IGF0dHJpYnV0ZScgRXh0QXR0cjogJycpCi0gICAgeyJoYXNoIiwgVGVzdE9ialY4
SW50ZXJuYWw6Omhhc2hBdHRyR2V0dGVyQ2FsbGJhY2tGb3JNYWluV29ybGQsIDAsIDAgLyogbm8g
ZGF0YSAqLywgc3RhdGljX2Nhc3Q8djg6OkFjY2Vzc0NvbnRyb2w+KHY4OjpERUZBVUxUKSwgc3Rh
dGljX2Nhc3Q8djg6OlByb3BlcnR5QXR0cmlidXRlPih2ODo6Tm9uZSksIDAgLyogb24gaW5zdGFu
Y2UgKi99LAotICAgIC8vIEF0dHJpYnV0ZSAncmVwbGFjZWFibGVBdHRyaWJ1dGUnIChUeXBlOiAn
cmVhZG9ubHkgYXR0cmlidXRlJyBFeHRBdHRyOiAnUmVwbGFjZWFibGUnKQotICAgIHsicmVwbGFj
ZWFibGVBdHRyaWJ1dGUiLCBUZXN0T2JqVjhJbnRlcm5hbDo6cmVwbGFjZWFibGVBdHRyaWJ1dGVB
dHRyR2V0dGVyQ2FsbGJhY2tGb3JNYWluV29ybGQsIFRlc3RPYmpWOEludGVybmFsOjpUZXN0T2Jq
UmVwbGFjZWFibGVBdHRyU2V0dGVyQ2FsbGJhY2ssIDAgLyogbm8gZGF0YSAqLywgc3RhdGljX2Nh
c3Q8djg6OkFjY2Vzc0NvbnRyb2w+KHY4OjpERUZBVUxUKSwgc3RhdGljX2Nhc3Q8djg6OlByb3Bl
cnR5QXR0cmlidXRlPih2ODo6Tm9uZSksIDAgLyogb24gaW5zdGFuY2UgKi99LAotfTsKLQogc3Rh
dGljIGNvbnN0IFY4RE9NQ29uZmlndXJhdGlvbjo6QmF0Y2hlZE1ldGhvZCBWOFRlc3RPYmpNZXRo
b2RzW10gPSB7CiAgICAgeyJ2b2lkTWV0aG9kIiwgVGVzdE9ialY4SW50ZXJuYWw6OnZvaWRNZXRo
b2RNZXRob2RDYWxsYmFja30sCiAgICAgeyJsb25nTWV0aG9kIiwgVGVzdE9ialY4SW50ZXJuYWw6
OmxvbmdNZXRob2RNZXRob2RDYWxsYmFja30sCkBAIC00NTM5LDcgKzMwMzIsNyBAQCB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gVjhUZXN0T2JqOjpjb25zdHJ1Y3RvckNhbGxiYWNrKGNvbnN0IHY4OjpB
cmd1bWVudHMmIGFyZ3MpCiAgICAgcmV0dXJuIFRlc3RPYmpWOEludGVybmFsOjpjb25zdHJ1Y3Rv
cihhcmdzKTsKIH0KIAotc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRl
PiBDb25maWd1cmVWOFRlc3RPYmpUZW1wbGF0ZSh2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25U
ZW1wbGF0ZT4gZGVzYywgdjg6Oklzb2xhdGUqIGlzb2xhdGUsIFdyYXBwZXJXb3JsZFR5cGUgY3Vy
cmVudFdvcmxkVHlwZSkKK3N0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0
ZT4gQ29uZmlndXJlVjhUZXN0T2JqVGVtcGxhdGUodjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9u
VGVtcGxhdGU+IGRlc2MsIHY4OjpJc29sYXRlKiBpc29sYXRlLCBXcmFwcGVyV29ybGRUeXBlIHdv
cmxkVHlwZSkKIHsKICAgICBkZXNjLT5SZWFkT25seVByb3RvdHlwZSgpOwogCkBAIC00NTU5LDU2
ICszMDUyLDQxIEBAIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4g
Q29uZmlndXJlVjhUZXN0T2JqVGVtcGxhdGUodjg6OlBlcnNpCiAgICAgICAgIC8vIEF0dHJpYnV0
ZSAnZW5hYmxlZEF0UnVudGltZUF0dHIxJyAoVHlwZTogJ2F0dHJpYnV0ZScgRXh0QXR0cjogJ1Y4
RW5hYmxlZEF0UnVudGltZScpCiAgICAgICAgIHsiZW5hYmxlZEF0UnVudGltZUF0dHIxIiwgVGVz
dE9ialY4SW50ZXJuYWw6OmVuYWJsZWRBdFJ1bnRpbWVBdHRyMUF0dHJHZXR0ZXJDYWxsYmFjaywg
VGVzdE9ialY4SW50ZXJuYWw6OmVuYWJsZWRBdFJ1bnRpbWVBdHRyMUF0dHJTZXR0ZXJDYWxsYmFj
aywgMCAvKiBubyBkYXRhICovLCBzdGF0aWNfY2FzdDx2ODo6QWNjZXNzQ29udHJvbD4odjg6OkRF
RkFVTFQpLCBzdGF0aWNfY2FzdDx2ODo6UHJvcGVydHlBdHRyaWJ1dGU+KHY4OjpOb25lKSwgMCAv
KiBvbiBpbnN0YW5jZSAqL307CiAgICAgICAgIFY4RE9NQ29uZmlndXJhdGlvbjo6Y29uZmlndXJl
QXR0cmlidXRlKGluc3RhbmNlLCBwcm90bywgYXR0ckRhdGEsIGlzb2xhdGUpOwotICAgICAgICBp
ZiAoY3VycmVudFdvcmxkVHlwZSA9PSBNYWluV29ybGQpIHsKLSAgICAgICAgICAgIHN0YXRpYyBj
b25zdCBWOERPTUNvbmZpZ3VyYXRpb246OkJhdGNoZWRBdHRyaWJ1dGUgYXR0ckRhdGFGb3JNYWlu
V29ybGQgPVwKLSAgICAgICAgLy8gQXR0cmlidXRlICdlbmFibGVkQXRSdW50aW1lQXR0cjEnIChU
eXBlOiAnYXR0cmlidXRlJyBFeHRBdHRyOiAnVjhFbmFibGVkQXRSdW50aW1lJykKLSAgICAgICAg
eyJlbmFibGVkQXRSdW50aW1lQXR0cjEiLCBUZXN0T2JqVjhJbnRlcm5hbDo6ZW5hYmxlZEF0UnVu
dGltZUF0dHIxQXR0ckdldHRlckNhbGxiYWNrRm9yTWFpbldvcmxkLCBUZXN0T2JqVjhJbnRlcm5h
bDo6ZW5hYmxlZEF0UnVudGltZUF0dHIxQXR0clNldHRlckNhbGxiYWNrRm9yTWFpbldvcmxkLCAw
IC8qIG5vIGRhdGEgKi8sIHN0YXRpY19jYXN0PHY4OjpBY2Nlc3NDb250cm9sPih2ODo6REVGQVVM
VCksIHN0YXRpY19jYXN0PHY4OjpQcm9wZXJ0eUF0dHJpYnV0ZT4odjg6Ok5vbmUpLCAwIC8qIG9u
IGluc3RhbmNlICovfTsKLSAgICAgICAgICAgIFY4RE9NQ29uZmlndXJhdGlvbjo6Y29uZmlndXJl
QXR0cmlidXRlKGluc3RhbmNlLCBwcm90bywgYXR0ckRhdGFGb3JNYWluV29ybGQsIGlzb2xhdGUp
OwotICAgICAgICB9CiAgICAgfQogICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpmZWF0
dXJlTmFtZUVuYWJsZWQoKSkgewogICAgICAgICBzdGF0aWMgY29uc3QgVjhET01Db25maWd1cmF0
aW9uOjpCYXRjaGVkQXR0cmlidXRlIGF0dHJEYXRhID1cCiAgICAgICAgIC8vIEF0dHJpYnV0ZSAn
ZW5hYmxlZEF0UnVudGltZUF0dHIyJyAoVHlwZTogJ2F0dHJpYnV0ZScgRXh0QXR0cjogJ1Y4RW5h
YmxlZEF0UnVudGltZScpCiAgICAgICAgIHsiZW5hYmxlZEF0UnVudGltZUF0dHIyIiwgVGVzdE9i
alY4SW50ZXJuYWw6OmVuYWJsZWRBdFJ1bnRpbWVBdHRyMkF0dHJHZXR0ZXJDYWxsYmFjaywgVGVz
dE9ialY4SW50ZXJuYWw6OmVuYWJsZWRBdFJ1bnRpbWVBdHRyMkF0dHJTZXR0ZXJDYWxsYmFjaywg
MCAvKiBubyBkYXRhICovLCBzdGF0aWNfY2FzdDx2ODo6QWNjZXNzQ29udHJvbD4odjg6OkRFRkFV
TFQpLCBzdGF0aWNfY2FzdDx2ODo6UHJvcGVydHlBdHRyaWJ1dGU+KHY4OjpOb25lKSwgMCAvKiBv
biBpbnN0YW5jZSAqL307CiAgICAgICAgIFY4RE9NQ29uZmlndXJhdGlvbjo6Y29uZmlndXJlQXR0
cmlidXRlKGluc3RhbmNlLCBwcm90bywgYXR0ckRhdGEsIGlzb2xhdGUpOwotICAgICAgICBpZiAo
Y3VycmVudFdvcmxkVHlwZSA9PSBNYWluV29ybGQpIHsKLSAgICAgICAgICAgIHN0YXRpYyBjb25z
dCBWOERPTUNvbmZpZ3VyYXRpb246OkJhdGNoZWRBdHRyaWJ1dGUgYXR0ckRhdGFGb3JNYWluV29y
bGQgPVwKLSAgICAgICAgLy8gQXR0cmlidXRlICdlbmFibGVkQXRSdW50aW1lQXR0cjInIChUeXBl
OiAnYXR0cmlidXRlJyBFeHRBdHRyOiAnVjhFbmFibGVkQXRSdW50aW1lJykKLSAgICAgICAgeyJl
bmFibGVkQXRSdW50aW1lQXR0cjIiLCBUZXN0T2JqVjhJbnRlcm5hbDo6ZW5hYmxlZEF0UnVudGlt
ZUF0dHIyQXR0ckdldHRlckNhbGxiYWNrRm9yTWFpbldvcmxkLCBUZXN0T2JqVjhJbnRlcm5hbDo6
ZW5hYmxlZEF0UnVudGltZUF0dHIyQXR0clNldHRlckNhbGxiYWNrRm9yTWFpbldvcmxkLCAwIC8q
IG5vIGRhdGEgKi8sIHN0YXRpY19jYXN0PHY4OjpBY2Nlc3NDb250cm9sPih2ODo6REVGQVVMVCks
IHN0YXRpY19jYXN0PHY4OjpQcm9wZXJ0eUF0dHJpYnV0ZT4odjg6Ok5vbmUpLCAwIC8qIG9uIGlu
c3RhbmNlICovfTsKLSAgICAgICAgICAgIFY4RE9NQ29uZmlndXJhdGlvbjo6Y29uZmlndXJlQXR0
cmlidXRlKGluc3RhbmNlLCBwcm90bywgYXR0ckRhdGFGb3JNYWluV29ybGQsIGlzb2xhdGUpOwot
ICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKGN1cnJlbnRXb3JsZFR5cGUgPT0gTWFpbldvcmxk
KQotICAgICAgICBWOERPTUNvbmZpZ3VyYXRpb246OmFkZFRvVGVtcGxhdGUoZGVzYywgVjhUZXN0
T2JqQXR0cnNGb3JNYWluV29ybGQsIFdURl9BUlJBWV9MRU5HVEgoVjhUZXN0T2JqQXR0cnNGb3JN
YWluV29ybGQpLCAwLCAwLCBpc29sYXRlLCBkZWZhdWx0U2lnbmF0dXJlKTsKLQogICAgIC8vIEN1
c3RvbSBTaWduYXR1cmUgJ3ZvaWRNZXRob2RXaXRoQXJncycKICAgICBjb25zdCBpbnQgdm9pZE1l
dGhvZFdpdGhBcmdzQXJnYyA9IDM7Ci0gICAgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb25UZW1wbGF0
ZT4gdm9pZE1ldGhvZFdpdGhBcmdzQXJndlt2b2lkTWV0aG9kV2l0aEFyZ3NBcmdjXSA9IHsgdjg6
OkhhbmRsZTx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4oKSwgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb25U
ZW1wbGF0ZT4oKSwgVjhQZXJJc29sYXRlRGF0YTo6ZnJvbShpc29sYXRlKS0+cmF3VGVtcGxhdGUo
JlY4VGVzdE9iajo6aW5mbywgY3VycmVudFdvcmxkVHlwZSkgfTsKKyAgICB2ODo6SGFuZGxlPHY4
OjpGdW5jdGlvblRlbXBsYXRlPiB2b2lkTWV0aG9kV2l0aEFyZ3NBcmd2W3ZvaWRNZXRob2RXaXRo
QXJnc0FyZ2NdID0geyB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvblRlbXBsYXRlPigpLCB2ODo6SGFu
ZGxlPHY4OjpGdW5jdGlvblRlbXBsYXRlPigpLCBWOFBlcklzb2xhdGVEYXRhOjpmcm9tKGlzb2xh
dGUpLT5yYXdUZW1wbGF0ZSgmVjhUZXN0T2JqOjppbmZvLCB3b3JsZFR5cGUpIH07CiAgICAgdjg6
OkhhbmRsZTx2ODo6U2lnbmF0dXJlPiB2b2lkTWV0aG9kV2l0aEFyZ3NTaWduYXR1cmUgPSB2ODo6
U2lnbmF0dXJlOjpOZXcoZGVzYywgdm9pZE1ldGhvZFdpdGhBcmdzQXJnYywgdm9pZE1ldGhvZFdp
dGhBcmdzQXJndik7CiAgICAgcHJvdG8tPlNldCh2ODo6U3RyaW5nOjpOZXdTeW1ib2woInZvaWRN
ZXRob2RXaXRoQXJncyIpLCB2ODo6RnVuY3Rpb25UZW1wbGF0ZTo6TmV3KFRlc3RPYmpWOEludGVy
bmFsOjp2b2lkTWV0aG9kV2l0aEFyZ3NNZXRob2RDYWxsYmFjaywgdjhVbmRlZmluZWQoKSwgdm9p
ZE1ldGhvZFdpdGhBcmdzU2lnbmF0dXJlKSk7CiAKICAgICAvLyBDdXN0b20gU2lnbmF0dXJlICds
b25nTWV0aG9kV2l0aEFyZ3MnCiAgICAgY29uc3QgaW50IGxvbmdNZXRob2RXaXRoQXJnc0FyZ2Mg
PSAzOwotICAgIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IGxvbmdNZXRob2RXaXRo
QXJnc0FyZ3ZbbG9uZ01ldGhvZFdpdGhBcmdzQXJnY10gPSB7IHY4OjpIYW5kbGU8djg6OkZ1bmN0
aW9uVGVtcGxhdGU+KCksIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uVGVtcGxhdGU+KCksIFY4UGVy
SXNvbGF0ZURhdGE6OmZyb20oaXNvbGF0ZSktPnJhd1RlbXBsYXRlKCZWOFRlc3RPYmo6OmluZm8s
IGN1cnJlbnRXb3JsZFR5cGUpIH07CisgICAgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb25UZW1wbGF0
ZT4gbG9uZ01ldGhvZFdpdGhBcmdzQXJndltsb25nTWV0aG9kV2l0aEFyZ3NBcmdjXSA9IHsgdjg6
OkhhbmRsZTx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4oKSwgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb25U
ZW1wbGF0ZT4oKSwgVjhQZXJJc29sYXRlRGF0YTo6ZnJvbShpc29sYXRlKS0+cmF3VGVtcGxhdGUo
JlY4VGVzdE9iajo6aW5mbywgd29ybGRUeXBlKSB9OwogICAgIHY4OjpIYW5kbGU8djg6OlNpZ25h
dHVyZT4gbG9uZ01ldGhvZFdpdGhBcmdzU2lnbmF0dXJlID0gdjg6OlNpZ25hdHVyZTo6TmV3KGRl
c2MsIGxvbmdNZXRob2RXaXRoQXJnc0FyZ2MsIGxvbmdNZXRob2RXaXRoQXJnc0FyZ3YpOwogICAg
IHByb3RvLT5TZXQodjg6OlN0cmluZzo6TmV3U3ltYm9sKCJsb25nTWV0aG9kV2l0aEFyZ3MiKSwg
djg6OkZ1bmN0aW9uVGVtcGxhdGU6Ok5ldyhUZXN0T2JqVjhJbnRlcm5hbDo6bG9uZ01ldGhvZFdp
dGhBcmdzTWV0aG9kQ2FsbGJhY2ssIHY4VW5kZWZpbmVkKCksIGxvbmdNZXRob2RXaXRoQXJnc1Np
Z25hdHVyZSkpOwogCiAgICAgLy8gQ3VzdG9tIFNpZ25hdHVyZSAnb2JqTWV0aG9kV2l0aEFyZ3Mn
CiAgICAgY29uc3QgaW50IG9iak1ldGhvZFdpdGhBcmdzQXJnYyA9IDM7Ci0gICAgdjg6OkhhbmRs
ZTx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gb2JqTWV0aG9kV2l0aEFyZ3NBcmd2W29iak1ldGhvZFdp
dGhBcmdzQXJnY10gPSB7IHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uVGVtcGxhdGU+KCksIHY4OjpI
YW5kbGU8djg6OkZ1bmN0aW9uVGVtcGxhdGU+KCksIFY4UGVySXNvbGF0ZURhdGE6OmZyb20oaXNv
bGF0ZSktPnJhd1RlbXBsYXRlKCZWOFRlc3RPYmo6OmluZm8sIGN1cnJlbnRXb3JsZFR5cGUpIH07
CisgICAgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gb2JqTWV0aG9kV2l0aEFyZ3NB
cmd2W29iak1ldGhvZFdpdGhBcmdzQXJnY10gPSB7IHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uVGVt
cGxhdGU+KCksIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uVGVtcGxhdGU+KCksIFY4UGVySXNvbGF0
ZURhdGE6OmZyb20oaXNvbGF0ZSktPnJhd1RlbXBsYXRlKCZWOFRlc3RPYmo6OmluZm8sIHdvcmxk
VHlwZSkgfTsKICAgICB2ODo6SGFuZGxlPHY4OjpTaWduYXR1cmU+IG9iak1ldGhvZFdpdGhBcmdz
U2lnbmF0dXJlID0gdjg6OlNpZ25hdHVyZTo6TmV3KGRlc2MsIG9iak1ldGhvZFdpdGhBcmdzQXJn
Yywgb2JqTWV0aG9kV2l0aEFyZ3NBcmd2KTsKICAgICBwcm90by0+U2V0KHY4OjpTdHJpbmc6Ok5l
d1N5bWJvbCgib2JqTWV0aG9kV2l0aEFyZ3MiKSwgdjg6OkZ1bmN0aW9uVGVtcGxhdGU6Ok5ldyhU
ZXN0T2JqVjhJbnRlcm5hbDo6b2JqTWV0aG9kV2l0aEFyZ3NNZXRob2RDYWxsYmFjaywgdjhVbmRl
ZmluZWQoKSwgb2JqTWV0aG9kV2l0aEFyZ3NTaWduYXR1cmUpKTsKIAogICAgIC8vIEN1c3RvbSBT
aWduYXR1cmUgJ21ldGhvZFdpdGhTZXF1ZW5jZUFyZycKICAgICBjb25zdCBpbnQgbWV0aG9kV2l0
aFNlcXVlbmNlQXJnQXJnYyA9IDE7Ci0gICAgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb25UZW1wbGF0
ZT4gbWV0aG9kV2l0aFNlcXVlbmNlQXJnQXJndlttZXRob2RXaXRoU2VxdWVuY2VBcmdBcmdjXSA9
IHsgVjhQZXJJc29sYXRlRGF0YTo6ZnJvbShpc29sYXRlKS0+cmF3VGVtcGxhdGUoJlY4c2VxdWVu
Y2U8U2NyaXB0UHJvZmlsZT46OmluZm8sIGN1cnJlbnRXb3JsZFR5cGUpIH07CisgICAgdjg6Okhh
bmRsZTx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gbWV0aG9kV2l0aFNlcXVlbmNlQXJnQXJndlttZXRo
b2RXaXRoU2VxdWVuY2VBcmdBcmdjXSA9IHsgVjhQZXJJc29sYXRlRGF0YTo6ZnJvbShpc29sYXRl
KS0+cmF3VGVtcGxhdGUoJlY4c2VxdWVuY2U8U2NyaXB0UHJvZmlsZT46OmluZm8sIHdvcmxkVHlw
ZSkgfTsKICAgICB2ODo6SGFuZGxlPHY4OjpTaWduYXR1cmU+IG1ldGhvZFdpdGhTZXF1ZW5jZUFy
Z1NpZ25hdHVyZSA9IHY4OjpTaWduYXR1cmU6Ok5ldyhkZXNjLCBtZXRob2RXaXRoU2VxdWVuY2VB
cmdBcmdjLCBtZXRob2RXaXRoU2VxdWVuY2VBcmdBcmd2KTsKICAgICBwcm90by0+U2V0KHY4OjpT
dHJpbmc6Ok5ld1N5bWJvbCgibWV0aG9kV2l0aFNlcXVlbmNlQXJnIiksIHY4OjpGdW5jdGlvblRl
bXBsYXRlOjpOZXcoVGVzdE9ialY4SW50ZXJuYWw6Om1ldGhvZFdpdGhTZXF1ZW5jZUFyZ01ldGhv
ZENhbGxiYWNrLCB2OFVuZGVmaW5lZCgpLCBtZXRob2RXaXRoU2VxdWVuY2VBcmdTaWduYXR1cmUp
KTsKIAogICAgIC8vIEN1c3RvbSBTaWduYXR1cmUgJ21ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NB
bmRUaHJvd3MnCiAgICAgY29uc3QgaW50IG1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NBbmRUaHJv
d3NBcmdjID0gMjsKLSAgICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvblRlbXBsYXRlPiBtZXRob2RU
aGF0UmVxdWlyZXNBbGxBcmdzQW5kVGhyb3dzQXJndlttZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdz
QW5kVGhyb3dzQXJnY10gPSB7IHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uVGVtcGxhdGU+KCksIFY4
UGVySXNvbGF0ZURhdGE6OmZyb20oaXNvbGF0ZSktPnJhd1RlbXBsYXRlKCZWOFRlc3RPYmo6Omlu
Zm8sIGN1cnJlbnRXb3JsZFR5cGUpIH07CisgICAgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb25UZW1w
bGF0ZT4gbWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJnc0FuZFRocm93c0FyZ3ZbbWV0aG9kVGhhdFJl
cXVpcmVzQWxsQXJnc0FuZFRocm93c0FyZ2NdID0geyB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvblRl
bXBsYXRlPigpLCBWOFBlcklzb2xhdGVEYXRhOjpmcm9tKGlzb2xhdGUpLT5yYXdUZW1wbGF0ZSgm
VjhUZXN0T2JqOjppbmZvLCB3b3JsZFR5cGUpIH07CiAgICAgdjg6OkhhbmRsZTx2ODo6U2lnbmF0
dXJlPiBtZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5kVGhyb3dzU2lnbmF0dXJlID0gdjg6OlNp
Z25hdHVyZTo6TmV3KGRlc2MsIG1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NBbmRUaHJvd3NBcmdj
LCBtZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5kVGhyb3dzQXJndik7CiAgICAgcHJvdG8tPlNl
dCh2ODo6U3RyaW5nOjpOZXdTeW1ib2woIm1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NBbmRUaHJv
d3MiKSwgdjg6OkZ1bmN0aW9uVGVtcGxhdGU6Ok5ldyhUZXN0T2JqVjhJbnRlcm5hbDo6bWV0aG9k
VGhhdFJlcXVpcmVzQWxsQXJnc0FuZFRocm93c01ldGhvZENhbGxiYWNrLCB2OFVuZGVmaW5lZCgp
LCBtZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5kVGhyb3dzU2lnbmF0dXJlKSk7CiAgICAgZGVz
Yy0+U2V0KHY4OjpTdHJpbmc6Ok5ld1N5bWJvbCgic3RhdGljTWV0aG9kV2l0aENhbGxiYWNrQW5k
T3B0aW9uYWxBcmciKSwgdjg6OkZ1bmN0aW9uVGVtcGxhdGU6Ok5ldyhUZXN0T2JqVjhJbnRlcm5h
bDo6c3RhdGljTWV0aG9kV2l0aENhbGxiYWNrQW5kT3B0aW9uYWxBcmdNZXRob2RDYWxsYmFjaywg
djhVbmRlZmluZWQoKSwgdjg6OkxvY2FsPHY4OjpTaWduYXR1cmU+KCkpKTsKQEAgLTQ2MjYsNDMg
KzMxMDQsNDMgQEAgc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBD
b25maWd1cmVWOFRlc3RPYmpUZW1wbGF0ZSh2ODo6UGVyc2kKIAogICAgIC8vIEN1c3RvbSBTaWdu
YXR1cmUgJ3N0cmluZ0FycmF5RnVuY3Rpb24nCiAgICAgY29uc3QgaW50IHN0cmluZ0FycmF5RnVu
Y3Rpb25BcmdjID0gMTsKLSAgICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvblRlbXBsYXRlPiBzdHJp
bmdBcnJheUZ1bmN0aW9uQXJndltzdHJpbmdBcnJheUZ1bmN0aW9uQXJnY10gPSB7IFY4UGVySXNv
bGF0ZURhdGE6OmZyb20oaXNvbGF0ZSktPnJhd1RlbXBsYXRlKCZWOERPTVN0cmluZ1tdOjppbmZv
LCBjdXJyZW50V29ybGRUeXBlKSB9OworICAgIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uVGVtcGxh
dGU+IHN0cmluZ0FycmF5RnVuY3Rpb25Bcmd2W3N0cmluZ0FycmF5RnVuY3Rpb25BcmdjXSA9IHsg
VjhQZXJJc29sYXRlRGF0YTo6ZnJvbShpc29sYXRlKS0+cmF3VGVtcGxhdGUoJlY4RE9NU3RyaW5n
W106OmluZm8sIHdvcmxkVHlwZSkgfTsKICAgICB2ODo6SGFuZGxlPHY4OjpTaWduYXR1cmU+IHN0
cmluZ0FycmF5RnVuY3Rpb25TaWduYXR1cmUgPSB2ODo6U2lnbmF0dXJlOjpOZXcoZGVzYywgc3Ry
aW5nQXJyYXlGdW5jdGlvbkFyZ2MsIHN0cmluZ0FycmF5RnVuY3Rpb25Bcmd2KTsKICAgICBwcm90
by0+U2V0KHY4OjpTdHJpbmc6Ok5ld1N5bWJvbCgic3RyaW5nQXJyYXlGdW5jdGlvbiIpLCB2ODo6
RnVuY3Rpb25UZW1wbGF0ZTo6TmV3KFRlc3RPYmpWOEludGVybmFsOjpzdHJpbmdBcnJheUZ1bmN0
aW9uTWV0aG9kQ2FsbGJhY2ssIHY4VW5kZWZpbmVkKCksIHN0cmluZ0FycmF5RnVuY3Rpb25TaWdu
YXR1cmUpKTsKIAogICAgIC8vIEN1c3RvbSBTaWduYXR1cmUgJ2RvbVN0cmluZ0xpc3RGdW5jdGlv
bicKICAgICBjb25zdCBpbnQgZG9tU3RyaW5nTGlzdEZ1bmN0aW9uQXJnYyA9IDE7Ci0gICAgdjg6
OkhhbmRsZTx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gZG9tU3RyaW5nTGlzdEZ1bmN0aW9uQXJndltk
b21TdHJpbmdMaXN0RnVuY3Rpb25BcmdjXSA9IHsgVjhQZXJJc29sYXRlRGF0YTo6ZnJvbShpc29s
YXRlKS0+cmF3VGVtcGxhdGUoJlY4RE9NU3RyaW5nTGlzdDo6aW5mbywgY3VycmVudFdvcmxkVHlw
ZSkgfTsKKyAgICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvblRlbXBsYXRlPiBkb21TdHJpbmdMaXN0
RnVuY3Rpb25Bcmd2W2RvbVN0cmluZ0xpc3RGdW5jdGlvbkFyZ2NdID0geyBWOFBlcklzb2xhdGVE
YXRhOjpmcm9tKGlzb2xhdGUpLT5yYXdUZW1wbGF0ZSgmVjhET01TdHJpbmdMaXN0OjppbmZvLCB3
b3JsZFR5cGUpIH07CiAgICAgdjg6OkhhbmRsZTx2ODo6U2lnbmF0dXJlPiBkb21TdHJpbmdMaXN0
RnVuY3Rpb25TaWduYXR1cmUgPSB2ODo6U2lnbmF0dXJlOjpOZXcoZGVzYywgZG9tU3RyaW5nTGlz
dEZ1bmN0aW9uQXJnYywgZG9tU3RyaW5nTGlzdEZ1bmN0aW9uQXJndik7CiAgICAgcHJvdG8tPlNl
dCh2ODo6U3RyaW5nOjpOZXdTeW1ib2woImRvbVN0cmluZ0xpc3RGdW5jdGlvbiIpLCB2ODo6RnVu
Y3Rpb25UZW1wbGF0ZTo6TmV3KFRlc3RPYmpWOEludGVybmFsOjpkb21TdHJpbmdMaXN0RnVuY3Rp
b25NZXRob2RDYWxsYmFjaywgdjhVbmRlZmluZWQoKSwgZG9tU3RyaW5nTGlzdEZ1bmN0aW9uU2ln
bmF0dXJlKSk7CiAKICAgICAvLyBDdXN0b20gU2lnbmF0dXJlICdjb252ZXJ0MScKICAgICBjb25z
dCBpbnQgY29udmVydDFBcmdjID0gMTsKLSAgICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvblRlbXBs
YXRlPiBjb252ZXJ0MUFyZ3ZbY29udmVydDFBcmdjXSA9IHsgVjhQZXJJc29sYXRlRGF0YTo6ZnJv
bShpc29sYXRlKS0+cmF3VGVtcGxhdGUoJlY4YTo6aW5mbywgY3VycmVudFdvcmxkVHlwZSkgfTsK
KyAgICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvblRlbXBsYXRlPiBjb252ZXJ0MUFyZ3ZbY29udmVy
dDFBcmdjXSA9IHsgVjhQZXJJc29sYXRlRGF0YTo6ZnJvbShpc29sYXRlKS0+cmF3VGVtcGxhdGUo
JlY4YTo6aW5mbywgd29ybGRUeXBlKSB9OwogICAgIHY4OjpIYW5kbGU8djg6OlNpZ25hdHVyZT4g
Y29udmVydDFTaWduYXR1cmUgPSB2ODo6U2lnbmF0dXJlOjpOZXcoZGVzYywgY29udmVydDFBcmdj
LCBjb252ZXJ0MUFyZ3YpOwogICAgIHByb3RvLT5TZXQodjg6OlN0cmluZzo6TmV3U3ltYm9sKCJj
b252ZXJ0MSIpLCB2ODo6RnVuY3Rpb25UZW1wbGF0ZTo6TmV3KFRlc3RPYmpWOEludGVybmFsOjpj
b252ZXJ0MU1ldGhvZENhbGxiYWNrLCB2OFVuZGVmaW5lZCgpLCBjb252ZXJ0MVNpZ25hdHVyZSkp
OwogCiAgICAgLy8gQ3VzdG9tIFNpZ25hdHVyZSAnY29udmVydDInCiAgICAgY29uc3QgaW50IGNv
bnZlcnQyQXJnYyA9IDE7Ci0gICAgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gY29u
dmVydDJBcmd2W2NvbnZlcnQyQXJnY10gPSB7IFY4UGVySXNvbGF0ZURhdGE6OmZyb20oaXNvbGF0
ZSktPnJhd1RlbXBsYXRlKCZWOGI6OmluZm8sIGN1cnJlbnRXb3JsZFR5cGUpIH07CisgICAgdjg6
OkhhbmRsZTx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gY29udmVydDJBcmd2W2NvbnZlcnQyQXJnY10g
PSB7IFY4UGVySXNvbGF0ZURhdGE6OmZyb20oaXNvbGF0ZSktPnJhd1RlbXBsYXRlKCZWOGI6Omlu
Zm8sIHdvcmxkVHlwZSkgfTsKICAgICB2ODo6SGFuZGxlPHY4OjpTaWduYXR1cmU+IGNvbnZlcnQy
U2lnbmF0dXJlID0gdjg6OlNpZ25hdHVyZTo6TmV3KGRlc2MsIGNvbnZlcnQyQXJnYywgY29udmVy
dDJBcmd2KTsKICAgICBwcm90by0+U2V0KHY4OjpTdHJpbmc6Ok5ld1N5bWJvbCgiY29udmVydDIi
KSwgdjg6OkZ1bmN0aW9uVGVtcGxhdGU6Ok5ldyhUZXN0T2JqVjhJbnRlcm5hbDo6Y29udmVydDJN
ZXRob2RDYWxsYmFjaywgdjhVbmRlZmluZWQoKSwgY29udmVydDJTaWduYXR1cmUpKTsKIAogICAg
IC8vIEN1c3RvbSBTaWduYXR1cmUgJ2NvbnZlcnQ0JwogICAgIGNvbnN0IGludCBjb252ZXJ0NEFy
Z2MgPSAxOwotICAgIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IGNvbnZlcnQ0QXJn
dltjb252ZXJ0NEFyZ2NdID0geyBWOFBlcklzb2xhdGVEYXRhOjpmcm9tKGlzb2xhdGUpLT5yYXdU
ZW1wbGF0ZSgmVjhkOjppbmZvLCBjdXJyZW50V29ybGRUeXBlKSB9OworICAgIHY4OjpIYW5kbGU8
djg6OkZ1bmN0aW9uVGVtcGxhdGU+IGNvbnZlcnQ0QXJndltjb252ZXJ0NEFyZ2NdID0geyBWOFBl
cklzb2xhdGVEYXRhOjpmcm9tKGlzb2xhdGUpLT5yYXdUZW1wbGF0ZSgmVjhkOjppbmZvLCB3b3Js
ZFR5cGUpIH07CiAgICAgdjg6OkhhbmRsZTx2ODo6U2lnbmF0dXJlPiBjb252ZXJ0NFNpZ25hdHVy
ZSA9IHY4OjpTaWduYXR1cmU6Ok5ldyhkZXNjLCBjb252ZXJ0NEFyZ2MsIGNvbnZlcnQ0QXJndik7
CiAgICAgcHJvdG8tPlNldCh2ODo6U3RyaW5nOjpOZXdTeW1ib2woImNvbnZlcnQ0IiksIHY4OjpG
dW5jdGlvblRlbXBsYXRlOjpOZXcoVGVzdE9ialY4SW50ZXJuYWw6OmNvbnZlcnQ0TWV0aG9kQ2Fs
bGJhY2ssIHY4VW5kZWZpbmVkKCksIGNvbnZlcnQ0U2lnbmF0dXJlKSk7CiAKICAgICAvLyBDdXN0
b20gU2lnbmF0dXJlICdjb252ZXJ0NScKICAgICBjb25zdCBpbnQgY29udmVydDVBcmdjID0gMTsK
LSAgICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvblRlbXBsYXRlPiBjb252ZXJ0NUFyZ3ZbY29udmVy
dDVBcmdjXSA9IHsgVjhQZXJJc29sYXRlRGF0YTo6ZnJvbShpc29sYXRlKS0+cmF3VGVtcGxhdGUo
JlY4ZTo6aW5mbywgY3VycmVudFdvcmxkVHlwZSkgfTsKKyAgICB2ODo6SGFuZGxlPHY4OjpGdW5j
dGlvblRlbXBsYXRlPiBjb252ZXJ0NUFyZ3ZbY29udmVydDVBcmdjXSA9IHsgVjhQZXJJc29sYXRl
RGF0YTo6ZnJvbShpc29sYXRlKS0+cmF3VGVtcGxhdGUoJlY4ZTo6aW5mbywgd29ybGRUeXBlKSB9
OwogICAgIHY4OjpIYW5kbGU8djg6OlNpZ25hdHVyZT4gY29udmVydDVTaWduYXR1cmUgPSB2ODo6
U2lnbmF0dXJlOjpOZXcoZGVzYywgY29udmVydDVBcmdjLCBjb252ZXJ0NUFyZ3YpOwogICAgIHBy
b3RvLT5TZXQodjg6OlN0cmluZzo6TmV3U3ltYm9sKCJjb252ZXJ0NSIpLCB2ODo6RnVuY3Rpb25U
ZW1wbGF0ZTo6TmV3KFRlc3RPYmpWOEludGVybmFsOjpjb252ZXJ0NU1ldGhvZENhbGxiYWNrLCB2
OFVuZGVmaW5lZCgpLCBjb252ZXJ0NVNpZ25hdHVyZSkpOwogCiAgICAgLy8gQ3VzdG9tIFNpZ25h
dHVyZSAndmFyaWFkaWNOb2RlTWV0aG9kJwogICAgIGNvbnN0IGludCB2YXJpYWRpY05vZGVNZXRo
b2RBcmdjID0gMjsKLSAgICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvblRlbXBsYXRlPiB2YXJpYWRp
Y05vZGVNZXRob2RBcmd2W3ZhcmlhZGljTm9kZU1ldGhvZEFyZ2NdID0geyBWOFBlcklzb2xhdGVE
YXRhOjpmcm9tKGlzb2xhdGUpLT5yYXdUZW1wbGF0ZSgmVjhOb2RlOjppbmZvLCBjdXJyZW50V29y
bGRUeXBlKSwgVjhQZXJJc29sYXRlRGF0YTo6ZnJvbShpc29sYXRlKS0+cmF3VGVtcGxhdGUoJlY4
Tm9kZTo6aW5mbywgY3VycmVudFdvcmxkVHlwZSkgfTsKKyAgICB2ODo6SGFuZGxlPHY4OjpGdW5j
dGlvblRlbXBsYXRlPiB2YXJpYWRpY05vZGVNZXRob2RBcmd2W3ZhcmlhZGljTm9kZU1ldGhvZEFy
Z2NdID0geyBWOFBlcklzb2xhdGVEYXRhOjpmcm9tKGlzb2xhdGUpLT5yYXdUZW1wbGF0ZSgmVjhO
b2RlOjppbmZvLCB3b3JsZFR5cGUpLCBWOFBlcklzb2xhdGVEYXRhOjpmcm9tKGlzb2xhdGUpLT5y
YXdUZW1wbGF0ZSgmVjhOb2RlOjppbmZvLCB3b3JsZFR5cGUpIH07CiAgICAgdjg6OkhhbmRsZTx2
ODo6U2lnbmF0dXJlPiB2YXJpYWRpY05vZGVNZXRob2RTaWduYXR1cmUgPSB2ODo6U2lnbmF0dXJl
OjpOZXcoZGVzYywgdmFyaWFkaWNOb2RlTWV0aG9kQXJnYywgdmFyaWFkaWNOb2RlTWV0aG9kQXJn
dik7CiAgICAgcHJvdG8tPlNldCh2ODo6U3RyaW5nOjpOZXdTeW1ib2woInZhcmlhZGljTm9kZU1l
dGhvZCIpLCB2ODo6RnVuY3Rpb25UZW1wbGF0ZTo6TmV3KFRlc3RPYmpWOEludGVybmFsOjp2YXJp
YWRpY05vZGVNZXRob2RNZXRob2RDYWxsYmFjaywgdjhVbmRlZmluZWQoKSwgdmFyaWFkaWNOb2Rl
TWV0aG9kU2lnbmF0dXJlKSk7CiAgICAgVjhET01Db25maWd1cmF0aW9uOjpiYXRjaENvbmZpZ3Vy
ZUNvbnN0YW50cyhkZXNjLCBwcm90bywgVjhUZXN0T2JqQ29uc3RzLCBXVEZfQVJSQVlfTEVOR1RI
KFY4VGVzdE9iakNvbnN0cyksIGlzb2xhdGUpOwpAQCAtNDY3MiwyMyArMzE1MCwyMyBAQCBzdGF0
aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IENvbmZpZ3VyZVY4VGVzdE9i
alRlbXBsYXRlKHY4OjpQZXJzaQogICAgIHJldHVybiBkZXNjOwogfQogCi12ODo6UGVyc2lzdGVu
dDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhUZXN0T2JqOjpHZXRUZW1wbGF0ZSh2ODo6SXNvbGF0
ZSogaXNvbGF0ZSwgV3JhcHBlcldvcmxkVHlwZSBjdXJyZW50V29ybGRUeXBlKQordjg6OlBlcnNp
c3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdE9iajo6R2V0VGVtcGxhdGUodjg6Oklz
b2xhdGUqIGlzb2xhdGUsIFdyYXBwZXJXb3JsZFR5cGUgd29ybGRUeXBlKQogewogICAgIFY4UGVy
SXNvbGF0ZURhdGEqIGRhdGEgPSBWOFBlcklzb2xhdGVEYXRhOjpmcm9tKGlzb2xhdGUpOwotICAg
IFY4UGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT50
ZW1wbGF0ZU1hcChjdXJyZW50V29ybGRUeXBlKS5maW5kKCZpbmZvKTsKLSAgICBpZiAocmVzdWx0
ICE9IGRhdGEtPnRlbXBsYXRlTWFwKGN1cnJlbnRXb3JsZFR5cGUpLmVuZCgpKQorICAgIFY4UGVy
SXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT50ZW1wbGF0
ZU1hcCh3b3JsZFR5cGUpLmZpbmQoJmluZm8pOworICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+dGVt
cGxhdGVNYXAod29ybGRUeXBlKS5lbmQoKSkKICAgICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7
CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8
djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0KLSAgICAgICAgQ29uZmlndXJlVjhUZXN0T2Jq
VGVtcGxhdGUoZGF0YS0+cmF3VGVtcGxhdGUoJmluZm8sIGN1cnJlbnRXb3JsZFR5cGUpLCBpc29s
YXRlLCBjdXJyZW50V29ybGRUeXBlKTsKLSAgICBkYXRhLT50ZW1wbGF0ZU1hcChjdXJyZW50V29y
bGRUeXBlKS5hZGQoJmluZm8sIHRlbXBsKTsKKyAgICAgICAgQ29uZmlndXJlVjhUZXN0T2JqVGVt
cGxhdGUoZGF0YS0+cmF3VGVtcGxhdGUoJmluZm8sIHdvcmxkVHlwZSksIGlzb2xhdGUsIHdvcmxk
VHlwZSk7CisgICAgZGF0YS0+dGVtcGxhdGVNYXAod29ybGRUeXBlKS5hZGQoJmluZm8sIHRlbXBs
KTsKICAgICByZXR1cm4gdGVtcGw7CiB9CiAKLWJvb2wgVjhUZXN0T2JqOjpIYXNJbnN0YW5jZSh2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUsIHY4OjpJc29sYXRlKiBpc29sYXRlLCBXcmFwcGVy
V29ybGRUeXBlIGN1cnJlbnRXb3JsZFR5cGUpCitib29sIFY4VGVzdE9iajo6SGFzSW5zdGFuY2Uo
djg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSwgV3JhcHBl
cldvcmxkVHlwZSB3b3JsZFR5cGUpCiB7Ci0gICAgcmV0dXJuIFY4UGVySXNvbGF0ZURhdGE6OmZy
b20oaXNvbGF0ZSktPmhhc0luc3RhbmNlKCZpbmZvLCB2YWx1ZSwgY3VycmVudFdvcmxkVHlwZSk7
CisgICAgcmV0dXJuIFY4UGVySXNvbGF0ZURhdGE6OmZyb20oaXNvbGF0ZSktPmhhc0luc3RhbmNl
KCZpbmZvLCB2YWx1ZSwgd29ybGRUeXBlKTsKIH0KIAogdm9pZCBWOFRlc3RPYmo6Omluc3RhbGxQ
ZXJDb250ZXh0UHJvcGVydGllcyh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGluc3RhbmNlLCBUZXN0
T2JqKiBpbXBsLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouaCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouaAppbmRleCA0YjI0MzllM2VhMmUz
NTAwMGMwNzI2Njg1ZmM2YjRhNmYyZGMzZDI4Li44NzdhYzI1MGM3NGQ0ZTE2OGNkMjEwMzNiZGM0
Mjk3YmE0MDJmMmQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvVjgvVjhUZXN0T2JqLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Y4L1Y4VGVzdE9iai5oCkBAIC03NCwxNyArNzQsNiBAQCBpbmxpbmUgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IHRvVjgoVGVzdE9iaiogaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBj
cmVhdGlvbgogICAgIHJldHVybiB3cmFwKGltcGwsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7
CiB9CiAKLWlubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOEZvck1haW5Xb3JsZChUZXN0
T2JqKiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklz
b2xhdGUqIGlzb2xhdGUpCi17Ci0gICAgQVNTRVJUKHdvcmxkVHlwZShpc29sYXRlKSA9PSBNYWlu
V29ybGQpOwotICAgIGlmIChVTkxJS0VMWSghaW1wbCkpCi0gICAgICAgIHJldHVybiB2OE51bGxX
aXRoQ2hlY2soaXNvbGF0ZSk7Ci0gICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdyYXBwZXIgPSBE
T01EYXRhU3RvcmU6OmdldFdyYXBwZXJGb3JNYWluV29ybGQoaW1wbCk7Ci0gICAgaWYgKCF3cmFw
cGVyLklzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHdyYXBwZXI7Ci0gICAgcmV0dXJuIHdyYXAo
aW1wbCwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKLX0KLQogdGVtcGxhdGU8Y2xhc3MgSG9s
ZGVyQ29udGFpbmVyLCBjbGFzcyBXcmFwcGFibGU+CiBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IHRvVjhGYXN0KFRlc3RPYmoqIGltcGwsIGNvbnN0IEhvbGRlckNvbnRhaW5lciYgY29udGFp
bmVyLCBXcmFwcGFibGUqIHdyYXBwYWJsZSkKIHsKQEAgLTk3LDI1ICs4Niw2IEBAIGlubGluZSB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOEZhc3QoVGVzdE9iaiogaW1wbCwgY29uc3QgSG9sZGVy
Q29udGFpbmVyJiBjb250CiB9CiAKIHRlbXBsYXRlPGNsYXNzIEhvbGRlckNvbnRhaW5lciwgY2xh
c3MgV3JhcHBhYmxlPgotaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4RmFzdEZvck1h
aW5Xb3JsZChUZXN0T2JqKiBpbXBsLCBjb25zdCBIb2xkZXJDb250YWluZXImIGNvbnRhaW5lciwg
V3JhcHBhYmxlKiB3cmFwcGFibGUpCi17Ci0gICAgQVNTRVJUKHdvcmxkVHlwZShjb250YWluZXIu
R2V0SXNvbGF0ZSgpKSA9PSBNYWluV29ybGQpOwotICAgIGlmIChVTkxJS0VMWSghaW1wbCkpCi0g
ICAgICAgIHJldHVybiB2OE51bGwoY29udGFpbmVyLkdldElzb2xhdGUoKSk7Ci0gICAgdjg6Okhh
bmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gRE9NRGF0YVN0b3JlOjpnZXRXcmFwcGVyRm9yTWFp
bldvcmxkKGltcGwpOwotICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkpCi0gICAgICAgIHJldHVy
biB3cmFwcGVyOwotICAgIHJldHVybiB3cmFwKGltcGwsIGNvbnRhaW5lci5Ib2xkZXIoKSwgY29u
dGFpbmVyLkdldElzb2xhdGUoKSk7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIEhvbGRlckNvbnRhaW5l
ciwgY2xhc3MgV3JhcHBhYmxlPgotaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4RmFz
dEZvck1haW5Xb3JsZChQYXNzUmVmUHRyPCBUZXN0T2JqID4gaW1wbCwgY29uc3QgSG9sZGVyQ29u
dGFpbmVyJiBjb250YWluZXIsIFdyYXBwYWJsZSogd3JhcHBhYmxlKQotewotICAgIHJldHVybiB0
b1Y4RmFzdEZvck1haW5Xb3JsZChpbXBsLmdldCgpLCBjb250YWluZXIsIHdyYXBwYWJsZSk7Ci19
Ci0KLQotdGVtcGxhdGU8Y2xhc3MgSG9sZGVyQ29udGFpbmVyLCBjbGFzcyBXcmFwcGFibGU+CiBp
bmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjhGYXN0KFBhc3NSZWZQdHI8IFRlc3RPYmog
PiBpbXBsLCBjb25zdCBIb2xkZXJDb250YWluZXImIGNvbnRhaW5lciwgV3JhcHBhYmxlKiB3cmFw
cGFibGUpCiB7CiAgICAgcmV0dXJuIHRvVjhGYXN0KGltcGwuZ2V0KCksIGNvbnRhaW5lciwgd3Jh
cHBhYmxlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9WOC9WOFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmNwcApp
bmRleCAyMDZkYzM5YmUwY2EyYWVlM2Q1NGMxMTZiODk1NWJiYmY3YjRmNGIwLi5lM2IzZTQxMGYw
OTgzZjk1NzhjZDE5MjA4YmUwNDA1YTQ4YWNkMTY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE92
ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuY3BwCkBAIC0xNDcsNyArMTQ3LDcgQEAgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IFY4VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM6OmNvbnN0cnVjdG9yQ2FsbGJh
Y2soY29uc3QgdjgKICAgICByZXR1cm4gVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNWOEludGVy
bmFsOjpjb25zdHJ1Y3RvcihhcmdzKTsKIH0KIAotc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpG
dW5jdGlvblRlbXBsYXRlPiBDb25maWd1cmVWOFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzVGVt
cGxhdGUodjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IGRlc2MsIHY4OjpJc29s
YXRlKiBpc29sYXRlLCBXcmFwcGVyV29ybGRUeXBlIGN1cnJlbnRXb3JsZFR5cGUpCitzdGF0aWMg
djg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IENvbmZpZ3VyZVY4VGVzdE92ZXJs
b2FkZWRDb25zdHJ1Y3RvcnNUZW1wbGF0ZSh2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1w
bGF0ZT4gZGVzYywgdjg6Oklzb2xhdGUqIGlzb2xhdGUsIFdyYXBwZXJXb3JsZFR5cGUgd29ybGRU
eXBlKQogewogICAgIGRlc2MtPlJlYWRPbmx5UHJvdG90eXBlKCk7CiAKQEAgLTE1OSwzMSArMTU5
LDI4IEBAIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gQ29uZmln
dXJlVjhUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yCiAgICAgZGVzYy0+U2V0Q2FsbEhhbmRsZXIo
VjhUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczo6Y29uc3RydWN0b3JDYWxsYmFjayk7CiAgICAg
CiAKLSAgICBpZiAoY3VycmVudFdvcmxkVHlwZSA9PSBNYWluV29ybGQpCi0gICAgICAgIFY4RE9N
Q29uZmlndXJhdGlvbjo6YWRkVG9UZW1wbGF0ZShkZXNjLCAwLCAwLCAwLCAwLCBpc29sYXRlLCBk
ZWZhdWx0U2lnbmF0dXJlKTsKLQogICAgIC8vIEN1c3RvbSB0b1N0cmluZyB0ZW1wbGF0ZQogICAg
IGRlc2MtPlNldCh2ODo6U3RyaW5nOjpOZXdTeW1ib2woInRvU3RyaW5nIiksIFY4UGVySXNvbGF0
ZURhdGE6OmN1cnJlbnQoKS0+dG9TdHJpbmdUZW1wbGF0ZSgpKTsKICAgICByZXR1cm4gZGVzYzsK
IH0KIAotdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdE92ZXJsb2Fk
ZWRDb25zdHJ1Y3RvcnM6OkdldFRlbXBsYXRlKHY4OjpJc29sYXRlKiBpc29sYXRlLCBXcmFwcGVy
V29ybGRUeXBlIGN1cnJlbnRXb3JsZFR5cGUpCit2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25U
ZW1wbGF0ZT4gVjhUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczo6R2V0VGVtcGxhdGUodjg6Oklz
b2xhdGUqIGlzb2xhdGUsIFdyYXBwZXJXb3JsZFR5cGUgd29ybGRUeXBlKQogewogICAgIFY4UGVy
SXNvbGF0ZURhdGEqIGRhdGEgPSBWOFBlcklzb2xhdGVEYXRhOjpmcm9tKGlzb2xhdGUpOwotICAg
IFY4UGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT50
ZW1wbGF0ZU1hcChjdXJyZW50V29ybGRUeXBlKS5maW5kKCZpbmZvKTsKLSAgICBpZiAocmVzdWx0
ICE9IGRhdGEtPnRlbXBsYXRlTWFwKGN1cnJlbnRXb3JsZFR5cGUpLmVuZCgpKQorICAgIFY4UGVy
SXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT50ZW1wbGF0
ZU1hcCh3b3JsZFR5cGUpLmZpbmQoJmluZm8pOworICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+dGVt
cGxhdGVNYXAod29ybGRUeXBlKS5lbmQoKSkKICAgICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7
CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8
djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0KLSAgICAgICAgQ29uZmlndXJlVjhUZXN0T3Zl
cmxvYWRlZENvbnN0cnVjdG9yc1RlbXBsYXRlKGRhdGEtPnJhd1RlbXBsYXRlKCZpbmZvLCBjdXJy
ZW50V29ybGRUeXBlKSwgaXNvbGF0ZSwgY3VycmVudFdvcmxkVHlwZSk7Ci0gICAgZGF0YS0+dGVt
cGxhdGVNYXAoY3VycmVudFdvcmxkVHlwZSkuYWRkKCZpbmZvLCB0ZW1wbCk7CisgICAgICAgIENv
bmZpZ3VyZVY4VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNUZW1wbGF0ZShkYXRhLT5yYXdUZW1w
bGF0ZSgmaW5mbywgd29ybGRUeXBlKSwgaXNvbGF0ZSwgd29ybGRUeXBlKTsKKyAgICBkYXRhLT50
ZW1wbGF0ZU1hcCh3b3JsZFR5cGUpLmFkZCgmaW5mbywgdGVtcGwpOwogICAgIHJldHVybiB0ZW1w
bDsKIH0KIAotYm9vbCBWOFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzOjpIYXNJbnN0YW5jZSh2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUsIHY4OjpJc29sYXRlKiBpc29sYXRlLCBXcmFwcGVy
V29ybGRUeXBlIGN1cnJlbnRXb3JsZFR5cGUpCitib29sIFY4VGVzdE92ZXJsb2FkZWRDb25zdHJ1
Y3RvcnM6Okhhc0luc3RhbmNlKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSwgdjg6Oklzb2xh
dGUqIGlzb2xhdGUsIFdyYXBwZXJXb3JsZFR5cGUgd29ybGRUeXBlKQogewotICAgIHJldHVybiBW
OFBlcklzb2xhdGVEYXRhOjpmcm9tKGlzb2xhdGUpLT5oYXNJbnN0YW5jZSgmaW5mbywgdmFsdWUs
IGN1cnJlbnRXb3JsZFR5cGUpOworICAgIHJldHVybiBWOFBlcklzb2xhdGVEYXRhOjpmcm9tKGlz
b2xhdGUpLT5oYXNJbnN0YW5jZSgmaW5mbywgdmFsdWUsIHdvcmxkVHlwZSk7CiB9CiAKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE92
ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9WOC9WOFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmgKaW5kZXggNjY3ODE2NzVjNTY4
OTNiZTM4YWEzN2YyMDJkNGFjZWI5ZTc3ZWQ2Ny4uMzA4Njg5YjM0OGYzNGFhMWNhZDVjM2E1OWU5
ODUyNDFhYjNiOWM0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Y4L1Y4VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9y
cy5oCkBAIC02OSwxNyArNjksNiBAQCBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgo
VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMqIGltcGwsIHY4OjpIYW5kbGU8dgogICAgIHJldHVy
biB3cmFwKGltcGwsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiB9CiAKLWlubGluZSB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOEZvck1haW5Xb3JsZChUZXN0T3ZlcmxvYWRlZENvbnN0cnVj
dG9ycyogaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJ
c29sYXRlKiBpc29sYXRlKQotewotICAgIEFTU0VSVCh3b3JsZFR5cGUoaXNvbGF0ZSkgPT0gTWFp
bldvcmxkKTsKLSAgICBpZiAoVU5MSUtFTFkoIWltcGwpKQotICAgICAgICByZXR1cm4gdjhOdWxs
V2l0aENoZWNrKGlzb2xhdGUpOwotICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB3cmFwcGVyID0g
RE9NRGF0YVN0b3JlOjpnZXRXcmFwcGVyRm9yTWFpbldvcmxkKGltcGwpOwotICAgIGlmICghd3Jh
cHBlci5Jc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiB3cmFwcGVyOwotICAgIHJldHVybiB3cmFw
KGltcGwsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7Ci19Ci0KIHRlbXBsYXRlPGNsYXNzIEhv
bGRlckNvbnRhaW5lciwgY2xhc3MgV3JhcHBhYmxlPgogaW5saW5lIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiB0b1Y4RmFzdChUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyogaW1wbCwgY29uc3QgSG9s
ZGVyQ29udGFpbmVyJiBjb250YWluZXIsIFdyYXBwYWJsZSogd3JhcHBhYmxlKQogewpAQCAtOTIs
MjUgKzgxLDYgQEAgaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4RmFzdChUZXN0T3Zl
cmxvYWRlZENvbnN0cnVjdG9ycyogaW1wbCwgY29uc3QgSG8KIH0KIAogdGVtcGxhdGU8Y2xhc3Mg
SG9sZGVyQ29udGFpbmVyLCBjbGFzcyBXcmFwcGFibGU+Ci1pbmxpbmUgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IHRvVjhGYXN0Rm9yTWFpbldvcmxkKFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzKiBp
bXBsLCBjb25zdCBIb2xkZXJDb250YWluZXImIGNvbnRhaW5lciwgV3JhcHBhYmxlKiB3cmFwcGFi
bGUpCi17Ci0gICAgQVNTRVJUKHdvcmxkVHlwZShjb250YWluZXIuR2V0SXNvbGF0ZSgpKSA9PSBN
YWluV29ybGQpOwotICAgIGlmIChVTkxJS0VMWSghaW1wbCkpCi0gICAgICAgIHJldHVybiB2OE51
bGwoY29udGFpbmVyLkdldElzb2xhdGUoKSk7Ci0gICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3
cmFwcGVyID0gRE9NRGF0YVN0b3JlOjpnZXRXcmFwcGVyRm9yTWFpbldvcmxkKGltcGwpOwotICAg
IGlmICghd3JhcHBlci5Jc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiB3cmFwcGVyOwotICAgIHJl
dHVybiB3cmFwKGltcGwsIGNvbnRhaW5lci5Ib2xkZXIoKSwgY29udGFpbmVyLkdldElzb2xhdGUo
KSk7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIEhvbGRlckNvbnRhaW5lciwgY2xhc3MgV3JhcHBhYmxl
PgotaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4RmFzdEZvck1haW5Xb3JsZChQYXNz
UmVmUHRyPCBUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyA+IGltcGwsIGNvbnN0IEhvbGRlckNv
bnRhaW5lciYgY29udGFpbmVyLCBXcmFwcGFibGUqIHdyYXBwYWJsZSkKLXsKLSAgICByZXR1cm4g
dG9WOEZhc3RGb3JNYWluV29ybGQoaW1wbC5nZXQoKSwgY29udGFpbmVyLCB3cmFwcGFibGUpOwot
fQotCi0KLXRlbXBsYXRlPGNsYXNzIEhvbGRlckNvbnRhaW5lciwgY2xhc3MgV3JhcHBhYmxlPgog
aW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4RmFzdChQYXNzUmVmUHRyPCBUZXN0T3Zl
cmxvYWRlZENvbnN0cnVjdG9ycyA+IGltcGwsIGNvbnN0IEhvbGRlckNvbnRhaW5lciYgY29udGFp
bmVyLCBXcmFwcGFibGUqIHdyYXBwYWJsZSkKIHsKICAgICByZXR1cm4gdG9WOEZhc3QoaW1wbC5n
ZXQoKSwgY29udGFpbmVyLCB3cmFwcGFibGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcAppbmRleCAzMGY4MDE2ZTE5MDBlNzYz
YjU2Y2E3OTY2Y2IxNzgyMGYwZTViNTgxLi44ZTVjN2M0NWZkOTVkY2Q1NTA3Yzk1NWFlYmM3YmI2
N2NhMDY3N2IyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvVjgvVjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlLmNwcApAQCAtODYsMTcgKzg2LDYgQEAgc3RhdGljIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiB2YWx1ZUF0dHJHZXR0ZXJDYWxsYmFjayh2ODo6TG9jYWw8djg6OlN0cmluZz4g
bmFtZSwKICAgICByZXR1cm4gVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVY4SW50
ZXJuYWw6OnZhbHVlQXR0ckdldHRlcihuYW1lLCBpbmZvKTsKIH0KIAotc3RhdGljIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiB2YWx1ZUF0dHJHZXR0ZXJGb3JNYWluV29ybGQodjg6OkxvY2FsPHY4OjpT
dHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCi17Ci0gICAgVGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogaW1wID0gVjhUZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKLSAgICByZXR1cm4gaW1w
LT52YWx1ZSgpID8gaW1wLT52YWx1ZSgpLT5kZXNlcmlhbGl6ZSgpIDogdjg6OkhhbmRsZTx2ODo6
VmFsdWU+KHY4TnVsbChpbmZvLkdldElzb2xhdGUoKSkpOwotfQotCi1zdGF0aWMgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IHZhbHVlQXR0ckdldHRlckNhbGxiYWNrRm9yTWFpbldvcmxkKHY4OjpMb2Nh
bDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQotewotICAg
IHJldHVybiBUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlVjhJbnRlcm5hbDo6dmFs
dWVBdHRyR2V0dGVyRm9yTWFpbldvcmxkKG5hbWUsIGluZm8pOwotfQotCiBzdGF0aWMgdm9pZCB2
YWx1ZUF0dHJTZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6
VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQogewogICAgIFRlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIGltcCA9IFY4VGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZTo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7CkBAIC0xMTAsMTkgKzk5
LDYgQEAgc3RhdGljIHZvaWQgdmFsdWVBdHRyU2V0dGVyQ2FsbGJhY2sodjg6OkxvY2FsPHY4OjpT
dHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmEKICAgICBUZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlVjhJbnRlcm5hbDo6dmFsdWVBdHRyU2V0dGVyKG5hbWUsIHZhbHVlLCBpbmZv
KTsKIH0KIAotc3RhdGljIHZvaWQgdmFsdWVBdHRyU2V0dGVyRm9yTWFpbldvcmxkKHY4OjpMb2Nh
bDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6
OkFjY2Vzc29ySW5mbyYgaW5mbykKLXsKLSAgICBUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlKiBpbXAgPSBWOFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OnRvTmF0
aXZlKGluZm8uSG9sZGVyKCkpOwotICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHYg
PSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZSh2YWx1ZSwgaW5mby5HZXRJc29sYXRlKCkp
OwotICAgIGltcC0+c2V0VmFsdWUoV1RGOjpnZXRQdHIodikpOwotICAgIHJldHVybjsKLX0KLQot
c3RhdGljIHZvaWQgdmFsdWVBdHRyU2V0dGVyQ2FsbGJhY2tGb3JNYWluV29ybGQodjg6OkxvY2Fs
PHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6
QWNjZXNzb3JJbmZvJiBpbmZvKQotewotICAgIFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2VWOEludGVybmFsOjp2YWx1ZUF0dHJTZXR0ZXJGb3JNYWluV29ybGQobmFtZSwgdmFsdWUs
IGluZm8pOwotfQotCiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHJlYWRvbmx5VmFsdWVB
dHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJ
bmZvJiBpbmZvKQogewogICAgIFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIGlt
cCA9IFY4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6dG9OYXRpdmUoaW5mby5I
b2xkZXIoKSk7CkBAIC0xMzQsMTcgKzExMCw2IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gcmVhZG9ubHlWYWx1ZUF0dHJHZXR0ZXJDYWxsYmFjayh2ODo6TG9jYWw8djg6OlN0cmluCiAg
ICAgcmV0dXJuIFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VWOEludGVybmFsOjpy
ZWFkb25seVZhbHVlQXR0ckdldHRlcihuYW1lLCBpbmZvKTsKIH0KIAotc3RhdGljIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiByZWFkb25seVZhbHVlQXR0ckdldHRlckZvck1haW5Xb3JsZCh2ODo6TG9j
YWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKLXsKLSAg
ICBUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBpbXAgPSBWOFRlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwotICAgIHJl
dHVybiBpbXAtPnJlYWRvbmx5VmFsdWUoKSA/IGltcC0+cmVhZG9ubHlWYWx1ZSgpLT5kZXNlcmlh
bGl6ZSgpIDogdjg6OkhhbmRsZTx2ODo6VmFsdWU+KHY4TnVsbChpbmZvLkdldElzb2xhdGUoKSkp
OwotfQotCi1zdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHJlYWRvbmx5VmFsdWVBdHRyR2V0
dGVyQ2FsbGJhY2tGb3JNYWluV29ybGQodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0
IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCi17Ci0gICAgcmV0dXJuIFRlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2VWOEludGVybmFsOjpyZWFkb25seVZhbHVlQXR0ckdldHRlckZvck1h
aW5Xb3JsZChuYW1lLCBpbmZvKTsKLX0KLQogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBj
YWNoZWRWYWx1ZUF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4
OjpBY2Nlc3NvckluZm8mIGluZm8pCiB7CiAgICAgdjg6OkhhbmRsZTx2ODo6U3RyaW5nPiBwcm9w
ZXJ0eU5hbWUgPSB2ODo6U3RyaW5nOjpOZXdTeW1ib2woImNhY2hlZFZhbHVlIik7CkBAIC0xNjMs
MjQgKzEyOCw2IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY2FjaGVkVmFsdWVBdHRy
R2V0dGVyQ2FsbGJhY2sodjg6OkxvY2FsPHY4OjpTdHJpbmc+CiAgICAgcmV0dXJuIFRlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VWOEludGVybmFsOjpjYWNoZWRWYWx1ZUF0dHJHZXR0
ZXIobmFtZSwgaW5mbyk7CiB9CiAKLXN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY2FjaGVk
VmFsdWVBdHRyR2V0dGVyRm9yTWFpbldvcmxkKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBj
b25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQotewotICAgIHY4OjpIYW5kbGU8djg6OlN0cmlu
Zz4gcHJvcGVydHlOYW1lID0gdjg6OlN0cmluZzo6TmV3U3ltYm9sKCJjYWNoZWRWYWx1ZSIpOwot
ICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSA9IGluZm8uSG9sZGVyKCktPkdldEhpZGRl
blZhbHVlKHByb3BlcnR5TmFtZSk7Ci0gICAgaWYgKCF2YWx1ZS5Jc0VtcHR5KCkpCi0gICAgICAg
IHJldHVybiB2YWx1ZTsKLSAgICBUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBp
bXAgPSBWOFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OnRvTmF0aXZlKGluZm8u
SG9sZGVyKCkpOwotICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6ZWQg
PSBpbXAtPmNhY2hlZFZhbHVlKCk7Ci0gICAgdmFsdWUgPSBzZXJpYWxpemVkID8gc2VyaWFsaXpl
ZC0+ZGVzZXJpYWxpemUoKSA6IHY4OjpIYW5kbGU8djg6OlZhbHVlPih2OE51bGwoaW5mby5HZXRJ
c29sYXRlKCkpKTsKLSAgICBpbmZvLkhvbGRlcigpLT5TZXRIaWRkZW5WYWx1ZShwcm9wZXJ0eU5h
bWUsIHZhbHVlKTsKLSAgICByZXR1cm4gdmFsdWU7Ci19Ci0KLXN0YXRpYyB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gY2FjaGVkVmFsdWVBdHRyR2V0dGVyQ2FsbGJhY2tGb3JNYWluV29ybGQodjg6Okxv
Y2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCi17Ci0g
ICAgcmV0dXJuIFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VWOEludGVybmFsOjpj
YWNoZWRWYWx1ZUF0dHJHZXR0ZXJGb3JNYWluV29ybGQobmFtZSwgaW5mbyk7Ci19Ci0KIHN0YXRp
YyB2b2lkIGNhY2hlZFZhbHVlQXR0clNldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwg
djg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8p
CiB7CiAgICAgVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogaW1wID0gVjhUZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsK
QEAgLTE5NSwyMCArMTQyLDYgQEAgc3RhdGljIHZvaWQgY2FjaGVkVmFsdWVBdHRyU2V0dGVyQ2Fs
bGJhY2sodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDwKICAgICBUZXN0U2Vy
aWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlVjhJbnRlcm5hbDo6Y2FjaGVkVmFsdWVBdHRyU2V0
dGVyKG5hbWUsIHZhbHVlLCBpbmZvKTsKIH0KIAotc3RhdGljIHZvaWQgY2FjaGVkVmFsdWVBdHRy
U2V0dGVyRm9yTWFpbldvcmxkKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8
djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKLXsKLSAgICBU
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBpbXAgPSBWOFRlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2U6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwotICAgIFJlZlB0
cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHYgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0
ZSh2YWx1ZSwgaW5mby5HZXRJc29sYXRlKCkpOwotICAgIGltcC0+c2V0Q2FjaGVkVmFsdWUoV1RG
OjpnZXRQdHIodikpOwotICAgIGluZm8uSG9sZGVyKCktPkRlbGV0ZUhpZGRlblZhbHVlKHY4OjpT
dHJpbmc6Ok5ld1N5bWJvbCgiY2FjaGVkVmFsdWUiKSk7IC8vIEludmFsaWRhdGUgdGhlIGNhY2hl
ZCB2YWx1ZS4KLSAgICByZXR1cm47Ci19Ci0KLXN0YXRpYyB2b2lkIGNhY2hlZFZhbHVlQXR0clNl
dHRlckNhbGxiYWNrRm9yTWFpbldvcmxkKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6
TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKLXsK
LSAgICBUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlVjhJbnRlcm5hbDo6Y2FjaGVk
VmFsdWVBdHRyU2V0dGVyRm9yTWFpbldvcmxkKG5hbWUsIHZhbHVlLCBpbmZvKTsKLX0KLQogc3Rh
dGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBwb3J0c0F0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpT
dHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCiB7CiAgICAgVGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogaW1wID0gVjhUZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKQEAgLTIyNywyNCArMTYw
LDYgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBwb3J0c0F0dHJHZXR0ZXJDYWxsYmFj
ayh2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwKICAgICByZXR1cm4gVGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZVY4SW50ZXJuYWw6OnBvcnRzQXR0ckdldHRlcihuYW1lLCBpbmZv
KTsKIH0KIAotc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBwb3J0c0F0dHJHZXR0ZXJGb3JN
YWluV29ybGQodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3Nvcklu
Zm8mIGluZm8pCi17Ci0gICAgVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogaW1w
ID0gVjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjp0b05hdGl2ZShpbmZvLkhv
bGRlcigpKTsKLSAgICBNZXNzYWdlUG9ydEFycmF5KiBwb3J0cyA9IGltcC0+cG9ydHMoKTsKLSAg
ICBpZiAoIXBvcnRzKQotICAgICAgICByZXR1cm4gdjg6OkFycmF5OjpOZXcoMCk7Ci0gICAgTWVz
c2FnZVBvcnRBcnJheSBwb3J0c0NvcHkoKnBvcnRzKTsKLSAgICB2ODo6TG9jYWw8djg6OkFycmF5
PiBwb3J0QXJyYXkgPSB2ODo6QXJyYXk6Ok5ldyhwb3J0c0NvcHkuc2l6ZSgpKTsKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHBvcnRzQ29weS5zaXplKCk7ICsraSkKLSAgICAgICAgcG9ydEFy
cmF5LT5TZXQodjhJbnRlZ2VyKGksIGluZm8uR2V0SXNvbGF0ZSgpKSwgdG9WOEZhc3RGb3JNYWlu
V29ybGQocG9ydHNDb3B5W2ldLmdldCgpLCBpbmZvLCBpbXApKTsKLSAgICByZXR1cm4gcG9ydEFy
cmF5OwotfQotCi1zdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHBvcnRzQXR0ckdldHRlckNh
bGxiYWNrRm9yTWFpbldvcmxkKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6
QWNjZXNzb3JJbmZvJiBpbmZvKQotewotICAgIHJldHVybiBUZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlVjhJbnRlcm5hbDo6cG9ydHNBdHRyR2V0dGVyRm9yTWFpbldvcmxkKG5hbWUs
IGluZm8pOwotfQotCiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNhY2hlZFJlYWRvbmx5
VmFsdWVBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNj
ZXNzb3JJbmZvJiBpbmZvKQogewogICAgIHY4OjpIYW5kbGU8djg6OlN0cmluZz4gcHJvcGVydHlO
YW1lID0gdjg6OlN0cmluZzo6TmV3U3ltYm9sKCJjYWNoZWRSZWFkb25seVZhbHVlIik7CkBAIC0y
NjMsMjQgKzE3OCw2IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY2FjaGVkUmVhZG9u
bHlWYWx1ZUF0dHJHZXR0ZXJDYWxsYmFjayh2ODo6TG9jYWw8djg6CiAgICAgcmV0dXJuIFRlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VWOEludGVybmFsOjpjYWNoZWRSZWFkb25seVZh
bHVlQXR0ckdldHRlcihuYW1lLCBpbmZvKTsKIH0KIAotc3RhdGljIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiBjYWNoZWRSZWFkb25seVZhbHVlQXR0ckdldHRlckZvck1haW5Xb3JsZCh2ODo6TG9jYWw8
djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKLXsKLSAgICB2
ODo6SGFuZGxlPHY4OjpTdHJpbmc+IHByb3BlcnR5TmFtZSA9IHY4OjpTdHJpbmc6Ok5ld1N5bWJv
bCgiY2FjaGVkUmVhZG9ubHlWYWx1ZSIpOwotICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1
ZSA9IGluZm8uSG9sZGVyKCktPkdldEhpZGRlblZhbHVlKHByb3BlcnR5TmFtZSk7Ci0gICAgaWYg
KCF2YWx1ZS5Jc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICBUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBpbXAgPSBWOFRlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2U6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwotICAgIFJlZlB0cjxTZXJpYWxp
emVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6ZWQgPSBpbXAtPmNhY2hlZFJlYWRvbmx5VmFsdWUoKTsK
LSAgICB2YWx1ZSA9IHNlcmlhbGl6ZWQgPyBzZXJpYWxpemVkLT5kZXNlcmlhbGl6ZSgpIDogdjg6
OkhhbmRsZTx2ODo6VmFsdWU+KHY4TnVsbChpbmZvLkdldElzb2xhdGUoKSkpOwotICAgIGluZm8u
SG9sZGVyKCktPlNldEhpZGRlblZhbHVlKHByb3BlcnR5TmFtZSwgdmFsdWUpOwotICAgIHJldHVy
biB2YWx1ZTsKLX0KLQotc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjYWNoZWRSZWFkb25s
eVZhbHVlQXR0ckdldHRlckNhbGxiYWNrRm9yTWFpbldvcmxkKHY4OjpMb2NhbDx2ODo6U3RyaW5n
PiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQotewotICAgIHJldHVybiBUZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlVjhJbnRlcm5hbDo6Y2FjaGVkUmVhZG9ubHlW
YWx1ZUF0dHJHZXR0ZXJGb3JNYWluV29ybGQobmFtZSwgaW5mbyk7Ci19Ci0KIHN0YXRpYyB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gYWNjZXB0VHJhbnNmZXJMaXN0TWV0aG9kKGNvbnN0IHY4OjpBcmd1
bWVudHMmIGFyZ3MpCiB7CiAgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPCAxKQpAQCAtMzk1LDE5ICsy
OTIsNiBAQCBzdGF0aWMgY29uc3QgVjhET01Db25maWd1cmF0aW9uOjpCYXRjaGVkQXR0cmlidXRl
IFY4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludAogICAgIHsiY2FjaGVkUmVhZG9ubHlWYWx1
ZSIsIFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VWOEludGVybmFsOjpjYWNoZWRS
ZWFkb25seVZhbHVlQXR0ckdldHRlckNhbGxiYWNrLCAwLCAwIC8qIG5vIGRhdGEgKi8sIHN0YXRp
Y19jYXN0PHY4OjpBY2Nlc3NDb250cm9sPih2ODo6REVGQVVMVCksIHN0YXRpY19jYXN0PHY4OjpQ
cm9wZXJ0eUF0dHJpYnV0ZT4odjg6Ok5vbmUpLCAwIC8qIG9uIGluc3RhbmNlICovfSwKIH07CiAK
LXN0YXRpYyBjb25zdCBWOERPTUNvbmZpZ3VyYXRpb246OkJhdGNoZWRBdHRyaWJ1dGUgVjhUZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQXR0cnNGb3JNYWluV29ybGRbXSA9IHsKLSAg
ICAvLyBBdHRyaWJ1dGUgJ3ZhbHVlJyAoVHlwZTogJ2F0dHJpYnV0ZScgRXh0QXR0cjogJycpCi0g
ICAgeyJ2YWx1ZSIsIFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VWOEludGVybmFs
Ojp2YWx1ZUF0dHJHZXR0ZXJDYWxsYmFja0Zvck1haW5Xb3JsZCwgVGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZVY4SW50ZXJuYWw6OnZhbHVlQXR0clNldHRlckNhbGxiYWNrRm9yTWFp
bldvcmxkLCAwIC8qIG5vIGRhdGEgKi8sIHN0YXRpY19jYXN0PHY4OjpBY2Nlc3NDb250cm9sPih2
ODo6REVGQVVMVCksIHN0YXRpY19jYXN0PHY4OjpQcm9wZXJ0eUF0dHJpYnV0ZT4odjg6Ok5vbmUp
LCAwIC8qIG9uIGluc3RhbmNlICovfSwKLSAgICAvLyBBdHRyaWJ1dGUgJ3JlYWRvbmx5VmFsdWUn
IChUeXBlOiAncmVhZG9ubHkgYXR0cmlidXRlJyBFeHRBdHRyOiAnJykKLSAgICB7InJlYWRvbmx5
VmFsdWUiLCBUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlVjhJbnRlcm5hbDo6cmVh
ZG9ubHlWYWx1ZUF0dHJHZXR0ZXJDYWxsYmFja0Zvck1haW5Xb3JsZCwgMCwgMCAvKiBubyBkYXRh
ICovLCBzdGF0aWNfY2FzdDx2ODo6QWNjZXNzQ29udHJvbD4odjg6OkRFRkFVTFQpLCBzdGF0aWNf
Y2FzdDx2ODo6UHJvcGVydHlBdHRyaWJ1dGU+KHY4OjpOb25lKSwgMCAvKiBvbiBpbnN0YW5jZSAq
L30sCi0gICAgLy8gQXR0cmlidXRlICdjYWNoZWRWYWx1ZScgKFR5cGU6ICdhdHRyaWJ1dGUnIEV4
dEF0dHI6ICdDYWNoZWRBdHRyaWJ1dGUnKQotICAgIHsiY2FjaGVkVmFsdWUiLCBUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlVjhJbnRlcm5hbDo6Y2FjaGVkVmFsdWVBdHRyR2V0dGVy
Q2FsbGJhY2tGb3JNYWluV29ybGQsIFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VW
OEludGVybmFsOjpjYWNoZWRWYWx1ZUF0dHJTZXR0ZXJDYWxsYmFja0Zvck1haW5Xb3JsZCwgMCAv
KiBubyBkYXRhICovLCBzdGF0aWNfY2FzdDx2ODo6QWNjZXNzQ29udHJvbD4odjg6OkRFRkFVTFQp
LCBzdGF0aWNfY2FzdDx2ODo6UHJvcGVydHlBdHRyaWJ1dGU+KHY4OjpOb25lKSwgMCAvKiBvbiBp
bnN0YW5jZSAqL30sCi0gICAgLy8gQXR0cmlidXRlICdwb3J0cycgKFR5cGU6ICdyZWFkb25seSBh
dHRyaWJ1dGUnIEV4dEF0dHI6ICcnKQotICAgIHsicG9ydHMiLCBUZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlVjhJbnRlcm5hbDo6cG9ydHNBdHRyR2V0dGVyQ2FsbGJhY2tGb3JNYWlu
V29ybGQsIDAsIDAgLyogbm8gZGF0YSAqLywgc3RhdGljX2Nhc3Q8djg6OkFjY2Vzc0NvbnRyb2w+
KHY4OjpERUZBVUxUKSwgc3RhdGljX2Nhc3Q8djg6OlByb3BlcnR5QXR0cmlidXRlPih2ODo6Tm9u
ZSksIDAgLyogb24gaW5zdGFuY2UgKi99LAotICAgIC8vIEF0dHJpYnV0ZSAnY2FjaGVkUmVhZG9u
bHlWYWx1ZScgKFR5cGU6ICdyZWFkb25seSBhdHRyaWJ1dGUnIEV4dEF0dHI6ICdDYWNoZWRBdHRy
aWJ1dGUnKQotICAgIHsiY2FjaGVkUmVhZG9ubHlWYWx1ZSIsIFRlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2VWOEludGVybmFsOjpjYWNoZWRSZWFkb25seVZhbHVlQXR0ckdldHRlckNh
bGxiYWNrRm9yTWFpbldvcmxkLCAwLCAwIC8qIG5vIGRhdGEgKi8sIHN0YXRpY19jYXN0PHY4OjpB
Y2Nlc3NDb250cm9sPih2ODo6REVGQVVMVCksIHN0YXRpY19jYXN0PHY4OjpQcm9wZXJ0eUF0dHJp
YnV0ZT4odjg6Ok5vbmUpLCAwIC8qIG9uIGluc3RhbmNlICovfSwKLX07Ci0KIHN0YXRpYyBjb25z
dCBWOERPTUNvbmZpZ3VyYXRpb246OkJhdGNoZWRNZXRob2QgVjhUZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlTWV0aG9kc1tdID0gewogICAgIHsiYWNjZXB0VHJhbnNmZXJMaXN0Iiwg
VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVY4SW50ZXJuYWw6OmFjY2VwdFRyYW5z
ZmVyTGlzdE1ldGhvZENhbGxiYWNrfSwKICAgICB7Im11bHRpVHJhbnNmZXJMaXN0IiwgVGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVY4SW50ZXJuYWw6Om11bHRpVHJhbnNmZXJMaXN0
TWV0aG9kQ2FsbGJhY2t9LApAQCAtNDI0LDcgKzMwOCw3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiBWOFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OmNvbnN0cnVjdG9yQ2FsbGJh
Y2soCiAgICAgcmV0dXJuIFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VWOEludGVy
bmFsOjpjb25zdHJ1Y3RvcihhcmdzKTsKIH0KIAotc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpG
dW5jdGlvblRlbXBsYXRlPiBDb25maWd1cmVWOFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2VUZW1wbGF0ZSh2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gZGVzYywg
djg6Oklzb2xhdGUqIGlzb2xhdGUsIFdyYXBwZXJXb3JsZFR5cGUgY3VycmVudFdvcmxkVHlwZSkK
K3N0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gQ29uZmlndXJlVjhU
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlVGVtcGxhdGUodjg6OlBlcnNpc3RlbnQ8
djg6OkZ1bmN0aW9uVGVtcGxhdGU+IGRlc2MsIHY4OjpJc29sYXRlKiBpc29sYXRlLCBXcmFwcGVy
V29ybGRUeXBlIHdvcmxkVHlwZSkKIHsKICAgICBkZXNjLT5SZWFkT25seVByb3RvdHlwZSgpOwog
CkBAIC00NDAsMzEgKzMyNCwyOCBAQCBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9u
VGVtcGxhdGU+IENvbmZpZ3VyZVY4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZQogICAgIFVOVVNF
RF9QQVJBTShwcm90byk7IC8vIEluIHNvbWUgY2FzZXMsIGl0IHdpbGwgbm90IGJlIHVzZWQuCiAg
ICAgCiAKLSAgICBpZiAoY3VycmVudFdvcmxkVHlwZSA9PSBNYWluV29ybGQpCi0gICAgICAgIFY4
RE9NQ29uZmlndXJhdGlvbjo6YWRkVG9UZW1wbGF0ZShkZXNjLCBWOFRlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2VBdHRyc0Zvck1haW5Xb3JsZCwgV1RGX0FSUkFZX0xFTkdUSChWOFRl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VBdHRyc0Zvck1haW5Xb3JsZCksIDAsIDAs
IGlzb2xhdGUsIGRlZmF1bHRTaWduYXR1cmUpOwotCiAgICAgLy8gQ3VzdG9tIHRvU3RyaW5nIHRl
bXBsYXRlCiAgICAgZGVzYy0+U2V0KHY4OjpTdHJpbmc6Ok5ld1N5bWJvbCgidG9TdHJpbmciKSwg
VjhQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpLT50b1N0cmluZ1RlbXBsYXRlKCkpOwogICAgIHJl
dHVybiBkZXNjOwogfQogCi12ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhU
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjpHZXRUZW1wbGF0ZSh2ODo6SXNvbGF0
ZSogaXNvbGF0ZSwgV3JhcHBlcldvcmxkVHlwZSBjdXJyZW50V29ybGRUeXBlKQordjg6OlBlcnNp
c3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZTo6R2V0VGVtcGxhdGUodjg6Oklzb2xhdGUqIGlzb2xhdGUsIFdyYXBwZXJXb3JsZFR5
cGUgd29ybGRUeXBlKQogewogICAgIFY4UGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOFBlcklzb2xh
dGVEYXRhOjpmcm9tKGlzb2xhdGUpOwotICAgIFY4UGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFw
OjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT50ZW1wbGF0ZU1hcChjdXJyZW50V29ybGRUeXBlKS5m
aW5kKCZpbmZvKTsKLSAgICBpZiAocmVzdWx0ICE9IGRhdGEtPnRlbXBsYXRlTWFwKGN1cnJlbnRX
b3JsZFR5cGUpLmVuZCgpKQorICAgIFY4UGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVy
YXRvciByZXN1bHQgPSBkYXRhLT50ZW1wbGF0ZU1hcCh3b3JsZFR5cGUpLmZpbmQoJmluZm8pOwor
ICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+dGVtcGxhdGVNYXAod29ybGRUeXBlKS5lbmQoKSkKICAg
ICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxl
U2NvcGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0K
LSAgICAgICAgQ29uZmlndXJlVjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlVGVt
cGxhdGUoZGF0YS0+cmF3VGVtcGxhdGUoJmluZm8sIGN1cnJlbnRXb3JsZFR5cGUpLCBpc29sYXRl
LCBjdXJyZW50V29ybGRUeXBlKTsKLSAgICBkYXRhLT50ZW1wbGF0ZU1hcChjdXJyZW50V29ybGRU
eXBlKS5hZGQoJmluZm8sIHRlbXBsKTsKKyAgICAgICAgQ29uZmlndXJlVjhUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlVGVtcGxhdGUoZGF0YS0+cmF3VGVtcGxhdGUoJmluZm8sIHdv
cmxkVHlwZSksIGlzb2xhdGUsIHdvcmxkVHlwZSk7CisgICAgZGF0YS0+dGVtcGxhdGVNYXAod29y
bGRUeXBlKS5hZGQoJmluZm8sIHRlbXBsKTsKICAgICByZXR1cm4gdGVtcGw7CiB9CiAKLWJvb2wg
VjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjpIYXNJbnN0YW5jZSh2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gdmFsdWUsIHY4OjpJc29sYXRlKiBpc29sYXRlLCBXcmFwcGVyV29ybGRU
eXBlIGN1cnJlbnRXb3JsZFR5cGUpCitib29sIFY4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZTo6SGFzSW5zdGFuY2Uodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlLCB2ODo6SXNv
bGF0ZSogaXNvbGF0ZSwgV3JhcHBlcldvcmxkVHlwZSB3b3JsZFR5cGUpCiB7Ci0gICAgcmV0dXJu
IFY4UGVySXNvbGF0ZURhdGE6OmZyb20oaXNvbGF0ZSktPmhhc0luc3RhbmNlKCZpbmZvLCB2YWx1
ZSwgY3VycmVudFdvcmxkVHlwZSk7CisgICAgcmV0dXJuIFY4UGVySXNvbGF0ZURhdGE6OmZyb20o
aXNvbGF0ZSktPmhhc0luc3RhbmNlKCZpbmZvLCB2YWx1ZSwgd29ybGRUeXBlKTsKIH0KIAogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmgK
aW5kZXggMTliMTM2OTE2NDkwZTA0MjZiNGQ2MjA4YWIzMmZjNzAwOWVmMjViZi4uNTBkY2JmMTYx
ZjlhMDJkNWY4Nzc1Yjk3ZGMyMjg3ZGI0N2NkNjM1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9W
OFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaApAQCAtNzAsMTcgKzcwLDYgQEAg
aW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KFRlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2UqIGltcGwsIHY4OjoKICAgICByZXR1cm4gd3JhcChpbXBsLCBjcmVhdGlvbkNv
bnRleHQsIGlzb2xhdGUpOwogfQogCi1pbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjhG
b3JNYWluV29ybGQoVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogaW1wbCwgdjg6
OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRl
KQotewotICAgIEFTU0VSVCh3b3JsZFR5cGUoaXNvbGF0ZSkgPT0gTWFpbldvcmxkKTsKLSAgICBp
ZiAoVU5MSUtFTFkoIWltcGwpKQotICAgICAgICByZXR1cm4gdjhOdWxsV2l0aENoZWNrKGlzb2xh
dGUpOwotICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB3cmFwcGVyID0gRE9NRGF0YVN0b3JlOjpn
ZXRXcmFwcGVyRm9yTWFpbldvcmxkKGltcGwpOwotICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkp
Ci0gICAgICAgIHJldHVybiB3cmFwcGVyOwotICAgIHJldHVybiB3cmFwKGltcGwsIGNyZWF0aW9u
Q29udGV4dCwgaXNvbGF0ZSk7Ci19Ci0KIHRlbXBsYXRlPGNsYXNzIEhvbGRlckNvbnRhaW5lciwg
Y2xhc3MgV3JhcHBhYmxlPgogaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4RmFzdChU
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBpbXBsLCBjb25zdCBIb2xkZXJDb250
YWluZXImIGNvbnRhaW5lciwgV3JhcHBhYmxlKiB3cmFwcGFibGUpCiB7CkBAIC05MywyNSArODIs
NiBAQCBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjhGYXN0KFRlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2UqIGltcGwsCiB9CiAKIHRlbXBsYXRlPGNsYXNzIEhvbGRlckNv
bnRhaW5lciwgY2xhc3MgV3JhcHBhYmxlPgotaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0
b1Y4RmFzdEZvck1haW5Xb3JsZChUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBp
bXBsLCBjb25zdCBIb2xkZXJDb250YWluZXImIGNvbnRhaW5lciwgV3JhcHBhYmxlKiB3cmFwcGFi
bGUpCi17Ci0gICAgQVNTRVJUKHdvcmxkVHlwZShjb250YWluZXIuR2V0SXNvbGF0ZSgpKSA9PSBN
YWluV29ybGQpOwotICAgIGlmIChVTkxJS0VMWSghaW1wbCkpCi0gICAgICAgIHJldHVybiB2OE51
bGwoY29udGFpbmVyLkdldElzb2xhdGUoKSk7Ci0gICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3
cmFwcGVyID0gRE9NRGF0YVN0b3JlOjpnZXRXcmFwcGVyRm9yTWFpbldvcmxkKGltcGwpOwotICAg
IGlmICghd3JhcHBlci5Jc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiB3cmFwcGVyOwotICAgIHJl
dHVybiB3cmFwKGltcGwsIGNvbnRhaW5lci5Ib2xkZXIoKSwgY29udGFpbmVyLkdldElzb2xhdGUo
KSk7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIEhvbGRlckNvbnRhaW5lciwgY2xhc3MgV3JhcHBhYmxl
PgotaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4RmFzdEZvck1haW5Xb3JsZChQYXNz
UmVmUHRyPCBUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlID4gaW1wbCwgY29uc3Qg
SG9sZGVyQ29udGFpbmVyJiBjb250YWluZXIsIFdyYXBwYWJsZSogd3JhcHBhYmxlKQotewotICAg
IHJldHVybiB0b1Y4RmFzdEZvck1haW5Xb3JsZChpbXBsLmdldCgpLCBjb250YWluZXIsIHdyYXBw
YWJsZSk7Ci19Ci0KLQotdGVtcGxhdGU8Y2xhc3MgSG9sZGVyQ29udGFpbmVyLCBjbGFzcyBXcmFw
cGFibGU+CiBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjhGYXN0KFBhc3NSZWZQdHI8
IFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UgPiBpbXBsLCBjb25zdCBIb2xkZXJD
b250YWluZXImIGNvbnRhaW5lciwgV3JhcHBhYmxlKiB3cmFwcGFibGUpCiB7CiAgICAgcmV0dXJu
IHRvVjhGYXN0KGltcGwuZ2V0KCksIGNvbnRhaW5lciwgd3JhcHBhYmxlKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RUeXBlZGVmcy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0VHlwZWRl
ZnMuY3BwCmluZGV4IDE0ZmU3Y2Y0NDIxYTY4YzBmMGUwZWEwNWQ5NWJkZTMxYjYyZmZmZTQuLmM3
ZGI0NzkwODc4YjAxODMwNTQxYjk1YmI5YjBhMzVmOWU2YjE1ZjggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RUeXBlZGVmcy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdFR5cGVkZWZz
LmNwcApAQCAtOTEsMTcgKzkxLDYgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB1bnNp
Z25lZExvbmdMb25nQXR0ckF0dHJHZXR0ZXJDYWxsYmFjayh2ODo6TG9jYWw8djgKICAgICByZXR1
cm4gVGVzdFR5cGVkZWZzVjhJbnRlcm5hbDo6dW5zaWduZWRMb25nTG9uZ0F0dHJBdHRyR2V0dGVy
KG5hbWUsIGluZm8pOwogfQogCi1zdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHVuc2lnbmVk
TG9uZ0xvbmdBdHRyQXR0ckdldHRlckZvck1haW5Xb3JsZCh2ODo6TG9jYWw8djg6OlN0cmluZz4g
bmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKLXsKLSAgICBUZXN0VHlwZWRlZnMq
IGltcCA9IFY4VGVzdFR5cGVkZWZzOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKLSAgICByZXR1
cm4gdjg6Ok51bWJlcjo6TmV3KHN0YXRpY19jYXN0PGRvdWJsZT4oaW1wLT51bnNpZ25lZExvbmdM
b25nQXR0cigpKSk7Ci19Ci0KLXN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdW5zaWduZWRM
b25nTG9uZ0F0dHJBdHRyR2V0dGVyQ2FsbGJhY2tGb3JNYWluV29ybGQodjg6OkxvY2FsPHY4OjpT
dHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCi17Ci0gICAgcmV0dXJu
IFRlc3RUeXBlZGVmc1Y4SW50ZXJuYWw6OnVuc2lnbmVkTG9uZ0xvbmdBdHRyQXR0ckdldHRlckZv
ck1haW5Xb3JsZChuYW1lLCBpbmZvKTsKLX0KLQogc3RhdGljIHZvaWQgdW5zaWduZWRMb25nTG9u
Z0F0dHJBdHRyU2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6
OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKIHsKICAgICBUZXN0
VHlwZWRlZnMqIGltcCA9IFY4VGVzdFR5cGVkZWZzOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsK
QEAgLTExNSwxOSArMTA0LDYgQEAgc3RhdGljIHZvaWQgdW5zaWduZWRMb25nTG9uZ0F0dHJBdHRy
U2V0dGVyQ2FsbGJhY2sodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHYKICAgICBUZXN0VHlw
ZWRlZnNWOEludGVybmFsOjp1bnNpZ25lZExvbmdMb25nQXR0ckF0dHJTZXR0ZXIobmFtZSwgdmFs
dWUsIGluZm8pOwogfQogCi1zdGF0aWMgdm9pZCB1bnNpZ25lZExvbmdMb25nQXR0ckF0dHJTZXR0
ZXJGb3JNYWluV29ybGQodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6
VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQotewotICAgIFRlc3RU
eXBlZGVmcyogaW1wID0gVjhUZXN0VHlwZWRlZnM6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwot
ICAgIHVuc2lnbmVkIGxvbmcgbG9uZyB2ID0gdG9JbnQ2NCh2YWx1ZSk7Ci0gICAgaW1wLT5zZXRV
bnNpZ25lZExvbmdMb25nQXR0cih2KTsKLSAgICByZXR1cm47Ci19Ci0KLXN0YXRpYyB2b2lkIHVu
c2lnbmVkTG9uZ0xvbmdBdHRyQXR0clNldHRlckNhbGxiYWNrRm9yTWFpbldvcmxkKHY4OjpMb2Nh
bDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6
OkFjY2Vzc29ySW5mbyYgaW5mbykKLXsKLSAgICBUZXN0VHlwZWRlZnNWOEludGVybmFsOjp1bnNp
Z25lZExvbmdMb25nQXR0ckF0dHJTZXR0ZXJGb3JNYWluV29ybGQobmFtZSwgdmFsdWUsIGluZm8p
OwotfQotCiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGltbXV0YWJsZVNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4
OjpBY2Nlc3NvckluZm8mIGluZm8pCiB7CiAgICAgVGVzdFR5cGVkZWZzKiBpbXAgPSBWOFRlc3RU
eXBlZGVmczo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7CkBAIC0xMzksMTcgKzExNSw2IEBAIHN0
YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gaW1tdXRhYmxlU2VyaWFsaXplZFNjcmlwdFZhbHVl
QXR0ckdldHRlckNhbGxiYWNrKHY4CiAgICAgcmV0dXJuIFRlc3RUeXBlZGVmc1Y4SW50ZXJuYWw6
OmltbXV0YWJsZVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUF0dHJHZXR0ZXIobmFtZSwgaW5mbyk7CiB9
CiAKLXN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gaW1tdXRhYmxlU2VyaWFsaXplZFNjcmlw
dFZhbHVlQXR0ckdldHRlckZvck1haW5Xb3JsZCh2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwg
Y29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKLXsKLSAgICBUZXN0VHlwZWRlZnMqIGltcCA9
IFY4VGVzdFR5cGVkZWZzOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKLSAgICByZXR1cm4gaW1w
LT5pbW11dGFibGVTZXJpYWxpemVkU2NyaXB0VmFsdWUoKSA/IGltcC0+aW1tdXRhYmxlU2VyaWFs
aXplZFNjcmlwdFZhbHVlKCktPmRlc2VyaWFsaXplKCkgOiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4o
djhOdWxsKGluZm8uR2V0SXNvbGF0ZSgpKSk7Ci19Ci0KLXN0YXRpYyB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gaW1tdXRhYmxlU2VyaWFsaXplZFNjcmlwdFZhbHVlQXR0ckdldHRlckNhbGxiYWNrRm9y
TWFpbldvcmxkKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJ
bmZvJiBpbmZvKQotewotICAgIHJldHVybiBUZXN0VHlwZWRlZnNWOEludGVybmFsOjppbW11dGFi
bGVTZXJpYWxpemVkU2NyaXB0VmFsdWVBdHRyR2V0dGVyRm9yTWFpbldvcmxkKG5hbWUsIGluZm8p
OwotfQotCiBzdGF0aWMgdm9pZCBpbW11dGFibGVTZXJpYWxpemVkU2NyaXB0VmFsdWVBdHRyU2V0
dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1
ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKIHsKICAgICBUZXN0VHlwZWRlZnMqIGlt
cCA9IFY4VGVzdFR5cGVkZWZzOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKQEAgLTE2MywxOSAr
MTI4LDYgQEAgc3RhdGljIHZvaWQgaW1tdXRhYmxlU2VyaWFsaXplZFNjcmlwdFZhbHVlQXR0clNl
dHRlckNhbGxiYWNrKHY4OjpMb2NhbDx2ODo6U3RyaW4KICAgICBUZXN0VHlwZWRlZnNWOEludGVy
bmFsOjppbW11dGFibGVTZXJpYWxpemVkU2NyaXB0VmFsdWVBdHRyU2V0dGVyKG5hbWUsIHZhbHVl
LCBpbmZvKTsKIH0KIAotc3RhdGljIHZvaWQgaW1tdXRhYmxlU2VyaWFsaXplZFNjcmlwdFZhbHVl
QXR0clNldHRlckZvck1haW5Xb3JsZCh2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6Okxv
Y2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCi17Ci0g
ICAgVGVzdFR5cGVkZWZzKiBpbXAgPSBWOFRlc3RUeXBlZGVmczo6dG9OYXRpdmUoaW5mby5Ib2xk
ZXIoKSk7Ci0gICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdiA9IFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZTo6Y3JlYXRlKHZhbHVlLCBpbmZvLkdldElzb2xhdGUoKSk7Ci0gICAgaW1wLT5z
ZXRJbW11dGFibGVTZXJpYWxpemVkU2NyaXB0VmFsdWUoV1RGOjpnZXRQdHIodikpOwotICAgIHJl
dHVybjsKLX0KLQotc3RhdGljIHZvaWQgaW1tdXRhYmxlU2VyaWFsaXplZFNjcmlwdFZhbHVlQXR0
clNldHRlckNhbGxiYWNrRm9yTWFpbldvcmxkKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2
ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykK
LXsKLSAgICBUZXN0VHlwZWRlZnNWOEludGVybmFsOjppbW11dGFibGVTZXJpYWxpemVkU2NyaXB0
VmFsdWVBdHRyU2V0dGVyRm9yTWFpbldvcmxkKG5hbWUsIHZhbHVlLCBpbmZvKTsKLX0KLQogc3Rh
dGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBhdHRyV2l0aEdldHRlckV4Y2VwdGlvbkF0dHJHZXR0
ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGlu
Zm8pCiB7CiAgICAgVGVzdFR5cGVkZWZzKiBpbXAgPSBWOFRlc3RUeXBlZGVmczo6dG9OYXRpdmUo
aW5mby5Ib2xkZXIoKSk7CkBAIC0xOTEsMjEgKzE0Myw2IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gYXR0cldpdGhHZXR0ZXJFeGNlcHRpb25BdHRyR2V0dGVyQ2FsbGJhY2sodjg6Okxv
Y2FsCiAgICAgcmV0dXJuIFRlc3RUeXBlZGVmc1Y4SW50ZXJuYWw6OmF0dHJXaXRoR2V0dGVyRXhj
ZXB0aW9uQXR0ckdldHRlcihuYW1lLCBpbmZvKTsKIH0KIAotc3RhdGljIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBhdHRyV2l0aEdldHRlckV4Y2VwdGlvbkF0dHJHZXR0ZXJGb3JNYWluV29ybGQodjg6
OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCi17
Ci0gICAgVGVzdFR5cGVkZWZzKiBpbXAgPSBWOFRlc3RUeXBlZGVmczo6dG9OYXRpdmUoaW5mby5I
b2xkZXIoKSk7Ci0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgaW50IHYgPSBpbXAtPmF0
dHJXaXRoR2V0dGVyRXhjZXB0aW9uKGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoZWMpKQotICAgICAg
ICByZXR1cm4gc2V0RE9NRXhjZXB0aW9uKGVjLCBpbmZvLkdldElzb2xhdGUoKSk7Ci0gICAgcmV0
dXJuIHY4SW50ZWdlcih2LCBpbmZvLkdldElzb2xhdGUoKSk7Ci19Ci0KLXN0YXRpYyB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gYXR0cldpdGhHZXR0ZXJFeGNlcHRpb25BdHRyR2V0dGVyQ2FsbGJhY2tG
b3JNYWluV29ybGQodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3Nv
ckluZm8mIGluZm8pCi17Ci0gICAgcmV0dXJuIFRlc3RUeXBlZGVmc1Y4SW50ZXJuYWw6OmF0dHJX
aXRoR2V0dGVyRXhjZXB0aW9uQXR0ckdldHRlckZvck1haW5Xb3JsZChuYW1lLCBpbmZvKTsKLX0K
LQogc3RhdGljIHZvaWQgYXR0cldpdGhHZXR0ZXJFeGNlcHRpb25BdHRyU2V0dGVyKHY4OjpMb2Nh
bDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6
OkFjY2Vzc29ySW5mbyYgaW5mbykKIHsKICAgICBUZXN0VHlwZWRlZnMqIGltcCA9IFY4VGVzdFR5
cGVkZWZzOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKQEAgLTIxOSwxOSArMTU2LDYgQEAgc3Rh
dGljIHZvaWQgYXR0cldpdGhHZXR0ZXJFeGNlcHRpb25BdHRyU2V0dGVyQ2FsbGJhY2sodjg6Okxv
Y2FsPHY4OjpTdHJpbmc+IG5hbWUKICAgICBUZXN0VHlwZWRlZnNWOEludGVybmFsOjphdHRyV2l0
aEdldHRlckV4Y2VwdGlvbkF0dHJTZXR0ZXIobmFtZSwgdmFsdWUsIGluZm8pOwogfQogCi1zdGF0
aWMgdm9pZCBhdHRyV2l0aEdldHRlckV4Y2VwdGlvbkF0dHJTZXR0ZXJGb3JNYWluV29ybGQodjg6
OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25z
dCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQotewotICAgIFRlc3RUeXBlZGVmcyogaW1wID0gVjhU
ZXN0VHlwZWRlZnM6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwotICAgIGludCB2ID0gdG9JbnQz
Mih2YWx1ZSk7Ci0gICAgaW1wLT5zZXRBdHRyV2l0aEdldHRlckV4Y2VwdGlvbih2KTsKLSAgICBy
ZXR1cm47Ci19Ci0KLXN0YXRpYyB2b2lkIGF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uQXR0clNldHRl
ckNhbGxiYWNrRm9yTWFpbldvcmxkKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9j
YWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKLXsKLSAg
ICBUZXN0VHlwZWRlZnNWOEludGVybmFsOjphdHRyV2l0aEdldHRlckV4Y2VwdGlvbkF0dHJTZXR0
ZXJGb3JNYWluV29ybGQobmFtZSwgdmFsdWUsIGluZm8pOwotfQotCiBzdGF0aWMgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IGF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uQXR0ckdldHRlcih2ODo6TG9jYWw8
djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKIHsKICAgICBU
ZXN0VHlwZWRlZnMqIGltcCA9IFY4VGVzdFR5cGVkZWZzOjp0b05hdGl2ZShpbmZvLkhvbGRlcigp
KTsKQEAgLTI0MywxNyArMTY3LDYgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBhdHRy
V2l0aFNldHRlckV4Y2VwdGlvbkF0dHJHZXR0ZXJDYWxsYmFjayh2ODo6TG9jYWwKICAgICByZXR1
cm4gVGVzdFR5cGVkZWZzVjhJbnRlcm5hbDo6YXR0cldpdGhTZXR0ZXJFeGNlcHRpb25BdHRyR2V0
dGVyKG5hbWUsIGluZm8pOwogfQogCi1zdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGF0dHJX
aXRoU2V0dGVyRXhjZXB0aW9uQXR0ckdldHRlckZvck1haW5Xb3JsZCh2ODo6TG9jYWw8djg6OlN0
cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKLXsKLSAgICBUZXN0VHlw
ZWRlZnMqIGltcCA9IFY4VGVzdFR5cGVkZWZzOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKLSAg
ICByZXR1cm4gdjhJbnRlZ2VyKGltcC0+YXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oKSwgaW5mby5H
ZXRJc29sYXRlKCkpOwotfQotCi1zdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGF0dHJXaXRo
U2V0dGVyRXhjZXB0aW9uQXR0ckdldHRlckNhbGxiYWNrRm9yTWFpbldvcmxkKHY4OjpMb2NhbDx2
ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQotewotICAgIHJl
dHVybiBUZXN0VHlwZWRlZnNWOEludGVybmFsOjphdHRyV2l0aFNldHRlckV4Y2VwdGlvbkF0dHJH
ZXR0ZXJGb3JNYWluV29ybGQobmFtZSwgaW5mbyk7Ci19Ci0KIHN0YXRpYyB2b2lkIGF0dHJXaXRo
U2V0dGVyRXhjZXB0aW9uQXR0clNldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6
OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCiB7
CiAgICAgVGVzdFR5cGVkZWZzKiBpbXAgPSBWOFRlc3RUeXBlZGVmczo6dG9OYXRpdmUoaW5mby5I
b2xkZXIoKSk7CkBAIC0yNzAsMjIgKzE4Myw2IEBAIHN0YXRpYyB2b2lkIGF0dHJXaXRoU2V0dGVy
RXhjZXB0aW9uQXR0clNldHRlckNhbGxiYWNrKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lCiAg
ICAgVGVzdFR5cGVkZWZzVjhJbnRlcm5hbDo6YXR0cldpdGhTZXR0ZXJFeGNlcHRpb25BdHRyU2V0
dGVyKG5hbWUsIHZhbHVlLCBpbmZvKTsKIH0KIAotc3RhdGljIHZvaWQgYXR0cldpdGhTZXR0ZXJF
eGNlcHRpb25BdHRyU2V0dGVyRm9yTWFpbldvcmxkKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1l
LCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5m
bykKLXsKLSAgICBUZXN0VHlwZWRlZnMqIGltcCA9IFY4VGVzdFR5cGVkZWZzOjp0b05hdGl2ZShp
bmZvLkhvbGRlcigpKTsKLSAgICBpbnQgdiA9IHRvSW50MzIodmFsdWUpOwotICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwOwotICAgIGltcC0+c2V0QXR0cldpdGhTZXR0ZXJFeGNlcHRpb24odiwgZWMp
OwotICAgIGlmIChVTkxJS0VMWShlYykpCi0gICAgICAgIHNldERPTUV4Y2VwdGlvbihlYywgaW5m
by5HZXRJc29sYXRlKCkpOwotICAgIHJldHVybjsKLX0KLQotc3RhdGljIHZvaWQgYXR0cldpdGhT
ZXR0ZXJFeGNlcHRpb25BdHRyU2V0dGVyQ2FsbGJhY2tGb3JNYWluV29ybGQodjg6OkxvY2FsPHY4
OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNj
ZXNzb3JJbmZvJiBpbmZvKQotewotICAgIFRlc3RUeXBlZGVmc1Y4SW50ZXJuYWw6OmF0dHJXaXRo
U2V0dGVyRXhjZXB0aW9uQXR0clNldHRlckZvck1haW5Xb3JsZChuYW1lLCB2YWx1ZSwgaW5mbyk7
Ci19Ci0KIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gc3RyaW5nQXR0cldpdGhHZXR0ZXJF
eGNlcHRpb25BdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6
QWNjZXNzb3JJbmZvJiBpbmZvKQogewogICAgIFRlc3RUeXBlZGVmcyogaW1wID0gVjhUZXN0VHlw
ZWRlZnM6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwpAQCAtMzAxLDIxICsxOTgsNiBAQCBzdGF0
aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uQXR0
ckdldHRlckNhbGxiYWNrKHY4OgogICAgIHJldHVybiBUZXN0VHlwZWRlZnNWOEludGVybmFsOjpz
dHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbkF0dHJHZXR0ZXIobmFtZSwgaW5mbyk7CiB9CiAK
LXN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gc3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRp
b25BdHRyR2V0dGVyRm9yTWFpbldvcmxkKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25z
dCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQotewotICAgIFRlc3RUeXBlZGVmcyogaW1wID0gVjhU
ZXN0VHlwZWRlZnM6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwotICAgIEV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOwotICAgIFN0cmluZyB2ID0gaW1wLT5zdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlv
bihlYyk7Ci0gICAgaWYgKFVOTElLRUxZKGVjKSkKLSAgICAgICAgcmV0dXJuIHNldERPTUV4Y2Vw
dGlvbihlYywgaW5mby5HZXRJc29sYXRlKCkpOwotICAgIHJldHVybiB2OFN0cmluZyh2LCBpbmZv
LkdldElzb2xhdGUoKSwgUmV0dXJuVW5zYWZlSGFuZGxlKTsKLX0KLQotc3RhdGljIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiBzdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbkF0dHJHZXR0ZXJDYWxs
YmFja0Zvck1haW5Xb3JsZCh2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFj
Y2Vzc29ySW5mbyYgaW5mbykKLXsKLSAgICByZXR1cm4gVGVzdFR5cGVkZWZzVjhJbnRlcm5hbDo6
c3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb25BdHRyR2V0dGVyRm9yTWFpbldvcmxkKG5hbWUs
IGluZm8pOwotfQotCiBzdGF0aWMgdm9pZCBzdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbkF0
dHJTZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+
IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQogewogICAgIFRlc3RUeXBlZGVm
cyogaW1wID0gVjhUZXN0VHlwZWRlZnM6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwpAQCAtMzI5
LDE5ICsyMTEsNiBAQCBzdGF0aWMgdm9pZCBzdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbkF0
dHJTZXR0ZXJDYWxsYmFjayh2ODo6TG9jYWw8djg6OlN0cmluZwogICAgIFRlc3RUeXBlZGVmc1Y4
SW50ZXJuYWw6OnN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uQXR0clNldHRlcihuYW1lLCB2
YWx1ZSwgaW5mbyk7CiB9CiAKLXN0YXRpYyB2b2lkIHN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0
aW9uQXR0clNldHRlckZvck1haW5Xb3JsZCh2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6
OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCi17
Ci0gICAgVGVzdFR5cGVkZWZzKiBpbXAgPSBWOFRlc3RUeXBlZGVmczo6dG9OYXRpdmUoaW5mby5I
b2xkZXIoKSk7Ci0gICAgVjhUUllDQVRDSF9GT1JfVjhTVFJJTkdSRVNPVVJDRV9WT0lEKFY4U3Ry
aW5nUmVzb3VyY2U8PiwgdiwgdmFsdWUpOwotICAgIGltcC0+c2V0U3RyaW5nQXR0cldpdGhHZXR0
ZXJFeGNlcHRpb24odik7Ci0gICAgcmV0dXJuOwotfQotCi1zdGF0aWMgdm9pZCBzdHJpbmdBdHRy
V2l0aEdldHRlckV4Y2VwdGlvbkF0dHJTZXR0ZXJDYWxsYmFja0Zvck1haW5Xb3JsZCh2ODo6TG9j
YWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4
OjpBY2Nlc3NvckluZm8mIGluZm8pCi17Ci0gICAgVGVzdFR5cGVkZWZzVjhJbnRlcm5hbDo6c3Ry
aW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb25BdHRyU2V0dGVyRm9yTWFpbldvcmxkKG5hbWUsIHZh
bHVlLCBpbmZvKTsKLX0KLQogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBzdHJpbmdBdHRy
V2l0aFNldHRlckV4Y2VwdGlvbkF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUs
IGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCiB7CiAgICAgVGVzdFR5cGVkZWZzKiBpbXAg
PSBWOFRlc3RUeXBlZGVmczo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7CkBAIC0zNTMsMTcgKzIy
Miw2IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gc3RyaW5nQXR0cldpdGhTZXR0ZXJF
eGNlcHRpb25BdHRyR2V0dGVyQ2FsbGJhY2sodjg6CiAgICAgcmV0dXJuIFRlc3RUeXBlZGVmc1Y4
SW50ZXJuYWw6OnN0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uQXR0ckdldHRlcihuYW1lLCBp
bmZvKTsKIH0KIAotc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBzdHJpbmdBdHRyV2l0aFNl
dHRlckV4Y2VwdGlvbkF0dHJHZXR0ZXJGb3JNYWluV29ybGQodjg6OkxvY2FsPHY4OjpTdHJpbmc+
IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCi17Ci0gICAgVGVzdFR5cGVkZWZz
KiBpbXAgPSBWOFRlc3RUeXBlZGVmczo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAgcmV0
dXJuIHY4U3RyaW5nKGltcC0+c3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oKSwgaW5mby5H
ZXRJc29sYXRlKCksIFJldHVyblVuc2FmZUhhbmRsZSk7Ci19Ci0KLXN0YXRpYyB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gc3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb25BdHRyR2V0dGVyQ2FsbGJh
Y2tGb3JNYWluV29ybGQodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nl
c3NvckluZm8mIGluZm8pCi17Ci0gICAgcmV0dXJuIFRlc3RUeXBlZGVmc1Y4SW50ZXJuYWw6OnN0
cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uQXR0ckdldHRlckZvck1haW5Xb3JsZChuYW1lLCBp
bmZvKTsKLX0KLQogc3RhdGljIHZvaWQgc3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb25BdHRy
U2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2
YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKIHsKICAgICBUZXN0VHlwZWRlZnMq
IGltcCA9IFY4VGVzdFR5cGVkZWZzOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKQEAgLTM4MCwy
MiArMjM4LDYgQEAgc3RhdGljIHZvaWQgc3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb25BdHRy
U2V0dGVyQ2FsbGJhY2sodjg6OkxvY2FsPHY4OjpTdHJpbmcKICAgICBUZXN0VHlwZWRlZnNWOElu
dGVybmFsOjpzdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbkF0dHJTZXR0ZXIobmFtZSwgdmFs
dWUsIGluZm8pOwogfQogCi1zdGF0aWMgdm9pZCBzdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlv
bkF0dHJTZXR0ZXJGb3JNYWluV29ybGQodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpM
b2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQotewot
ICAgIFRlc3RUeXBlZGVmcyogaW1wID0gVjhUZXN0VHlwZWRlZnM6OnRvTmF0aXZlKGluZm8uSG9s
ZGVyKCkpOwotICAgIFY4VFJZQ0FUQ0hfRk9SX1Y4U1RSSU5HUkVTT1VSQ0VfVk9JRChWOFN0cmlu
Z1Jlc291cmNlPD4sIHYsIHZhbHVlKTsKLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBp
bXAtPnNldFN0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKHYsIGVjKTsKLSAgICBpZiAoVU5M
SUtFTFkoZWMpKQotICAgICAgICBzZXRET01FeGNlcHRpb24oZWMsIGluZm8uR2V0SXNvbGF0ZSgp
KTsKLSAgICByZXR1cm47Ci19Ci0KLXN0YXRpYyB2b2lkIHN0cmluZ0F0dHJXaXRoU2V0dGVyRXhj
ZXB0aW9uQXR0clNldHRlckNhbGxiYWNrRm9yTWFpbldvcmxkKHY4OjpMb2NhbDx2ODo6U3RyaW5n
PiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5m
byYgaW5mbykKLXsKLSAgICBUZXN0VHlwZWRlZnNWOEludGVybmFsOjpzdHJpbmdBdHRyV2l0aFNl
dHRlckV4Y2VwdGlvbkF0dHJTZXR0ZXJGb3JNYWluV29ybGQobmFtZSwgdmFsdWUsIGluZm8pOwot
fQotCiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFRlc3RUeXBlZGVmc0NvbnN0cnVjdG9y
R2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZv
JiBpbmZvKQogewogICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBkYXRhID0gaW5mby5EYXRhKCk7
CkBAIC02NzEsMjMgKzUxMyw2IEBAIHN0YXRpYyBjb25zdCBWOERPTUNvbmZpZ3VyYXRpb246OkJh
dGNoZWRBdHRyaWJ1dGUgVjhUZXN0VHlwZWRlZnNBdHRyc1tdID0gewogICAgIHsic3RyaW5nQXR0
cldpdGhTZXR0ZXJFeGNlcHRpb24iLCBUZXN0VHlwZWRlZnNWOEludGVybmFsOjpzdHJpbmdBdHRy
V2l0aFNldHRlckV4Y2VwdGlvbkF0dHJHZXR0ZXJDYWxsYmFjaywgVGVzdFR5cGVkZWZzVjhJbnRl
cm5hbDo6c3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb25BdHRyU2V0dGVyQ2FsbGJhY2ssIDAg
Lyogbm8gZGF0YSAqLywgc3RhdGljX2Nhc3Q8djg6OkFjY2Vzc0NvbnRyb2w+KHY4OjpERUZBVUxU
KSwgc3RhdGljX2Nhc3Q8djg6OlByb3BlcnR5QXR0cmlidXRlPih2ODo6Tm9uZSksIDAgLyogb24g
aW5zdGFuY2UgKi99LAogfTsKIAotc3RhdGljIGNvbnN0IFY4RE9NQ29uZmlndXJhdGlvbjo6QmF0
Y2hlZEF0dHJpYnV0ZSBWOFRlc3RUeXBlZGVmc0F0dHJzRm9yTWFpbldvcmxkW10gPSB7Ci0gICAg
Ly8gQXR0cmlidXRlICd1bnNpZ25lZExvbmdMb25nQXR0cicgKFR5cGU6ICdhdHRyaWJ1dGUnIEV4
dEF0dHI6ICcnKQotICAgIHsidW5zaWduZWRMb25nTG9uZ0F0dHIiLCBUZXN0VHlwZWRlZnNWOElu
dGVybmFsOjp1bnNpZ25lZExvbmdMb25nQXR0ckF0dHJHZXR0ZXJDYWxsYmFja0Zvck1haW5Xb3Js
ZCwgVGVzdFR5cGVkZWZzVjhJbnRlcm5hbDo6dW5zaWduZWRMb25nTG9uZ0F0dHJBdHRyU2V0dGVy
Q2FsbGJhY2tGb3JNYWluV29ybGQsIDAgLyogbm8gZGF0YSAqLywgc3RhdGljX2Nhc3Q8djg6OkFj
Y2Vzc0NvbnRyb2w+KHY4OjpERUZBVUxUKSwgc3RhdGljX2Nhc3Q8djg6OlByb3BlcnR5QXR0cmli
dXRlPih2ODo6Tm9uZSksIDAgLyogb24gaW5zdGFuY2UgKi99LAotICAgIC8vIEF0dHJpYnV0ZSAn
aW1tdXRhYmxlU2VyaWFsaXplZFNjcmlwdFZhbHVlJyAoVHlwZTogJ2F0dHJpYnV0ZScgRXh0QXR0
cjogJ0ltbXV0YWJsZScpCi0gICAgeyJpbW11dGFibGVTZXJpYWxpemVkU2NyaXB0VmFsdWUiLCBU
ZXN0VHlwZWRlZnNWOEludGVybmFsOjppbW11dGFibGVTZXJpYWxpemVkU2NyaXB0VmFsdWVBdHRy
R2V0dGVyQ2FsbGJhY2tGb3JNYWluV29ybGQsIFRlc3RUeXBlZGVmc1Y4SW50ZXJuYWw6OmltbXV0
YWJsZVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUF0dHJTZXR0ZXJDYWxsYmFja0Zvck1haW5Xb3JsZCwg
MCAvKiBubyBkYXRhICovLCBzdGF0aWNfY2FzdDx2ODo6QWNjZXNzQ29udHJvbD4odjg6OkRFRkFV
TFQpLCBzdGF0aWNfY2FzdDx2ODo6UHJvcGVydHlBdHRyaWJ1dGU+KHY4OjpOb25lKSwgMCAvKiBv
biBpbnN0YW5jZSAqL30sCi0gICAgLy8gQXR0cmlidXRlICdUZXN0U3ViT2JqJyAoVHlwZTogJ3Jl
YWRvbmx5IGF0dHJpYnV0ZScgRXh0QXR0cjogJycpCi0gICAgeyJUZXN0U3ViT2JqIiwgVGVzdFR5
cGVkZWZzVjhJbnRlcm5hbDo6VGVzdFR5cGVkZWZzQ29uc3RydWN0b3JHZXR0ZXIsIDAsICZWOFRl
c3RTdWJPYmo6OmluZm8sIHN0YXRpY19jYXN0PHY4OjpBY2Nlc3NDb250cm9sPih2ODo6REVGQVVM
VCksIHN0YXRpY19jYXN0PHY4OjpQcm9wZXJ0eUF0dHJpYnV0ZT4odjg6Ok5vbmUpLCAwIC8qIG9u
IGluc3RhbmNlICovfSwKLSAgICAvLyBBdHRyaWJ1dGUgJ2F0dHJXaXRoR2V0dGVyRXhjZXB0aW9u
JyAoVHlwZTogJ2F0dHJpYnV0ZScgRXh0QXR0cjogJycpCi0gICAgeyJhdHRyV2l0aEdldHRlckV4
Y2VwdGlvbiIsIFRlc3RUeXBlZGVmc1Y4SW50ZXJuYWw6OmF0dHJXaXRoR2V0dGVyRXhjZXB0aW9u
QXR0ckdldHRlckNhbGxiYWNrRm9yTWFpbldvcmxkLCBUZXN0VHlwZWRlZnNWOEludGVybmFsOjph
dHRyV2l0aEdldHRlckV4Y2VwdGlvbkF0dHJTZXR0ZXJDYWxsYmFja0Zvck1haW5Xb3JsZCwgMCAv
KiBubyBkYXRhICovLCBzdGF0aWNfY2FzdDx2ODo6QWNjZXNzQ29udHJvbD4odjg6OkRFRkFVTFQp
LCBzdGF0aWNfY2FzdDx2ODo6UHJvcGVydHlBdHRyaWJ1dGU+KHY4OjpOb25lKSwgMCAvKiBvbiBp
bnN0YW5jZSAqL30sCi0gICAgLy8gQXR0cmlidXRlICdhdHRyV2l0aFNldHRlckV4Y2VwdGlvbicg
KFR5cGU6ICdhdHRyaWJ1dGUnIEV4dEF0dHI6ICcnKQotICAgIHsiYXR0cldpdGhTZXR0ZXJFeGNl
cHRpb24iLCBUZXN0VHlwZWRlZnNWOEludGVybmFsOjphdHRyV2l0aFNldHRlckV4Y2VwdGlvbkF0
dHJHZXR0ZXJDYWxsYmFja0Zvck1haW5Xb3JsZCwgVGVzdFR5cGVkZWZzVjhJbnRlcm5hbDo6YXR0
cldpdGhTZXR0ZXJFeGNlcHRpb25BdHRyU2V0dGVyQ2FsbGJhY2tGb3JNYWluV29ybGQsIDAgLyog
bm8gZGF0YSAqLywgc3RhdGljX2Nhc3Q8djg6OkFjY2Vzc0NvbnRyb2w+KHY4OjpERUZBVUxUKSwg
c3RhdGljX2Nhc3Q8djg6OlByb3BlcnR5QXR0cmlidXRlPih2ODo6Tm9uZSksIDAgLyogb24gaW5z
dGFuY2UgKi99LAotICAgIC8vIEF0dHJpYnV0ZSAnc3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRp
b24nIChUeXBlOiAnYXR0cmlidXRlJyBFeHRBdHRyOiAnJykKLSAgICB7InN0cmluZ0F0dHJXaXRo
R2V0dGVyRXhjZXB0aW9uIiwgVGVzdFR5cGVkZWZzVjhJbnRlcm5hbDo6c3RyaW5nQXR0cldpdGhH
ZXR0ZXJFeGNlcHRpb25BdHRyR2V0dGVyQ2FsbGJhY2tGb3JNYWluV29ybGQsIFRlc3RUeXBlZGVm
c1Y4SW50ZXJuYWw6OnN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uQXR0clNldHRlckNhbGxi
YWNrRm9yTWFpbldvcmxkLCAwIC8qIG5vIGRhdGEgKi8sIHN0YXRpY19jYXN0PHY4OjpBY2Nlc3ND
b250cm9sPih2ODo6REVGQVVMVCksIHN0YXRpY19jYXN0PHY4OjpQcm9wZXJ0eUF0dHJpYnV0ZT4o
djg6Ok5vbmUpLCAwIC8qIG9uIGluc3RhbmNlICovfSwKLSAgICAvLyBBdHRyaWJ1dGUgJ3N0cmlu
Z0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uJyAoVHlwZTogJ2F0dHJpYnV0ZScgRXh0QXR0cjogJycp
Ci0gICAgeyJzdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbiIsIFRlc3RUeXBlZGVmc1Y4SW50
ZXJuYWw6OnN0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uQXR0ckdldHRlckNhbGxiYWNrRm9y
TWFpbldvcmxkLCBUZXN0VHlwZWRlZnNWOEludGVybmFsOjpzdHJpbmdBdHRyV2l0aFNldHRlckV4
Y2VwdGlvbkF0dHJTZXR0ZXJDYWxsYmFja0Zvck1haW5Xb3JsZCwgMCAvKiBubyBkYXRhICovLCBz
dGF0aWNfY2FzdDx2ODo6QWNjZXNzQ29udHJvbD4odjg6OkRFRkFVTFQpLCBzdGF0aWNfY2FzdDx2
ODo6UHJvcGVydHlBdHRyaWJ1dGU+KHY4OjpOb25lKSwgMCAvKiBvbiBpbnN0YW5jZSAqL30sCi19
OwotCiBzdGF0aWMgY29uc3QgVjhET01Db25maWd1cmF0aW9uOjpCYXRjaGVkTWV0aG9kIFY4VGVz
dFR5cGVkZWZzTWV0aG9kc1tdID0gewogICAgIHsiZnVuYyIsIFRlc3RUeXBlZGVmc1Y4SW50ZXJu
YWw6OmZ1bmNNZXRob2RDYWxsYmFja30sCiAgICAgeyJtdWx0aVRyYW5zZmVyTGlzdCIsIFRlc3RU
eXBlZGVmc1Y4SW50ZXJuYWw6Om11bHRpVHJhbnNmZXJMaXN0TWV0aG9kQ2FsbGJhY2t9LApAQCAt
NzA4LDcgKzUzMyw3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFRlc3RUeXBlZGVmczo6Y29u
c3RydWN0b3JDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhCiAgICAgcmV0dXJuIFRlc3RU
eXBlZGVmc1Y4SW50ZXJuYWw6OmNvbnN0cnVjdG9yKGFyZ3MpOwogfQogCi1zdGF0aWMgdjg6OlBl
cnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IENvbmZpZ3VyZVY4VGVzdFR5cGVkZWZzVGVt
cGxhdGUodjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IGRlc2MsIHY4OjpJc29s
YXRlKiBpc29sYXRlLCBXcmFwcGVyV29ybGRUeXBlIGN1cnJlbnRXb3JsZFR5cGUpCitzdGF0aWMg
djg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IENvbmZpZ3VyZVY4VGVzdFR5cGVk
ZWZzVGVtcGxhdGUodjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IGRlc2MsIHY4
OjpJc29sYXRlKiBpc29sYXRlLCBXcmFwcGVyV29ybGRUeXBlIHdvcmxkVHlwZSkKIHsKICAgICBk
ZXNjLT5SZWFkT25seVByb3RvdHlwZSgpOwogCkBAIC03MjQsMzAgKzU0OSwyNyBAQCBzdGF0aWMg
djg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IENvbmZpZ3VyZVY4VGVzdFR5cGVk
ZWZzVGVtcGxhdGUodjg6OgogICAgIFVOVVNFRF9QQVJBTShwcm90byk7IC8vIEluIHNvbWUgY2Fz
ZXMsIGl0IHdpbGwgbm90IGJlIHVzZWQuCiAgICAgCiAKLSAgICBpZiAoY3VycmVudFdvcmxkVHlw
ZSA9PSBNYWluV29ybGQpCi0gICAgICAgIFY4RE9NQ29uZmlndXJhdGlvbjo6YWRkVG9UZW1wbGF0
ZShkZXNjLCBWOFRlc3RUeXBlZGVmc0F0dHJzRm9yTWFpbldvcmxkLCBXVEZfQVJSQVlfTEVOR1RI
KFY4VGVzdFR5cGVkZWZzQXR0cnNGb3JNYWluV29ybGQpLCAwLCAwLCBpc29sYXRlLCBkZWZhdWx0
U2lnbmF0dXJlKTsKLQogICAgIC8vIEN1c3RvbSBTaWduYXR1cmUgJ21ldGhvZFdpdGhTZXF1ZW5j
ZUFyZycKICAgICBjb25zdCBpbnQgbWV0aG9kV2l0aFNlcXVlbmNlQXJnQXJnYyA9IDE7Ci0gICAg
djg6OkhhbmRsZTx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gbWV0aG9kV2l0aFNlcXVlbmNlQXJnQXJn
dlttZXRob2RXaXRoU2VxdWVuY2VBcmdBcmdjXSA9IHsgVjhQZXJJc29sYXRlRGF0YTo6ZnJvbShp
c29sYXRlKS0+cmF3VGVtcGxhdGUoJlY4c2VxdWVuY2U8U2VyaWFsaXplZFNjcmlwdFZhbHVlPjo6
aW5mbywgY3VycmVudFdvcmxkVHlwZSkgfTsKKyAgICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvblRl
bXBsYXRlPiBtZXRob2RXaXRoU2VxdWVuY2VBcmdBcmd2W21ldGhvZFdpdGhTZXF1ZW5jZUFyZ0Fy
Z2NdID0geyBWOFBlcklzb2xhdGVEYXRhOjpmcm9tKGlzb2xhdGUpLT5yYXdUZW1wbGF0ZSgmVjhz
ZXF1ZW5jZTxTZXJpYWxpemVkU2NyaXB0VmFsdWU+OjppbmZvLCB3b3JsZFR5cGUpIH07CiAgICAg
djg6OkhhbmRsZTx2ODo6U2lnbmF0dXJlPiBtZXRob2RXaXRoU2VxdWVuY2VBcmdTaWduYXR1cmUg
PSB2ODo6U2lnbmF0dXJlOjpOZXcoZGVzYywgbWV0aG9kV2l0aFNlcXVlbmNlQXJnQXJnYywgbWV0
aG9kV2l0aFNlcXVlbmNlQXJnQXJndik7CiAgICAgcHJvdG8tPlNldCh2ODo6U3RyaW5nOjpOZXdT
eW1ib2woIm1ldGhvZFdpdGhTZXF1ZW5jZUFyZyIpLCB2ODo6RnVuY3Rpb25UZW1wbGF0ZTo6TmV3
KFRlc3RUeXBlZGVmc1Y4SW50ZXJuYWw6Om1ldGhvZFdpdGhTZXF1ZW5jZUFyZ01ldGhvZENhbGxi
YWNrLCB2OFVuZGVmaW5lZCgpLCBtZXRob2RXaXRoU2VxdWVuY2VBcmdTaWduYXR1cmUpKTsKIAog
ICAgIC8vIEN1c3RvbSBTaWduYXR1cmUgJ251bGxhYmxlQXJyYXlBcmcnCiAgICAgY29uc3QgaW50
IG51bGxhYmxlQXJyYXlBcmdBcmdjID0gMTsKLSAgICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvblRl
bXBsYXRlPiBudWxsYWJsZUFycmF5QXJnQXJndltudWxsYWJsZUFycmF5QXJnQXJnY10gPSB7IFY4
UGVySXNvbGF0ZURhdGE6OmZyb20oaXNvbGF0ZSktPnJhd1RlbXBsYXRlKCZWOERPTVN0cmluZ1td
OjppbmZvLCBjdXJyZW50V29ybGRUeXBlKSB9OworICAgIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9u
VGVtcGxhdGU+IG51bGxhYmxlQXJyYXlBcmdBcmd2W251bGxhYmxlQXJyYXlBcmdBcmdjXSA9IHsg
VjhQZXJJc29sYXRlRGF0YTo6ZnJvbShpc29sYXRlKS0+cmF3VGVtcGxhdGUoJlY4RE9NU3RyaW5n
W106OmluZm8sIHdvcmxkVHlwZSkgfTsKICAgICB2ODo6SGFuZGxlPHY4OjpTaWduYXR1cmU+IG51
bGxhYmxlQXJyYXlBcmdTaWduYXR1cmUgPSB2ODo6U2lnbmF0dXJlOjpOZXcoZGVzYywgbnVsbGFi
bGVBcnJheUFyZ0FyZ2MsIG51bGxhYmxlQXJyYXlBcmdBcmd2KTsKICAgICBwcm90by0+U2V0KHY4
OjpTdHJpbmc6Ok5ld1N5bWJvbCgibnVsbGFibGVBcnJheUFyZyIpLCB2ODo6RnVuY3Rpb25UZW1w
bGF0ZTo6TmV3KFRlc3RUeXBlZGVmc1Y4SW50ZXJuYWw6Om51bGxhYmxlQXJyYXlBcmdNZXRob2RD
YWxsYmFjaywgdjhVbmRlZmluZWQoKSwgbnVsbGFibGVBcnJheUFyZ1NpZ25hdHVyZSkpOwogCiAg
ICAgLy8gQ3VzdG9tIFNpZ25hdHVyZSAnc3RyaW5nQXJyYXlGdW5jdGlvbicKICAgICBjb25zdCBp
bnQgc3RyaW5nQXJyYXlGdW5jdGlvbkFyZ2MgPSAxOwotICAgIHY4OjpIYW5kbGU8djg6OkZ1bmN0
aW9uVGVtcGxhdGU+IHN0cmluZ0FycmF5RnVuY3Rpb25Bcmd2W3N0cmluZ0FycmF5RnVuY3Rpb25B
cmdjXSA9IHsgVjhQZXJJc29sYXRlRGF0YTo6ZnJvbShpc29sYXRlKS0+cmF3VGVtcGxhdGUoJlY4
RE9NU3RyaW5nW106OmluZm8sIGN1cnJlbnRXb3JsZFR5cGUpIH07CisgICAgdjg6OkhhbmRsZTx2
ODo6RnVuY3Rpb25UZW1wbGF0ZT4gc3RyaW5nQXJyYXlGdW5jdGlvbkFyZ3Zbc3RyaW5nQXJyYXlG
dW5jdGlvbkFyZ2NdID0geyBWOFBlcklzb2xhdGVEYXRhOjpmcm9tKGlzb2xhdGUpLT5yYXdUZW1w
bGF0ZSgmVjhET01TdHJpbmdbXTo6aW5mbywgd29ybGRUeXBlKSB9OwogICAgIHY4OjpIYW5kbGU8
djg6OlNpZ25hdHVyZT4gc3RyaW5nQXJyYXlGdW5jdGlvblNpZ25hdHVyZSA9IHY4OjpTaWduYXR1
cmU6Ok5ldyhkZXNjLCBzdHJpbmdBcnJheUZ1bmN0aW9uQXJnYywgc3RyaW5nQXJyYXlGdW5jdGlv
bkFyZ3YpOwogICAgIHByb3RvLT5TZXQodjg6OlN0cmluZzo6TmV3U3ltYm9sKCJzdHJpbmdBcnJh
eUZ1bmN0aW9uIiksIHY4OjpGdW5jdGlvblRlbXBsYXRlOjpOZXcoVGVzdFR5cGVkZWZzVjhJbnRl
cm5hbDo6c3RyaW5nQXJyYXlGdW5jdGlvbk1ldGhvZENhbGxiYWNrLCB2OFVuZGVmaW5lZCgpLCBz
dHJpbmdBcnJheUZ1bmN0aW9uU2lnbmF0dXJlKSk7CiAKICAgICAvLyBDdXN0b20gU2lnbmF0dXJl
ICdzdHJpbmdBcnJheUZ1bmN0aW9uMicKICAgICBjb25zdCBpbnQgc3RyaW5nQXJyYXlGdW5jdGlv
bjJBcmdjID0gMTsKLSAgICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvblRlbXBsYXRlPiBzdHJpbmdB
cnJheUZ1bmN0aW9uMkFyZ3Zbc3RyaW5nQXJyYXlGdW5jdGlvbjJBcmdjXSA9IHsgVjhQZXJJc29s
YXRlRGF0YTo6ZnJvbShpc29sYXRlKS0+cmF3VGVtcGxhdGUoJlY4RE9NU3RyaW5nW106OmluZm8s
IGN1cnJlbnRXb3JsZFR5cGUpIH07CisgICAgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb25UZW1wbGF0
ZT4gc3RyaW5nQXJyYXlGdW5jdGlvbjJBcmd2W3N0cmluZ0FycmF5RnVuY3Rpb24yQXJnY10gPSB7
IFY4UGVySXNvbGF0ZURhdGE6OmZyb20oaXNvbGF0ZSktPnJhd1RlbXBsYXRlKCZWOERPTVN0cmlu
Z1tdOjppbmZvLCB3b3JsZFR5cGUpIH07CiAgICAgdjg6OkhhbmRsZTx2ODo6U2lnbmF0dXJlPiBz
dHJpbmdBcnJheUZ1bmN0aW9uMlNpZ25hdHVyZSA9IHY4OjpTaWduYXR1cmU6Ok5ldyhkZXNjLCBz
dHJpbmdBcnJheUZ1bmN0aW9uMkFyZ2MsIHN0cmluZ0FycmF5RnVuY3Rpb24yQXJndik7CiAgICAg
cHJvdG8tPlNldCh2ODo6U3RyaW5nOjpOZXdTeW1ib2woInN0cmluZ0FycmF5RnVuY3Rpb24yIiks
IHY4OjpGdW5jdGlvblRlbXBsYXRlOjpOZXcoVGVzdFR5cGVkZWZzVjhJbnRlcm5hbDo6c3RyaW5n
QXJyYXlGdW5jdGlvbjJNZXRob2RDYWxsYmFjaywgdjhVbmRlZmluZWQoKSwgc3RyaW5nQXJyYXlG
dW5jdGlvbjJTaWduYXR1cmUpKTsKIApAQCAtNzU2LDIzICs1NzgsMjMgQEAgc3RhdGljIHY4OjpQ
ZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBDb25maWd1cmVWOFRlc3RUeXBlZGVmc1Rl
bXBsYXRlKHY4OjoKICAgICByZXR1cm4gZGVzYzsKIH0KIAotdjg6OlBlcnNpc3RlbnQ8djg6OkZ1
bmN0aW9uVGVtcGxhdGU+IFY4VGVzdFR5cGVkZWZzOjpHZXRUZW1wbGF0ZSh2ODo6SXNvbGF0ZSog
aXNvbGF0ZSwgV3JhcHBlcldvcmxkVHlwZSBjdXJyZW50V29ybGRUeXBlKQordjg6OlBlcnNpc3Rl
bnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdFR5cGVkZWZzOjpHZXRUZW1wbGF0ZSh2ODo6
SXNvbGF0ZSogaXNvbGF0ZSwgV3JhcHBlcldvcmxkVHlwZSB3b3JsZFR5cGUpCiB7CiAgICAgVjhQ
ZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4UGVySXNvbGF0ZURhdGE6OmZyb20oaXNvbGF0ZSk7Ci0g
ICAgVjhQZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEt
PnRlbXBsYXRlTWFwKGN1cnJlbnRXb3JsZFR5cGUpLmZpbmQoJmluZm8pOwotICAgIGlmIChyZXN1
bHQgIT0gZGF0YS0+dGVtcGxhdGVNYXAoY3VycmVudFdvcmxkVHlwZSkuZW5kKCkpCisgICAgVjhQ
ZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnRlbXBs
YXRlTWFwKHdvcmxkVHlwZSkuZmluZCgmaW5mbyk7CisgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT50
ZW1wbGF0ZU1hcCh3b3JsZFR5cGUpLmVuZCgpKQogICAgICAgICByZXR1cm4gcmVzdWx0LT52YWx1
ZTsKIAogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAgICB2ODo6UGVyc2lzdGVu
dDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwgPQotICAgICAgICBDb25maWd1cmVWOFRlc3RU
eXBlZGVmc1RlbXBsYXRlKGRhdGEtPnJhd1RlbXBsYXRlKCZpbmZvLCBjdXJyZW50V29ybGRUeXBl
KSwgaXNvbGF0ZSwgY3VycmVudFdvcmxkVHlwZSk7Ci0gICAgZGF0YS0+dGVtcGxhdGVNYXAoY3Vy
cmVudFdvcmxkVHlwZSkuYWRkKCZpbmZvLCB0ZW1wbCk7CisgICAgICAgIENvbmZpZ3VyZVY4VGVz
dFR5cGVkZWZzVGVtcGxhdGUoZGF0YS0+cmF3VGVtcGxhdGUoJmluZm8sIHdvcmxkVHlwZSksIGlz
b2xhdGUsIHdvcmxkVHlwZSk7CisgICAgZGF0YS0+dGVtcGxhdGVNYXAod29ybGRUeXBlKS5hZGQo
JmluZm8sIHRlbXBsKTsKICAgICByZXR1cm4gdGVtcGw7CiB9CiAKLWJvb2wgVjhUZXN0VHlwZWRl
ZnM6Okhhc0luc3RhbmNlKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSwgdjg6Oklzb2xhdGUq
IGlzb2xhdGUsIFdyYXBwZXJXb3JsZFR5cGUgY3VycmVudFdvcmxkVHlwZSkKK2Jvb2wgVjhUZXN0
VHlwZWRlZnM6Okhhc0luc3RhbmNlKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSwgdjg6Oklz
b2xhdGUqIGlzb2xhdGUsIFdyYXBwZXJXb3JsZFR5cGUgd29ybGRUeXBlKQogewotICAgIHJldHVy
biBWOFBlcklzb2xhdGVEYXRhOjpmcm9tKGlzb2xhdGUpLT5oYXNJbnN0YW5jZSgmaW5mbywgdmFs
dWUsIGN1cnJlbnRXb3JsZFR5cGUpOworICAgIHJldHVybiBWOFBlcklzb2xhdGVEYXRhOjpmcm9t
KGlzb2xhdGUpLT5oYXNJbnN0YW5jZSgmaW5mbywgdmFsdWUsIHdvcmxkVHlwZSk7CiB9CiAKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVz
dFR5cGVkZWZzLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhU
ZXN0VHlwZWRlZnMuaAppbmRleCA0MDJhMDQ1MjU0MDcwMjRlNTg4YTMzYzJmNjE1MmY3YjNlMTA5
ZmUyLi5lZTllYzJmNGU0MGYxNzFhODUxMWI1M2EyNmUwYzY2ZWZjN2RhMzBhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0VHlwZWRlZnMu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0VHlw
ZWRlZnMuaApAQCAtNjksMTcgKzY5LDYgQEAgaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0
b1Y4KFRlc3RUeXBlZGVmcyogaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmUKICAgICBy
ZXR1cm4gd3JhcChpbXBsLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwogfQogCi1pbmxpbmUg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjhGb3JNYWluV29ybGQoVGVzdFR5cGVkZWZzKiBpbXBs
LCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlz
b2xhdGUpCi17Ci0gICAgQVNTRVJUKHdvcmxkVHlwZShpc29sYXRlKSA9PSBNYWluV29ybGQpOwot
ICAgIGlmIChVTkxJS0VMWSghaW1wbCkpCi0gICAgICAgIHJldHVybiB2OE51bGxXaXRoQ2hlY2so
aXNvbGF0ZSk7Ci0gICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdyYXBwZXIgPSBET01EYXRhU3Rv
cmU6OmdldFdyYXBwZXJGb3JNYWluV29ybGQoaW1wbCk7Ci0gICAgaWYgKCF3cmFwcGVyLklzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuIHdyYXBwZXI7Ci0gICAgcmV0dXJuIHdyYXAoaW1wbCwgY3Jl
YXRpb25Db250ZXh0LCBpc29sYXRlKTsKLX0KLQogdGVtcGxhdGU8Y2xhc3MgSG9sZGVyQ29udGFp
bmVyLCBjbGFzcyBXcmFwcGFibGU+CiBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjhG
YXN0KFRlc3RUeXBlZGVmcyogaW1wbCwgY29uc3QgSG9sZGVyQ29udGFpbmVyJiBjb250YWluZXIs
IFdyYXBwYWJsZSogd3JhcHBhYmxlKQogewpAQCAtOTIsMjUgKzgxLDYgQEAgaW5saW5lIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiB0b1Y4RmFzdChUZXN0VHlwZWRlZnMqIGltcGwsIGNvbnN0IEhvbGRl
ckNvbnRhaW5lciYKIH0KIAogdGVtcGxhdGU8Y2xhc3MgSG9sZGVyQ29udGFpbmVyLCBjbGFzcyBX
cmFwcGFibGU+Ci1pbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjhGYXN0Rm9yTWFpbldv
cmxkKFRlc3RUeXBlZGVmcyogaW1wbCwgY29uc3QgSG9sZGVyQ29udGFpbmVyJiBjb250YWluZXIs
IFdyYXBwYWJsZSogd3JhcHBhYmxlKQotewotICAgIEFTU0VSVCh3b3JsZFR5cGUoY29udGFpbmVy
LkdldElzb2xhdGUoKSkgPT0gTWFpbldvcmxkKTsKLSAgICBpZiAoVU5MSUtFTFkoIWltcGwpKQot
ICAgICAgICByZXR1cm4gdjhOdWxsKGNvbnRhaW5lci5HZXRJc29sYXRlKCkpOwotICAgIHY4OjpI
YW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IERPTURhdGFTdG9yZTo6Z2V0V3JhcHBlckZvck1h
aW5Xb3JsZChpbXBsKTsKLSAgICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgpKQotICAgICAgICByZXR1
cm4gd3JhcHBlcjsKLSAgICByZXR1cm4gd3JhcChpbXBsLCBjb250YWluZXIuSG9sZGVyKCksIGNv
bnRhaW5lci5HZXRJc29sYXRlKCkpOwotfQotCi10ZW1wbGF0ZTxjbGFzcyBIb2xkZXJDb250YWlu
ZXIsIGNsYXNzIFdyYXBwYWJsZT4KLWlubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOEZh
c3RGb3JNYWluV29ybGQoUGFzc1JlZlB0cjwgVGVzdFR5cGVkZWZzID4gaW1wbCwgY29uc3QgSG9s
ZGVyQ29udGFpbmVyJiBjb250YWluZXIsIFdyYXBwYWJsZSogd3JhcHBhYmxlKQotewotICAgIHJl
dHVybiB0b1Y4RmFzdEZvck1haW5Xb3JsZChpbXBsLmdldCgpLCBjb250YWluZXIsIHdyYXBwYWJs
ZSk7Ci19Ci0KLQotdGVtcGxhdGU8Y2xhc3MgSG9sZGVyQ29udGFpbmVyLCBjbGFzcyBXcmFwcGFi
bGU+CiBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjhGYXN0KFBhc3NSZWZQdHI8IFRl
c3RUeXBlZGVmcyA+IGltcGwsIGNvbnN0IEhvbGRlckNvbnRhaW5lciYgY29udGFpbmVyLCBXcmFw
cGFibGUqIHdyYXBwYWJsZSkKIHsKICAgICByZXR1cm4gdG9WOEZhc3QoaW1wbC5nZXQoKSwgY29u
dGFpbmVyLCB3cmFwcGFibGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvRE9NRGF0YVN0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01EYXRhU3Rv
cmUuaAppbmRleCBiNDAwZWUzZDMwZjJhOTVhOTE2OGY3ZjliYzE1MjcwNGVmNjdiNTQwLi5jMDUw
MzNmMGI2Y2E1YzM2OThhYTc2NDU4Mzk2ZmFhM2MxMmYwZWE2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9ET01EYXRhU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9ET01EYXRhU3RvcmUuaApAQCAtODQsMTYgKzg0LDYgQEAgcHVibGljOgogICAg
IH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgc3RhdGljIHY4OjpIYW5kbGU8djg6
Ok9iamVjdD4gZ2V0V3JhcHBlckZvck1haW5Xb3JsZChUKiBvYmplY3QpCi0gICAgewotICAgICAg
ICBpZiAobWFpbldvcmxkV3JhcHBlcklzU3RvcmVkSW5PYmplY3Qob2JqZWN0KSAmJiBpc01haW5X
b3JsZE9iamVjdChvYmplY3QpKSB7Ci0gICAgICAgICAgICBpZiAoTElLRUxZKCFET01XcmFwcGVy
V29ybGQ6Omlzb2xhdGVkV29ybGRzRXhpc3QoKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGdl
dFdyYXBwZXJGcm9tT2JqZWN0KG9iamVjdCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG1h
aW5Xb3JsZFN0b3JlKCktPmdldChvYmplY3QpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+CiAgICAgc3RhdGljIHZvaWQgc2V0V3JhcHBlcihUKiBvYmplY3QsIHY4OjpIYW5kbGU8
djg6Ok9iamVjdD4gd3JhcHBlciwgdjg6Oklzb2xhdGUqIGlzb2xhdGUsIGNvbnN0IFdyYXBwZXJD
b25maWd1cmF0aW9uJiBjb25maWd1cmF0aW9uKQogICAgIHsKICAgICAgICAgaWYgKG1haW5Xb3Js
ZFdyYXBwZXJJc1N0b3JlZEluT2JqZWN0KG9iamVjdCkgJiYgaXNNYWluV29ybGRPYmplY3Qob2Jq
ZWN0KSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01Db25m
aWd1cmF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NQ29uZmlndXJh
dGlvbi5jcHAKaW5kZXggZjkyMzRmN2EyNWRhZTE4YmU5NTc1MDI3OTM3MTJlYmFhYmQzNDliNC4u
NWZlN2JjZmFjZGRlNTY1NzJiNWUyMGIwZWIzNjdlNTYwZGVjYWU5ZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01Db25maWd1cmF0aW9uLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTUNvbmZpZ3VyYXRpb24uY3BwCkBAIC03NywxNCAr
NzcsNCBAQCB2ODo6TG9jYWw8djg6OlNpZ25hdHVyZT4gVjhET01Db25maWd1cmF0aW9uOjpjb25m
aWd1cmVUZW1wbGF0ZSh2ODo6UGVyc2lzdGVudDx2OAogICAgIHJldHVybiBkZWZhdWx0U2lnbmF0
dXJlOwogfQogCi12b2lkIFY4RE9NQ29uZmlndXJhdGlvbjo6YWRkVG9UZW1wbGF0ZSh2ODo6UGVy
c2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gZnVuY3Rpb25EZXNjcmlwdG9yLCBjb25zdCBC
YXRjaGVkQXR0cmlidXRlKiBhdHRyaWJ1dGVzLCBzaXplX3QgYXR0cmlidXRlQ291bnQsIGNvbnN0
IEJhdGNoZWRNZXRob2QqIGNhbGxiYWNrcywgc2l6ZV90IGNhbGxiYWNrQ291bnQsIHY4OjpJc29s
YXRlKiBpc29sYXRlLCB2ODo6TG9jYWw8djg6OlNpZ25hdHVyZT4gc2lnbmF0dXJlKQotewotICAg
IGlmIChhdHRyaWJ1dGVDb3VudCkgewotICAgICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdFRlbXBs
YXRlPiBpbnN0YW5jZSA9IGZ1bmN0aW9uRGVzY3JpcHRvci0+SW5zdGFuY2VUZW1wbGF0ZSgpOwot
ICAgICAgICBiYXRjaENvbmZpZ3VyZUF0dHJpYnV0ZXMoaW5zdGFuY2UsIGZ1bmN0aW9uRGVzY3Jp
cHRvci0+UHJvdG90eXBlVGVtcGxhdGUoKSwgYXR0cmlidXRlcywgYXR0cmlidXRlQ291bnQsIGlz
b2xhdGUpOwotICAgIH0KLSAgICBpZiAoY2FsbGJhY2tDb3VudCkKLSAgICAgICAgYmF0Y2hDb25m
aWd1cmVDYWxsYmFja3MoZnVuY3Rpb25EZXNjcmlwdG9yLT5Qcm90b3R5cGVUZW1wbGF0ZSgpLCBz
aWduYXR1cmUsIHN0YXRpY19jYXN0PHY4OjpQcm9wZXJ0eUF0dHJpYnV0ZT4odjg6OkRvbnREZWxl
dGUpLCBjYWxsYmFja3MsIGNhbGxiYWNrQ291bnQsIGlzb2xhdGUpOwotfQotCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERP
TUNvbmZpZ3VyYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NQ29uZmln
dXJhdGlvbi5oCmluZGV4IGFjMDI4NjhkNzJjMjM3MjZhZDUwMjYxM2VlNzAzOTRhYWFjMjI2YTku
LjhmOWM5MWEwYWEzMGY5ODQ0MDg1Yjg3MGI4ZWM5YTVkY2UyYTFjZmYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NQ29uZmlndXJhdGlvbi5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NQ29uZmlndXJhdGlvbi5oCkBAIC04NSw4ICs4NSw2
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBiYXRjaENvbmZpZ3VyZUNhbGxiYWNrcyh2ODo6
SGFuZGxlPHY4OjpPYmplY3RUZW1wbGF0ZT4sIHY4OjpIYW5kbGU8djg6OlNpZ25hdHVyZT4sIHY4
OjpQcm9wZXJ0eUF0dHJpYnV0ZSwgY29uc3QgQmF0Y2hlZE1ldGhvZCosIHNpemVfdCBjYWxsYmFj
a0NvdW50LCB2ODo6SXNvbGF0ZSopOwogCiAgICAgc3RhdGljIHY4OjpMb2NhbDx2ODo6U2lnbmF0
dXJlPiBjb25maWd1cmVUZW1wbGF0ZSh2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0
ZT4sIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlv
blRlbXBsYXRlPiBwYXJlbnRDbGFzcywgc2l6ZV90IGZpZWxkQ291bnQsIGNvbnN0IEJhdGNoZWRB
dHRyaWJ1dGUqLCBzaXplX3QgYXR0cmlidXRlQ291bnQsIGNvbnN0IEJhdGNoZWRNZXRob2QqLCBz
aXplX3QgY2FsbGJhY2tDb3VudCwgdjg6Oklzb2xhdGUqKTsKLQotICAgIHN0YXRpYyB2b2lkIGFk
ZFRvVGVtcGxhdGUodjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+LCBjb25zdCBC
YXRjaGVkQXR0cmlidXRlKiwgc2l6ZV90IGF0dHJpYnV0ZUNvdW50LCBjb25zdCBCYXRjaGVkTWV0
aG9kKiwgc2l6ZV90IGNhbGxiYWNrQ291bnQsIHY4OjpJc29sYXRlKiwgdjg6OkxvY2FsPHY4OjpT
aWduYXR1cmU+KTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTVdpbmRvd0N1c3RvbS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhET01XaW5kb3dDdXN0b20uY3BwCmlu
ZGV4IDc1NTcyMmI0ZmI2MTU2YjU4YzgwNGNjZTg1MjAzOTZiNTMyN2I4YTIuLjU5NWJkZjg5OWZk
ZmNmNjNhMzFlOTAyMGQwZTA4ZWEwMTJjYjc2ZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTVdpbmRvd0N1c3RvbS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NV2luZG93Q3VzdG9tLmNwcApAQCAtNjExLDkg
KzYxMSw0IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KERPTVdpbmRvdyogd2luZG93LCB2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29uCiAgICAgcmV0dXJuIGdsb2JhbDsKIH0K
IAotdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjhGb3JNYWluV29ybGQoRE9NV2luZG93KiB3aW5k
b3csIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSog
aXNvbGF0ZSkKLXsKLSAgICByZXR1cm4gdG9WOCh3aW5kb3csIGNyZWF0aW9uQ29udGV4dCwgaXNv
bGF0ZSk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEV2ZW50VGFyZ2V0Q3VzdG9tLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEV2ZW50VGFyZ2V0Q3VzdG9tLmNwcAppbmRl
eCAzZjc5Y2E3ZDBiYjhiZDA2NGI5YThiNmE0MjcyYTc3ZTNjOTIzM2ZjLi5lNzg5NmNjMTExOTUx
ZmI4ODM5MDYxZmM5ZjVjZTQ2N2I5ZDg4OTk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhFdmVudFRhcmdldEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RXZlbnRUYXJnZXRDdXN0b20uY3BwCkBAIC01Mywx
MSArNTMsNiBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChFdmVudFRhcmdldCogaW1wbCwg
djg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbgogICAgIHJldHVybiB2OFVuZGVmaW5l
ZCgpOwogfQogCi12ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOEZvck1haW5Xb3JsZChFdmVudFRh
cmdldCogaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJ
c29sYXRlKiBpc29sYXRlKQotewotICAgIHJldHVybiB0b1Y4KGltcGwsIGNyZWF0aW9uQ29udGV4
dCwgaXNvbGF0ZSk7Ci19Ci0KICN1bmRlZiBUUllfVE9fV1JBUF9XSVRIX0lOVEVSRkFDRQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhJREJBbnlDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4SURCQW55Q3VzdG9tLmNwcAppbmRleCA0NjdlMWE2YmZhYjYzZWYyOTJiMzU5
ZTMyNzYxZjAyNjVhYThhNjQ5Li5lMTE5ZWU1YmYwMTdjYmI1NDVmYTI0MzhlMTE1MmJjYzVjZjY2
YjJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJREJB
bnlDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOElE
QkFueUN1c3RvbS5jcHAKQEAgLTEwMSwxMSArMTAxLDYgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IHRvVjgoSURCQW55KiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4
dCwKICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogfQogCi12ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gdG9WOEZvck1haW5Xb3JsZChJREJBbnkqIGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4g
Y3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKLXsKLSAgICByZXR1cm4gdG9W
OChpbXBsLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE1pY3JvRGF0YUl0ZW1WYWx1ZUN1
c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhNaWNyb0RhdGFJ
dGVtVmFsdWVDdXN0b20uY3BwCmluZGV4IDI2MGFlNzg5YWFlMDlhOWFlODJkNmU5ZmY1MzkwNzMz
NjE2NzNiOWYuLjk1M2JiZWMxNTA3YmQyNDZjYmY3YzczZDlkNDFiMTRjZGQ3OWUyZDIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE1pY3JvRGF0YUl0ZW1W
YWx1ZUN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
TWljcm9EYXRhSXRlbVZhbHVlQ3VzdG9tLmNwcApAQCAtNDgsMTEgKzQ4LDYgQEAgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IHRvVjgoTWljcm9EYXRhSXRlbVZhbHVlKiBpdGVtVmFsdWUsIHY4OjpIYW5k
bGU8djg6Ok9iamVjdD4KICAgICByZXR1cm4gdjhTdHJpbmcoaXRlbVZhbHVlLT5nZXRTdHJpbmco
KSwgaXNvbGF0ZSk7CiB9CiAKLXY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4Rm9yTWFpbldvcmxk
KE1pY3JvRGF0YUl0ZW1WYWx1ZSogaXRlbVZhbHVlLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNy
ZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCi17Ci0gICAgcmV0dXJuIHRvVjgo
aXRlbVZhbHVlLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwotfQotCiB9CiAKICNlbmRpZiAv
LyBFTkFCTEUoTUlDUk9EQVRBKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4V29ya2VyQ29udGV4dEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcAppbmRleCA3MmY2ZTNkNGMw
OTAzNDBlNTBkYTdhZDg1ZGU4YzgxZDE2YjczZjAwLi45MDZhMTRkM2FiNzRhYzA3Y2NkMDczMmZj
MGE3MzA5MTQ4MmViOWRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcApAQCAtMTQwLDExICsxNDAs
NiBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChXb3JrZXJDb250ZXh0KiBpbXBsLCB2ODo6
SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQwogICAgIHJldHVybiBnbG9iYWw7CiB9CiAKLXY4
OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4Rm9yTWFpbldvcmxkKFdvcmtlckNvbnRleHQqIGltcGws
IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNv
bGF0ZSkKLXsKLSAgICByZXR1cm4gdG9WOChpbXBsLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUp
OwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoV09SS0VS
UykK
</data>

          </attachment>
      

    </bug>

</bugzilla>