<?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>164435</bug_id>
          
          <creation_ts>2016-11-04 14:57:44 -0700</creation_ts>
          <short_desc>[WebIDL] Add support for modern callback syntax</short_desc>
          <delta_ts>2016-11-04 17:06:36 -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>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>commit-queue</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1248297</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-11-04 14:57:44 -0700</bug_when>
    <thetext>[WebIDL] Add support for modern callback syntax</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248304</commentid>
    <comment_count>1</comment_count>
      <attachid>293939</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-11-04 15:10:00 -0700</bug_when>
    <thetext>Created attachment 293939
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248364</commentid>
    <comment_count>2</comment_count>
      <attachid>293939</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-11-04 16:42:33 -0700</bug_when>
    <thetext>Comment on attachment 293939
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248379</commentid>
    <comment_count>3</comment_count>
      <attachid>293939</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-11-04 17:06:32 -0700</bug_when>
    <thetext>Comment on attachment 293939
Patch

Clearing flags on attachment: 293939

Committed r208408: &lt;http://trac.webkit.org/changeset/208408&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248380</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-11-04 17:06:36 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293939</attachid>
            <date>2016-11-04 15:10:00 -0700</date>
            <delta_ts>2016-11-04 17:06:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-164435-20161104150558.patch</filename>
            <type>text/plain</type>
            <size>133357</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwODQwMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg5IEBACisyMDE2LTExLTA0ICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW1dlYklETF0gQWRkIHN1cHBvcnQgZm9y
IG1vZGVybiBjYWxsYmFjayBzeW50YXgKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE2NDQzNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFN1cHBvcnQgbmV3IGNhbGxiYWNrIHN5bnRheDoKKyAgICAgICAgICAg
IGNhbGxiYWNrIEZ1bmN0aW9uID0gdm9pZCAoRE9NU3RyaW5nIGFyZzEsIGxvbmcgYXJnMik7CisK
KyAgICAgICAgVGhpcyByZXBsYWNlcyAiY2FsbGJhY2sgaW50ZXJmYWNlIiB0eXBlcyB3aXRoIGEg
Q2FsbGJhY2s9RnVuY3Rpb25Pbmx5CisgICAgICAgIGV4dGVuZGVkIGF0dHJpYnV0ZS4KKworICAg
ICAgICAqIE1vZHVsZXMvZ2VvbG9jYXRpb24vUG9zaXRpb25DYWxsYmFjay5pZGw6CisgICAgICAg
ICogTW9kdWxlcy9nZW9sb2NhdGlvbi9Qb3NpdGlvbkVycm9yQ2FsbGJhY2suaWRsOgorICAgICAg
ICAqIE1vZHVsZXMvbm90aWZpY2F0aW9ucy9Ob3RpZmljYXRpb25QZXJtaXNzaW9uQ2FsbGJhY2su
aWRsOgorICAgICAgICAqIE1vZHVsZXMvcXVvdGEvU3RvcmFnZUVycm9yQ2FsbGJhY2suaWRsOgor
ICAgICAgICAqIE1vZHVsZXMvcXVvdGEvU3RvcmFnZVF1b3RhQ2FsbGJhY2suaWRsOgorICAgICAg
ICAqIE1vZHVsZXMvcXVvdGEvU3RvcmFnZVVzYWdlQ2FsbGJhY2suaWRsOgorICAgICAgICAqIE1v
ZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXJDYWxsYmFjay5pZGw6CisgICAgICAgICogTW9kdWxl
cy93ZWJkYXRhYmFzZS9EYXRhYmFzZUNhbGxiYWNrLmlkbDoKKyAgICAgICAgKiBNb2R1bGVzL3dl
YmRhdGFiYXNlL1NRTFN0YXRlbWVudENhbGxiYWNrLmlkbDoKKyAgICAgICAgKiBNb2R1bGVzL3dl
YmRhdGFiYXNlL1NRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suaWRsOgorICAgICAgICAqIE1vZHVs
ZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5pZGw6CisgICAgICAgICogTW9k
dWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suaWRsOgorICAgICAg
ICAqIGRvbS9SZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFjay5pZGw6CisgICAgICAgICogZG9t
L1N0cmluZ0NhbGxiYWNrLmlkbDoKKyAgICAgICAgKiBodG1sL1ZvaWRDYWxsYmFjay5pZGw6Cisg
ICAgICAgICogcGFnZS9JbnRlcnNlY3Rpb25PYnNlcnZlckNhbGxiYWNrLmlkbDoKKyAgICAgICAg
KiBjc3MvTWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5pZGw6CisgICAgICAgIFVwZGF0ZSB0byBuZXcg
c3ludGF4LgorCisgICAgICAgICogY3NzL01lZGlhUXVlcnlMaXN0TGlzdGVuZXIuaDoKKyAgICAg
ICAgKiBjc3MvTWVkaWFRdWVyeU1hdGNoZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFR
dWVyeU1hdGNoZXI6OnN0eWxlUmVzb2x2ZXJDaGFuZ2VkKToKKyAgICAgICAgU3dpdGNoIHRvIHVz
aW5nIHRoZSBub3cgcmVxdWlyZWQgJ2hhbmRsZUV2ZW50JyBuYW1lLiBUaGlzIGlzIGFuIGltcGxl
bWVudGF0aW9uIGRldGFpbAorICAgICAgICB0aGF0IHdlIHNob3VsZCBjaGFuZ2UuCisKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3IucG06CisgICAgICAgIFVwZGF0ZSBk
b2N1bWVudCBwcm9jZXNzaW5nIHRvIGFsbG93IGEgY2FsbGJhY2sgb25seSBmaWxlLiBVcGRhdGUg
Y2FsbGJhY2sKKyAgICAgICAgdHlwZSBjaGVja3MgdG8gbG9vayBmb3IgYSByZWdleCB0aGF0IG1h
dGNoZXMgaW4gdGhlIG5ldyBmb3JtYXQuCisKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JKUy5wbToKKyAgICAgICAgKEFkZFRvSW1wbEluY2x1ZGVzRm9ySURMVHlwZSk6
CisgICAgICAgIChBZGRUb0luY2x1ZGVzRm9ySURMVHlwZSk6CisgICAgICAgIChBZGRUb0ltcGxJ
bmNsdWRlcyk6CisgICAgICAgIChBZGRUb0luY2x1ZGVzKToKKyAgICAgICAgQWJzdHJhY3QgaW5j
bHVkZXMgZnVuY3Rpb25zIHRvIGFsbG93IHBhc3NpbmcgaW4gYW4gaW5jbHVkZSBoYXNoLgorCisg
ICAgICAgIChHZW5lcmF0ZUNhbGxiYWNrRnVuY3Rpb25IZWFkZXIpOgorICAgICAgICAoR2VuZXJh
dGVDYWxsYmFja0Z1bmN0aW9uSW1wbGVtZW50YXRpb24pOgorICAgICAgICAoR2VuZXJhdGVDYWxs
YmFja0ludGVyZmFjZUhlYWRlcik6CisgICAgICAgIChHZW5lcmF0ZUNhbGxiYWNrSW50ZXJmYWNl
SW1wbGVtZW50YXRpb24pOgorICAgICAgICAoR2VuZXJhdGVDYWxsYmFja0hlYWRlckNvbnRlbnQp
OgorICAgICAgICAoR2VuZXJhdGVDYWxsYmFja0ltcGxlbWVudGF0aW9uQ29udGVudCk6CisgICAg
ICAgIFJlZmFjdG9yIGNhbGxiYWNrIGdlbmVyYXRpb24gY29kZSBpbnRvIEdlbmVyYXRlQ2FsbGJh
Y2tIZWFkZXJDb250ZW50IGFuZCBHZW5lcmF0ZUNhbGxiYWNrSW1wbGVtZW50YXRpb25Db250ZW50
CisgICAgICAgIHRvIGFsbG93IHVzaW5nIGl0IGZvciBib3RoIHRoZSBuZXcgY2FsbGJhY2tzIGFz
IHdlbGwgYXMgdGhlIG9sZCBjYWxsYmFjayBpbnRlcmZhY2VzLgorCisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy9JRExQYXJzZXIucG06CisgICAgICAgIChQYXJzZSk6CisgICAgICAgIChhcHBs
eVR5cGVkZWZzKToKKyAgICAgICAgKGFwcGx5VHlwZWRlZnNUb09wZXJhdGlvbik6CisgICAgICAg
IChwYXJzZUNhbGxiYWNrUmVzdCk6CisgICAgICAgIFBhcnNlIGNhbGxiYWNrcyBpbnRvIHRoZSBu
ZXcgSURMQ2FsbGJhY2tGdW5jdGlvbiB0eXBlLiBFbnN1cmUgdGhhdCB0eXBlZGVmcyBhcmUgYXBw
bGllZCBhcyB3ZWxsLgorCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9JRExBdHRyaWJ1dGVz
LnR4dDoKKyAgICAgICAgUmVtb3ZlIHN1cHBvcnQgZm9yIENhbGxiYWNrPUZ1bmN0aW9uT25seS4K
KworICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFjay5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxi
YWNrLmg6IFJlbW92ZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dENhbGxiYWNrRnVuY3Rpb24uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RDYWxsYmFja0Z1bmN0aW9uLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdENhbGxiYWNrRnVuY3Rpb25XaXRoVHlwZWRlZnMuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbGJhY2tGdW5jdGlvbldp
dGhUeXBlZGVmcy5oOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0Q2FsbGJhY2tJbnRlcmZhY2UuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbGJhY2suY3BwLgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFja0ludGVyZmFjZS5oOiBDb3BpZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbGJh
Y2suaC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcDoK
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuY3BwOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0Q2FsbGJhY2suaWRsOiBSZW1vdmVk
LgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0Q2FsbGJhY2tGdW5jdGlvbi5p
ZGw6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RDYWxsYmFja0Z1bmN0aW9u
V2l0aFR5cGVkZWZzLmlkbDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Rlc3RDYWxsYmFja0ludGVyZmFjZS5pZGw6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0Q2FsbGJhY2suaWRsLgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9UZXN0T2JqLmlkbDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvVGVzdFR5cGVkZWZzLmlkbDoKKyAgICAgICAgVXBkYXRlIGV4aXN0aW5nIHRlc3RzIGFuZCBh
ZGQgbmV3IG9uZXMgdG8gdGVzdCBjYWxsYmFjayBmdW5jdGlvbnMgc3BlY2lmaWNhbGx5LgorCiAy
MDE2LTExLTA0ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CiAK
ICAgICAgICAgQWRkIGEgc2V0dGluZyBhbmQgcHJlZmVyZW5jZXMgdG8gZW5hYmxlL2Rpc2FibGUg
YXN5bmMgaW1hZ2UgZGVjb2RpbmcKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2VvbG9j
YXRpb24vUG9zaXRpb25DYWxsYmFjay5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9nZW9sb2NhdGlvbi9Qb3NpdGlvbkNhbGxiYWNrLmlkbAkocmV2aXNpb24gMjA4Mzk2
KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nZW9sb2NhdGlvbi9Qb3NpdGlvbkNhbGxiYWNr
LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNCBAQAogCiBbCiAgICAgQ29uZGl0aW9u
YWw9R0VPTE9DQVRJT04sCi0gICAgQ2FsbGJhY2s9RnVuY3Rpb25Pbmx5LAotXSBjYWxsYmFjayBp
bnRlcmZhY2UgUG9zaXRpb25DYWxsYmFjayB7Ci0gICAgYm9vbGVhbiBoYW5kbGVFdmVudChHZW9w
b3NpdGlvbiBwb3NpdGlvbik7Ci19OworXSBjYWxsYmFjayBQb3NpdGlvbkNhbGxiYWNrID0gdm9p
ZCAoR2VvcG9zaXRpb24gcG9zaXRpb24pOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9n
ZW9sb2NhdGlvbi9Qb3NpdGlvbkVycm9yQ2FsbGJhY2suaWRsCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvZ2VvbG9jYXRpb24vUG9zaXRpb25FcnJvckNhbGxiYWNrLmlkbAko
cmV2aXNpb24gMjA4Mzk2KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nZW9sb2NhdGlvbi9Q
b3NpdGlvbkVycm9yQ2FsbGJhY2suaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw3ICsyNCw0IEBA
CiAKIFsKICAgICBDb25kaXRpb25hbD1HRU9MT0NBVElPTiwKLSAgICBDYWxsYmFjaz1GdW5jdGlv
bk9ubHksCi1dIGNhbGxiYWNrIGludGVyZmFjZSBQb3NpdGlvbkVycm9yQ2FsbGJhY2sgewotICAg
IGJvb2xlYW4gaGFuZGxlRXZlbnQoUG9zaXRpb25FcnJvciBlcnJvcik7Ci19OworXSBjYWxsYmFj
ayBQb3NpdGlvbkVycm9yQ2FsbGJhY2sgPSB2b2lkIChQb3NpdGlvbkVycm9yIGVycm9yKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbm90aWZpY2F0aW9ucy9Ob3RpZmljYXRpb25QZXJt
aXNzaW9uQ2FsbGJhY2suaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bm90aWZpY2F0aW9ucy9Ob3RpZmljYXRpb25QZXJtaXNzaW9uQ2FsbGJhY2suaWRsCShyZXZpc2lv
biAyMDgzOTYpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL25vdGlmaWNhdGlvbnMvTm90aWZp
Y2F0aW9uUGVybWlzc2lvbkNhbGxiYWNrLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMjUsOCArMjUs
NSBAQAogCiBbCiAgICAgQ29uZGl0aW9uYWw9Tk9USUZJQ0FUSU9OUywKLSAgICBDYWxsYmFjaz1G
dW5jdGlvbk9ubHksCi1dIGNhbGxiYWNrIGludGVyZmFjZSBOb3RpZmljYXRpb25QZXJtaXNzaW9u
Q2FsbGJhY2sgewotICAgIGJvb2xlYW4gaGFuZGxlRXZlbnQoRE9NU3RyaW5nIHBlcm1pc3Npb24p
OwotfTsKK10gY2FsbGJhY2sgTm90aWZpY2F0aW9uUGVybWlzc2lvbkNhbGxiYWNrID0gdm9pZCAo
RE9NU3RyaW5nIHBlcm1pc3Npb24pOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3F1
b3RhL1N0b3JhZ2VFcnJvckNhbGxiYWNrLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3F1b3RhL1N0b3JhZ2VFcnJvckNhbGxiYWNrLmlkbAkocmV2aXNpb24gMjA4Mzk2
KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9xdW90YS9TdG9yYWdlRXJyb3JDYWxsYmFjay5p
ZGwJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDQgQEAKIAogWwogICAgIENvbmRpdGlvbmFs
PVFVT1RBLAotICAgIENhbGxiYWNrPUZ1bmN0aW9uT25seSwKLV0gY2FsbGJhY2sgaW50ZXJmYWNl
IFN0b3JhZ2VFcnJvckNhbGxiYWNrIHsKLSAgICBib29sZWFuIGhhbmRsZUV2ZW50KERPTUNvcmVF
eGNlcHRpb24gZXJyb3IpOwotfTsKK10gY2FsbGJhY2sgU3RvcmFnZUVycm9yQ2FsbGJhY2sgPSB2
b2lkIChET01Db3JlRXhjZXB0aW9uIGVycm9yKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvcXVvdGEvU3RvcmFnZVF1b3RhQ2FsbGJhY2suaWRsCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvcXVvdGEvU3RvcmFnZVF1b3RhQ2FsbGJhY2suaWRsCShyZXZpc2lvbiAy
MDgzOTYpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3F1b3RhL1N0b3JhZ2VRdW90YUNhbGxi
YWNrLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNCBAQAogCiBbCiAgICAgQ29uZGl0
aW9uYWw9UVVPVEEsCi0gICAgQ2FsbGJhY2s9RnVuY3Rpb25Pbmx5LAotXSBjYWxsYmFjayBpbnRl
cmZhY2UgU3RvcmFnZVF1b3RhQ2FsbGJhY2sgewotICAgIGJvb2xlYW4gaGFuZGxlRXZlbnQodW5z
aWduZWQgbG9uZyBsb25nIGdyYW50ZWRRdW90YUluQnl0ZXMpOwotfTsKK10gY2FsbGJhY2sgU3Rv
cmFnZVF1b3RhQ2FsbGJhY2sgPSB2b2lkICh1bnNpZ25lZCBsb25nIGxvbmcgZ3JhbnRlZFF1b3Rh
SW5CeXRlcyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3F1b3RhL1N0b3JhZ2VVc2Fn
ZUNhbGxiYWNrLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3F1b3Rh
L1N0b3JhZ2VVc2FnZUNhbGxiYWNrLmlkbAkocmV2aXNpb24gMjA4Mzk2KQorKysgU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9xdW90YS9TdG9yYWdlVXNhZ2VDYWxsYmFjay5pZGwJKHdvcmtpbmcgY29w
eSkKQEAgLTMwLDcgKzMwLDQgQEAKIAogWwogICAgIENvbmRpdGlvbmFsPVFVT1RBLAotICAgIENh
bGxiYWNrPUZ1bmN0aW9uT25seSwKLV0gY2FsbGJhY2sgaW50ZXJmYWNlIFN0b3JhZ2VVc2FnZUNh
bGxiYWNrIHsKLSAgICBib29sZWFuIGhhbmRsZUV2ZW50KHVuc2lnbmVkIGxvbmcgbG9uZyBjdXJy
ZW50VXNhZ2VJbkJ5dGVzLCB1bnNpZ25lZCBsb25nIGxvbmcgY3VycmVudFF1b3RhSW5CeXRlcyk7
Ci19OworXSBjYWxsYmFjayBTdG9yYWdlVXNhZ2VDYWxsYmFjayA9IHZvaWQgKHVuc2lnbmVkIGxv
bmcgbG9uZyBjdXJyZW50VXNhZ2VJbkJ5dGVzLCB1bnNpZ25lZCBsb25nIGxvbmcgY3VycmVudFF1
b3RhSW5CeXRlcyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlv
QnVmZmVyQ2FsbGJhY2suaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViYXVkaW8vQXVkaW9CdWZmZXJDYWxsYmFjay5pZGwJKHJldmlzaW9uIDIwODM5NikKKysrIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXJDYWxsYmFjay5pZGwJKHdv
cmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDQgQEAKIFsKICAgICBDb25kaXRpb25hbD1XRUJfQVVE
SU8sCiAgICAgSlNHZW5lcmF0ZVRvSlNPYmplY3QsCi0gICAgQ2FsbGJhY2s9RnVuY3Rpb25Pbmx5
LAotXSBjYWxsYmFjayBpbnRlcmZhY2UgQXVkaW9CdWZmZXJDYWxsYmFjayB7Ci0gICAgYm9vbGVh
biBoYW5kbGVFdmVudChBdWRpb0J1ZmZlciBhdWRpb0J1ZmZlcik7Ci19OworXSBjYWxsYmFjayBB
dWRpb0J1ZmZlckNhbGxiYWNrID0gdm9pZCAoQXVkaW9CdWZmZXIgYXVkaW9CdWZmZXIpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUNhbGxiYWNrLmlk
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFi
YXNlQ2FsbGJhY2suaWRsCShyZXZpc2lvbiAyMDgzOTYpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQ2FsbGJhY2suaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0y
Niw4ICsyNiw0IEBACiAgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLVsKLSAgICBDYWxsYmFjaz1GdW5jdGlv
bk9ubHksCi1dIGNhbGxiYWNrIGludGVyZmFjZSBEYXRhYmFzZUNhbGxiYWNrIHsKLSAgICBib29s
ZWFuIGhhbmRsZUV2ZW50KERhdGFiYXNlIGRhdGFiYXNlKTsKLX07CitjYWxsYmFjayBEYXRhYmFz
ZUNhbGxiYWNrID0gdm9pZCAoRGF0YWJhc2UgZGF0YWJhc2UpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxTdGF0ZW1lbnRDYWxsYmFjay5pZGwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxTdGF0ZW1lbnRDYWxs
YmFjay5pZGwJKHJldmlzaW9uIDIwODM5NikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
ZGF0YWJhc2UvU1FMU3RhdGVtZW50Q2FsbGJhY2suaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw4
ICsyNSw1IEBACiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKICAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KLVsKLSAgICBD
YWxsYmFjaz1GdW5jdGlvbk9ubHksCi1dIGNhbGxiYWNrIGludGVyZmFjZSBTUUxTdGF0ZW1lbnRD
YWxsYmFjayB7Ci0gICAgYm9vbGVhbiBoYW5kbGVFdmVudChTUUxUcmFuc2FjdGlvbiB0cmFuc2Fj
dGlvbiwgU1FMUmVzdWx0U2V0IHJlc3VsdFNldCk7Ci19OworCitjYWxsYmFjayBTUUxTdGF0ZW1l
bnRDYWxsYmFjayA9IHZvaWQgKFNRTFRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uLCBTUUxSZXN1bHRT
ZXQgcmVzdWx0U2V0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2Uv
U1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmlkbAkocmV2
aXNpb24gMjA4Mzk2KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxT
dGF0ZW1lbnRFcnJvckNhbGxiYWNrLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMjUsOCArMjUsNyBA
QAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCiAgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCisKIFsKLSAgICBDYWxsYmFj
az1GdW5jdGlvbk9ubHksCi1dIGNhbGxiYWNrIGludGVyZmFjZSBTUUxTdGF0ZW1lbnRFcnJvckNh
bGxiYWNrIHsKLSAgICBbQ3VzdG9tXSBib29sZWFuIGhhbmRsZUV2ZW50KFNRTFRyYW5zYWN0aW9u
IHRyYW5zYWN0aW9uLCBTUUxFcnJvciBlcnJvcik7Ci19OworICAgIEN1c3RvbQorXSBjYWxsYmFj
ayBTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrID0gYm9vbGVhbiAoU1FMVHJhbnNhY3Rpb24gdHJh
bnNhY3Rpb24sIFNRTEVycm9yIGVycm9yKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5pZGwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmlk
bAkocmV2aXNpb24gMjA4Mzk2KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFz
ZS9TUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMjUsOCArMjUs
NSBAQAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCiAgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCi1bCi0gICAgQ2FsbGJh
Y2s9RnVuY3Rpb25Pbmx5LAotXSBjYWxsYmFjayBpbnRlcmZhY2UgU1FMVHJhbnNhY3Rpb25DYWxs
YmFjayB7Ci0gICAgYm9vbGVhbiBoYW5kbGVFdmVudChTUUxUcmFuc2FjdGlvbiB0cmFuc2FjdGlv
bik7Ci19OworCitjYWxsYmFjayBTUUxUcmFuc2FjdGlvbkNhbGxiYWNrID0gdm9pZCAoU1FMVHJh
bnNhY3Rpb24gdHJhbnNhY3Rpb24pOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suaWRsCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxi
YWNrLmlkbAkocmV2aXNpb24gMjA4Mzk2KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suaWRsCSh3b3JraW5nIGNvcHkpCkBA
IC0yNiw4ICsyNiw0IEBACiAgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLVsKLSAgICBDYWxsYmFjaz1GdW5j
dGlvbk9ubHksCi1dIGNhbGxiYWNrIGludGVyZmFjZSBTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJh
Y2sgewotICAgIGJvb2xlYW4gaGFuZGxlRXZlbnQoU1FMRXJyb3IgZXJyb3IpOwotfTsKK2NhbGxi
YWNrIFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjayA9IHZvaWQgKFNRTEVycm9yIGVycm9yKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvci5wbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0
b3IucG0JKHJldmlzaW9uIDIwODM5NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvQ29kZUdlbmVyYXRvci5wbQkod29ya2luZyBjb3B5KQpAQCAtNjQsMTggKzY0LDExIEBAIG15
ICVmbG9hdGluZ1BvaW50VHlwZUhhc2ggPSAoCiAgICAgInVucmVzdHJpY3RlZCBkb3VibGUiID0+
IDEsCiApOwogCi1teSAlcHJpbWl0aXZlVHlwZUhhc2ggPSAoICJib29sZWFuIiA9PiAxLCAidm9p
ZCIgPT4gMSwgIkRhdGUiID0+IDEgKTsKLQotIyBXZWJDb3JlIHR5cGVzIHVzZWQgZGlyZWN0bHkg
aW4gSURMIGZpbGVzLgotbXkgJXdlYkNvcmVUeXBlSGFzaCA9ICgKLSAgICAiRGljdGlvbmFyeSIg
PT4gMSwKLSAgICAiU2VyaWFsaXplZFNjcmlwdFZhbHVlIiA9PiAxLAorbXkgJXN0cmluZ1R5cGVI
YXNoID0gKAorICAgICJET01TdHJpbmciID0+IDEsCisgICAgIlVTVlN0cmluZyIgPT4gMSwKICk7
CiAKLW15ICVkaWN0aW9uYXJ5VHlwZUltcGxlbWVudGF0aW9uTmFtZU92ZXJyaWRlcyA9ICgpOwot
bXkgJWVudW1UeXBlSW1wbGVtZW50YXRpb25OYW1lT3ZlcnJpZGVzID0gKCk7Ci0KLQogbXkgJXR5
cGVkQXJyYXlUeXBlcyA9ICgKICAgICAiQXJyYXlCdWZmZXIiID0+IDEsCiAgICAgIkFycmF5QnVm
ZmVyVmlldyIgPT4gMSwKQEAgLTkxLDYgKzg0LDIxIEBAIG15ICV0eXBlZEFycmF5VHlwZXMgPSAo
CiAgICAgIlVpbnQ4Q2xhbXBlZEFycmF5IiA9PiAxLAogKTsKIAorbXkgJXByaW1pdGl2ZVR5cGVI
YXNoID0gKCAKKyAgICAiYm9vbGVhbiIgPT4gMSwgCisgICAgInZvaWQiID0+IDEsCisgICAgIkRh
dGUiID0+IDEKKyk7CisKKyMgV2ViQ29yZSB0eXBlcyB1c2VkIGRpcmVjdGx5IGluIElETCBmaWxl
cy4KK215ICV3ZWJDb3JlVHlwZUhhc2ggPSAoCisgICAgIkRpY3Rpb25hcnkiID0+IDEsCisgICAg
IlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSIgPT4gMSwKKyk7CisKK215ICVkaWN0aW9uYXJ5VHlwZUlt
cGxlbWVudGF0aW9uTmFtZU92ZXJyaWRlcyA9ICgpOworbXkgJWVudW1UeXBlSW1wbGVtZW50YXRp
b25OYW1lT3ZlcnJpZGVzID0gKCk7CisKIG15ICVzdmdBdHRyaWJ1dGVzSW5IVE1MSGFzaCA9ICgK
ICAgICAiY2xhc3MiID0+IDEsCiAgICAgImlkIiA9PiAxLApAQCAtMjA5LDYgKzIxNywxNyBAQCBz
dWIgUHJvY2Vzc0RvY3VtZW50CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICBteSAkY2Fs
bGJhY2tGdW5jdGlvbnMgPSAkdXNlRG9jdW1lbnQtPmNhbGxiYWNrRnVuY3Rpb25zOworICAgIGlm
IChAJGNhbGxiYWNrRnVuY3Rpb25zKSB7CisgICAgICAgIGRpZSAiTXVsdGlwbGUgc3RhbmRhbG9u
ZSBjYWxsYmFjayBmdW5jdGlvbnMgcGVyIGRvY3VtZW50IGFyZSBub3Qgc3VwcG9ydGVkIiBpZiBA
JGNhbGxiYWNrRnVuY3Rpb25zID4gMTsKKworICAgICAgICBteSAkY2FsbGJhY2tGdW5jdGlvbiA9
IEAkY2FsbGJhY2tGdW5jdGlvbnNbMF07CisgICAgICAgIHByaW50ICJHZW5lcmF0aW5nICR1c2VH
ZW5lcmF0b3IgYmluZGluZ3MgY29kZSBmb3IgSURMIGNhbGxiYWNrIGZ1bmN0aW9uIFwiIiAuICRj
YWxsYmFja0Z1bmN0aW9uLT50eXBlLT5uYW1lIC4gIlwiLi4uXG4iIGlmICR2ZXJib3NlOworICAg
ICAgICAkY29kZUdlbmVyYXRvci0+R2VuZXJhdGVDYWxsYmFja0Z1bmN0aW9uKCRjYWxsYmFja0Z1
bmN0aW9uLCAkdXNlRG9jdW1lbnQtPmVudW1lcmF0aW9ucywgJHVzZURvY3VtZW50LT5kaWN0aW9u
YXJpZXMpOworICAgICAgICAkY29kZUdlbmVyYXRvci0+V3JpdGVEYXRhKCRjYWxsYmFja0Z1bmN0
aW9uLCAkdXNlT3V0cHV0RGlyLCAkdXNlT3V0cHV0SGVhZGVyc0Rpcik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKICAgICBteSAkZGljdGlvbmFyaWVzID0gJHVzZURvY3VtZW50LT5kaWN0aW9u
YXJpZXM7CiAgICAgaWYgKEAkZGljdGlvbmFyaWVzKSB7CiAgICAgICAgIGRpZSAiTXVsdGlwbGUg
c3RhbmRhbG9uZSBkaWN0aW9uYXJpZXMgcGVyIGRvY3VtZW50IGFyZSBub3Qgc3VwcG9ydGVkIiBp
ZiBAJGRpY3Rpb25hcmllcyA+IDE7CkBAIC0zNjQsOCArMzgzLDcgQEAgc3ViIFNraXBJbmNsdWRl
SGVhZGVyCiAgICAgcmV0dXJuIDEgaWYgJGludGVnZXJUeXBlSGFzaHskdHlwZU5hbWV9OwogICAg
IHJldHVybiAxIGlmICRmbG9hdGluZ1BvaW50VHlwZUhhc2h7JHR5cGVOYW1lfTsKICAgICByZXR1
cm4gMSBpZiAkdHlwZWRBcnJheVR5cGVzeyR0eXBlTmFtZX07Ci0gICAgcmV0dXJuIDEgaWYgJHR5
cGVOYW1lIGVxICJET01TdHJpbmciOwotICAgIHJldHVybiAxIGlmICR0eXBlTmFtZSBlcSAiVVNW
U3RyaW5nIjsKKyAgICByZXR1cm4gMSBpZiAkc3RyaW5nVHlwZUhhc2h7JHR5cGVOYW1lfTsKICAg
ICByZXR1cm4gMSBpZiAkdHlwZU5hbWUgZXEgIkJ1ZmZlclNvdXJjZSI7CiAgICAgcmV0dXJuIDEg
aWYgJHR5cGVOYW1lIGVxICJTVkdOdW1iZXIiOwogICAgIHJldHVybiAxIGlmICR0eXBlTmFtZSBl
cSAiYW55IjsKQEAgLTQyNiwxNSArNDQ0LDEzIEBAIHN1YiBJc1ByaW1pdGl2ZVR5cGUKICAgICBy
ZXR1cm4gMDsKIH0KIAotIyBDdXJyZW50bHkgdXNlZCBvdXRzaWRlIFdlYktpdCBpbiBhbiBpbnRl
cm5hbCBBcHBsZSBwcm9qZWN0OyBjYW4gYmUgcmVtb3ZlZCBzb29uLgogc3ViIElzU3RyaW5nVHlw
ZQogewogICAgIG15ICgkb2JqZWN0LCAkdHlwZSkgPSBAXzsKIAogICAgIGFzc2VydCgiTm90IGEg
dHlwZSIpIGlmIHJlZigkdHlwZSkgbmUgIklETFR5cGUiOwogCi0gICAgcmV0dXJuIDEgaWYgJHR5
cGUtPm5hbWUgZXEgIkRPTVN0cmluZyI7Ci0gICAgcmV0dXJuIDEgaWYgJHR5cGUtPm5hbWUgZXEg
IlVTVlN0cmluZyI7CisgICAgcmV0dXJuIDEgaWYgJHN0cmluZ1R5cGVIYXNoeyR0eXBlLT5uYW1l
fTsKICAgICByZXR1cm4gMDsKIH0KIApAQCAtMTAzMSwxNiArMTA0NywxMyBAQCBzdWIgSXNDYWxs
YmFja0ludGVyZmFjZQogICAgIHJldHVybiAkcmVzdWx0OwogfQogCi0jIENhbGxiYWNrIGludGVy
ZmFjZSB3aXRoIFtDYWxsYmFjaz1GdW5jdGlvbk9ubHldLgotIyBGSVhNRTogVGhpcyBzaG91bGQg
YmUgYSBjYWxsYmFjayBmdW5jdGlvbjoKLSMgaHR0cHM6Ly9oZXljYW0uZ2l0aHViLmlvL3dlYmlk
bC8jaWRsLWNhbGxiYWNrLWZ1bmN0aW9ucwotc3ViIENvbXB1dGVJc0Z1bmN0aW9uT25seUNhbGxi
YWNrSW50ZXJmYWNlCitzdWIgQ29tcHV0ZUlzQ2FsbGJhY2tGdW5jdGlvbgogewogICAgIG15ICgk
b2JqZWN0LCAkdHlwZSkgPSBAXzsKIAogICAgIGFzc2VydCgiTm90IGEgdHlwZSIpIGlmIHJlZigk
dHlwZSkgbmUgIklETFR5cGUiOwogCi0gICAgcmV0dXJuIDAgdW5sZXNzICRvYmplY3QtPklzQ2Fs
bGJhY2tJbnRlcmZhY2UoJHR5cGUpOworICAgIHJldHVybiAwIHVubGVzcyAkb2JqZWN0LT5Jc1dy
YXBwZXJUeXBlKCR0eXBlKTsKIAogICAgIG15ICR0eXBlTmFtZSA9ICR0eXBlLT5uYW1lOwogICAg
IG15ICRpZGxGaWxlID0gJG9iamVjdC0+SURMRmlsZUZvckludGVyZmFjZSgkdHlwZU5hbWUpIG9y
IGFzc2VydCgiQ291bGQgTk9UIGZpbmQgSURMIGZpbGUgZm9yIGludGVyZmFjZSBcIiR0eXBlTmFt
ZVwiIVxuIik7CkBAIC0xMDUwLDI1ICsxMDYzLDEyIEBAIHN1YiBDb21wdXRlSXNGdW5jdGlvbk9u
bHlDYWxsYmFja0ludGVyZmEKICAgICBjbG9zZSBGSUxFOwogCiAgICAgbXkgJGZpbGVDb250ZW50
cyA9IGpvaW4oJycsIEBsaW5lcyk7Ci0gICAgaWYgKCRmaWxlQ29udGVudHMgPX4gL1xbKC4qKVxd
XHMrY2FsbGJhY2tccytpbnRlcmZhY2VccysoXHcrKS9ncykgewotICAgICAgICBteSBAcGFydHMg
PSBzcGxpdCgnLCcsICQxKTsKLSAgICAgICAgZm9yZWFjaCBteSAkcGFydCAoQHBhcnRzKSB7Ci0g
ICAgICAgICAgICBteSBAa2V5VmFsdWUgPSBzcGxpdCgnPScsICRwYXJ0KTsKLSAgICAgICAgICAg
IG15ICRrZXkgPSB0cmltKCRrZXlWYWx1ZVswXSk7Ci0gICAgICAgICAgICBuZXh0IHVubGVzcyBs
ZW5ndGgoJGtleSk7Ci0gICAgICAgICAgICBteSAkdmFsdWUgPSAiVkFMVUVfSVNfTUlTU0lORyI7
Ci0gICAgICAgICAgICAkdmFsdWUgPSB0cmltKCRrZXlWYWx1ZVsxXSkgaWYgQGtleVZhbHVlID4g
MTsKLQotICAgICAgICAgICAgcmV0dXJuIDEgaWYgKCRrZXkgZXEgIkNhbGxiYWNrIiAmJiAkdmFs
dWUgZXEgIkZ1bmN0aW9uT25seSIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7
CisgICAgcmV0dXJuICgkZmlsZUNvbnRlbnRzID1+IC8oLiopY2FsbGJhY2tccysoXHcrKVxzKz0v
Z3MpOwogfQogCi1teSAlaXNGdW5jdGlvbk9ubHlDYWxsYmFja0ludGVyZmFjZSA9ICgpOworbXkg
JWlzQ2FsbGJhY2tGdW5jdGlvbiA9ICgpOwogCi1zdWIgSXNGdW5jdGlvbk9ubHlDYWxsYmFja0lu
dGVyZmFjZQorc3ViIElzQ2FsbGJhY2tGdW5jdGlvbgogewogICAgICMgRklYTUU6IEl0J3MgYmFk
IHRvIGhhdmUgYSBmdW5jdGlvbiBsaWtlIHRoaXMgdGhhdCBvcGVucyBhbm90aGVyIElETCBmaWxl
IHRvIGFuc3dlciBhIHF1ZXN0aW9uLgogICAgICMgT3ZlcnVzaW5nIHRoaXMga2luZCBvZiBmdW5j
dGlvbiBjYW4gbWFrZSB0aGluZ3MgcmVhbGx5IHNsb3cuIExldHMgYXZvaWQgdGhlc2UgaWYgd2Ug
Y2FuLgpAQCAtMTA3OCw5ICsxMDc4LDkgQEAgc3ViIElzRnVuY3Rpb25Pbmx5Q2FsbGJhY2tJbnRl
cmZhY2UKIAogICAgIGFzc2VydCgiTm90IGEgdHlwZSIpIGlmIHJlZigkdHlwZSkgbmUgIklETFR5
cGUiOwogCi0gICAgcmV0dXJuICRpc0Z1bmN0aW9uT25seUNhbGxiYWNrSW50ZXJmYWNleyR0eXBl
LT5uYW1lfSBpZiBleGlzdHMgJGlzRnVuY3Rpb25Pbmx5Q2FsbGJhY2tJbnRlcmZhY2V7JHR5cGUt
Pm5hbWV9OwotICAgIG15ICRyZXN1bHQgPSAkb2JqZWN0LT5Db21wdXRlSXNGdW5jdGlvbk9ubHlD
YWxsYmFja0ludGVyZmFjZSgkdHlwZSk7Ci0gICAgJGlzRnVuY3Rpb25Pbmx5Q2FsbGJhY2tJbnRl
cmZhY2V7JHR5cGUtPm5hbWV9ID0gJHJlc3VsdDsKKyAgICByZXR1cm4gJGlzQ2FsbGJhY2tGdW5j
dGlvbnskdHlwZS0+bmFtZX0gaWYgZXhpc3RzICRpc0NhbGxiYWNrRnVuY3Rpb257JHR5cGUtPm5h
bWV9OworICAgIG15ICRyZXN1bHQgPSAkb2JqZWN0LT5Db21wdXRlSXNDYWxsYmFja0Z1bmN0aW9u
KCR0eXBlKTsKKyAgICAkaXNDYWxsYmFja0Z1bmN0aW9ueyR0eXBlLT5uYW1lfSA9ICRyZXN1bHQ7
CiAgICAgcmV0dXJuICRyZXN1bHQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCShyZXZpc2lvbiAyMDgzOTYpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkod29y
a2luZyBjb3B5KQpAQCAtMTUwLDYgKzE1MCwxNCBAQCBzdWIgR2VuZXJhdGVEaWN0aW9uYXJ5CiAg
ICAgJG9iamVjdC0+R2VuZXJhdGVEaWN0aW9uYXJ5SW1wbGVtZW50YXRpb24oJGRpY3Rpb25hcnks
ICRjbGFzc05hbWUsICRlbnVtZXJhdGlvbnMpOwogfQogCitzdWIgR2VuZXJhdGVDYWxsYmFja0Z1
bmN0aW9uCit7CisgICAgbXkgKCRvYmplY3QsICRjYWxsYmFja0Z1bmN0aW9uLCAkZW51bWVyYXRp
b25zLCAkZGljdGlvbmFyaWVzKSA9IEBfOworCisgICAgJG9iamVjdC0+R2VuZXJhdGVDYWxsYmFj
a0Z1bmN0aW9uSGVhZGVyKCRjYWxsYmFja0Z1bmN0aW9uLCAkZW51bWVyYXRpb25zLCAkZGljdGlv
bmFyaWVzKTsKKyAgICAkb2JqZWN0LT5HZW5lcmF0ZUNhbGxiYWNrRnVuY3Rpb25JbXBsZW1lbnRh
dGlvbigkY2FsbGJhY2tGdW5jdGlvbiwgJGVudW1lcmF0aW9ucywgJGRpY3Rpb25hcmllcyk7Cit9
CisKIHN1YiBHZW5lcmF0ZUludGVyZmFjZQogewogICAgIG15ICgkb2JqZWN0LCAkaW50ZXJmYWNl
LCAkZGVmaW5lcywgJGVudW1lcmF0aW9ucywgJGRpY3Rpb25hcmllcykgPSBAXzsKQEAgLTE1OCw4
ICsxNjYsOCBAQCBzdWIgR2VuZXJhdGVJbnRlcmZhY2UKICAgICBBZGRTdHJpbmdpZmllck9wZXJh
dGlvbklmTmVlZGVkKCRpbnRlcmZhY2UpOwogCiAgICAgaWYgKCRpbnRlcmZhY2UtPmlzQ2FsbGJh
Y2spIHsKLSAgICAgICAgJG9iamVjdC0+R2VuZXJhdGVDYWxsYmFja0hlYWRlcigkaW50ZXJmYWNl
LCAkZW51bWVyYXRpb25zLCAkZGljdGlvbmFyaWVzKTsKLSAgICAgICAgJG9iamVjdC0+R2VuZXJh
dGVDYWxsYmFja0ltcGxlbWVudGF0aW9uKCRpbnRlcmZhY2UsICRlbnVtZXJhdGlvbnMsICRkaWN0
aW9uYXJpZXMpOworICAgICAgICAkb2JqZWN0LT5HZW5lcmF0ZUNhbGxiYWNrSW50ZXJmYWNlSGVh
ZGVyKCRpbnRlcmZhY2UsICRlbnVtZXJhdGlvbnMsICRkaWN0aW9uYXJpZXMpOworICAgICAgICAk
b2JqZWN0LT5HZW5lcmF0ZUNhbGxiYWNrSW50ZXJmYWNlSW1wbGVtZW50YXRpb24oJGludGVyZmFj
ZSwgJGVudW1lcmF0aW9ucywgJGRpY3Rpb25hcmllcyk7CiAgICAgfSBlbHNlIHsKICAgICAgICAg
JG9iamVjdC0+R2VuZXJhdGVIZWFkZXIoJGludGVyZmFjZSwgJGVudW1lcmF0aW9ucywgJGRpY3Rp
b25hcmllcyk7CiAgICAgICAgICRvYmplY3QtPkdlbmVyYXRlSW1wbGVtZW50YXRpb24oJGludGVy
ZmFjZSwgJGVudW1lcmF0aW9ucywgJGRpY3Rpb25hcmllcyk7CkBAIC0yMjIsOSArMjMwLDkgQEAg
c3ViIEdldENhbGxiYWNrQ2xhc3NOYW1lCiAKIHN1YiBHZXRKU0NhbGxiYWNrRGF0YVR5cGUKIHsK
LSAgICBteSAkY2FsbGJhY2tJbnRlcmZhY2UgPSBzaGlmdDsKKyAgICBteSAkY2FsbGJhY2sgPSBz
aGlmdDsKIAotICAgIHJldHVybiAkY2FsbGJhY2tJbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRl
cy0+e0lzV2Vha0NhbGxiYWNrfSA/ICJKU0NhbGxiYWNrRGF0YVdlYWsiIDogIkpTQ2FsbGJhY2tE
YXRhU3Ryb25nIjsKKyAgICByZXR1cm4gJGNhbGxiYWNrLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntJ
c1dlYWtDYWxsYmFja30gPyAiSlNDYWxsYmFja0RhdGFXZWFrIiA6ICJKU0NhbGxiYWNrRGF0YVN0
cm9uZyI7CiB9CiAKIHN1YiBHZXRFeHBvcnRNYWNyb0ZvckpTQ2xhc3MKQEAgLTI2MSw2ICsyNjks
MTMgQEAgc3ViIEFkZEluY2x1ZGVzRm9ySW1wbGVtZW50YXRpb25UeXBlCiBzdWIgQWRkVG9JbXBs
SW5jbHVkZXNGb3JJRExUeXBlCiB7CiAgICAgbXkgKCR0eXBlLCAkY29uZGl0aW9uYWwpID0gQF87
CisKKyAgICByZXR1cm4gQWRkVG9JbmNsdWRlc0ZvcklETFR5cGUoJHR5cGUsIFwlaW1wbEluY2x1
ZGVzLCAkY29uZGl0aW9uYWwpCit9CisKK3N1YiBBZGRUb0luY2x1ZGVzRm9ySURMVHlwZQorewor
ICAgIG15ICgkdHlwZSwgJGluY2x1ZGVzUmVmLCAkY29uZGl0aW9uYWwpID0gQF87CiAgICAgCiAg
ICAgcmV0dXJuIGlmICRjb2RlR2VuZXJhdG9yLT5Jc1ByaW1pdGl2ZVR5cGUoJHR5cGUpOwogICAg
IHJldHVybiBpZiAkY29kZUdlbmVyYXRvci0+SXNTdHJpbmdUeXBlKCR0eXBlKTsKQEAgLTI2OSw0
OSArMjg0LDU1IEBAIHN1YiBBZGRUb0ltcGxJbmNsdWRlc0ZvcklETFR5cGUKICAgICByZXR1cm4g
aWYgJHR5cGUtPm5hbWUgZXEgImFueSI7CiAKICAgICBpZiAoJHR5cGUtPmlzVW5pb24pIHsKLSAg
ICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIjx3dGYvVmFyaWFudC5oPiIsICRjb25kaXRpb25hbCk7
CisgICAgICAgIEFkZFRvSW5jbHVkZXMoIjx3dGYvVmFyaWFudC5oPiIsICRpbmNsdWRlc1JlZiwg
JGNvbmRpdGlvbmFsKTsKIAogICAgICAgICBmb3JlYWNoIG15ICRtZW1iZXJUeXBlIChAeyR0eXBl
LT5zdWJ0eXBlc30pIHsKLSAgICAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzRm9ySURMVHlwZSgk
bWVtYmVyVHlwZSwgJGNvbmRpdGlvbmFsKTsKKyAgICAgICAgICAgIEFkZFRvSW5jbHVkZXNGb3JJ
RExUeXBlKCRtZW1iZXJUeXBlLCAkaW5jbHVkZXNSZWYsICRjb25kaXRpb25hbCk7CiAgICAgICAg
IH0KIAogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5J
c1NlcXVlbmNlT3JGcm96ZW5BcnJheVR5cGUoJHR5cGUpKSB7Ci0gICAgICAgIEFkZFRvSW1wbElu
Y2x1ZGVzKCI8cnVudGltZS9KU0FycmF5Lmg+IiwgJGNvbmRpdGlvbmFsKTsKLSAgICAgICAgQWRk
VG9JbXBsSW5jbHVkZXNGb3JJRExUeXBlKEB7JHR5cGUtPnN1YnR5cGVzfVswXSwgJGNvbmRpdGlv
bmFsKTsKKyAgICAgICAgQWRkVG9JbmNsdWRlcygiPHJ1bnRpbWUvSlNBcnJheS5oPiIsICRpbmNs
dWRlc1JlZiwgJGNvbmRpdGlvbmFsKTsKKyAgICAgICAgQWRkVG9JbmNsdWRlc0ZvcklETFR5cGUo
QHskdHlwZS0+c3VidHlwZXN9WzBdLCAkaW5jbHVkZXNSZWYsICRjb25kaXRpb25hbCk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPklzV3JhcHBlclR5
cGUoJHR5cGUpIHx8ICRjb2RlR2VuZXJhdG9yLT5Jc0V4dGVybmFsRGljdGlvbmFyeVR5cGUoJHR5
cGUpIHx8ICRjb2RlR2VuZXJhdG9yLT5Jc0V4dGVybmFsRW51bVR5cGUoJHR5cGUpKSB7Ci0gICAg
ICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJKUyIgLiAkdHlwZS0+bmFtZSAuICIuaCIsICRjb25kaXRp
b25hbCk7CisgICAgICAgIEFkZFRvSW5jbHVkZXMoIkpTIiAuICR0eXBlLT5uYW1lIC4gIi5oIiwg
JGluY2x1ZGVzUmVmLCAkY29uZGl0aW9uYWwpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAg
IAogICAgIGlmICgkdHlwZS0+bmFtZSBlcSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlIikgewotICAg
ICAgICBBZGRUb0ltcGxJbmNsdWRlcygiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiLCAkY29uZGl0
aW9uYWwpOworICAgICAgICBBZGRUb0luY2x1ZGVzKCJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIs
ICRpbmNsdWRlc1JlZiwgJGNvbmRpdGlvbmFsKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAog
ICAgIGlmICgkdHlwZS0+bmFtZSBlcSAiRGljdGlvbmFyeSIpIHsKLSAgICAgICAgQWRkVG9JbXBs
SW5jbHVkZXMoIkRpY3Rpb25hcnkuaCIsICRjb25kaXRpb25hbCk7CisgICAgICAgIEFkZFRvSW5j
bHVkZXMoIkRpY3Rpb25hcnkuaCIsICRpbmNsdWRlc1JlZiwgJGNvbmRpdGlvbmFsKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIH0KIAogc3ViIEFkZFRvSW1wbEluY2x1ZGVzCiB7Ci0gICAgbXkg
JGhlYWRlciA9IHNoaWZ0OwotICAgIG15ICRjb25kaXRpb25hbCA9IHNoaWZ0OworICAgIG15ICgk
aGVhZGVyLCAkY29uZGl0aW9uYWwpID0gQF87CisKKyAgICBBZGRUb0luY2x1ZGVzKCRoZWFkZXIs
IFwlaW1wbEluY2x1ZGVzLCAkY29uZGl0aW9uYWwpOworfQorCitzdWIgQWRkVG9JbmNsdWRlcwor
eworICAgIG15ICgkaGVhZGVyLCAkaW5jbHVkZXNSZWYsICRjb25kaXRpb25hbCkgPSBAXzsKIAog
ICAgIGlmIChub3QgJGNvbmRpdGlvbmFsKSB7Ci0gICAgICAgICRpbXBsSW5jbHVkZXN7JGhlYWRl
cn0gPSAxOwotICAgIH0gZWxzaWYgKG5vdCBleGlzdHMoJGltcGxJbmNsdWRlc3skaGVhZGVyfSkp
IHsKLSAgICAgICAgJGltcGxJbmNsdWRlc3skaGVhZGVyfSA9ICRjb25kaXRpb25hbDsKKyAgICAg
ICAgJGluY2x1ZGVzUmVmLT57JGhlYWRlcn0gPSAxOworICAgIH0gZWxzaWYgKG5vdCBleGlzdHMo
JGluY2x1ZGVzUmVmLT57JGhlYWRlcn0pKSB7CisgICAgICAgICRpbmNsdWRlc1JlZi0+eyRoZWFk
ZXJ9ID0gJGNvbmRpdGlvbmFsOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIG15ICRvbGRWYWx1ZSA9
ICRpbXBsSW5jbHVkZXN7JGhlYWRlcn07Ci0gICAgICAgICRpbXBsSW5jbHVkZXN7JGhlYWRlcn0g
PSAiJG9sZFZhbHVlfCRjb25kaXRpb25hbCIgaWYgJG9sZFZhbHVlIG5lIDE7CisgICAgICAgIG15
ICRvbGRWYWx1ZSA9ICRpbmNsdWRlc1JlZi0+eyRoZWFkZXJ9OworICAgICAgICAkaW5jbHVkZXNS
ZWYtPnskaGVhZGVyfSA9ICIkb2xkVmFsdWV8JGNvbmRpdGlvbmFsIiBpZiAkb2xkVmFsdWUgbmUg
MTsKICAgICB9CiB9CiAKQEAgLTIwMjgsNyArMjA0OSw3IEBAIHN1YiBBcmVUeXBlc0Rpc3Rpbmd1
aXNoYWJsZUZvck92ZXJsb2FkUmUKICAgICB9OwogICAgIG15ICRpc0NhbGxiYWNrRnVuY3Rpb25P
ckRpY3Rpb25hcnkgPSBzdWIgewogICAgICAgICBteSAkdHlwZSA9IHNoaWZ0OwotICAgICAgICBy
ZXR1cm4gJGNvZGVHZW5lcmF0b3ItPklzRnVuY3Rpb25Pbmx5Q2FsbGJhY2tJbnRlcmZhY2UoJHR5
cGUpIHx8ICYkaXNEaWN0aW9uYXJ5KCR0eXBlKTsKKyAgICAgICAgcmV0dXJuICRjb2RlR2VuZXJh
dG9yLT5Jc0NhbGxiYWNrRnVuY3Rpb24oJHR5cGUpIHx8ICYkaXNEaWN0aW9uYXJ5KCR0eXBlKTsK
ICAgICB9OwogCiAgICAgIyBUd28gdHlwZXMgYXJlIGRpc3Rpbmd1aXNoYWJsZSBmb3Igb3Zlcmxv
YWQgcmVzb2x1dGlvbiBpZiBhdCBtb3N0IG9uZSBvZiB0aGUgdHdvIGluY2x1ZGVzIGEgbnVsbGFi
bGUgdHlwZS4KQEAgLTIxODMsNyArMjIwNCw3IEBAIHN1YiBHZW5lcmF0ZU92ZXJsb2FkZWRGdW5j
dGlvbk9yQ29uc3RydWMKICAgICB9OwogICAgIG15ICRpc09iamVjdE9yQ2FsbGJhY2tGdW5jdGlv
blBhcmFtZXRlciA9IHN1YiB7CiAgICAgICAgIG15ICgkdHlwZSwgJG9wdGlvbmFsaXR5KSA9IEBf
OwotICAgICAgICByZXR1cm4gJHR5cGUtPm5hbWUgZXEgIm9iamVjdCIgfHwgJGNvZGVHZW5lcmF0
b3ItPklzRnVuY3Rpb25Pbmx5Q2FsbGJhY2tJbnRlcmZhY2UoJHR5cGUpOworICAgICAgICByZXR1
cm4gJHR5cGUtPm5hbWUgZXEgIm9iamVjdCIgfHwgJGNvZGVHZW5lcmF0b3ItPklzQ2FsbGJhY2tG
dW5jdGlvbigkdHlwZSk7CiAgICAgfTsKICAgICBteSAkaXNTZXF1ZW5jZU9yRnJvemVuQXJyYXlQ
YXJhbWV0ZXIgPSBzdWIgewogICAgICAgICBteSAoJHR5cGUsICRvcHRpb25hbGl0eSkgPSBAXzsK
QEAgLTIxOTMsNyArMjIxNCw3IEBAIHN1YiBHZW5lcmF0ZU92ZXJsb2FkZWRGdW5jdGlvbk9yQ29u
c3RydWMKICAgICAgICAgbXkgKCR0eXBlLCAkb3B0aW9uYWxpdHkpID0gQF87CiAgICAgICAgIHJl
dHVybiAxIGlmICYkaXNEaWN0aW9uYXJ5UGFyYW1ldGVyKCR0eXBlLCAkb3B0aW9uYWxpdHkpOwog
ICAgICAgICByZXR1cm4gMSBpZiAkdHlwZS0+bmFtZSBlcSAib2JqZWN0IjsKLSAgICAgICAgcmV0
dXJuIDEgaWYgJGNvZGVHZW5lcmF0b3ItPklzQ2FsbGJhY2tJbnRlcmZhY2UoJHR5cGUpICYmICEk
Y29kZUdlbmVyYXRvci0+SXNGdW5jdGlvbk9ubHlDYWxsYmFja0ludGVyZmFjZSgkdHlwZSk7Cisg
ICAgICAgIHJldHVybiAxIGlmICRjb2RlR2VuZXJhdG9yLT5Jc0NhbGxiYWNrSW50ZXJmYWNlKCR0
eXBlKSAmJiAhJGNvZGVHZW5lcmF0b3ItPklzQ2FsbGJhY2tGdW5jdGlvbigkdHlwZSk7CiAgICAg
ICAgIHJldHVybiAwOwogICAgIH07CiAgICAgbXkgJGlzQm9vbGVhblBhcmFtZXRlciA9IHN1YiB7
CkBAIC00NDQ0LDIwICs0NDY1LDIwIEBAIHN1YiBHZW5lcmF0ZVBhcmFtZXRlcnNDaGVjawogICAg
ICAgICAgICAgJGFyZ3VtZW50LT5kZWZhdWx0KCJudWxsIikgaWYgJHR5cGUtPmlzTnVsbGFibGU7
CiAKICAgICAgICAgICAgICMgRm9yIGNhbGxiYWNrIGFyZ3VtZW50cywgdGhlIGdlbmVyYXRlZCBi
aW5kaW5ncyB0cmVhdCB1bmRlZmluZWQgYXMgbnVsbCwgc28gdXNlIG51bGwgYXMgaW1wbGljaXQg
ZGVmYXVsdCB2YWx1ZS4KLSAgICAgICAgICAgICRhcmd1bWVudC0+ZGVmYXVsdCgibnVsbCIpIGlm
ICRjb2RlR2VuZXJhdG9yLT5Jc0NhbGxiYWNrSW50ZXJmYWNlKCR0eXBlKTsKKyAgICAgICAgICAg
ICRhcmd1bWVudC0+ZGVmYXVsdCgibnVsbCIpIGlmICRjb2RlR2VuZXJhdG9yLT5Jc0NhbGxiYWNr
SW50ZXJmYWNlKCR0eXBlKSB8fCAkY29kZUdlbmVyYXRvci0+SXNDYWxsYmFja0Z1bmN0aW9uKCR0
eXBlKTsKICAgICAgICAgfQogCiAgICAgICAgIG15ICRuYW1lID0gJGFyZ3VtZW50LT5uYW1lOwog
ICAgICAgICBteSAkdmFsdWUgPSAkbmFtZTsKIAotICAgICAgICBpZiAoJGNvZGVHZW5lcmF0b3It
PklzQ2FsbGJhY2tJbnRlcmZhY2UoJHR5cGUpKSB7CisgICAgICAgIGlmICgkY29kZUdlbmVyYXRv
ci0+SXNDYWxsYmFja0ludGVyZmFjZSgkdHlwZSkgfHwgJGNvZGVHZW5lcmF0b3ItPklzQ2FsbGJh
Y2tGdW5jdGlvbigkdHlwZSkpIHsKICAgICAgICAgICAgIG15ICRjYWxsYmFja0NsYXNzTmFtZSA9
IEdldENhbGxiYWNrQ2xhc3NOYW1lKCR0eXBlLT5uYW1lKTsKICAgICAgICAgICAgIG15ICR0eXBl
TmFtZSA9ICR0eXBlLT5uYW1lOwogICAgICAgICAgICAgJGltcGxJbmNsdWRlc3siJGNhbGxiYWNr
Q2xhc3NOYW1lLmgifSA9IDE7CiAgICAgICAgICAgICBpZiAoJGFyZ3VtZW50LT5pc09wdGlvbmFs
KSB7CiAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIFJlZlB0cjwkdHlw
ZU5hbWU+ICRuYW1lO1xuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAi
ICAgIGlmICghc3RhdGUtPmFyZ3VtZW50KCRhcmd1bWVudEluZGV4KS5pc1VuZGVmaW5lZE9yTnVs
bCgpKSB7XG4iKTsKLSAgICAgICAgICAgICAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPklzRnVuY3Rp
b25Pbmx5Q2FsbGJhY2tJbnRlcmZhY2UoJHR5cGUpKSB7CisgICAgICAgICAgICAgICAgaWYgKCRj
b2RlR2VuZXJhdG9yLT5Jc0NhbGxiYWNrRnVuY3Rpb24oJHR5cGUpKSB7CiAgICAgICAgICAgICAg
ICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgaWYgKCFzdGF0ZS0+dW5jaGVja2Vk
QXJndW1lbnQoJGFyZ3VtZW50SW5kZXgpLmlzRnVuY3Rpb24oKSlcbiIpOwogICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAg
ICAgICAgaWYgKCFzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoJGFyZ3VtZW50SW5kZXgpLmlzT2Jq
ZWN0KCkpXG4iKTsKQEAgLTQ0NzIsNyArNDQ5Myw3IEBAIHN1YiBHZW5lcmF0ZVBhcmFtZXRlcnND
aGVjawogICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICB9XG4iKTsKICAg
ICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgZGllICJDYWxsYmFja0ludGVyZmFj
ZSBkb2VzIG5vdCBzdXBwb3J0IFZhcmlhZGljIGFyZ3VtZW50cyIgaWYgJGFyZ3VtZW50LT5pc1Zh
cmlhZGljOwotICAgICAgICAgICAgICAgIGlmICgkY29kZUdlbmVyYXRvci0+SXNGdW5jdGlvbk9u
bHlDYWxsYmFja0ludGVyZmFjZSgkdHlwZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoJGNvZGVH
ZW5lcmF0b3ItPklzQ2FsbGJhY2tGdW5jdGlvbigkdHlwZSkpIHsKICAgICAgICAgICAgICAgICAg
ICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlmIChVTkxJS0VMWSghc3RhdGUtPnVuY2hlY2tl
ZEFyZ3VtZW50KCRhcmd1bWVudEluZGV4KS5pc0Z1bmN0aW9uKCkpKVxuIik7CiAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAi
ICAgIGlmIChVTkxJS0VMWSghc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KCRhcmd1bWVudEluZGV4
KS5pc09iamVjdCgpKSlcbiIpOwpAQCAtNDY3NiwxMzggKzQ2OTcsMjEwIEBAIHN1YiBHZW5lcmF0
ZURpY3Rpb25hcnlJbXBsZW1lbnRhdGlvbgogICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4jZW5k
aWYgLy8gJHtjb25kaXRpb25hbFN0cmluZ31cbiIpIGlmICRjb25kaXRpb25hbFN0cmluZzsKIH0K
IAotc3ViIEdlbmVyYXRlQ2FsbGJhY2tIZWFkZXIKK3N1YiBHZW5lcmF0ZUNhbGxiYWNrRnVuY3Rp
b25IZWFkZXIKIHsKLSAgICBteSAoJG9iamVjdCwgJGludGVyZmFjZSwgJGVudW1lcmF0aW9ucywg
JGRpY3Rpb25hcmllcykgPSBAXzsKKyAgICBteSAoJG9iamVjdCwgJGNhbGxiYWNrRnVuY3Rpb24s
ICRlbnVtZXJhdGlvbnMsICRkaWN0aW9uYXJpZXMpID0gQF87CiAKLSAgICBteSAkaW50ZXJmYWNl
TmFtZSA9ICRpbnRlcmZhY2UtPnR5cGUtPm5hbWU7Ci0gICAgbXkgJGNsYXNzTmFtZSA9ICJKUyRp
bnRlcmZhY2VOYW1lIjsKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50SGVhZGVyLCBHZW5lcmF0ZUhl
YWRlckNvbnRlbnRIZWFkZXIoJGNhbGxiYWNrRnVuY3Rpb24pKTsKIAotICAgICMgLSBBZGQgZGVm
YXVsdCBoZWFkZXIgdGVtcGxhdGUgYW5kIGhlYWRlciBwcm90ZWN0aW9uCi0gICAgcHVzaChAaGVh
ZGVyQ29udGVudEhlYWRlciwgR2VuZXJhdGVIZWFkZXJDb250ZW50SGVhZGVyKCRpbnRlcmZhY2Up
KTsKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiXG5uYW1lc3BhY2UgV2ViQ29yZSB7XG5cbiIp
OworCisgICAgbXkgQGZ1bmN0aW9ucyA9ICgpOworICAgIHB1c2goQGZ1bmN0aW9ucywgJGNhbGxi
YWNrRnVuY3Rpb24tPm9wZXJhdGlvbik7CisgICAgbXkgQGNvbnN0YW50cyA9ICgpOworCisgICAg
JG9iamVjdC0+R2VuZXJhdGVDYWxsYmFja0hlYWRlckNvbnRlbnQoJGNhbGxiYWNrRnVuY3Rpb24s
IFxAZnVuY3Rpb25zLCBcQGNvbnN0YW50cywgXEBoZWFkZXJDb250ZW50LCBcJWhlYWRlckluY2x1
ZGVzKTsKKworICAgIHB1c2goQGhlYWRlckNvbnRlbnQsIEdlbmVyYXRlRW51bWVyYXRpb25zSGVh
ZGVyQ29udGVudCgkY2FsbGJhY2tGdW5jdGlvbiwgJGVudW1lcmF0aW9ucykpOworICAgIHB1c2go
QGhlYWRlckNvbnRlbnQsIEdlbmVyYXRlRGljdGlvbmFyaWVzSGVhZGVyQ29udGVudCgkY2FsbGJh
Y2tGdW5jdGlvbiwgJGRpY3Rpb25hcmllcykpOworCisgICAgcHVzaChAaGVhZGVyQ29udGVudCwg
In0gLy8gbmFtZXNwYWNlIFdlYkNvcmVcbiIpOworCisgICAgbXkgJGNvbmRpdGlvbmFsU3RyaW5n
ID0gJGNvZGVHZW5lcmF0b3ItPkdlbmVyYXRlQ29uZGl0aW9uYWxTdHJpbmcoJGNhbGxiYWNrRnVu
Y3Rpb24pOworICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJcbiNlbmRpZiAvLyAke2NvbmRpdGlv
bmFsU3RyaW5nfVxuIikgaWYgJGNvbmRpdGlvbmFsU3RyaW5nOworfQorCitzdWIgR2VuZXJhdGVD
YWxsYmFja0Z1bmN0aW9uSW1wbGVtZW50YXRpb24KK3sKKyAgICBteSAoJG9iamVjdCwgJGNhbGxi
YWNrRnVuY3Rpb24sICRlbnVtZXJhdGlvbnMsICRkaWN0aW9uYXJpZXMpID0gQF87CisKKyAgICBw
dXNoKEBpbXBsQ29udGVudEhlYWRlciwgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbkNvbnRlbnRIZWFk
ZXIoJGNhbGxiYWNrRnVuY3Rpb24pKTsKKworICAgIHB1c2goQGltcGxDb250ZW50LCAiXG51c2lu
ZyBuYW1lc3BhY2UgSlNDO1xuXG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIm5hbWVzcGFj
ZSBXZWJDb3JlIHtcblxuIik7CisKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgR2VuZXJhdGVFbnVt
ZXJhdGlvbnNJbXBsZW1lbnRhdGlvbkNvbnRlbnQoJGNhbGxiYWNrRnVuY3Rpb24sICRlbnVtZXJh
dGlvbnMpKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgR2VuZXJhdGVEaWN0aW9uYXJpZXNJbXBs
ZW1lbnRhdGlvbkNvbnRlbnQoJGNhbGxiYWNrRnVuY3Rpb24sICRkaWN0aW9uYXJpZXMpKTsKIAot
ICAgICRoZWFkZXJJbmNsdWRlc3siQWN0aXZlRE9NQ2FsbGJhY2suaCJ9ID0gMTsKLSAgICAkaGVh
ZGVySW5jbHVkZXN7IiRpbnRlcmZhY2VOYW1lLmgifSA9IDE7Ci0gICAgJGhlYWRlckluY2x1ZGVz
eyJKU0NhbGxiYWNrRGF0YS5oIn0gPSAxOwotICAgICRoZWFkZXJJbmNsdWRlc3siPHd0Zi9Gb3J3
YXJkLmg+In0gPSAxOworICAgIG15IEBmdW5jdGlvbnMgPSAoKTsKKyAgICBwdXNoKEBmdW5jdGlv
bnMsICRjYWxsYmFja0Z1bmN0aW9uLT5vcGVyYXRpb24pOworICAgIG15IEBjb25zdGFudHMgPSAo
KTsKKworICAgICRvYmplY3QtPkdlbmVyYXRlQ2FsbGJhY2tJbXBsZW1lbnRhdGlvbkNvbnRlbnQo
JGNhbGxiYWNrRnVuY3Rpb24sIFxAZnVuY3Rpb25zLCBcQGNvbnN0YW50cywgXEBpbXBsQ29udGVu
dCwgXCVpbXBsSW5jbHVkZXMpOworCisgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlXG4iKTsKKworICAgIG15ICRjb25kaXRpb25hbFN0cmluZyA9ICRjb2RlR2Vu
ZXJhdG9yLT5HZW5lcmF0ZUNvbmRpdGlvbmFsU3RyaW5nKCRjYWxsYmFja0Z1bmN0aW9uKTsKKyAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIlxuI2VuZGlmIC8vICR7Y29uZGl0aW9uYWxTdHJpbmd9XG4i
KSBpZiAkY29uZGl0aW9uYWxTdHJpbmc7Cit9CisKK3N1YiBHZW5lcmF0ZUNhbGxiYWNrSW50ZXJm
YWNlSGVhZGVyCit7CisgICAgbXkgKCRvYmplY3QsICRjYWxsYmFja0ludGVyZmFjZSwgJGVudW1l
cmF0aW9ucywgJGRpY3Rpb25hcmllcykgPSBAXzsKKworICAgIHB1c2goQGhlYWRlckNvbnRlbnRI
ZWFkZXIsIEdlbmVyYXRlSGVhZGVyQ29udGVudEhlYWRlcigkY2FsbGJhY2tJbnRlcmZhY2UpKTsK
IAogICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJcbm5hbWVzcGFjZSBXZWJDb3JlIHtcblxuIik7
Ci0gICAgcHVzaChAaGVhZGVyQ29udGVudCwgImNsYXNzICRjbGFzc05hbWUgOiBwdWJsaWMgJGlu
dGVyZmFjZU5hbWUsIHB1YmxpYyBBY3RpdmVET01DYWxsYmFjayB7XG4iKTsKLSAgICBwdXNoKEBo
ZWFkZXJDb250ZW50LCAicHVibGljOlxuIik7CisgICAgCisgICAgJG9iamVjdC0+R2VuZXJhdGVD
YWxsYmFja0hlYWRlckNvbnRlbnQoJGNhbGxiYWNrSW50ZXJmYWNlLCAkY2FsbGJhY2tJbnRlcmZh
Y2UtPmZ1bmN0aW9ucywgJGNhbGxiYWNrSW50ZXJmYWNlLT5jb25zdGFudHMsIFxAaGVhZGVyQ29u
dGVudCwgXCVoZWFkZXJJbmNsdWRlcyk7CisKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50LCBHZW5l
cmF0ZUVudW1lcmF0aW9uc0hlYWRlckNvbnRlbnQoJGNhbGxiYWNrSW50ZXJmYWNlLCAkZW51bWVy
YXRpb25zKSk7CisgICAgcHVzaChAaGVhZGVyQ29udGVudCwgR2VuZXJhdGVEaWN0aW9uYXJpZXNI
ZWFkZXJDb250ZW50KCRjYWxsYmFja0ludGVyZmFjZSwgJGRpY3Rpb25hcmllcykpOworCisgICAg
cHVzaChAaGVhZGVyQ29udGVudCwgIn0gLy8gbmFtZXNwYWNlIFdlYkNvcmVcbiIpOworCisgICAg
bXkgJGNvbmRpdGlvbmFsU3RyaW5nID0gJGNvZGVHZW5lcmF0b3ItPkdlbmVyYXRlQ29uZGl0aW9u
YWxTdHJpbmcoJGNhbGxiYWNrSW50ZXJmYWNlKTsKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAi
XG4jZW5kaWYgLy8gJHtjb25kaXRpb25hbFN0cmluZ31cbiIpIGlmICRjb25kaXRpb25hbFN0cmlu
ZzsKK30KKworc3ViIEdlbmVyYXRlQ2FsbGJhY2tJbnRlcmZhY2VJbXBsZW1lbnRhdGlvbgorewor
ICAgIG15ICgkb2JqZWN0LCAkY2FsbGJhY2tJbnRlcmZhY2UsICRlbnVtZXJhdGlvbnMsICRkaWN0
aW9uYXJpZXMpID0gQF87CisKKyAgICBwdXNoKEBpbXBsQ29udGVudEhlYWRlciwgR2VuZXJhdGVJ
bXBsZW1lbnRhdGlvbkNvbnRlbnRIZWFkZXIoJGNhbGxiYWNrSW50ZXJmYWNlKSk7CisKKyAgICBw
dXNoKEBpbXBsQ29udGVudCwgIlxudXNpbmcgbmFtZXNwYWNlIEpTQztcblxuIik7CisgICAgcHVz
aChAaW1wbENvbnRlbnQsICJuYW1lc3BhY2UgV2ViQ29yZSB7XG5cbiIpOworCisgICAgcHVzaChA
aW1wbENvbnRlbnQsIEdlbmVyYXRlRW51bWVyYXRpb25zSW1wbGVtZW50YXRpb25Db250ZW50KCRj
YWxsYmFja0ludGVyZmFjZSwgJGVudW1lcmF0aW9ucykpOworICAgIHB1c2goQGltcGxDb250ZW50
LCBHZW5lcmF0ZURpY3Rpb25hcmllc0ltcGxlbWVudGF0aW9uQ29udGVudCgkY2FsbGJhY2tJbnRl
cmZhY2UsICRkaWN0aW9uYXJpZXMpKTsKKworICAgICRvYmplY3QtPkdlbmVyYXRlQ2FsbGJhY2tJ
bXBsZW1lbnRhdGlvbkNvbnRlbnQoJGNhbGxiYWNrSW50ZXJmYWNlLCAkY2FsbGJhY2tJbnRlcmZh
Y2UtPmZ1bmN0aW9ucywgJGNhbGxiYWNrSW50ZXJmYWNlLT5jb25zdGFudHMsIFxAaW1wbENvbnRl
bnQsIFwlaW1wbEluY2x1ZGVzKTsKKworICAgIHB1c2goQGltcGxDb250ZW50LCAifSAvLyBuYW1l
c3BhY2UgV2ViQ29yZVxuIik7CisKKyAgICBteSAkY29uZGl0aW9uYWxTdHJpbmcgPSAkY29kZUdl
bmVyYXRvci0+R2VuZXJhdGVDb25kaXRpb25hbFN0cmluZygkY2FsbGJhY2tJbnRlcmZhY2UpOwor
ICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4jZW5kaWYgLy8gJHtjb25kaXRpb25hbFN0cmluZ31c
biIpIGlmICRjb25kaXRpb25hbFN0cmluZzsKK30KKworc3ViIEdlbmVyYXRlQ2FsbGJhY2tIZWFk
ZXJDb250ZW50Cit7CisgICAgbXkgKCRvYmplY3QsICRpbnRlcmZhY2VPckNhbGxiYWNrLCAkZnVu
Y3Rpb25zLCAkY29uc3RhbnRzLCAkY29udGVudFJlZiwgJGluY2x1ZGVzUmVmKSA9IEBfOworCisg
ICAgbXkgJG5hbWUgPSAkaW50ZXJmYWNlT3JDYWxsYmFjay0+dHlwZS0+bmFtZTsKKyAgICBteSAk
Y2FsbGJhY2tEYXRhVHlwZSA9IEdldEpTQ2FsbGJhY2tEYXRhVHlwZSgkaW50ZXJmYWNlT3JDYWxs
YmFjayk7CisgICAgbXkgJGNsYXNzTmFtZSA9ICJKUyR7bmFtZX0iOworCisgICAgJGluY2x1ZGVz
UmVmLT57IkFjdGl2ZURPTUNhbGxiYWNrLmgifSA9IDE7CisgICAgJGluY2x1ZGVzUmVmLT57IkpT
Q2FsbGJhY2tEYXRhLmgifSA9IDE7CisgICAgJGluY2x1ZGVzUmVmLT57Ijx3dGYvRm9yd2FyZC5o
PiJ9ID0gMTsKKyAgICAkaW5jbHVkZXNSZWYtPnsiJHtuYW1lfS5oIn0gPSAxOworCisgICAgcHVz
aChAJGNvbnRlbnRSZWYsICJjbGFzcyAkY2xhc3NOYW1lIDogcHVibGljICR7bmFtZX0sIHB1Ymxp
YyBBY3RpdmVET01DYWxsYmFjayB7XG4iKTsKKyAgICBwdXNoKEAkY29udGVudFJlZiwgInB1Ymxp
YzpcbiIpOwogCiAgICAgIyBUaGUgc3RhdGljIGNyZWF0ZSgpIG1ldGhvZC4KLSAgICBwdXNoKEBo
ZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyBSZWY8JGNsYXNzTmFtZT4gY3JlYXRlKEpTQzo6SlNP
YmplY3QqIGNhbGxiYWNrLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KVxuIik7Ci0g
ICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB7XG4iKTsKLSAgICBwdXNoKEBoZWFkZXJDb250
ZW50LCAiICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyAkY2xhc3NOYW1lKGNhbGxiYWNrLCBn
bG9iYWxPYmplY3QpKTtcbiIpOwotICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgfVxuXG4i
KTsKKyAgICBwdXNoKEAkY29udGVudFJlZiwgIiAgICBzdGF0aWMgUmVmPCRjbGFzc05hbWU+IGNy
ZWF0ZShKU0M6OkpTT2JqZWN0KiBjYWxsYmFjaywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdClcbiIpOworICAgIHB1c2goQCRjb250ZW50UmVmLCAiICAgIHtcbiIpOworICAgIHB1c2go
QCRjb250ZW50UmVmLCAiICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyAke2NsYXNzTmFtZX0o
Y2FsbGJhY2ssIGdsb2JhbE9iamVjdCkpO1xuIik7CisgICAgcHVzaChAJGNvbnRlbnRSZWYsICIg
ICAgfVxuXG4iKTsKIAotICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgdmlydHVhbCBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QgeyByZXR1
cm4gQ29udGV4dERlc3RydWN0aW9uT2JzZXJ2ZXI6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsg
fVxuXG4iKTsKKyAgICBwdXNoKEAkY29udGVudFJlZiwgIiAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdCB7IHJldHVybiBDb250
ZXh0RGVzdHJ1Y3Rpb25PYnNlcnZlcjo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOyB9XG5cbiIp
OwogCi0gICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB2aXJ0dWFsIH4kY2xhc3NOYW1lKCk7
XG4iKTsKKyAgICBwdXNoKEAkY29udGVudFJlZiwgIiAgICB2aXJ0dWFsIH4kY2xhc3NOYW1lKCk7
XG4iKTsKIAotICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgIiAuIEdldEpTQ2FsbGJhY2tE
YXRhVHlwZSgkaW50ZXJmYWNlKSAuICIqIGNhbGxiYWNrRGF0YSgpIHsgcmV0dXJuIG1fZGF0YTsg
fVxuIik7CisgICAgcHVzaChAJGNvbnRlbnRSZWYsICIgICAgJHtjYWxsYmFja0RhdGFUeXBlfSog
Y2FsbGJhY2tEYXRhKCkgeyByZXR1cm4gbV9kYXRhOyB9XG4iKTsKIAotICAgIHB1c2goQGhlYWRl
ckNvbnRlbnQsICIgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OlZN
JiwgY29uc3QgSlNDOjpKU0dsb2JhbE9iamVjdCopO1xuIikgaWYgQHskaW50ZXJmYWNlLT5jb25z
dGFudHN9OworICAgIHB1c2goQCRjb250ZW50UmVmLCAiICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUg
Z2V0Q29uc3RydWN0b3IoSlNDOjpWTSYsIGNvbnN0IEpTQzo6SlNHbG9iYWxPYmplY3QqKTtcbiIp
IGlmIEB7JGNvbnN0YW50c307CiAKLSAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHZpcnR1
YWwgYm9vbCBvcGVyYXRvcj09KGNvbnN0ICRpbnRlcmZhY2VOYW1lJikgY29uc3Q7XG5cbiIpIGlm
ICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0NhbGxiYWNrTmVlZHNPcGVyYXRvckVx
dWFsfTsKKyAgICBwdXNoKEAkY29udGVudFJlZiwgIiAgICB2aXJ0dWFsIGJvb2wgb3BlcmF0b3I9
PShjb25zdCAke25hbWV9JikgY29uc3Q7XG5cbiIpIGlmICRpbnRlcmZhY2VPckNhbGxiYWNrLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPntDYWxsYmFja05lZWRzT3BlcmF0b3JFcXVhbH07CiAKICAgICAj
IEZ1bmN0aW9ucwotICAgIG15ICRudW1GdW5jdGlvbnMgPSBAeyRpbnRlcmZhY2UtPmZ1bmN0aW9u
c307CisgICAgbXkgJG51bUZ1bmN0aW9ucyA9IEB7JGZ1bmN0aW9uc307CiAgICAgaWYgKCRudW1G
dW5jdGlvbnMgPiAwKSB7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJcbiAgICAvLyBG
dW5jdGlvbnNcbiIpOwotICAgICAgICBmb3JlYWNoIG15ICRmdW5jdGlvbiAoQHskaW50ZXJmYWNl
LT5mdW5jdGlvbnN9KSB7CisgICAgICAgIHB1c2goQCRjb250ZW50UmVmLCAiXG4gICAgLy8gRnVu
Y3Rpb25zXG4iKTsKKyAgICAgICAgZm9yZWFjaCBteSAkZnVuY3Rpb24gKEB7JGZ1bmN0aW9uc30p
IHsKICAgICAgICAgICAgIG15IEBhcmd1bWVudHMgPSAoKTsKICAgICAgICAgICAgIGZvcmVhY2gg
bXkgJGFyZ3VtZW50IChAeyRmdW5jdGlvbi0+YXJndW1lbnRzfSkgewotICAgICAgICAgICAgICAg
IHB1c2goQGFyZ3VtZW50cywgR2V0TmF0aXZlVHlwZUZvckNhbGxiYWNrcygkaW50ZXJmYWNlLCAk
YXJndW1lbnQtPnR5cGUpIC4gIiAiIC4gJGFyZ3VtZW50LT5uYW1lKTsKKyAgICAgICAgICAgICAg
ICBwdXNoKEBhcmd1bWVudHMsIEdldE5hdGl2ZVR5cGVGb3JDYWxsYmFja3MoJGFyZ3VtZW50LT50
eXBlLCAkaW50ZXJmYWNlT3JDYWxsYmFjaykgLiAiICIgLiAkYXJndW1lbnQtPm5hbWUpOwogICAg
ICAgICAgICAgfQotICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB2aXJ0dWFs
ICIgLiBHZXROYXRpdmVUeXBlRm9yQ2FsbGJhY2tzKCRpbnRlcmZhY2UsICRmdW5jdGlvbi0+dHlw
ZSkgLiAiICIgLiAkZnVuY3Rpb24tPm5hbWUgLiAiKCIgLiBqb2luKCIsICIsIEBhcmd1bWVudHMp
IC4gIik7XG4iKTsKKworICAgICAgICAgICAgIyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIG5vbi12
b2lkIHJldHVybiB0eXBlcyAodGhlIGJvb2wgYWN0dWFsbHkgaXMgcmV0dXJuaW5nIGV4Y2VwdGlv
biBzdGF0ZSksIGZvciBub24tY3VzdG9tIGZ1bmN0aW9ucy4KKyAgICAgICAgICAgIG15ICRuYXRp
dmVSZXR1cm5UeXBlID0gJGZ1bmN0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDdXN0b219ID8g
R2V0TmF0aXZlVHlwZUZvckNhbGxiYWNrcygkZnVuY3Rpb24tPnR5cGUsICRpbnRlcmZhY2VPckNh
bGxiYWNrKSA6ICJib29sIjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgIyBGSVhNRTogQ2hh
bmdlIHRoZSBkZWZhdWx0IG5hbWUgKHVzZWQgZm9yIGNhbGxiYWNrIGZ1bmN0aW9ucykgdG8gc29t
ZXRoaW5nIG90aGVyIHRoYW4gaGFuZGxlRXZlbnQuIEl0IG1ha2VzIGxpdHRsZSBzZW5zZS4KKyAg
ICAgICAgICAgIG15ICRmdW5jdGlvbk5hbWUgPSAkZnVuY3Rpb24tPm5hbWUgPyAkZnVuY3Rpb24t
Pm5hbWUgOiAiaGFuZGxlRXZlbnQiOworCisgICAgICAgICAgICBwdXNoKEAkY29udGVudFJlZiwg
IiAgICB2aXJ0dWFsICR7bmF0aXZlUmV0dXJuVHlwZX0gJHtmdW5jdGlvbk5hbWV9KCIgLiBqb2lu
KCIsICIsIEBhcmd1bWVudHMpIC4gIik7XG4iKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIHB1
c2goQGhlYWRlckNvbnRlbnQsICJcbnByaXZhdGU6XG4iKTsKKyAgICBwdXNoKEAkY29udGVudFJl
ZiwgIlxucHJpdmF0ZTpcbiIpOwogCiAgICAgIyBDb25zdHJ1Y3RvcgotICAgIHB1c2goQGhlYWRl
ckNvbnRlbnQsICIgICAgJGNsYXNzTmFtZShKU0M6OkpTT2JqZWN0KiBjYWxsYmFjaywgSlNET01H
bG9iYWxPYmplY3QqKTtcblxuIik7CisgICAgcHVzaChAJGNvbnRlbnRSZWYsICIgICAgJGNsYXNz
TmFtZShKU0M6OkpTT2JqZWN0KiBjYWxsYmFjaywgSlNET01HbG9iYWxPYmplY3QqKTtcblxuIik7
CiAKICAgICAjIFByaXZhdGUgbWVtYmVycwotICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAg
IiAuIEdldEpTQ2FsbGJhY2tEYXRhVHlwZSgkaW50ZXJmYWNlKSAuICIqIG1fZGF0YTtcbiIpOwot
ICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJ9O1xuXG4iKTsKKyAgICBwdXNoKEAkY29udGVudFJl
ZiwgIiAgICAke2NhbGxiYWNrRGF0YVR5cGV9KiBtX2RhdGE7XG4iKTsKKyAgICBwdXNoKEAkY29u
dGVudFJlZiwgIn07XG5cbiIpOwogCiAgICAgIyB0b0pTKCkuCi0gICAgcHVzaChAaGVhZGVyQ29u
dGVudCwgIkpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmpl
Y3QqLCAkaW50ZXJmYWNlTmFtZSYpO1xuIik7Ci0gICAgcHVzaChAaGVhZGVyQ29udGVudCwgImlu
bGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsICRpbnRlcmZhY2VOYW1lKiBpbXBsKSB7IHJldHVybiBpbXBs
ID8gdG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCAqaW1wbCkgOiBKU0M6OmpzTnVsbCgpOyB9XG5c
biIpOwotCi0gICAgcHVzaChAaGVhZGVyQ29udGVudCwgR2VuZXJhdGVFbnVtZXJhdGlvbnNIZWFk
ZXJDb250ZW50KCRpbnRlcmZhY2UsICRlbnVtZXJhdGlvbnMpKTsKLSAgICBwdXNoKEBoZWFkZXJD
b250ZW50LCBHZW5lcmF0ZURpY3Rpb25hcmllc0hlYWRlckNvbnRlbnQoJGludGVyZmFjZSwgJGRp
Y3Rpb25hcmllcykpOwotCi0gICAgcHVzaChAaGVhZGVyQ29udGVudCwgIn0gLy8gbmFtZXNwYWNl
IFdlYkNvcmVcbiIpOwotCi0gICAgbXkgJGNvbmRpdGlvbmFsU3RyaW5nID0gJGNvZGVHZW5lcmF0
b3ItPkdlbmVyYXRlQ29uZGl0aW9uYWxTdHJpbmcoJGludGVyZmFjZSk7Ci0gICAgcHVzaChAaGVh
ZGVyQ29udGVudCwgIlxuI2VuZGlmIC8vICR7Y29uZGl0aW9uYWxTdHJpbmd9XG4iKSBpZiAkY29u
ZGl0aW9uYWxTdHJpbmc7CisgICAgcHVzaChAJGNvbnRlbnRSZWYsICJKU0M6OkpTVmFsdWUgdG9K
UyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgJHtuYW1lfSYpO1xuIik7Cisg
ICAgcHVzaChAJGNvbnRlbnRSZWYsICJpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVj
U3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCAke25hbWV9KiBp
bXBsKSB7IHJldHVybiBpbXBsID8gdG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCAqaW1wbCkgOiBK
U0M6OmpzTnVsbCgpOyB9XG5cbiIpOwogfQogCi1zdWIgR2VuZXJhdGVDYWxsYmFja0ltcGxlbWVu
dGF0aW9uCitzdWIgR2VuZXJhdGVDYWxsYmFja0ltcGxlbWVudGF0aW9uQ29udGVudAogewotICAg
IG15ICgkb2JqZWN0LCAkaW50ZXJmYWNlLCAkZW51bWVyYXRpb25zLCAkZGljdGlvbmFyaWVzKSA9
IEBfOwotCi0gICAgbXkgJGludGVyZmFjZU5hbWUgPSAkaW50ZXJmYWNlLT50eXBlLT5uYW1lOwot
ICAgIG15ICR2aXNpYmxlSW50ZXJmYWNlTmFtZSA9ICRjb2RlR2VuZXJhdG9yLT5HZXRWaXNpYmxl
SW50ZXJmYWNlTmFtZSgkaW50ZXJmYWNlKTsKLSAgICBteSAkY2xhc3NOYW1lID0gIkpTJGludGVy
ZmFjZU5hbWUiOwotCi0gICAgIyAtIEFkZCBkZWZhdWx0IGhlYWRlciB0ZW1wbGF0ZQotICAgIHB1
c2goQGltcGxDb250ZW50SGVhZGVyLCBHZW5lcmF0ZUltcGxlbWVudGF0aW9uQ29udGVudEhlYWRl
cigkaW50ZXJmYWNlKSk7CisgICAgbXkgKCRvYmplY3QsICRpbnRlcmZhY2VPckNhbGxiYWNrLCAk
ZnVuY3Rpb25zLCAkY29uc3RhbnRzLCAkY29udGVudFJlZiwgJGluY2x1ZGVzUmVmKSA9IEBfOwog
Ci0gICAgJGltcGxJbmNsdWRlc3siU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIn0gPSAxOwotICAg
ICRpbXBsSW5jbHVkZXN7IjxydW50aW1lL0pTTG9jay5oPiJ9ID0gMTsKKyAgICBteSAkbmFtZSA9
ICRpbnRlcmZhY2VPckNhbGxiYWNrLT50eXBlLT5uYW1lOworICAgIG15ICRjYWxsYmFja0RhdGFU
eXBlID0gR2V0SlNDYWxsYmFja0RhdGFUeXBlKCRpbnRlcmZhY2VPckNhbGxiYWNrKTsKKyAgICBt
eSAkdmlzaWJsZU5hbWUgPSAkY29kZUdlbmVyYXRvci0+R2V0VmlzaWJsZUludGVyZmFjZU5hbWUo
JGludGVyZmFjZU9yQ2FsbGJhY2spOworICAgIG15ICRjbGFzc05hbWUgPSAiSlMke25hbWV9IjsK
IAotICAgIEBpbXBsQ29udGVudCA9ICgpOwotCi0gICAgcHVzaChAaW1wbENvbnRlbnQsICJcbnVz
aW5nIG5hbWVzcGFjZSBKU0M7XG5cbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAibmFtZXNw
YWNlIFdlYkNvcmUge1xuXG4iKTsKLQotICAgIHB1c2goQGltcGxDb250ZW50LCBHZW5lcmF0ZUVu
dW1lcmF0aW9uc0ltcGxlbWVudGF0aW9uQ29udGVudCgkaW50ZXJmYWNlLCAkZW51bWVyYXRpb25z
KSk7Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsIEdlbmVyYXRlRGljdGlvbmFyaWVzSW1wbGVtZW50
YXRpb25Db250ZW50KCRpbnRlcmZhY2UsICRkaWN0aW9uYXJpZXMpKTsKKyAgICAkaW5jbHVkZXNS
ZWYtPnsiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIn0gPSAxOworICAgICRpbmNsdWRlc1JlZi0+
eyI8cnVudGltZS9KU0xvY2suaD4ifSA9IDE7CiAKICAgICAjIENvbnN0cnVjdG9yCi0gICAgcHVz
aChAaW1wbENvbnRlbnQsICIke2NsYXNzTmFtZX06OiR7Y2xhc3NOYW1lfShKU09iamVjdCogY2Fs
bGJhY2ssIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpXG4iKTsKLSAgICBpZiAoJGlu
dGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q2FsbGJhY2tOZWVkc09wZXJhdG9yRXF1YWx9
KSB7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIDogJHtpbnRlcmZhY2VOYW1lfSgk
e2NsYXNzTmFtZX1UeXBlKVxuIik7CisgICAgcHVzaChAJGNvbnRlbnRSZWYsICIke2NsYXNzTmFt
ZX06OiR7Y2xhc3NOYW1lfShKU09iamVjdCogY2FsbGJhY2ssIEpTRE9NR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QpXG4iKTsKKyAgICBpZiAoJGludGVyZmFjZU9yQ2FsbGJhY2stPmV4dGVuZGVk
QXR0cmlidXRlcy0+e0NhbGxiYWNrTmVlZHNPcGVyYXRvckVxdWFsfSkgeworICAgICAgICBwdXNo
KEAkY29udGVudFJlZiwgIiAgICA6ICR7bmFtZX0oJHtjbGFzc05hbWV9VHlwZSlcbiIpOwogICAg
IH0gZWxzZSB7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIDogJHtpbnRlcmZhY2VO
YW1lfSgpXG4iKTsKKyAgICAgICAgcHVzaChAJGNvbnRlbnRSZWYsICIgICAgOiAke25hbWV9KClc
biIpOwogICAgIH0KLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAsIEFjdGl2ZURPTUNhbGxi
YWNrKGdsb2JhbE9iamVjdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKVxuIik7Ci0gICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgLCBtX2RhdGEobmV3ICIgLiBHZXRKU0NhbGxiYWNrRGF0YVR5
cGUoJGludGVyZmFjZSkgLiAiKGNhbGxiYWNrLCB0aGlzKSlcbiIpOwotICAgIHB1c2goQGltcGxD
b250ZW50LCAie1xuIik7Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOworICAgIHB1
c2goQCRjb250ZW50UmVmLCAiICAgICwgQWN0aXZlRE9NQ2FsbGJhY2soZ2xvYmFsT2JqZWN0LT5z
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCkpXG4iKTsKKyAgICBwdXNoKEAkY29udGVudFJlZiwgIiAg
ICAsIG1fZGF0YShuZXcgJHtjYWxsYmFja0RhdGFUeXBlfShjYWxsYmFjaywgdGhpcykpXG4iKTsK
KyAgICBwdXNoKEAkY29udGVudFJlZiwgIntcbiIpOworICAgIHB1c2goQCRjb250ZW50UmVmLCAi
fVxuXG4iKTsKIAogICAgICMgRGVzdHJ1Y3RvcgotICAgIHB1c2goQGltcGxDb250ZW50LCAiJHtj
bGFzc05hbWV9Ojp+JHtjbGFzc05hbWV9KClcbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAi
e1xuIik7Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogY29udGV4dCA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTtcbiIpOwotICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIC8vIFdoZW4gdGhlIGNvbnRleHQgaXMgZGVzdHJveWVkLCBhbGwgdGFz
a3Mgd2l0aCBhIHJlZmVyZW5jZSB0byBhIGNhbGxiYWNrXG4iKTsKLSAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICAvLyBzaG91bGQgYmUgZGVsZXRlZC4gU28gaWYgdGhlIGNvbnRleHQgaXMgMCwg
d2UgYXJlIG9uIHRoZSBjb250ZXh0IHRocmVhZC5cbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIGlmICghY29udGV4dCB8fCBjb250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSlcbiIpOwot
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBkZWxldGUgbV9kYXRhO1xuIik7Ci0gICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgZWxzZVxuIik7Ci0gICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgICAgIGNvbnRleHQtPnBvc3RUYXNrKERlbGV0ZUNhbGxiYWNrRGF0YVRhc2sobV9kYXRh
KSk7XG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIiNpZm5kZWYgTkRFQlVHXG4iKTsKLSAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBtX2RhdGEgPSBudWxscHRyO1xuIik7Ci0gICAgcHVz
aChAaW1wbENvbnRlbnQsICIjZW5kaWZcbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAifVxu
XG4iKTsKLQotICAgIGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDYWxsYmFj
a05lZWRzT3BlcmF0b3JFcXVhbH0pIHsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJib29s
ICR7Y2xhc3NOYW1lfTo6b3BlcmF0b3I9PShjb25zdCAke2ludGVyZmFjZU5hbWV9JiBvdGhlcikg
Y29uc3RcbiIpOwotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwotICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAob3RoZXIudHlwZSgpICE9IHR5cGUoKSlcbiIpOwot
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIGZhbHNlO1xuIik7Ci0g
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCAk
e2NsYXNzTmFtZX0qPigmb3RoZXIpLT5tX2RhdGEtPmNhbGxiYWNrKCkgPT0gbV9kYXRhLT5jYWxs
YmFjaygpO1xuIik7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsKKyAgICBw
dXNoKEAkY29udGVudFJlZiwgIiR7Y2xhc3NOYW1lfTo6fiR7Y2xhc3NOYW1lfSgpXG4iKTsKKyAg
ICBwdXNoKEAkY29udGVudFJlZiwgIntcbiIpOworICAgIHB1c2goQCRjb250ZW50UmVmLCAiICAg
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0
KCk7XG4iKTsKKyAgICBwdXNoKEAkY29udGVudFJlZiwgIiAgICAvLyBXaGVuIHRoZSBjb250ZXh0
IGlzIGRlc3Ryb3llZCwgYWxsIHRhc2tzIHdpdGggYSByZWZlcmVuY2UgdG8gYSBjYWxsYmFja1xu
Iik7CisgICAgcHVzaChAJGNvbnRlbnRSZWYsICIgICAgLy8gc2hvdWxkIGJlIGRlbGV0ZWQuIFNv
IGlmIHRoZSBjb250ZXh0IGlzIDAsIHdlIGFyZSBvbiB0aGUgY29udGV4dCB0aHJlYWQuXG4iKTsK
KyAgICBwdXNoKEAkY29udGVudFJlZiwgIiAgICBpZiAoIWNvbnRleHQgfHwgY29udGV4dC0+aXND
b250ZXh0VGhyZWFkKCkpXG4iKTsKKyAgICBwdXNoKEAkY29udGVudFJlZiwgIiAgICAgICAgZGVs
ZXRlIG1fZGF0YTtcbiIpOworICAgIHB1c2goQCRjb250ZW50UmVmLCAiICAgIGVsc2VcbiIpOwor
ICAgIHB1c2goQCRjb250ZW50UmVmLCAiICAgICAgICBjb250ZXh0LT5wb3N0VGFzayhEZWxldGVD
YWxsYmFja0RhdGFUYXNrKG1fZGF0YSkpO1xuIik7CisgICAgcHVzaChAJGNvbnRlbnRSZWYsICIj
aWZuZGVmIE5ERUJVR1xuIik7CisgICAgcHVzaChAJGNvbnRlbnRSZWYsICIgICAgbV9kYXRhID0g
bnVsbHB0cjtcbiIpOworICAgIHB1c2goQCRjb250ZW50UmVmLCAiI2VuZGlmXG4iKTsKKyAgICBw
dXNoKEAkY29udGVudFJlZiwgIn1cblxuIik7CisKKyAgICBpZiAoJGludGVyZmFjZU9yQ2FsbGJh
Y2stPmV4dGVuZGVkQXR0cmlidXRlcy0+e0NhbGxiYWNrTmVlZHNPcGVyYXRvckVxdWFsfSkgewor
ICAgICAgICBwdXNoKEAkY29udGVudFJlZiwgImJvb2wgJHtjbGFzc05hbWV9OjpvcGVyYXRvcj09
KGNvbnN0ICR7bmFtZX0mIG90aGVyKSBjb25zdFxuIik7CisgICAgICAgIHB1c2goQCRjb250ZW50
UmVmLCAie1xuIik7CisgICAgICAgIHB1c2goQCRjb250ZW50UmVmLCAiICAgIGlmIChvdGhlci50
eXBlKCkgIT0gdHlwZSgpKVxuIik7CisgICAgICAgIHB1c2goQCRjb250ZW50UmVmLCAiICAgICAg
ICByZXR1cm4gZmFsc2U7XG4iKTsKKyAgICAgICAgcHVzaChAJGNvbnRlbnRSZWYsICIgICAgcmV0
dXJuIHN0YXRpY19jYXN0PGNvbnN0ICR7Y2xhc3NOYW1lfSo+KCZvdGhlciktPm1fZGF0YS0+Y2Fs
bGJhY2soKSA9PSBtX2RhdGEtPmNhbGxiYWNrKCk7XG4iKTsKKyAgICAgICAgcHVzaChAJGNvbnRl
bnRSZWYsICJ9XG5cbiIpOwogICAgIH0KIAogICAgICMgQ29uc3RhbnRzLgotICAgIG15ICRudW1D
b25zdGFudHMgPSBAeyRpbnRlcmZhY2UtPmNvbnN0YW50c307CisgICAgbXkgJG51bUNvbnN0YW50
cyA9IEB7JGNvbnN0YW50c307CiAgICAgaWYgKCRudW1Db25zdGFudHMgPiAwKSB7Ci0gICAgICAg
IEdlbmVyYXRlQ29uc3RydWN0b3JEZWNsYXJhdGlvbihcQGltcGxDb250ZW50LCAkY2xhc3NOYW1l
LCAkaW50ZXJmYWNlLCAkaW50ZXJmYWNlTmFtZSk7CisgICAgICAgIEdlbmVyYXRlQ29uc3RydWN0
b3JEZWNsYXJhdGlvbigkY29udGVudFJlZiwgJGNsYXNzTmFtZSwgJGludGVyZmFjZU9yQ2FsbGJh
Y2ssICRuYW1lKTsKIAogICAgICAgICBteSAkaGFzaFNpemUgPSAwOwogICAgICAgICBteSAkaGFz
aE5hbWUgPSAkY2xhc3NOYW1lIC4gIkNvbnN0cnVjdG9yVGFibGUiOwpAQCAtNDgxOCw3ICs0OTEx
LDcgQEAgc3ViIEdlbmVyYXRlQ2FsbGJhY2tJbXBsZW1lbnRhdGlvbgogICAgICAgICBteSBAaGFz
aFNwZWNpYWxzID0gKCk7CiAgICAgICAgIG15ICVjb25kaXRpb25hbHMgPSAoKTsKIAotICAgICAg
ICBmb3JlYWNoIG15ICRjb25zdGFudCAoQHskaW50ZXJmYWNlLT5jb25zdGFudHN9KSB7CisgICAg
ICAgIGZvcmVhY2ggbXkgJGNvbnN0YW50IChAeyRjb25zdGFudHN9KSB7CiAgICAgICAgICAgICBt
eSAkbmFtZSA9ICRjb25zdGFudC0+bmFtZTsKICAgICAgICAgICAgIHB1c2goQGhhc2hLZXlzLCAk
bmFtZSk7CiAgICAgICAgICAgICBwdXNoKEBoYXNoVmFsdWUxLCAkY29uc3RhbnQtPnZhbHVlKTsK
QEAgLTQ4MzUsOTMgKzQ5MjgsNzEgQEAgc3ViIEdlbmVyYXRlQ2FsbGJhY2tJbXBsZW1lbnRhdGlv
bgogICAgICAgICB9CiAgICAgICAgICRvYmplY3QtPkdlbmVyYXRlSGFzaFRhYmxlKCRoYXNoTmFt
ZSwgJGhhc2hTaXplLCBcQGhhc2hLZXlzLCBcQGhhc2hTcGVjaWFscywgXEBoYXNoVmFsdWUxLCBc
QGhhc2hWYWx1ZTIsIFwlY29uZGl0aW9uYWxzLCAxKSBpZiAkaGFzaFNpemUgPiAwOwogCi0gICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAkY29kZUdlbmVyYXRvci0+R2VuZXJhdGVDb21waWxlVGlt
ZUNoZWNrRm9yRW51bXNJZk5lZWRlZCgkaW50ZXJmYWNlKSk7CisgICAgICAgIHB1c2goQCRjb250
ZW50UmVmLCAkY29kZUdlbmVyYXRvci0+R2VuZXJhdGVDb21waWxlVGltZUNoZWNrRm9yRW51bXNJ
Zk5lZWRlZCgkaW50ZXJmYWNlT3JDYWxsYmFjaykpOwogCi0gICAgICAgIEdlbmVyYXRlQ29uc3Ry
dWN0b3JEZWZpbml0aW9ucyhcQGltcGxDb250ZW50LCAkY2xhc3NOYW1lLCAiIiwgJHZpc2libGVJ
bnRlcmZhY2VOYW1lLCAkaW50ZXJmYWNlKTsKKyAgICAgICAgR2VuZXJhdGVDb25zdHJ1Y3RvckRl
ZmluaXRpb25zKCRjb250ZW50UmVmLCAkY2xhc3NOYW1lLCAiIiwgJHZpc2libGVOYW1lLCAkaW50
ZXJmYWNlT3JDYWxsYmFjayk7CiAKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJKU1ZhbHVl
ICR7Y2xhc3NOYW1lfTo6Z2V0Q29uc3RydWN0b3IoVk0mIHZtLCBjb25zdCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0KVxue1xuIik7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IHJldHVybiBnZXRET01Db25zdHJ1Y3Rvcjwke2NsYXNzTmFtZX1Db25zdHJ1Y3Rvcj4odm0sICpq
c0Nhc3Q8Y29uc3QgSlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpKTtcbiIpOwotICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7CisgICAgICAgIHB1c2goQCRjb250ZW50
UmVmLCAiSlNWYWx1ZSAke2NsYXNzTmFtZX06OmdldENvbnN0cnVjdG9yKFZNJiB2bSwgY29uc3Qg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdClcbntcbiIpOworICAgICAgICBwdXNoKEAkY29u
dGVudFJlZiwgIiAgICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8JHtjbGFzc05hbWV9Q29uc3Ry
dWN0b3I+KHZtLCAqanNDYXN0PGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0
KSk7XG4iKTsKKyAgICAgICAgcHVzaChAJGNvbnRlbnRSZWYsICJ9XG5cbiIpOwogICAgIH0KIAog
ICAgICMgRnVuY3Rpb25zLgotICAgIG15ICRudW1GdW5jdGlvbnMgPSBAeyRpbnRlcmZhY2UtPmZ1
bmN0aW9uc307CisgICAgbXkgJG51bUZ1bmN0aW9ucyA9IEB7JGZ1bmN0aW9uc307CiAgICAgaWYg
KCRudW1GdW5jdGlvbnMgPiAwKSB7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4vLyBG
dW5jdGlvbnNcbiIpOwotICAgICAgICBmb3JlYWNoIG15ICRmdW5jdGlvbiAoQHskaW50ZXJmYWNl
LT5mdW5jdGlvbnN9KSB7Ci0gICAgICAgICAgICBteSBAcGFyYW1zID0gQHskZnVuY3Rpb24tPmFy
Z3VtZW50c307Ci0gICAgICAgICAgICBpZiAoJGZ1bmN0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMt
PntDdXN0b219IHx8IEdldE5hdGl2ZVR5cGUoJGludGVyZmFjZSwgJGZ1bmN0aW9uLT50eXBlKSBu
ZSAiYm9vbCIpIHsKLSAgICAgICAgICAgICAgICBuZXh0OwotICAgICAgICAgICAgfQorICAgICAg
ICBmb3JlYWNoIG15ICRmdW5jdGlvbiAoQHskZnVuY3Rpb25zfSkgeworICAgICAgICAgICAgbmV4
dCBpZiAkZnVuY3Rpb24tPmV4dGVuZGVkQXR0cmlidXRlcy0+e0N1c3RvbX07CisgICAgICAgIAor
ICAgICAgICAgICAgYXNzZXJ0KCJVbnN1cHBvcnQgcmV0dXJuIHR5cGU6ICIgLiAkZnVuY3Rpb24t
PnR5cGUtPm5hbWUgLiAiLiIpIHVubGVzcyAkZnVuY3Rpb24tPnR5cGUtPm5hbWUgZXEgInZvaWQi
OwogCi0gICAgICAgICAgICBBZGRUb0ltcGxJbmNsdWRlc0ZvcklETFR5cGUoJGZ1bmN0aW9uLT50
eXBlKTsKLSAgICAgICAgICAgIG15ICRmdW5jdGlvbk5hbWUgPSAkZnVuY3Rpb24tPm5hbWU7Ci0g
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuIiAuIEdldE5hdGl2ZVR5cGVGb3JDYWxs
YmFja3MoJGludGVyZmFjZSwgJGZ1bmN0aW9uLT50eXBlKSAuICIgJHtjbGFzc05hbWV9Ojoke2Z1
bmN0aW9uTmFtZX0oIik7CisgICAgICAgICAgICBBZGRUb0luY2x1ZGVzRm9ySURMVHlwZSgkZnVu
Y3Rpb24tPnR5cGUsICRpbmNsdWRlc1JlZik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgICMg
RklYTUU6IENoYW5nZSB0aGUgZGVmYXVsdCBuYW1lICh1c2VkIGZvciBjYWxsYmFjayBmdW5jdGlv
bnMpIHRvIHNvbWV0aGluZyBvdGhlciB0aGFuIGhhbmRsZUV2ZW50LiBJdCBtYWtlcyBsaXR0bGUg
c2Vuc2UuCisgICAgICAgICAgICBteSAkZnVuY3Rpb25OYW1lID0gJGZ1bmN0aW9uLT5uYW1lID8g
JGZ1bmN0aW9uLT5uYW1lIDogImhhbmRsZUV2ZW50IjsKIAogICAgICAgICAgICAgbXkgQGFyZ3Mg
PSAoKTsKLSAgICAgICAgICAgIG15IEBhcmdzQ2hlY2sgPSAoKTsKLSAgICAgICAgICAgIGZvcmVh
Y2ggbXkgJHBhcmFtIChAcGFyYW1zKSB7Ci0gICAgICAgICAgICAgICAgbXkgJHBhcmFtTmFtZSA9
ICRwYXJhbS0+bmFtZTsKLSAgICAgICAgICAgICAgICBBZGRUb0ltcGxJbmNsdWRlc0ZvcklETFR5
cGUoJHBhcmFtLT50eXBlLCAxKTsKLSAgICAgICAgICAgICAgICBwdXNoKEBhcmdzLCBHZXROYXRp
dmVUeXBlRm9yQ2FsbGJhY2tzKCRpbnRlcmZhY2UsICRwYXJhbS0+dHlwZSkgLiAiICIgLiAkcGFy
YW1OYW1lKTsKKyAgICAgICAgICAgIGZvcmVhY2ggbXkgJGFyZ3VtZW50IChAeyRmdW5jdGlvbi0+
YXJndW1lbnRzfSkgeworICAgICAgICAgICAgICAgIEFkZFRvSW5jbHVkZXNGb3JJRExUeXBlKCRh
cmd1bWVudC0+dHlwZSwgJGluY2x1ZGVzUmVmLCAxKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBh
cmdzLCBHZXROYXRpdmVUeXBlRm9yQ2FsbGJhY2tzKCRhcmd1bWVudC0+dHlwZSwgJGludGVyZmFj
ZU9yQ2FsbGJhY2spIC4gIiAiIC4gJGFyZ3VtZW50LT5uYW1lKTsKICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCBqb2luKCIsICIsIEBhcmdzKSk7Ci0gICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIilcbiIpOworICAgICAgICAgICAgcHVzaChAJGNvbnRl
bnRSZWYsICJib29sICR7Y2xhc3NOYW1lfTo6JHtmdW5jdGlvbk5hbWV9KCIgLiBqb2luKCIsICIs
IEBhcmdzKSAuICIpXG4iKTsKKyAgICAgICAgICAgIHB1c2goQCRjb250ZW50UmVmLCAie1xuIik7
CisgICAgICAgICAgICBwdXNoKEAkY29udGVudFJlZiwgIiAgICBpZiAoIWNhbkludm9rZUNhbGxi
YWNrKCkpXG4iKTsKKyAgICAgICAgICAgIHB1c2goQCRjb250ZW50UmVmLCAiICAgICAgICByZXR1
cm4gdHJ1ZTtcblxuIik7CisgICAgICAgICAgICBwdXNoKEAkY29udGVudFJlZiwgIiAgICBSZWY8
JGNsYXNzTmFtZT4gcHJvdGVjdGVkVGhpcygqdGhpcyk7XG5cbiIpOworICAgICAgICAgICAgcHVz
aChAJGNvbnRlbnRSZWYsICIgICAgSlNMb2NrSG9sZGVyIGxvY2sobV9kYXRhLT5nbG9iYWxPYmpl
Y3QoKS0+dm0oKSk7XG5cbiIpOworICAgICAgICAgICAgcHVzaChAJGNvbnRlbnRSZWYsICIgICAg
RXhlY1N0YXRlKiBzdGF0ZSA9IG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTtc
biIpOworICAgICAgICAgICAgcHVzaChAJGNvbnRlbnRSZWYsICIgICAgTWFya2VkQXJndW1lbnRC
dWZmZXIgYXJncztcbiIpOwogCi0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIp
OwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsIEBhcmdzQ2hlY2spIGlmIEBhcmdzQ2hl
Y2s7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoIWNhbkludm9rZUNh
bGxiYWNrKCkpXG4iKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBy
ZXR1cm4gdHJ1ZTtcblxuIik7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBS
ZWY8JGNsYXNzTmFtZT4gcHJvdGVjdGVkVGhpcygqdGhpcyk7XG5cbiIpOwotICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgSlNMb2NrSG9sZGVyIGxvY2sobV9kYXRhLT5nbG9iYWxP
YmplY3QoKS0+dm0oKSk7XG5cbiIpOwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgRXhlY1N0YXRlKiBzdGF0ZSA9IG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMo
KTtcbiIpOwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgTWFya2VkQXJndW1l
bnRCdWZmZXIgYXJncztcbiIpOwotCi0gICAgICAgICAgICBmb3JlYWNoIG15ICRwYXJhbSAoQHBh
cmFtcykgewotICAgICAgICAgICAgICAgIG15ICRwYXJhbU5hbWUgPSAkcGFyYW0tPm5hbWU7Ci0g
ICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXJncy5hcHBlbmQoIiAuIE5h
dGl2ZVRvSlNWYWx1ZVVzaW5nUG9pbnRlcnMoJHBhcmFtLCAxLCAkaW50ZXJmYWNlLCAkcGFyYW1O
YW1lLCAibV9kYXRhIikgLiAiKTtcbiIpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIlxuICAgIE5ha2VkUHRyPEpTQzo6RXhjZXB0aW9uPiByZXR1cm5l
ZEV4Y2VwdGlvbjtcbiIpOwotCi0gICAgICAgICAgICBteSAkcHJvcGVydHlUb0xvb2t1cCA9ICJJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHN0YXRlLCBcIiR7ZnVuY3Rpb25OYW1lfVwiKSI7Ci0gICAg
ICAgICAgICBteSAkaW52b2tlTWV0aG9kID0gIkpTQ2FsbGJhY2tEYXRhOjpDYWxsYmFja1R5cGU6
OkZ1bmN0aW9uT3JPYmplY3QiOwotICAgICAgICAgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5FeHRl
bmRlZEF0dHJpYnV0ZUNvbnRhaW5zKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0Nh
bGxiYWNrfSwgIkZ1bmN0aW9uT25seSIpKSB7Ci0gICAgICAgICAgICAgICAgIyBGb3IgY2FsbGJh
Y2sgZnVuY3Rpb25zLCBkbyBub3QgbG9vayB1cCBjYWxsYWJsZSBwcm9wZXJ0eSBvbiB0aGUgdXNl
ciBvYmplY3QuCi0gICAgICAgICAgICAgICAgIyBodHRwczovL2hleWNhbS5naXRodWIuaW8vd2Vi
aWRsLyNlcy1jYWxsYmFjay1mdW5jdGlvbgotICAgICAgICAgICAgICAgICRpbnZva2VNZXRob2Qg
PSAiSlNDYWxsYmFja0RhdGE6OkNhbGxiYWNrVHlwZTo6RnVuY3Rpb24iOwotICAgICAgICAgICAg
ICAgICRwcm9wZXJ0eVRvTG9va3VwID0gIklkZW50aWZpZXIoKSI7Ci0gICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTtcbiIpOwotICAgICAg
ICAgICAgfSBlbHNpZiAoJG51bUZ1bmN0aW9ucyA+IDEpIHsKLSAgICAgICAgICAgICAgICAjIFRo
ZSBjYWxsYmFjayBpbnRlcmZhY2UgaGFzIG1vcmUgdGhhbiBvbmUgb3BlcmF0aW9uIHNvIHdlIHNo
b3VsZCBub3QgY2FsbCB0aGUgdXNlciBvYmplY3QgYXMgYSBmdW5jdGlvbi4KLSAgICAgICAgICAg
ICAgICAjIGluc3RlYWQsIHdlIHNob3VsZCBsb29rIGZvciBhIHByb3BlcnR5IHdpdGggdGhlIHNh
bWUgbmFtZSBhcyB0aGUgb3BlcmF0aW9uIG9uIHRoZSB1c2VyIG9iamVjdC4KLSAgICAgICAgICAg
ICAgICAjIGh0dHBzOi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI2VzLXVzZXItb2JqZWN0cwot
ICAgICAgICAgICAgICAgICRpbnZva2VNZXRob2QgPSAiSlNDYWxsYmFja0RhdGE6OkNhbGxiYWNr
VHlwZTo6T2JqZWN0IjsKKyAgICAgICAgICAgIGZvcmVhY2ggbXkgJGFyZ3VtZW50IChAeyRmdW5j
dGlvbi0+YXJndW1lbnRzfSkgeworICAgICAgICAgICAgICAgIHB1c2goQCRjb250ZW50UmVmLCAi
ICAgIGFyZ3MuYXBwZW5kKCIgLiBOYXRpdmVUb0pTVmFsdWVVc2luZ1BvaW50ZXJzKCRhcmd1bWVu
dCwgMSwgJGludGVyZmFjZU9yQ2FsbGJhY2ssICRhcmd1bWVudC0+bmFtZSwgIm1fZGF0YSIpIC4g
Iik7XG4iKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcHVzaChAJGNvbnRlbnRSZWYs
ICJcbiAgICBOYWtlZFB0cjxKU0M6OkV4Y2VwdGlvbj4gcmV0dXJuZWRFeGNlcHRpb247XG4iKTsK
KworICAgICAgICAgICAgaWYgKHJlZigkaW50ZXJmYWNlT3JDYWxsYmFjaykgZXEgIklETENhbGxi
YWNrRnVuY3Rpb24iKSB7CisgICAgICAgICAgICAgICAgcHVzaChAJGNvbnRlbnRSZWYsICIgICAg
bV9kYXRhLT5pbnZva2VDYWxsYmFjayhhcmdzLCBKU0NhbGxiYWNrRGF0YTo6Q2FsbGJhY2tUeXBl
OjpGdW5jdGlvbiwgSWRlbnRpZmllcigpLCByZXR1cm5lZEV4Y2VwdGlvbik7XG4iKTsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbXkgJGNhbGxiYWNrVHlwZSA9ICRudW1G
dW5jdGlvbnMgPiAxID8gIk9iamVjdCIgOiAiRnVuY3Rpb25Pck9iamVjdCI7CisgICAgICAgICAg
ICAgICAgcHVzaChAJGNvbnRlbnRSZWYsICIgICAgbV9kYXRhLT5pbnZva2VDYWxsYmFjayhhcmdz
LCBKU0NhbGxiYWNrRGF0YTo6Q2FsbGJhY2tUeXBlOjoke2NhbGxiYWNrVHlwZX0sIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcoc3RhdGUsIFwiJHtmdW5jdGlvbk5hbWV9XCIpLCByZXR1cm5lZEV4Y2Vw
dGlvbik7XG4iKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIG1fZGF0YS0+aW52b2tlQ2FsbGJhY2soYXJncywgJGludm9rZU1ldGhvZCwgJHByb3Bl
cnR5VG9Mb29rdXAsIHJldHVybmVkRXhjZXB0aW9uKTtcbiIpOwogCiAgICAgICAgICAgICAjIEZJ
WE1FOiBXZSBjdXJyZW50bHkganVzdCByZXBvcnQgdGhlIGV4Y2VwdGlvbi4gV2Ugc2hvdWxkIHBy
b2JhYmx5IGFkZCBhbiBleHRlbmRlZCBhdHRyaWJ1dGUgdG8gaW5kaWNhdGUgd2hlbgogICAgICAg
ICAgICAgIyB3ZSB3YW50IHRoZSBleGNlcHRpb24gdG8gYmUgcmV0aHJvd24gaW5zdGVhZC4KLSAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmIChyZXR1cm5lZEV4Y2VwdGlvbilc
biIpOwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJlcG9ydEV4Y2Vw
dGlvbihzdGF0ZSwgcmV0dXJuZWRFeGNlcHRpb24pO1xuIik7Ci0gICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICByZXR1cm4gIXJldHVybmVkRXhjZXB0aW9uO1xuIik7Ci0gICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cbiIpOworICAgICAgICAgICAgcHVzaChAJGNvbnRl
bnRSZWYsICIgICAgaWYgKHJldHVybmVkRXhjZXB0aW9uKVxuIik7CisgICAgICAgICAgICBwdXNo
KEAkY29udGVudFJlZiwgIiAgICAgICAgcmVwb3J0RXhjZXB0aW9uKHN0YXRlLCByZXR1cm5lZEV4
Y2VwdGlvbik7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQCRjb250ZW50UmVmLCAiICAgIHJldHVy
biAhcmV0dXJuZWRFeGNlcHRpb247XG4iKTsKKyAgICAgICAgICAgIHB1c2goQCRjb250ZW50UmVm
LCAifVxuXG4iKTsKICAgICAgICAgfQogICAgIH0KIAogICAgICMgdG9KUygpIGltcGxlbWVudGF0
aW9uLgotICAgIHB1c2goQGltcGxDb250ZW50LCAiXG5KU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4
ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgJGludGVyZmFjZU5hbWUmIGltcGwpXG4iKTsK
LSAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgIGlmICghc3RhdGljX2Nhc3Q8JHtjbGFzc05hbWV9Jj4oaW1wbCkuY2FsbGJhY2tEYXRhKCkp
XG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIGpzTnVsbCgpO1xu
XG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gc3RhdGljX2Nhc3Q8JHtj
bGFzc05hbWV9Jj4oaW1wbCkuY2FsbGJhY2tEYXRhKCktPmNhbGxiYWNrKCk7XG5cbiIpOwotICAg
IHB1c2goQGltcGxDb250ZW50LCAifVxuIik7Ci0KLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxu
fVxuIik7Ci0gICAgbXkgJGNvbmRpdGlvbmFsU3RyaW5nID0gJGNvZGVHZW5lcmF0b3ItPkdlbmVy
YXRlQ29uZGl0aW9uYWxTdHJpbmcoJGludGVyZmFjZSk7Ci0gICAgcHVzaChAaW1wbENvbnRlbnQs
ICJcbiNlbmRpZiAvLyAke2NvbmRpdGlvbmFsU3RyaW5nfVxuIikgaWYgJGNvbmRpdGlvbmFsU3Ry
aW5nOwotCi0gICAgcHVzaChAaW1wbENvbnRlbnQsIHNwbGl0KCJcciIsICRlbmRBcHBsZUNvcHly
aWdodCkpIGlmICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0FwcGxlQ29weXJpZ2h0
fTsKKyAgICBwdXNoKEAkY29udGVudFJlZiwgIkpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0
YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCAke25hbWV9JiBpbXBsKVxuIik7CisgICAgcHVzaChA
JGNvbnRlbnRSZWYsICJ7XG4iKTsKKyAgICBwdXNoKEAkY29udGVudFJlZiwgIiAgICBpZiAoIXN0
YXRpY19jYXN0PCR7Y2xhc3NOYW1lfSY+KGltcGwpLmNhbGxiYWNrRGF0YSgpKVxuIik7CisgICAg
cHVzaChAJGNvbnRlbnRSZWYsICIgICAgICAgIHJldHVybiBqc051bGwoKTtcblxuIik7CisgICAg
cHVzaChAJGNvbnRlbnRSZWYsICIgICAgcmV0dXJuIHN0YXRpY19jYXN0PCR7Y2xhc3NOYW1lfSY+
KGltcGwpLmNhbGxiYWNrRGF0YSgpLT5jYWxsYmFjaygpO1xuXG4iKTsKKyAgICBwdXNoKEAkY29u
dGVudFJlZiwgIn1cblxuIik7CiB9CiAKIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uRnVuY3Rp
b25DYWxsKCkKQEAgLTUyODIsNyArNTM1Myw3IEBAIHN1YiBTaG91bGRQYXNzV3JhcHBlckJ5UmVm
ZXJlbmNlCiB7CiAgICAgbXkgKCRwYXJhbWV0ZXIsICRpbnRlcmZhY2UpID0gQF87CiAKLSAgICBy
ZXR1cm4gMCBpZiAkY29kZUdlbmVyYXRvci0+SXNDYWxsYmFja0ludGVyZmFjZSgkcGFyYW1ldGVy
LT50eXBlKTsKKyAgICByZXR1cm4gMCBpZiAkY29kZUdlbmVyYXRvci0+SXNDYWxsYmFja0ludGVy
ZmFjZSgkcGFyYW1ldGVyLT50eXBlKSB8fCAkY29kZUdlbmVyYXRvci0+SXNDYWxsYmFja0Z1bmN0
aW9uKCRwYXJhbWV0ZXItPnR5cGUpOwogCiAgICAgbXkgJG5hdGl2ZVR5cGUgPSBHZXROYXRpdmVU
eXBlKCRpbnRlcmZhY2UsICRwYXJhbWV0ZXItPnR5cGUpOwogICAgIHJldHVybiAkY29kZUdlbmVy
YXRvci0+U2hvdWxkUGFzc1dyYXBwZXJCeVJlZmVyZW5jZSgkcGFyYW1ldGVyKSAmJiAoc3Vic3Ry
KCRuYXRpdmVUeXBlLCAtMSkgZXEgJyonIHx8ICRuYXRpdmVUeXBlID1+IC9eUmVmUHRyLyk7CkBA
IC01MzAwLDcgKzUzNzEsNyBAQCBzdWIgR2V0TmF0aXZlVmVjdG9ySW5uZXJUeXBlCiAKIHN1YiBH
ZXROYXRpdmVUeXBlRm9yQ2FsbGJhY2tzCiB7Ci0gICAgbXkgKCRpbnRlcmZhY2UsICR0eXBlKSA9
IEBfOworICAgIG15ICgkdHlwZSwgJGludGVyZmFjZSkgPSBAXzsKIAogICAgIHJldHVybiAiUmVm
UHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4mJiIgaWYgJHR5cGUtPm5hbWUgZXEgIlNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZSI7CiAgICAgcmV0dXJuICJjb25zdCBTdHJpbmcmIiBpZiAkY29kZUdlbmVy
YXRvci0+SXNTdHJpbmdUeXBlKCR0eXBlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvSURMQXR0cmlidXRlcy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy9JRExBdHRyaWJ1dGVzLnR4dAkocmV2aXNpb24gMjA4Mzk2KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExBdHRyaWJ1dGVzLnR4dAkod29ya2lu
ZyBjb3B5KQpAQCAtMjQsNyArMjQsNiBAQCBBdG9taWNTdHJpbmcKIENFUmVhY3Rpb25zCiBDYWNo
ZWRBdHRyaWJ1dGUKIENhbGxiYWNrTmVlZHNPcGVyYXRvckVxdWFsCi1DYWxsYmFjaz1GdW5jdGlv
bk9ubHkKIENhbGxXaXRoPURvY3VtZW50fFNjcmlwdEV4ZWN1dGlvbkNvbnRleHR8U2NyaXB0U3Rh
dGV8U2NyaXB0QXJndW1lbnRzfENhbGxTdGFja3xBY3RpdmVXaW5kb3d8Rmlyc3RXaW5kb3d8Q2Fs
bGVyRG9jdW1lbnR8Q2FsbGVyV2luZG93CiBDaGVja1NlY3VyaXR5CiBDaGVja1NlY3VyaXR5Rm9y
Tm9kZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExQYXJzZXIucG0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExQYXJzZXIu
cG0JKHJldmlzaW9uIDIwODM5NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
SURMUGFyc2VyLnBtCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3IEBAIHN0cnVjdCggSURM
RG9jdW1lbnQgPT4gewogICAgIGludGVyZmFjZXMgPT4gJ0AnLCAjIExpc3Qgb2YgJ0lETEludGVy
ZmFjZScKICAgICBlbnVtZXJhdGlvbnMgPT4gJ0AnLCAjIExpc3Qgb2YgJ0lETEVudW0nCiAgICAg
ZGljdGlvbmFyaWVzID0+ICdAJywgIyBMaXN0IG9mICdJRExEaWN0aW9uYXJ5JworICAgIGNhbGxi
YWNrRnVuY3Rpb25zID0+ICdAJywgIyBMaXN0IG9mICdJRExDYWxsYmFja0Z1bmN0aW9uJwogICAg
IGZpbGVOYW1lID0+ICckJywKIH0pOwogCkBAIC0xMzUsNyArMTM2LDcgQEAgc3RydWN0KCBJRExF
bnVtID0+IHsKICAgICBleHRlbmRlZEF0dHJpYnV0ZXMgPT4gJyQnLAogfSk7CiAKLQorIyBodHRw
czovL2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNkZm4tZGljdGlvbmFyeS1tZW1iZXIKIHN0cnVj
dCggSURMRGljdGlvbmFyeU1lbWJlciA9PiB7CiAgICAgbmFtZSA9PiAnJCcsCiAgICAgdHlwZSA9
PiAnSURMVHlwZScsCkBAIC0xNDQsNyArMTQ1LDYgQEAgc3RydWN0KCBJRExEaWN0aW9uYXJ5TWVt
YmVyID0+IHsKICAgICBleHRlbmRlZEF0dHJpYnV0ZXMgPT4gJyQnLAogfSk7CiAKLQogIyBodHRw
czovL2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNpZGwtZGljdGlvbmFyaWVzCiBzdHJ1Y3QoIElE
TERpY3Rpb25hcnkgPT4gewogICAgIHR5cGUgPT4gJ0lETFR5cGUnLApAQCAtMTUzLDcgKzE1Mywx
NCBAQCBzdHJ1Y3QoIElETERpY3Rpb25hcnkgPT4gewogICAgIGV4dGVuZGVkQXR0cmlidXRlcyA9
PiAnJCcsCiB9KTsKIAotIyBodHRwczovL2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNpZGwtZW51
bXMKKyMgaHR0cHM6Ly9oZXljYW0uZ2l0aHViLmlvL3dlYmlkbC8jaWRsLWNhbGxiYWNrLWZ1bmN0
aW9ucworc3RydWN0KCBJRExDYWxsYmFja0Z1bmN0aW9uID0+IHsKKyAgICB0eXBlID0+ICckJywK
KyAgICBvcGVyYXRpb24gPT4gJ0lETE9wZXJhdGlvbicsCisgICAgZXh0ZW5kZWRBdHRyaWJ1dGVz
ID0+ICckJywKK30pOworCisjIGh0dHBzOi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI2lkbC10
eXBlZGVmcwogc3RydWN0KCBJRExUeXBlZGVmID0+IHsKICAgICB0eXBlID0+ICdJRExUeXBlJywK
IH0pOwpAQCAtMjc2LDYgKzI4Myw4IEBAIHN1YiBQYXJzZQogICAgICAgICAgICAgcHVzaChAeyRk
b2N1bWVudC0+ZW51bWVyYXRpb25zfSwgJGRlZmluaXRpb24pOwogICAgICAgICB9IGVsc2lmIChy
ZWYoJGRlZmluaXRpb24pIGVxICJJRExEaWN0aW9uYXJ5IikgewogICAgICAgICAgICAgcHVzaChA
eyRkb2N1bWVudC0+ZGljdGlvbmFyaWVzfSwgJGRlZmluaXRpb24pOworICAgICAgICB9IGVsc2lm
IChyZWYoJGRlZmluaXRpb24pIGVxICJJRExDYWxsYmFja0Z1bmN0aW9uIikgeworICAgICAgICAg
ICAgcHVzaChAeyRkb2N1bWVudC0+Y2FsbGJhY2tGdW5jdGlvbnN9LCAkZGVmaW5pdGlvbik7CiAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBkaWUgIlVucmVjb2duaXplZCBJREwgZGVmaW5p
dGlvbiBraW5kOiBcIiIgLiByZWYoJGRlZmluaXRpb24pIC4gIlwiIjsKICAgICAgICAgfQpAQCAt
NDY3LDIzICs0NzYsMzMgQEAgc3ViIGFwcGx5VHlwZWRlZnMKICAgICAgICAgICAgIGZvcmVhY2gg
bXkgJGF0dHJpYnV0ZSAoQHskZGVmaW5pdGlvbi0+YXR0cmlidXRlc30pIHsKICAgICAgICAgICAg
ICAgICAkYXR0cmlidXRlLT50eXBlKCRzZWxmLT50eXBlQnlBcHBseWluZ1R5cGVkZWZzKCRhdHRy
aWJ1dGUtPnR5cGUpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZvcmVhY2ggbXkgJGZ1
bmN0aW9uIChAeyRkZWZpbml0aW9uLT5mdW5jdGlvbnN9LCBAeyRkZWZpbml0aW9uLT5hbm9ueW1v
dXNGdW5jdGlvbnN9LCBAeyRkZWZpbml0aW9uLT5jb25zdHJ1Y3RvcnN9LCBAeyRkZWZpbml0aW9u
LT5jdXN0b21Db25zdHJ1Y3RvcnN9KSB7Ci0gICAgICAgICAgICAgICAgaWYgKCRmdW5jdGlvbi0+
dHlwZSkgewotICAgICAgICAgICAgICAgICAgICAkZnVuY3Rpb24tPnR5cGUoJHNlbGYtPnR5cGVC
eUFwcGx5aW5nVHlwZWRlZnMoJGZ1bmN0aW9uLT50eXBlKSk7Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgZm9yZWFjaCBteSAkYXJndW1lbnQgKEB7JGZ1bmN0aW9uLT5hcmd1
bWVudHN9KSB7Ci0gICAgICAgICAgICAgICAgICAgICRhcmd1bWVudC0+dHlwZSgkc2VsZi0+dHlw
ZUJ5QXBwbHlpbmdUeXBlZGVmcygkYXJndW1lbnQtPnR5cGUpKTsKLSAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICBmb3JlYWNoIG15ICRvcGVyYXRpb24gKEB7JGRlZmluaXRpb24tPmZ1bmN0
aW9uc30sIEB7JGRlZmluaXRpb24tPmFub255bW91c0Z1bmN0aW9uc30sIEB7JGRlZmluaXRpb24t
PmNvbnN0cnVjdG9yc30sIEB7JGRlZmluaXRpb24tPmN1c3RvbUNvbnN0cnVjdG9yc30pIHsKKyAg
ICAgICAgICAgICAgICAkc2VsZi0+YXBwbHlUeXBlZGVmc1RvT3BlcmF0aW9uKCRvcGVyYXRpb24p
OwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2lmIChyZWYoJGRlZmluaXRpb24pIGVxICJJ
RExEaWN0aW9uYXJ5IikgewogICAgICAgICAgICAgZm9yZWFjaCBteSAkbWVtYmVyIChAeyRkZWZp
bml0aW9uLT5tZW1iZXJzfSkgewogICAgICAgICAgICAgICAgICRtZW1iZXItPnR5cGUoJHNlbGYt
PnR5cGVCeUFwcGx5aW5nVHlwZWRlZnMoJG1lbWJlci0+dHlwZSkpOwogICAgICAgICAgICAgfQor
ICAgICAgICB9IGVsc2lmIChyZWYoJGRlZmluaXRpb24pIGVxICJJRExDYWxsYmFja0Z1bmN0aW9u
IikgeworICAgICAgICAgICAgJHNlbGYtPmFwcGx5VHlwZWRlZnNUb09wZXJhdGlvbigkZGVmaW5p
dGlvbi0+b3BlcmF0aW9uKTsKICAgICAgICAgfQogICAgIH0KIH0KIAorc3ViIGFwcGx5VHlwZWRl
ZnNUb09wZXJhdGlvbgoreworICAgIG15ICRzZWxmID0gc2hpZnQ7CisgICAgbXkgJG9wZXJhdGlv
biA9IHNoaWZ0OworCisgICAgaWYgKCRvcGVyYXRpb24tPnR5cGUpIHsKKyAgICAgICAgJG9wZXJh
dGlvbi0+dHlwZSgkc2VsZi0+dHlwZUJ5QXBwbHlpbmdUeXBlZGVmcygkb3BlcmF0aW9uLT50eXBl
KSk7CisgICAgfQorCisgICAgZm9yZWFjaCBteSAkYXJndW1lbnQgKEB7JG9wZXJhdGlvbi0+YXJn
dW1lbnRzfSkgeworICAgICAgICAkYXJndW1lbnQtPnR5cGUoJHNlbGYtPnR5cGVCeUFwcGx5aW5n
VHlwZWRlZnMoJGFyZ3VtZW50LT50eXBlKSk7CisgICAgfQorfQorCiBzdWIgdHlwZUJ5QXBwbHlp
bmdUeXBlZGVmcwogewogICAgIG15ICRzZWxmID0gc2hpZnQ7CkBAIC05NTAsMTQgKzk2OSwzMCBA
QCBzdWIgcGFyc2VDYWxsYmFja1Jlc3QKIAogICAgIG15ICRuZXh0ID0gJHNlbGYtPm5leHRUb2tl
bigpOwogICAgIGlmICgkbmV4dC0+dHlwZSgpID09IElkZW50aWZpZXJUb2tlbikgewotICAgICAg
ICAkc2VsZi0+YXNzZXJ0VG9rZW5UeXBlKCRzZWxmLT5nZXRUb2tlbigpLCBJZGVudGlmaWVyVG9r
ZW4pOworICAgICAgICBteSAkY2FsbGJhY2sgPSBJRExDYWxsYmFja0Z1bmN0aW9uLT5uZXcoKTsK
KworICAgICAgICBteSAkbmFtZVRva2VuID0gJHNlbGYtPmdldFRva2VuKCk7CisgICAgICAgICRz
ZWxmLT5hc3NlcnRUb2tlblR5cGUoJG5hbWVUb2tlbiwgSWRlbnRpZmllclRva2VuKTsKKworICAg
ICAgICAkY2FsbGJhY2stPnR5cGUobWFrZVNpbXBsZVR5cGUoJG5hbWVUb2tlbi0+dmFsdWUoKSkp
OworCiAgICAgICAgICRzZWxmLT5hc3NlcnRUb2tlblZhbHVlKCRzZWxmLT5nZXRUb2tlbigpLCAi
PSIsIF9fTElORV9fKTsKLSAgICAgICAgJHNlbGYtPnBhcnNlUmV0dXJuVHlwZSgpOworCisgICAg
ICAgIG15ICRvcGVyYXRpb24gPSBJRExPcGVyYXRpb24tPm5ldygpOworICAgICAgICAkb3BlcmF0
aW9uLT50eXBlKCRzZWxmLT5wYXJzZVJldHVyblR5cGUoKSk7CisgICAgICAgICRvcGVyYXRpb24t
PmV4dGVuZGVkQXR0cmlidXRlcygkZXh0ZW5kZWRBdHRyaWJ1dGVMaXN0KTsKKwogICAgICAgICAk
c2VsZi0+YXNzZXJ0VG9rZW5WYWx1ZSgkc2VsZi0+Z2V0VG9rZW4oKSwgIigiLCBfX0xJTkVfXyk7
Ci0gICAgICAgICRzZWxmLT5wYXJzZUFyZ3VtZW50TGlzdCgpOworCisgICAgICAgIHB1c2goQHsk
b3BlcmF0aW9uLT5hcmd1bWVudHN9LCBAeyRzZWxmLT5wYXJzZUFyZ3VtZW50TGlzdCgpfSk7CisK
ICAgICAgICAgJHNlbGYtPmFzc2VydFRva2VuVmFsdWUoJHNlbGYtPmdldFRva2VuKCksICIpIiwg
X19MSU5FX18pOwogICAgICAgICAkc2VsZi0+YXNzZXJ0VG9rZW5WYWx1ZSgkc2VsZi0+Z2V0VG9r
ZW4oKSwgIjsiLCBfX0xJTkVfXyk7Ci0gICAgICAgIHJldHVybjsKKworICAgICAgICAkY2FsbGJh
Y2stPm9wZXJhdGlvbigkb3BlcmF0aW9uKTsKKyAgICAgICAgJGNhbGxiYWNrLT5leHRlbmRlZEF0
dHJpYnV0ZXMoJGV4dGVuZGVkQXR0cmlidXRlTGlzdCk7CisKKyAgICAgICAgcmV0dXJuICRjYWxs
YmFjazsKICAgICB9CiAgICAgJHNlbGYtPmFzc2VydFVuZXhwZWN0ZWRUb2tlbigkbmV4dC0+dmFs
dWUoKSwgX19MSU5FX18pOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Rlc3RDYWxsYmFjay5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RDYWxsYmFjay5pZGwJKHJldmlzaW9uIDIwODM5NikKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0Q2FsbGJhY2suaWRsCShu
b25leGlzdGVudCkKQEAgLTEsNDcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXN0ckFyZywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5h
bWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRXN0ckFyZywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIFRoaXMgSURMIGZpbGUgaXMgZm9yIHRl
c3RpbmcgdGhlIGJpbmRpbmdzIGNvZGUgZ2VuZXJhdG9yIHdpdGggYSBjYWxsYmFjawotLy8gaW50
ZXJmYWNlIGFuZCBmb3IgdHJhY2tpbmcgY2hhbmdlcyBpbiBpdHMgb3VwdXQuCi1bCi0gICAgQ29u
ZGl0aW9uYWw9U1BFRUNIX1NZTlRIRVNJUywKLV0gY2FsbGJhY2sgaW50ZXJmYWNlIFRlc3RDYWxs
YmFjayB7Ci0gIC8vIENvbnN0YW50cwotICBjb25zdCB1bnNpZ25lZCBzaG9ydCBDT05TVEFOVDEg
PSAxOwotICBjb25zdCB1bnNpZ25lZCBzaG9ydCBDT05TVEFOVDIgPSAyOwotCi0gIC8vIE9wZXJh
dGlvbnMuCi0gIGJvb2xlYW4gY2FsbGJhY2tXaXRoTm9QYXJhbSgpOwotICBib29sZWFuIGNhbGxi
YWNrV2l0aEFycmF5UGFyYW0oRmxvYXQzMkFycmF5IGFycmF5UGFyYW0pOwotICBib29sZWFuIGNh
bGxiYWNrV2l0aFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZVBhcmFtKFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZSBzcnpQYXJhbSwgRE9NU3RyaW5nIHN0ckFyZyk7Ci0gIGxvbmcgY2FsbGJhY2tXaXRoTm9uQm9v
bFJldHVyblR5cGUoRE9NU3RyaW5nIHN0ckFyZyk7Ci0gIFtDdXN0b21dIGxvbmcgY3VzdG9tQ2Fs
bGJhY2soQ2xhc3M1IGNsYXNzNVBhcmFtLCBDbGFzczYgY2xhc3M2UGFyYW0pOwotICBib29sZWFu
IGNhbGxiYWNrV2l0aFN0cmluZ0xpc3QoRE9NU3RyaW5nTGlzdCBsaXN0UGFyYW0pOwotICBib29s
ZWFuIGNhbGxiYWNrV2l0aEJvb2xlYW4oYm9vbGVhbiBib29sUGFyYW0pOwotICBib29sZWFuIGNh
bGxiYWNrUmVxdWlyZXNUaGlzVG9QYXNzKGxvbmcgbG9uZ1BhcmFtLCBUZXN0Tm9kZSB0ZXN0Tm9k
ZVBhcmFtKTsKLX07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
VGVzdENhbGxiYWNrRnVuY3Rpb24uaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0Q2FsbGJhY2tGdW5jdGlvbi5pZGwJKHJldmlzaW9uIDIw
ODM5NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0Q2FsbGJh
Y2tGdW5jdGlvbi5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTI2LDE4ICsyNiw2IEBACiAgKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgogICovCiAKLS8vIFRoaXMgSURMIGZpbGUgaXMgZm9yIHRlc3RpbmcgdGhlIGJpbmRpbmdz
IGNvZGUgZ2VuZXJhdG9yIHdpdGggZnVuY3Rpb24gb25seSBjYWxsYmFjawotLy8gaW50ZXJmYWNl
IGFuZCBmb3IgdHJhY2tpbmcgY2hhbmdlcyBpbiBpdHMgb3VwdXQuCiBbCiAgICAgQ29uZGl0aW9u
YWw9U1BFRUNIX1NZTlRIRVNJUywKLSAgICBDYWxsYmFjaz1GdW5jdGlvbk9ubHksCi1dIGNhbGxi
YWNrIGludGVyZmFjZSBUZXN0Q2FsbGJhY2tGdW5jdGlvbiB7Ci0gIGJvb2xlYW4gY2FsbGJhY2tX
aXRoTm9QYXJhbSgpOwotICBib29sZWFuIGNhbGxiYWNrV2l0aEFycmF5UGFyYW0oRmxvYXQzMkFy
cmF5IGFycmF5UGFyYW0pOwotICBib29sZWFuIGNhbGxiYWNrV2l0aFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZVBhcmFtKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSBzcnpQYXJhbSwgRE9NU3RyaW5nIHN0ckFy
Zyk7Ci0gIGxvbmcgY2FsbGJhY2tXaXRoTm9uQm9vbFJldHVyblR5cGUoRE9NU3RyaW5nIHN0ckFy
Zyk7Ci0gIFtDdXN0b21dIGxvbmcgY3VzdG9tQ2FsbGJhY2soQ2xhc3M1IGNsYXNzNVBhcmFtLCBD
bGFzczYgY2xhc3M2UGFyYW0pOwotICBib29sZWFuIGNhbGxiYWNrV2l0aFN0cmluZ0xpc3QoRE9N
U3RyaW5nTGlzdCBsaXN0UGFyYW0pOwotICBib29sZWFuIGNhbGxiYWNrV2l0aEJvb2xlYW4oYm9v
bGVhbiBib29sUGFyYW0pOwotICBib29sZWFuIGNhbGxiYWNrUmVxdWlyZXNUaGlzVG9QYXNzKGxv
bmcgbG9uZ1BhcmFtLCBUZXN0Tm9kZSB0ZXN0Tm9kZVBhcmFtKTsKLX07CitdIGNhbGxiYWNrIFRl
c3RDYWxsYmFja0Z1bmN0aW9uID0gdm9pZCAoRmxvYXQzMkFycmF5IGFycmF5UGFyYW0sIFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZSBzcnpQYXJhbSwgRE9NU3RyaW5nIHN0ckFyZywgYm9vbGVhbiBib29s
UGFyYW0sIGxvbmcgbG9uZ1BhcmFtLCBUZXN0Tm9kZSB0ZXN0Tm9kZVBhcmFtKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0Q2FsbGJhY2tGdW5jdGlvbldp
dGhUeXBlZGVmcy5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Rlc3RDYWxsYmFja0Z1bmN0aW9uV2l0aFR5cGVkZWZzLmlkbAkobm9uZXhpc3Rl
bnQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdENhbGxiYWNr
RnVuY3Rpb25XaXRoVHlwZWRlZnMuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCit0eXBlZGVmIGxvbmcgTE9ORzsKK3R5cGVkZWYgc2VxdWVuY2U8TE9ORz8+
IFNFUVVFTkNFX09GX05VTExBQkxFX0xPTkdTOwordHlwZWRlZiB2b2lkIFZPSUQ7CisKK2NhbGxi
YWNrIFRlc3RDYWxsYmFja0Z1bmN0aW9uV2l0aFR5cGVkZWZzID0gVk9JRCAoU0VRVUVOQ0VfT0Zf
TlVMTEFCTEVfTE9OR1Mgc2VxdWVuY2VBcmcsIExPTkcgbG9uZ0FyZyk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdENhbGxiYWNrSW50ZXJmYWNlLmlkbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdENh
bGxiYWNrSW50ZXJmYWNlLmlkbAkocmV2aXNpb24gMjA4Mzk2KQkoZnJvbSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdENhbGxiYWNrLmlkbDoyMDgzOTYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdENhbGxiYWNrSW50ZXJmYWNlLmlk
bAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtc3RyQXJnLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0
aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFc3RyQXJnLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gVGhpcyBJREwgZmlsZSBpcyBm
b3IgdGVzdGluZyB0aGUgYmluZGluZ3MgY29kZSBnZW5lcmF0b3Igd2l0aCBhIGNhbGxiYWNrCisv
LyBpbnRlcmZhY2UgYW5kIGZvciB0cmFja2luZyBjaGFuZ2VzIGluIGl0cyBvdXB1dC4KK1sKKyAg
ICBDb25kaXRpb25hbD1TUEVFQ0hfU1lOVEhFU0lTLAorXSBjYWxsYmFjayBpbnRlcmZhY2UgVGVz
dENhbGxiYWNrIHsKKyAgLy8gQ29uc3RhbnRzCisgIGNvbnN0IHVuc2lnbmVkIHNob3J0IENPTlNU
QU5UMSA9IDE7CisgIGNvbnN0IHVuc2lnbmVkIHNob3J0IENPTlNUQU5UMiA9IDI7CisKKyAgLy8g
T3BlcmF0aW9ucy4KKyAgYm9vbGVhbiBjYWxsYmFja1dpdGhOb1BhcmFtKCk7CisgIGJvb2xlYW4g
Y2FsbGJhY2tXaXRoQXJyYXlQYXJhbShGbG9hdDMyQXJyYXkgYXJyYXlQYXJhbSk7CisgIGJvb2xl
YW4gY2FsbGJhY2tXaXRoU2VyaWFsaXplZFNjcmlwdFZhbHVlUGFyYW0oU2VyaWFsaXplZFNjcmlw
dFZhbHVlIHNyelBhcmFtLCBET01TdHJpbmcgc3RyQXJnKTsKKyAgbG9uZyBjYWxsYmFja1dpdGhO
b25Cb29sUmV0dXJuVHlwZShET01TdHJpbmcgc3RyQXJnKTsKKyAgW0N1c3RvbV0gbG9uZyBjdXN0
b21DYWxsYmFjayhDbGFzczUgY2xhc3M1UGFyYW0sIENsYXNzNiBjbGFzczZQYXJhbSk7CisgIGJv
b2xlYW4gY2FsbGJhY2tXaXRoU3RyaW5nTGlzdChET01TdHJpbmdMaXN0IGxpc3RQYXJhbSk7Cisg
IGJvb2xlYW4gY2FsbGJhY2tXaXRoQm9vbGVhbihib29sZWFuIGJvb2xQYXJhbSk7CisgIGJvb2xl
YW4gY2FsbGJhY2tSZXF1aXJlc1RoaXNUb1Bhc3MobG9uZyBsb25nUGFyYW0sIFRlc3ROb2RlIHRl
c3ROb2RlUGFyYW0pOworfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9UZXN0Q2FsbGJhY2tJbnRlcmZhY2UuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0Q2FsbGJhY2tJbnRlcmZhY2UuaWRsCShyZXZp
c2lvbiAyMDgzOTYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVz
dENhbGxiYWNrSW50ZXJmYWNlLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8q
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
dHJBcmcsIHdpdGggb3Igd2l0aG91dAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKICAqIGFy
ZSBtZXQ6CiAgKgpAQCAtMTUsNyArMTUsNyBAQAogICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KICAqCiAgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRXN0ckFyZywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECiAg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCiAgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCiAgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UwpAQCAtMjYsMjIgKzI2LDE5IEBACiAgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLS8vIFRoaXMgSURMIGZp
bGUgaXMgZm9yIHRlc3RpbmcgdGhlIGJpbmRpbmdzIGNvZGUgZ2VuZXJhdG9yIHdpdGggYSBjYWxs
YmFjawotLy8gaW50ZXJmYWNlIGFuZCBmb3IgdHJhY2tpbmcgY2hhbmdlcyBpbiBpdHMgb3VwdXQu
CiBbCiAgICAgQ29uZGl0aW9uYWw9U1BFRUNIX1NZTlRIRVNJUywKLV0gY2FsbGJhY2sgaW50ZXJm
YWNlIFRlc3RDYWxsYmFjayB7Ci0gIC8vIENvbnN0YW50cwotICBjb25zdCB1bnNpZ25lZCBzaG9y
dCBDT05TVEFOVDEgPSAxOwotICBjb25zdCB1bnNpZ25lZCBzaG9ydCBDT05TVEFOVDIgPSAyOwor
XSBjYWxsYmFjayBpbnRlcmZhY2UgVGVzdENhbGxiYWNrSW50ZXJmYWNlIHsKKyAgICAvLyBDb25z
dGFudHMKKyAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBDT05TVEFOVDEgPSAxOworICAgIGNvbnN0
IHVuc2lnbmVkIHNob3J0IENPTlNUQU5UMiA9IDI7CiAKLSAgLy8gT3BlcmF0aW9ucy4KLSAgYm9v
bGVhbiBjYWxsYmFja1dpdGhOb1BhcmFtKCk7Ci0gIGJvb2xlYW4gY2FsbGJhY2tXaXRoQXJyYXlQ
YXJhbShGbG9hdDMyQXJyYXkgYXJyYXlQYXJhbSk7Ci0gIGJvb2xlYW4gY2FsbGJhY2tXaXRoU2Vy
aWFsaXplZFNjcmlwdFZhbHVlUGFyYW0oU2VyaWFsaXplZFNjcmlwdFZhbHVlIHNyelBhcmFtLCBE
T01TdHJpbmcgc3RyQXJnKTsKLSAgbG9uZyBjYWxsYmFja1dpdGhOb25Cb29sUmV0dXJuVHlwZShE
T01TdHJpbmcgc3RyQXJnKTsKLSAgW0N1c3RvbV0gbG9uZyBjdXN0b21DYWxsYmFjayhDbGFzczUg
Y2xhc3M1UGFyYW0sIENsYXNzNiBjbGFzczZQYXJhbSk7Ci0gIGJvb2xlYW4gY2FsbGJhY2tXaXRo
U3RyaW5nTGlzdChET01TdHJpbmdMaXN0IGxpc3RQYXJhbSk7Ci0gIGJvb2xlYW4gY2FsbGJhY2tX
aXRoQm9vbGVhbihib29sZWFuIGJvb2xQYXJhbSk7Ci0gIGJvb2xlYW4gY2FsbGJhY2tSZXF1aXJl
c1RoaXNUb1Bhc3MobG9uZyBsb25nUGFyYW0sIFRlc3ROb2RlIHRlc3ROb2RlUGFyYW0pOworICAg
IC8vIE9wZXJhdGlvbnMuCisgICAgdm9pZCBjYWxsYmFja1dpdGhOb1BhcmFtKCk7CisgICAgdm9p
ZCBjYWxsYmFja1dpdGhBcnJheVBhcmFtKEZsb2F0MzJBcnJheSBhcnJheVBhcmFtKTsKKyAgICB2
b2lkIGNhbGxiYWNrV2l0aFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZVBhcmFtKFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZSBzcnpQYXJhbSwgRE9NU3RyaW5nIHN0clBhcmFtKTsKKyAgICBbQ3VzdG9tXSBsb25n
IGN1c3RvbUNhbGxiYWNrKENsYXNzNSBjbGFzczVQYXJhbSwgQ2xhc3M2IGNsYXNzNlBhcmFtKTsK
KyAgICB2b2lkIGNhbGxiYWNrV2l0aFN0cmluZ0xpc3QoRE9NU3RyaW5nTGlzdCBsaXN0UGFyYW0p
OworICAgIHZvaWQgY2FsbGJhY2tXaXRoQm9vbGVhbihib29sZWFuIGJvb2xQYXJhbSk7CisgICAg
dm9pZCBjYWxsYmFja1JlcXVpcmVzVGhpc1RvUGFzcyhsb25nIGxvbmdQYXJhbSwgVGVzdE5vZGUg
dGVzdE5vZGVQYXJhbSk7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Rlc3RPYmouaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9UZXN0T2JqLmlkbAkocmV2aXNpb24gMjA4Mzk2KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsCSh3b3JraW5nIGNvcHkpCkBA
IC00Nyw3ICs0Nyw3IEBAIGVudW0gVGVzdENvbmZpZGVuY2UgeyAiaGlnaCIsICJraW5kYS1sb3cK
IAogWwogICAgIENvbnN0cnVjdG9yQ2FsbFdpdGg9RG9jdW1lbnQsCi0gICAgQ29uc3RydWN0b3Io
VGVzdENhbGxiYWNrIHRlc3RDYWxsYmFjaywgVGVzdENhbGxiYWNrRnVuY3Rpb24gdGVzdENhbGxi
YWNrRnVuY3Rpb24pLAorICAgIENvbnN0cnVjdG9yKFRlc3RDYWxsYmFja0ludGVyZmFjZSB0ZXN0
Q2FsbGJhY2ssIFRlc3RDYWxsYmFja0Z1bmN0aW9uIHRlc3RDYWxsYmFja0Z1bmN0aW9uKSwKICAg
ICBJbnRlcmZhY2VOYW1lPVRlc3RPYmplY3QKIF0gaW50ZXJmYWNlIFRlc3RPYmogewogICAgIC8v
IEF0dHJpYnV0ZXMKQEAgLTI0Miw5ICsyNDIsOSBAQCBlbnVtIFRlc3RDb25maWRlbmNlIHsgImhp
Z2giLCAia2luZGEtbG93CiAKICNpZiBkZWZpbmVkKFRFU1RJTkdfSlMpCiAgICAgLy8gQ2FsbGJh
Y2sgaW50ZXJmYWNlIHBhcmFtZXRlcnMuCi0gICAgdm9pZCAgICBtZXRob2RXaXRoQ2FsbGJhY2tB
cmcoVGVzdENhbGxiYWNrIGNhbGxiYWNrKTsKLSAgICB2b2lkICAgIG1ldGhvZFdpdGhOb25DYWxs
YmFja0FyZ0FuZENhbGxiYWNrQXJnKGxvbmcgbm9uQ2FsbGJhY2ssIFRlc3RDYWxsYmFjayBjYWxs
YmFjayk7Ci0gICAgdm9pZCAgICBtZXRob2RXaXRoQ2FsbGJhY2tBbmRPcHRpb25hbEFyZyhvcHRp
b25hbCBUZXN0Q2FsbGJhY2s/IGNhbGxiYWNrKTsKKyAgICB2b2lkICAgIG1ldGhvZFdpdGhDYWxs
YmFja0FyZyhUZXN0Q2FsbGJhY2tJbnRlcmZhY2UgY2FsbGJhY2spOworICAgIHZvaWQgICAgbWV0
aG9kV2l0aE5vbkNhbGxiYWNrQXJnQW5kQ2FsbGJhY2tBcmcobG9uZyBub25DYWxsYmFjaywgVGVz
dENhbGxiYWNrSW50ZXJmYWNlIGNhbGxiYWNrKTsKKyAgICB2b2lkICAgIG1ldGhvZFdpdGhDYWxs
YmFja0FuZE9wdGlvbmFsQXJnKG9wdGlvbmFsIFRlc3RDYWxsYmFja0ludGVyZmFjZT8gY2FsbGJh
Y2spOwogCiAgICAgLy8gQ2FsbGJhY2sgZnVuY3Rpb24gcGFyYW1ldGVycy4KICAgICB2b2lkICAg
IG1ldGhvZFdpdGhDYWxsYmFja0Z1bmN0aW9uQXJnKFRlc3RDYWxsYmFja0Z1bmN0aW9uIGNhbGxi
YWNrKTsKQEAgLTI1Miw4ICsyNTIsOCBAQCBlbnVtIFRlc3RDb25maWRlbmNlIHsgImhpZ2giLCAi
a2luZGEtbG93CiAgICAgdm9pZCAgICBtZXRob2RXaXRoQ2FsbGJhY2tGdW5jdGlvbkFuZE9wdGlv
bmFsQXJnKG9wdGlvbmFsIFRlc3RDYWxsYmFja0Z1bmN0aW9uPyBjYWxsYmFjayk7CiAKICAgICAv
LyBzdGF0aWMgbWV0aG9kcyB3aXRoICdDYWxsYmFjaycgZXh0ZW5kZWQgYXR0cmlidXRlCi0gICAg
c3RhdGljIHZvaWQgICAgc3RhdGljTWV0aG9kV2l0aENhbGxiYWNrQW5kT3B0aW9uYWxBcmcob3B0
aW9uYWwgVGVzdENhbGxiYWNrPyBjYWxsYmFjayk7Ci0gICAgc3RhdGljIHZvaWQgICAgc3RhdGlj
TWV0aG9kV2l0aENhbGxiYWNrQXJnKFRlc3RDYWxsYmFjayBjYWxsYmFjayk7CisgICAgc3RhdGlj
IHZvaWQgICAgc3RhdGljTWV0aG9kV2l0aENhbGxiYWNrQW5kT3B0aW9uYWxBcmcob3B0aW9uYWwg
VGVzdENhbGxiYWNrSW50ZXJmYWNlPyBjYWxsYmFjayk7CisgICAgc3RhdGljIHZvaWQgICAgc3Rh
dGljTWV0aG9kV2l0aENhbGxiYWNrQXJnKFRlc3RDYWxsYmFja0ludGVyZmFjZSBjYWxsYmFjayk7
CiAjZW5kaWYKIAogICAgIC8vICdDb25kaXRpb25hbCcgZXh0ZW5kZWQgYXR0cmlidXRlCkBAIC0y
ODUsNyArMjg1LDcgQEAgZW51bSBUZXN0Q29uZmlkZW5jZSB7ICJoaWdoIiwgImtpbmRhLWxvdwog
ICAgIHZvaWQgICAgb3ZlcmxvYWRlZE1ldGhvZChUZXN0T2JqPyBvYmpBcmcsIG9wdGlvbmFsIGxv
bmcgbG9uZ0FyZyk7CiAgICAgdm9pZCAgICBvdmVybG9hZGVkTWV0aG9kKERPTVN0cmluZyBzdHJB
cmcpOwogICAgIHZvaWQgICAgb3ZlcmxvYWRlZE1ldGhvZChsb25nIGxvbmdBcmcpOwotICAgIHZv
aWQgICAgb3ZlcmxvYWRlZE1ldGhvZChUZXN0Q2FsbGJhY2sgY2FsbGJhY2spOworICAgIHZvaWQg
ICAgb3ZlcmxvYWRlZE1ldGhvZChUZXN0Q2FsbGJhY2tJbnRlcmZhY2UgY2FsbGJhY2spOwogICAg
IHZvaWQgICAgb3ZlcmxvYWRlZE1ldGhvZChET01TdHJpbmdMaXN0PyBsaXN0QXJnKTsKICAgICB2
b2lkICAgIG92ZXJsb2FkZWRNZXRob2Qoc2VxdWVuY2U8RE9NU3RyaW5nPj8gYXJyYXlBcmcpOwog
ICAgIHZvaWQgICAgb3ZlcmxvYWRlZE1ldGhvZChUZXN0T2JqIG9iakFyZyk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdFR5cGVkZWZzLmlkbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdFR5cGVkZWZz
LmlkbAkocmV2aXNpb24gMjA4Mzk2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Rlc3RUeXBlZGVmcy5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAK
IC8vIGNoYW5nZXMgaW4gaXRzIG91dHB1dC4KIAogWwotICAgIENvbnN0cnVjdG9yKFNUUklORyBo
ZWxsbywgVEVTVF9DQUxMQkFDSyB0ZXN0Q2FsbGJhY2spLAorICAgIENvbnN0cnVjdG9yKFNUUklO
RyBoZWxsbywgVEVTVF9DQUxMQkFDS19GVU5DVElPTiB0ZXN0Q2FsbGJhY2tGdW5jdGlvbiwgVEVT
VF9DQUxMQkFDS19JTlRFUkZBQ0UgdGVzdENhbGxiYWNrSW50ZXJmYWNlKSwKIF0gaW50ZXJmYWNl
IFRlc3RUeXBlZGVmcyB7CiAgICAgYXR0cmlidXRlIFVMT05HTE9ORyB1bnNpZ25lZExvbmdMb25n
QXR0cjsKIApAQCAtNzksNyArNzksOCBAQCB0eXBlZGVmIFNWR1BvaW50ICAgICAgICAgICAgICAg
ICAgIFNWR1BPCiB0eXBlZGVmIERPTVN0cmluZyAgICAgICAgICAgICAgICAgIFNUUklORzsKIHR5
cGVkZWYgc2VxdWVuY2U8RE9NU3RyaW5nPiAgICAgICAgU0VRVUVOQ0VfT0ZfU1RSSU5HUzsKIHR5
cGVkZWYgc2VxdWVuY2U8RE9NU3RyaW5nPz4gICAgICAgU0VRVUVOQ0VfT0ZfTlVMTEFCTEVfU1RS
SU5HUzsKLXR5cGVkZWYgVGVzdENhbGxiYWNrICAgICAgICAgICAgICAgVEVTVF9DQUxMQkFDSzsK
K3R5cGVkZWYgVGVzdENhbGxiYWNrRnVuY3Rpb24gICAgICAgVEVTVF9DQUxMQkFDS19GVU5DVElP
TjsKK3R5cGVkZWYgVGVzdENhbGxiYWNrSW50ZXJmYWNlICAgICAgVEVTVF9DQUxMQkFDS19JTlRF
UkZBQ0U7CiB0eXBlZGVmIFRlc3RTdWJPYmpDb25zdHJ1Y3RvciAgICAgIFQ7CiB0eXBlZGVmIElu
dDMyQXJyYXkgICAgICAgICAgICAgICAgIEFSUkFZOwogdHlwZWRlZiBET01FeGNlcHRpb24gICAg
ICAgICAgICAgICBFOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdENhbGxiYWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbGJhY2suY3BwCShyZXZpc2lvbiAyMDgzOTYp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbGJh
Y2suY3BwCShub25leGlzdGVudCkKQEAgLTEsMjMwICswLDAgQEAKLS8qCi0gICAgVGhpcyBmaWxl
IGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgotICAgIFRoaXMgZmls
ZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJ
RlkhCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgotKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFNQRUVDSF9TWU5USEVT
SVMpCi0KLSNpbmNsdWRlICJKU1Rlc3RDYWxsYmFjay5oIgotCi0jaW5jbHVkZSAiSlNET01Db25z
dHJ1Y3Rvci5oIgotI2luY2x1ZGUgIkpTRE9NQ29udmVydC5oIgotI2luY2x1ZGUgIkpTRE9NU3Ry
aW5nTGlzdC5oIgotI2luY2x1ZGUgIkpTVGVzdE5vZGUuaCIKLSNpbmNsdWRlICJTY3JpcHRFeGVj
dXRpb25Db250ZXh0LmgiCi0jaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCi0jaW5j
bHVkZSA8cnVudGltZS9KU0xvY2suaD4KLSNpbmNsdWRlIDxydW50aW1lL09iamVjdFByb3RvdHlw
ZS5oPgotCi11c2luZyBuYW1lc3BhY2UgSlNDOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUpT
VGVzdENhbGxiYWNrOjpKU1Rlc3RDYWxsYmFjayhKU09iamVjdCogY2FsbGJhY2ssIEpTRE9NR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi0gICAgOiBUZXN0Q2FsbGJhY2soKQotICAgICwgQWN0
aXZlRE9NQ2FsbGJhY2soZ2xvYmFsT2JqZWN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCi0g
ICAgLCBtX2RhdGEobmV3IEpTQ2FsbGJhY2tEYXRhU3Ryb25nKGNhbGxiYWNrLCB0aGlzKSkKLXsK
LX0KLQotSlNUZXN0Q2FsbGJhY2s6On5KU1Rlc3RDYWxsYmFjaygpCi17Ci0gICAgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKLSAgICAv
LyBXaGVuIHRoZSBjb250ZXh0IGlzIGRlc3Ryb3llZCwgYWxsIHRhc2tzIHdpdGggYSByZWZlcmVu
Y2UgdG8gYSBjYWxsYmFjawotICAgIC8vIHNob3VsZCBiZSBkZWxldGVkLiBTbyBpZiB0aGUgY29u
dGV4dCBpcyAwLCB3ZSBhcmUgb24gdGhlIGNvbnRleHQgdGhyZWFkLgotICAgIGlmICghY29udGV4
dCB8fCBjb250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSkKLSAgICAgICAgZGVsZXRlIG1fZGF0YTsK
LSAgICBlbHNlCi0gICAgICAgIGNvbnRleHQtPnBvc3RUYXNrKERlbGV0ZUNhbGxiYWNrRGF0YVRh
c2sobV9kYXRhKSk7Ci0jaWZuZGVmIE5ERUJVRwotICAgIG1fZGF0YSA9IG51bGxwdHI7Ci0jZW5k
aWYKLX0KLQotdXNpbmcgSlNUZXN0Q2FsbGJhY2tDb25zdHJ1Y3RvciA9IEpTRE9NQ29uc3RydWN0
b3JOb3RDb25zdHJ1Y3RhYmxlPEpTVGVzdENhbGxiYWNrPjsKLQotLyogSGFzaCB0YWJsZSBmb3Ig
Y29uc3RydWN0b3IgKi8KLQotc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdENhbGxi
YWNrQ29uc3RydWN0b3JUYWJsZVZhbHVlc1tdID0KLXsKLSAgICB7ICJDT05TVEFOVDEiLCBEb250
RGVsZXRlIHwgUmVhZE9ubHkgfCBDb25zdGFudEludGVnZXIsIE5vSW50cmluc2ljLCB7IChsb25n
IGxvbmcpKDEpIH0gfSwKLSAgICB7ICJDT05TVEFOVDIiLCBEb250RGVsZXRlIHwgUmVhZE9ubHkg
fCBDb25zdGFudEludGVnZXIsIE5vSW50cmluc2ljLCB7IChsb25nIGxvbmcpKDIpIH0gfSwKLX07
Ci0KLXN0YXRpY19hc3NlcnQoVGVzdENhbGxiYWNrOjpDT05TVEFOVDEgPT0gMSwgIkNPTlNUQU5U
MSBpbiBUZXN0Q2FsbGJhY2sgZG9lcyBub3QgbWF0Y2ggdmFsdWUgZnJvbSBJREwiKTsKLXN0YXRp
Y19hc3NlcnQoVGVzdENhbGxiYWNrOjpDT05TVEFOVDIgPT0gMiwgIkNPTlNUQU5UMiBpbiBUZXN0
Q2FsbGJhY2sgZG9lcyBub3QgbWF0Y2ggdmFsdWUgZnJvbSBJREwiKTsKLQotdGVtcGxhdGU8PiBK
U1ZhbHVlIEpTVGVzdENhbGxiYWNrQ29uc3RydWN0b3I6OnByb3RvdHlwZUZvclN0cnVjdHVyZShK
U0M6OlZNJiB2bSwgY29uc3QgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLXsKLSAg
ICBVTlVTRURfUEFSQU0odm0pOwotICAgIHJldHVybiBnbG9iYWxPYmplY3Qub2JqZWN0UHJvdG90
eXBlKCk7Ci19Ci0KLXRlbXBsYXRlPD4gdm9pZCBKU1Rlc3RDYWxsYmFja0NvbnN0cnVjdG9yOjpp
bml0aWFsaXplUHJvcGVydGllcyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmpl
Y3QpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0gICAgcHV0RGlyZWN0KHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcoJnZtLCBTdHJpbmco
QVNDSUlMaXRlcmFsKCJUZXN0Q2FsbGJhY2siKSkpLCBSZWFkT25seSB8IERvbnRFbnVtKTsKLSAg
ICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIFJl
YWRPbmx5IHwgRG9udEVudW0pOwotICAgIHJlaWZ5U3RhdGljUHJvcGVydGllcyh2bSwgSlNUZXN0
Q2FsbGJhY2tDb25zdHJ1Y3RvclRhYmxlVmFsdWVzLCAqdGhpcyk7Ci19Ci0KLXRlbXBsYXRlPD4g
Y29uc3QgQ2xhc3NJbmZvIEpTVGVzdENhbGxiYWNrQ29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIlRl
c3RDYWxsYmFjayIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0
Q2FsbGJhY2tDb25zdHJ1Y3RvcikgfTsKLQotSlNWYWx1ZSBKU1Rlc3RDYWxsYmFjazo6Z2V0Q29u
c3RydWN0b3IoVk0mIHZtLCBjb25zdCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotewot
ICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU1Rlc3RDYWxsYmFja0NvbnN0cnVjdG9yPih2
bSwgKmpzQ2FzdDxjb25zdCBKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCkpOwotfQot
Ci0KLS8vIEZ1bmN0aW9ucwotCi1ib29sIEpTVGVzdENhbGxiYWNrOjpjYWxsYmFja1dpdGhOb1Bh
cmFtKCkKLXsKLSAgICBpZiAoIWNhbkludm9rZUNhbGxiYWNrKCkpCi0gICAgICAgIHJldHVybiB0
cnVlOwotCi0gICAgUmVmPEpTVGVzdENhbGxiYWNrPiBwcm90ZWN0ZWRUaGlzKCp0aGlzKTsKLQot
ICAgIEpTTG9ja0hvbGRlciBsb2NrKG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPnZtKCkpOwotCi0g
ICAgRXhlY1N0YXRlKiBzdGF0ZSA9IG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMo
KTsKLSAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwotCi0gICAgTmFrZWRQdHI8SlNDOjpF
eGNlcHRpb24+IHJldHVybmVkRXhjZXB0aW9uOwotICAgIG1fZGF0YS0+aW52b2tlQ2FsbGJhY2so
YXJncywgSlNDYWxsYmFja0RhdGE6OkNhbGxiYWNrVHlwZTo6T2JqZWN0LCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHN0YXRlLCAiY2FsbGJhY2tXaXRoTm9QYXJhbSIpLCByZXR1cm5lZEV4Y2VwdGlv
bik7Ci0gICAgaWYgKHJldHVybmVkRXhjZXB0aW9uKQotICAgICAgICByZXBvcnRFeGNlcHRpb24o
c3RhdGUsIHJldHVybmVkRXhjZXB0aW9uKTsKLSAgICByZXR1cm4gIXJldHVybmVkRXhjZXB0aW9u
OwotfQotCi1ib29sIEpTVGVzdENhbGxiYWNrOjpjYWxsYmFja1dpdGhBcnJheVBhcmFtKFJlZlB0
cjxGbG9hdDMyQXJyYXk+IGFycmF5UGFyYW0pCi17Ci0gICAgaWYgKCFjYW5JbnZva2VDYWxsYmFj
aygpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIFJlZjxKU1Rlc3RDYWxsYmFjaz4gcHJv
dGVjdGVkVGhpcygqdGhpcyk7Ci0KLSAgICBKU0xvY2tIb2xkZXIgbG9jayhtX2RhdGEtPmdsb2Jh
bE9iamVjdCgpLT52bSgpKTsKLQotICAgIEV4ZWNTdGF0ZSogc3RhdGUgPSBtX2RhdGEtPmdsb2Jh
bE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7Ci0gICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsK
LSAgICBhcmdzLmFwcGVuZCh0b0pTPElETEludGVyZmFjZTxGbG9hdDMyQXJyYXk+Pigqc3RhdGUs
ICptX2RhdGEtPmdsb2JhbE9iamVjdCgpLCBhcnJheVBhcmFtKSk7Ci0KLSAgICBOYWtlZFB0cjxK
U0M6OkV4Y2VwdGlvbj4gcmV0dXJuZWRFeGNlcHRpb247Ci0gICAgbV9kYXRhLT5pbnZva2VDYWxs
YmFjayhhcmdzLCBKU0NhbGxiYWNrRGF0YTo6Q2FsbGJhY2tUeXBlOjpPYmplY3QsIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcoc3RhdGUsICJjYWxsYmFja1dpdGhBcnJheVBhcmFtIiksIHJldHVybmVk
RXhjZXB0aW9uKTsKLSAgICBpZiAocmV0dXJuZWRFeGNlcHRpb24pCi0gICAgICAgIHJlcG9ydEV4
Y2VwdGlvbihzdGF0ZSwgcmV0dXJuZWRFeGNlcHRpb24pOwotICAgIHJldHVybiAhcmV0dXJuZWRF
eGNlcHRpb247Ci19Ci0KLWJvb2wgSlNUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrV2l0aFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZVBhcmFtKFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+JiYgc3J6UGFy
YW0sIGNvbnN0IFN0cmluZyYgc3RyQXJnKQotewotICAgIGlmICghY2FuSW52b2tlQ2FsbGJhY2so
KSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBSZWY8SlNUZXN0Q2FsbGJhY2s+IHByb3Rl
Y3RlZFRoaXMoKnRoaXMpOwotCi0gICAgSlNMb2NrSG9sZGVyIGxvY2sobV9kYXRhLT5nbG9iYWxP
YmplY3QoKS0+dm0oKSk7Ci0KLSAgICBFeGVjU3RhdGUqIHN0YXRlID0gbV9kYXRhLT5nbG9iYWxP
YmplY3QoKS0+Z2xvYmFsRXhlYygpOwotICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7Ci0g
ICAgYXJncy5hcHBlbmQoc3J6UGFyYW0gPyBzcnpQYXJhbS0+ZGVzZXJpYWxpemUoKnN0YXRlLCBt
X2RhdGEtPmdsb2JhbE9iamVjdCgpKSA6IGpzTnVsbCgpKTsKLSAgICBhcmdzLmFwcGVuZCh0b0pT
PElETERPTVN0cmluZz4oKnN0YXRlLCBzdHJBcmcpKTsKLQotICAgIE5ha2VkUHRyPEpTQzo6RXhj
ZXB0aW9uPiByZXR1cm5lZEV4Y2VwdGlvbjsKLSAgICBtX2RhdGEtPmludm9rZUNhbGxiYWNrKGFy
Z3MsIEpTQ2FsbGJhY2tEYXRhOjpDYWxsYmFja1R5cGU6Ok9iamVjdCwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyhzdGF0ZSwgImNhbGxiYWNrV2l0aFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZVBhcmFtIiks
IHJldHVybmVkRXhjZXB0aW9uKTsKLSAgICBpZiAocmV0dXJuZWRFeGNlcHRpb24pCi0gICAgICAg
IHJlcG9ydEV4Y2VwdGlvbihzdGF0ZSwgcmV0dXJuZWRFeGNlcHRpb24pOwotICAgIHJldHVybiAh
cmV0dXJuZWRFeGNlcHRpb247Ci19Ci0KLWJvb2wgSlNUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrV2l0
aFN0cmluZ0xpc3QoRE9NU3RyaW5nTGlzdCogbGlzdFBhcmFtKQotewotICAgIGlmICghY2FuSW52
b2tlQ2FsbGJhY2soKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBSZWY8SlNUZXN0Q2Fs
bGJhY2s+IHByb3RlY3RlZFRoaXMoKnRoaXMpOwotCi0gICAgSlNMb2NrSG9sZGVyIGxvY2sobV9k
YXRhLT5nbG9iYWxPYmplY3QoKS0+dm0oKSk7Ci0KLSAgICBFeGVjU3RhdGUqIHN0YXRlID0gbV9k
YXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwotICAgIE1hcmtlZEFyZ3VtZW50QnVm
ZmVyIGFyZ3M7Ci0gICAgYXJncy5hcHBlbmQodG9KUzxJRExJbnRlcmZhY2U8RE9NU3RyaW5nTGlz
dD4+KCpzdGF0ZSwgKm1fZGF0YS0+Z2xvYmFsT2JqZWN0KCksIGxpc3RQYXJhbSkpOwotCi0gICAg
TmFrZWRQdHI8SlNDOjpFeGNlcHRpb24+IHJldHVybmVkRXhjZXB0aW9uOwotICAgIG1fZGF0YS0+
aW52b2tlQ2FsbGJhY2soYXJncywgSlNDYWxsYmFja0RhdGE6OkNhbGxiYWNrVHlwZTo6T2JqZWN0
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHN0YXRlLCAiY2FsbGJhY2tXaXRoU3RyaW5nTGlzdCIp
LCByZXR1cm5lZEV4Y2VwdGlvbik7Ci0gICAgaWYgKHJldHVybmVkRXhjZXB0aW9uKQotICAgICAg
ICByZXBvcnRFeGNlcHRpb24oc3RhdGUsIHJldHVybmVkRXhjZXB0aW9uKTsKLSAgICByZXR1cm4g
IXJldHVybmVkRXhjZXB0aW9uOwotfQotCi1ib29sIEpTVGVzdENhbGxiYWNrOjpjYWxsYmFja1dp
dGhCb29sZWFuKGJvb2wgYm9vbFBhcmFtKQotewotICAgIGlmICghY2FuSW52b2tlQ2FsbGJhY2so
KSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBSZWY8SlNUZXN0Q2FsbGJhY2s+IHByb3Rl
Y3RlZFRoaXMoKnRoaXMpOwotCi0gICAgSlNMb2NrSG9sZGVyIGxvY2sobV9kYXRhLT5nbG9iYWxP
YmplY3QoKS0+dm0oKSk7Ci0KLSAgICBFeGVjU3RhdGUqIHN0YXRlID0gbV9kYXRhLT5nbG9iYWxP
YmplY3QoKS0+Z2xvYmFsRXhlYygpOwotICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7Ci0g
ICAgYXJncy5hcHBlbmQodG9KUzxJRExCb29sZWFuPihib29sUGFyYW0pKTsKLQotICAgIE5ha2Vk
UHRyPEpTQzo6RXhjZXB0aW9uPiByZXR1cm5lZEV4Y2VwdGlvbjsKLSAgICBtX2RhdGEtPmludm9r
ZUNhbGxiYWNrKGFyZ3MsIEpTQ2FsbGJhY2tEYXRhOjpDYWxsYmFja1R5cGU6Ok9iamVjdCwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyhzdGF0ZSwgImNhbGxiYWNrV2l0aEJvb2xlYW4iKSwgcmV0dXJu
ZWRFeGNlcHRpb24pOwotICAgIGlmIChyZXR1cm5lZEV4Y2VwdGlvbikKLSAgICAgICAgcmVwb3J0
RXhjZXB0aW9uKHN0YXRlLCByZXR1cm5lZEV4Y2VwdGlvbik7Ci0gICAgcmV0dXJuICFyZXR1cm5l
ZEV4Y2VwdGlvbjsKLX0KLQotYm9vbCBKU1Rlc3RDYWxsYmFjazo6Y2FsbGJhY2tSZXF1aXJlc1Ro
aXNUb1Bhc3MoaW50MzJfdCBsb25nUGFyYW0sIFRlc3ROb2RlKiB0ZXN0Tm9kZVBhcmFtKQotewot
ICAgIGlmICghY2FuSW52b2tlQ2FsbGJhY2soKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAg
ICBSZWY8SlNUZXN0Q2FsbGJhY2s+IHByb3RlY3RlZFRoaXMoKnRoaXMpOwotCi0gICAgSlNMb2Nr
SG9sZGVyIGxvY2sobV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+dm0oKSk7Ci0KLSAgICBFeGVjU3Rh
dGUqIHN0YXRlID0gbV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwotICAgIE1h
cmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7Ci0gICAgYXJncy5hcHBlbmQodG9KUzxJRExMb25nPihs
b25nUGFyYW0pKTsKLSAgICBhcmdzLmFwcGVuZCh0b0pTPElETEludGVyZmFjZTxUZXN0Tm9kZT4+
KCpzdGF0ZSwgKm1fZGF0YS0+Z2xvYmFsT2JqZWN0KCksIHRlc3ROb2RlUGFyYW0pKTsKLQotICAg
IE5ha2VkUHRyPEpTQzo6RXhjZXB0aW9uPiByZXR1cm5lZEV4Y2VwdGlvbjsKLSAgICBtX2RhdGEt
Pmludm9rZUNhbGxiYWNrKGFyZ3MsIEpTQ2FsbGJhY2tEYXRhOjpDYWxsYmFja1R5cGU6Ok9iamVj
dCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhzdGF0ZSwgImNhbGxiYWNrUmVxdWlyZXNUaGlzVG9Q
YXNzIiksIHJldHVybmVkRXhjZXB0aW9uKTsKLSAgICBpZiAocmV0dXJuZWRFeGNlcHRpb24pCi0g
ICAgICAgIHJlcG9ydEV4Y2VwdGlvbihzdGF0ZSwgcmV0dXJuZWRFeGNlcHRpb24pOwotICAgIHJl
dHVybiAhcmV0dXJuZWRFeGNlcHRpb247Ci19Ci0KLUpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhl
Y1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0Q2FsbGJhY2smIGltcGwpCi17Ci0gICAg
aWYgKCFzdGF0aWNfY2FzdDxKU1Rlc3RDYWxsYmFjayY+KGltcGwpLmNhbGxiYWNrRGF0YSgpKQot
ICAgICAgICByZXR1cm4ganNOdWxsKCk7Ci0KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SlNUZXN0
Q2FsbGJhY2smPihpbXBsKS5jYWxsYmFja0RhdGEoKS0+Y2FsbGJhY2soKTsKLQotfQotCi19Ci0K
LSNlbmRpZiAvLyBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykKClByb3BlcnR5IGNoYW5nZXMgb246
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFjay5j
cHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fXwpEZWxldGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0xICswLDAgIyMKLUxGClwg
Tm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFjay5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFjay5oCShyZXZp
c2lvbiAyMDgzOTYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0Q2FsbGJhY2suaAkobm9uZXhpc3RlbnQpCkBAIC0xLDY2ICswLDAgQEAKLS8qCi0gICAg
VGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgotICAg
IFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERP
IE5PVCBNT0RJRlkhCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0K
LSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
Ci0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgotKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoU1BFRUNIX1NZTlRI
RVNJUykKLQotI2luY2x1ZGUgIkFjdGl2ZURPTUNhbGxiYWNrLmgiCi0jaW5jbHVkZSAiSlNDYWxs
YmFja0RhdGEuaCIKLSNpbmNsdWRlICJUZXN0Q2FsbGJhY2suaCIKLSNpbmNsdWRlIDx3dGYvRm9y
d2FyZC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEpTVGVzdENhbGxiYWNrIDog
cHVibGljIFRlc3RDYWxsYmFjaywgcHVibGljIEFjdGl2ZURPTUNhbGxiYWNrIHsKLXB1YmxpYzoK
LSAgICBzdGF0aWMgUmVmPEpTVGVzdENhbGxiYWNrPiBjcmVhdGUoSlNDOjpKU09iamVjdCogY2Fs
bGJhY2ssIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi0gICAgewotICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBKU1Rlc3RDYWxsYmFjayhjYWxsYmFjaywgZ2xvYmFsT2JqZWN0
KSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRF
eGVjdXRpb25Db250ZXh0KCkgY29uc3QgeyByZXR1cm4gQ29udGV4dERlc3RydWN0aW9uT2JzZXJ2
ZXI6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsgfQotCi0gICAgdmlydHVhbCB+SlNUZXN0Q2Fs
bGJhY2soKTsKLSAgICBKU0NhbGxiYWNrRGF0YVN0cm9uZyogY2FsbGJhY2tEYXRhKCkgeyByZXR1
cm4gbV9kYXRhOyB9Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6
OlZNJiwgY29uc3QgSlNDOjpKU0dsb2JhbE9iamVjdCopOwotCi0gICAgLy8gRnVuY3Rpb25zCi0g
ICAgdmlydHVhbCBib29sIGNhbGxiYWNrV2l0aE5vUGFyYW0oKTsKLSAgICB2aXJ0dWFsIGJvb2wg
Y2FsbGJhY2tXaXRoQXJyYXlQYXJhbShSZWZQdHI8RmxvYXQzMkFycmF5PiBhcnJheVBhcmFtKTsK
LSAgICB2aXJ0dWFsIGJvb2wgY2FsbGJhY2tXaXRoU2VyaWFsaXplZFNjcmlwdFZhbHVlUGFyYW0o
UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4mJiBzcnpQYXJhbSwgY29uc3QgU3RyaW5nJiBz
dHJBcmcpOwotICAgIHZpcnR1YWwgaW50MzJfdCBjYWxsYmFja1dpdGhOb25Cb29sUmV0dXJuVHlw
ZShjb25zdCBTdHJpbmcmIHN0ckFyZyk7Ci0gICAgdmlydHVhbCBpbnQzMl90IGN1c3RvbUNhbGxi
YWNrKENsYXNzNSogY2xhc3M1UGFyYW0sIENsYXNzNiogY2xhc3M2UGFyYW0pOwotICAgIHZpcnR1
YWwgYm9vbCBjYWxsYmFja1dpdGhTdHJpbmdMaXN0KERPTVN0cmluZ0xpc3QqIGxpc3RQYXJhbSk7
Ci0gICAgdmlydHVhbCBib29sIGNhbGxiYWNrV2l0aEJvb2xlYW4oYm9vbCBib29sUGFyYW0pOwot
ICAgIHZpcnR1YWwgYm9vbCBjYWxsYmFja1JlcXVpcmVzVGhpc1RvUGFzcyhpbnQzMl90IGxvbmdQ
YXJhbSwgVGVzdE5vZGUqIHRlc3ROb2RlUGFyYW0pOwotCi1wcml2YXRlOgotICAgIEpTVGVzdENh
bGxiYWNrKEpTQzo6SlNPYmplY3QqIGNhbGxiYWNrLCBKU0RPTUdsb2JhbE9iamVjdCopOwotCi0g
ICAgSlNDYWxsYmFja0RhdGFTdHJvbmcqIG1fZGF0YTsKLX07Ci0KLUpTQzo6SlNWYWx1ZSB0b0pT
KEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0Q2FsbGJhY2smKTsKLWlu
bGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3RDYWxsYmFjayogaW1wbCkgeyByZXR1cm4gaW1wbCA/
IHRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgKmltcGwpIDogSlNDOjpqc051bGwoKTsgfQotCi19
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJ
UykKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RDYWxsYmFjay5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KRGVsZXRlZDogc3ZuOmVvbC1zdHls
ZQojIyAtMSArMCwwICMjCi1MRgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbGJhY2tG
dW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdENhbGxiYWNrRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyMDgzOTYpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbGJhY2tG
dW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDYgQEAKICNpbmNsdWRlICJK
U1Rlc3RDYWxsYmFja0Z1bmN0aW9uLmgiCiAKICNpbmNsdWRlICJKU0RPTUNvbnZlcnQuaCIKLSNp
bmNsdWRlICJKU0RPTVN0cmluZ0xpc3QuaCIKICNpbmNsdWRlICJKU1Rlc3ROb2RlLmgiCiAjaW5j
bHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZS5oIgpAQCAtNTYsMzAgKzU1LDcgQEAgSlNUZXN0Q2FsbGJhY2tGdW5jdGlvbjo6fkpT
VGVzdENhbGxiYWNrRgogI2VuZGlmCiB9CiAKLQotLy8gRnVuY3Rpb25zCi0KLWJvb2wgSlNUZXN0
Q2FsbGJhY2tGdW5jdGlvbjo6Y2FsbGJhY2tXaXRoTm9QYXJhbSgpCi17Ci0gICAgaWYgKCFjYW5J
bnZva2VDYWxsYmFjaygpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIFJlZjxKU1Rlc3RD
YWxsYmFja0Z1bmN0aW9uPiBwcm90ZWN0ZWRUaGlzKCp0aGlzKTsKLQotICAgIEpTTG9ja0hvbGRl
ciBsb2NrKG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPnZtKCkpOwotCi0gICAgRXhlY1N0YXRlKiBz
dGF0ZSA9IG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKLSAgICBNYXJrZWRB
cmd1bWVudEJ1ZmZlciBhcmdzOwotCi0gICAgTmFrZWRQdHI8SlNDOjpFeGNlcHRpb24+IHJldHVy
bmVkRXhjZXB0aW9uOwotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgbV9kYXRhLT5pbnZv
a2VDYWxsYmFjayhhcmdzLCBKU0NhbGxiYWNrRGF0YTo6Q2FsbGJhY2tUeXBlOjpGdW5jdGlvbiwg
SWRlbnRpZmllcigpLCByZXR1cm5lZEV4Y2VwdGlvbik7Ci0gICAgaWYgKHJldHVybmVkRXhjZXB0
aW9uKQotICAgICAgICByZXBvcnRFeGNlcHRpb24oc3RhdGUsIHJldHVybmVkRXhjZXB0aW9uKTsK
LSAgICByZXR1cm4gIXJldHVybmVkRXhjZXB0aW9uOwotfQotCi1ib29sIEpTVGVzdENhbGxiYWNr
RnVuY3Rpb246OmNhbGxiYWNrV2l0aEFycmF5UGFyYW0oUmVmUHRyPEZsb2F0MzJBcnJheT4gYXJy
YXlQYXJhbSkKK2Jvb2wgSlNUZXN0Q2FsbGJhY2tGdW5jdGlvbjo6aGFuZGxlRXZlbnQoUmVmUHRy
PEZsb2F0MzJBcnJheT4gYXJyYXlQYXJhbSwgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4m
JiBzcnpQYXJhbSwgY29uc3QgU3RyaW5nJiBzdHJBcmcsIGJvb2wgYm9vbFBhcmFtLCBpbnQzMl90
IGxvbmdQYXJhbSwgVGVzdE5vZGUqIHRlc3ROb2RlUGFyYW0pCiB7CiAgICAgaWYgKCFjYW5JbnZv
a2VDYWxsYmFjaygpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTkxLDk1ICs2NywxMyBAQCBi
b29sIEpTVGVzdENhbGxiYWNrRnVuY3Rpb246OmNhbGxiYWNrV2l0CiAgICAgRXhlY1N0YXRlKiBz
dGF0ZSA9IG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKICAgICBNYXJrZWRB
cmd1bWVudEJ1ZmZlciBhcmdzOwogICAgIGFyZ3MuYXBwZW5kKHRvSlM8SURMSW50ZXJmYWNlPEZs
b2F0MzJBcnJheT4+KCpzdGF0ZSwgKm1fZGF0YS0+Z2xvYmFsT2JqZWN0KCksIGFycmF5UGFyYW0p
KTsKLQotICAgIE5ha2VkUHRyPEpTQzo6RXhjZXB0aW9uPiByZXR1cm5lZEV4Y2VwdGlvbjsKLSAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIG1fZGF0YS0+aW52b2tlQ2FsbGJhY2soYXJncywg
SlNDYWxsYmFja0RhdGE6OkNhbGxiYWNrVHlwZTo6RnVuY3Rpb24sIElkZW50aWZpZXIoKSwgcmV0
dXJuZWRFeGNlcHRpb24pOwotICAgIGlmIChyZXR1cm5lZEV4Y2VwdGlvbikKLSAgICAgICAgcmVw
b3J0RXhjZXB0aW9uKHN0YXRlLCByZXR1cm5lZEV4Y2VwdGlvbik7Ci0gICAgcmV0dXJuICFyZXR1
cm5lZEV4Y2VwdGlvbjsKLX0KLQotYm9vbCBKU1Rlc3RDYWxsYmFja0Z1bmN0aW9uOjpjYWxsYmFj
a1dpdGhTZXJpYWxpemVkU2NyaXB0VmFsdWVQYXJhbShSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZh
bHVlPiYmIHNyelBhcmFtLCBjb25zdCBTdHJpbmcmIHN0ckFyZykKLXsKLSAgICBpZiAoIWNhbklu
dm9rZUNhbGxiYWNrKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgUmVmPEpTVGVzdENh
bGxiYWNrRnVuY3Rpb24+IHByb3RlY3RlZFRoaXMoKnRoaXMpOwotCi0gICAgSlNMb2NrSG9sZGVy
IGxvY2sobV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+dm0oKSk7Ci0KLSAgICBFeGVjU3RhdGUqIHN0
YXRlID0gbV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwotICAgIE1hcmtlZEFy
Z3VtZW50QnVmZmVyIGFyZ3M7CiAgICAgYXJncy5hcHBlbmQoc3J6UGFyYW0gPyBzcnpQYXJhbS0+
ZGVzZXJpYWxpemUoKnN0YXRlLCBtX2RhdGEtPmdsb2JhbE9iamVjdCgpKSA6IGpzTnVsbCgpKTsK
ICAgICBhcmdzLmFwcGVuZCh0b0pTPElETERPTVN0cmluZz4oKnN0YXRlLCBzdHJBcmcpKTsKLQot
ICAgIE5ha2VkUHRyPEpTQzo6RXhjZXB0aW9uPiByZXR1cm5lZEV4Y2VwdGlvbjsKLSAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOwotICAgIG1fZGF0YS0+aW52b2tlQ2FsbGJhY2soYXJncywgSlNDYWxs
YmFja0RhdGE6OkNhbGxiYWNrVHlwZTo6RnVuY3Rpb24sIElkZW50aWZpZXIoKSwgcmV0dXJuZWRF
eGNlcHRpb24pOwotICAgIGlmIChyZXR1cm5lZEV4Y2VwdGlvbikKLSAgICAgICAgcmVwb3J0RXhj
ZXB0aW9uKHN0YXRlLCByZXR1cm5lZEV4Y2VwdGlvbik7Ci0gICAgcmV0dXJuICFyZXR1cm5lZEV4
Y2VwdGlvbjsKLX0KLQotYm9vbCBKU1Rlc3RDYWxsYmFja0Z1bmN0aW9uOjpjYWxsYmFja1dpdGhT
dHJpbmdMaXN0KERPTVN0cmluZ0xpc3QqIGxpc3RQYXJhbSkKLXsKLSAgICBpZiAoIWNhbkludm9r
ZUNhbGxiYWNrKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgUmVmPEpTVGVzdENhbGxi
YWNrRnVuY3Rpb24+IHByb3RlY3RlZFRoaXMoKnRoaXMpOwotCi0gICAgSlNMb2NrSG9sZGVyIGxv
Y2sobV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+dm0oKSk7Ci0KLSAgICBFeGVjU3RhdGUqIHN0YXRl
ID0gbV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwotICAgIE1hcmtlZEFyZ3Vt
ZW50QnVmZmVyIGFyZ3M7Ci0gICAgYXJncy5hcHBlbmQodG9KUzxJRExJbnRlcmZhY2U8RE9NU3Ry
aW5nTGlzdD4+KCpzdGF0ZSwgKm1fZGF0YS0+Z2xvYmFsT2JqZWN0KCksIGxpc3RQYXJhbSkpOwot
Ci0gICAgTmFrZWRQdHI8SlNDOjpFeGNlcHRpb24+IHJldHVybmVkRXhjZXB0aW9uOwotICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgbV9kYXRhLT5pbnZva2VDYWxsYmFjayhhcmdzLCBKU0Nh
bGxiYWNrRGF0YTo6Q2FsbGJhY2tUeXBlOjpGdW5jdGlvbiwgSWRlbnRpZmllcigpLCByZXR1cm5l
ZEV4Y2VwdGlvbik7Ci0gICAgaWYgKHJldHVybmVkRXhjZXB0aW9uKQotICAgICAgICByZXBvcnRF
eGNlcHRpb24oc3RhdGUsIHJldHVybmVkRXhjZXB0aW9uKTsKLSAgICByZXR1cm4gIXJldHVybmVk
RXhjZXB0aW9uOwotfQotCi1ib29sIEpTVGVzdENhbGxiYWNrRnVuY3Rpb246OmNhbGxiYWNrV2l0
aEJvb2xlYW4oYm9vbCBib29sUGFyYW0pCi17Ci0gICAgaWYgKCFjYW5JbnZva2VDYWxsYmFjaygp
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIFJlZjxKU1Rlc3RDYWxsYmFja0Z1bmN0aW9u
PiBwcm90ZWN0ZWRUaGlzKCp0aGlzKTsKLQotICAgIEpTTG9ja0hvbGRlciBsb2NrKG1fZGF0YS0+
Z2xvYmFsT2JqZWN0KCktPnZtKCkpOwotCi0gICAgRXhlY1N0YXRlKiBzdGF0ZSA9IG1fZGF0YS0+
Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKLSAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBh
cmdzOwogICAgIGFyZ3MuYXBwZW5kKHRvSlM8SURMQm9vbGVhbj4oYm9vbFBhcmFtKSk7Ci0KLSAg
ICBOYWtlZFB0cjxKU0M6OkV4Y2VwdGlvbj4gcmV0dXJuZWRFeGNlcHRpb247Ci0gICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKLSAgICBtX2RhdGEtPmludm9rZUNhbGxiYWNrKGFyZ3MsIEpTQ2FsbGJh
Y2tEYXRhOjpDYWxsYmFja1R5cGU6OkZ1bmN0aW9uLCBJZGVudGlmaWVyKCksIHJldHVybmVkRXhj
ZXB0aW9uKTsKLSAgICBpZiAocmV0dXJuZWRFeGNlcHRpb24pCi0gICAgICAgIHJlcG9ydEV4Y2Vw
dGlvbihzdGF0ZSwgcmV0dXJuZWRFeGNlcHRpb24pOwotICAgIHJldHVybiAhcmV0dXJuZWRFeGNl
cHRpb247Ci19Ci0KLWJvb2wgSlNUZXN0Q2FsbGJhY2tGdW5jdGlvbjo6Y2FsbGJhY2tSZXF1aXJl
c1RoaXNUb1Bhc3MoaW50MzJfdCBsb25nUGFyYW0sIFRlc3ROb2RlKiB0ZXN0Tm9kZVBhcmFtKQot
ewotICAgIGlmICghY2FuSW52b2tlQ2FsbGJhY2soKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0K
LSAgICBSZWY8SlNUZXN0Q2FsbGJhY2tGdW5jdGlvbj4gcHJvdGVjdGVkVGhpcygqdGhpcyk7Ci0K
LSAgICBKU0xvY2tIb2xkZXIgbG9jayhtX2RhdGEtPmdsb2JhbE9iamVjdCgpLT52bSgpKTsKLQot
ICAgIEV4ZWNTdGF0ZSogc3RhdGUgPSBtX2RhdGEtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVj
KCk7Ci0gICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKICAgICBhcmdzLmFwcGVuZCh0b0pT
PElETExvbmc+KGxvbmdQYXJhbSkpOwogICAgIGFyZ3MuYXBwZW5kKHRvSlM8SURMSW50ZXJmYWNl
PFRlc3ROb2RlPj4oKnN0YXRlLCAqbV9kYXRhLT5nbG9iYWxPYmplY3QoKSwgdGVzdE5vZGVQYXJh
bSkpOwogCiAgICAgTmFrZWRQdHI8SlNDOjpFeGNlcHRpb24+IHJldHVybmVkRXhjZXB0aW9uOwot
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgbV9kYXRhLT5pbnZva2VDYWxsYmFjayhhcmdz
LCBKU0NhbGxiYWNrRGF0YTo6Q2FsbGJhY2tUeXBlOjpGdW5jdGlvbiwgSWRlbnRpZmllcigpLCBy
ZXR1cm5lZEV4Y2VwdGlvbik7CiAgICAgaWYgKHJldHVybmVkRXhjZXB0aW9uKQogICAgICAgICBy
ZXBvcnRFeGNlcHRpb24oc3RhdGUsIHJldHVybmVkRXhjZXB0aW9uKTsKQEAgLTE5NSw2ICs4OSw2
IEBAIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET00KIAogfQogCi19Cit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJ
UykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RD
YWxsYmFja0Z1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxiYWNrRnVuY3Rpb24uaAkocmV2aXNpb24gMjA4Mzk2
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxi
YWNrRnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNDIsMTQgKzQyLDcgQEAgcHVibGljOgog
ICAgIEpTQ2FsbGJhY2tEYXRhU3Ryb25nKiBjYWxsYmFja0RhdGEoKSB7IHJldHVybiBtX2RhdGE7
IH0KIAogICAgIC8vIEZ1bmN0aW9ucwotICAgIHZpcnR1YWwgYm9vbCBjYWxsYmFja1dpdGhOb1Bh
cmFtKCk7Ci0gICAgdmlydHVhbCBib29sIGNhbGxiYWNrV2l0aEFycmF5UGFyYW0oUmVmUHRyPEZs
b2F0MzJBcnJheT4gYXJyYXlQYXJhbSk7Ci0gICAgdmlydHVhbCBib29sIGNhbGxiYWNrV2l0aFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZVBhcmFtKFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+JiYg
c3J6UGFyYW0sIGNvbnN0IFN0cmluZyYgc3RyQXJnKTsKLSAgICB2aXJ0dWFsIGludDMyX3QgY2Fs
bGJhY2tXaXRoTm9uQm9vbFJldHVyblR5cGUoY29uc3QgU3RyaW5nJiBzdHJBcmcpOwotICAgIHZp
cnR1YWwgaW50MzJfdCBjdXN0b21DYWxsYmFjayhDbGFzczUqIGNsYXNzNVBhcmFtLCBDbGFzczYq
IGNsYXNzNlBhcmFtKTsKLSAgICB2aXJ0dWFsIGJvb2wgY2FsbGJhY2tXaXRoU3RyaW5nTGlzdChE
T01TdHJpbmdMaXN0KiBsaXN0UGFyYW0pOwotICAgIHZpcnR1YWwgYm9vbCBjYWxsYmFja1dpdGhC
b29sZWFuKGJvb2wgYm9vbFBhcmFtKTsKLSAgICB2aXJ0dWFsIGJvb2wgY2FsbGJhY2tSZXF1aXJl
c1RoaXNUb1Bhc3MoaW50MzJfdCBsb25nUGFyYW0sIFRlc3ROb2RlKiB0ZXN0Tm9kZVBhcmFtKTsK
KyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlRXZlbnQoUmVmUHRyPEZsb2F0MzJBcnJheT4gYXJyYXlQ
YXJhbSwgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4mJiBzcnpQYXJhbSwgY29uc3QgU3Ry
aW5nJiBzdHJBcmcsIGJvb2wgYm9vbFBhcmFtLCBpbnQzMl90IGxvbmdQYXJhbSwgVGVzdE5vZGUq
IHRlc3ROb2RlUGFyYW0pOwogCiBwcml2YXRlOgogICAgIEpTVGVzdENhbGxiYWNrRnVuY3Rpb24o
SlNDOjpKU09iamVjdCogY2FsbGJhY2ssIEpTRE9NR2xvYmFsT2JqZWN0Kik7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbGJhY2tGdW5jdGlv
bldpdGhUeXBlZGVmcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxiYWNrRnVuY3Rpb25XaXRoVHlwZWRlZnMuY3BwCShu
b25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RDYWxsYmFja0Z1bmN0aW9uV2l0aFR5cGVkZWZzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDg1IEBACisvKgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3Bl
biBzb3VyY2UgcHJvamVjdC4KKyAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdl
bmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorCisgICAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
ICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
CisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJKU1Rlc3RDYWxsYmFja0Z1bmN0aW9uV2l0aFR5cGVkZWZzLmgiCisKKyNp
bmNsdWRlICJKU0RPTUNvbnZlcnQuaCIKKyNpbmNsdWRlICJKU0xPTkcuaCIKKyNpbmNsdWRlICJT
Y3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCisjaW5jbHVkZSA8cnVudGltZS9KU0FycmF5Lmg+Cisj
aW5jbHVkZSA8cnVudGltZS9KU0xvY2suaD4KKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitKU1Rlc3RDYWxsYmFja0Z1bmN0aW9uV2l0aFR5cGVkZWZzOjpK
U1Rlc3RDYWxsYmFja0Z1bmN0aW9uV2l0aFR5cGVkZWZzKEpTT2JqZWN0KiBjYWxsYmFjaywgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKKyAgICA6IFRlc3RDYWxsYmFja0Z1bmN0aW9u
V2l0aFR5cGVkZWZzKCkKKyAgICAsIEFjdGl2ZURPTUNhbGxiYWNrKGdsb2JhbE9iamVjdC0+c2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpKQorICAgICwgbV9kYXRhKG5ldyBKU0NhbGxiYWNrRGF0YVN0
cm9uZyhjYWxsYmFjaywgdGhpcykpCit7Cit9CisKK0pTVGVzdENhbGxiYWNrRnVuY3Rpb25XaXRo
VHlwZWRlZnM6On5KU1Rlc3RDYWxsYmFja0Z1bmN0aW9uV2l0aFR5cGVkZWZzKCkKK3sKKyAgICBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0ID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
OworICAgIC8vIFdoZW4gdGhlIGNvbnRleHQgaXMgZGVzdHJveWVkLCBhbGwgdGFza3Mgd2l0aCBh
IHJlZmVyZW5jZSB0byBhIGNhbGxiYWNrCisgICAgLy8gc2hvdWxkIGJlIGRlbGV0ZWQuIFNvIGlm
IHRoZSBjb250ZXh0IGlzIDAsIHdlIGFyZSBvbiB0aGUgY29udGV4dCB0aHJlYWQuCisgICAgaWYg
KCFjb250ZXh0IHx8IGNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKQorICAgICAgICBkZWxldGUg
bV9kYXRhOworICAgIGVsc2UKKyAgICAgICAgY29udGV4dC0+cG9zdFRhc2soRGVsZXRlQ2FsbGJh
Y2tEYXRhVGFzayhtX2RhdGEpKTsKKyNpZm5kZWYgTkRFQlVHCisgICAgbV9kYXRhID0gbnVsbHB0
cjsKKyNlbmRpZgorfQorCitib29sIEpTVGVzdENhbGxiYWNrRnVuY3Rpb25XaXRoVHlwZWRlZnM6
OmhhbmRsZUV2ZW50KFZlY3RvcjxSZWZQdHI8TE9ORz4+IHNlcXVlbmNlQXJnLCBpbnQzMl90IGxv
bmdBcmcpCit7CisgICAgaWYgKCFjYW5JbnZva2VDYWxsYmFjaygpKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKworICAgIFJlZjxKU1Rlc3RDYWxsYmFja0Z1bmN0aW9uV2l0aFR5cGVkZWZzPiBwcm90
ZWN0ZWRUaGlzKCp0aGlzKTsKKworICAgIEpTTG9ja0hvbGRlciBsb2NrKG1fZGF0YS0+Z2xvYmFs
T2JqZWN0KCktPnZtKCkpOworCisgICAgRXhlY1N0YXRlKiBzdGF0ZSA9IG1fZGF0YS0+Z2xvYmFs
T2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKKyAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwor
ICAgIGFyZ3MuYXBwZW5kKHRvSlM8SURMU2VxdWVuY2U8SURMTnVsbGFibGU8SURMSW50ZXJmYWNl
PExPTkc+Pj4+KCpzdGF0ZSwgKm1fZGF0YS0+Z2xvYmFsT2JqZWN0KCksIHNlcXVlbmNlQXJnKSk7
CisgICAgYXJncy5hcHBlbmQodG9KUzxJRExMb25nPihsb25nQXJnKSk7CisKKyAgICBOYWtlZFB0
cjxKU0M6OkV4Y2VwdGlvbj4gcmV0dXJuZWRFeGNlcHRpb247CisgICAgbV9kYXRhLT5pbnZva2VD
YWxsYmFjayhhcmdzLCBKU0NhbGxiYWNrRGF0YTo6Q2FsbGJhY2tUeXBlOjpGdW5jdGlvbiwgSWRl
bnRpZmllcigpLCByZXR1cm5lZEV4Y2VwdGlvbik7CisgICAgaWYgKHJldHVybmVkRXhjZXB0aW9u
KQorICAgICAgICByZXBvcnRFeGNlcHRpb24oc3RhdGUsIHJldHVybmVkRXhjZXB0aW9uKTsKKyAg
ICByZXR1cm4gIXJldHVybmVkRXhjZXB0aW9uOworfQorCitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6
OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdENhbGxiYWNrRnVuY3Rpb25XaXRo
VHlwZWRlZnMmIGltcGwpCit7CisgICAgaWYgKCFzdGF0aWNfY2FzdDxKU1Rlc3RDYWxsYmFja0Z1
bmN0aW9uV2l0aFR5cGVkZWZzJj4oaW1wbCkuY2FsbGJhY2tEYXRhKCkpCisgICAgICAgIHJldHVy
biBqc051bGwoKTsKKworICAgIHJldHVybiBzdGF0aWNfY2FzdDxKU1Rlc3RDYWxsYmFja0Z1bmN0
aW9uV2l0aFR5cGVkZWZzJj4oaW1wbCkuY2FsbGJhY2tEYXRhKCktPmNhbGxiYWNrKCk7CisKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxiYWNrRnVuY3Rpb25XaXRoVHlwZWRlZnMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
Q2FsbGJhY2tGdW5jdGlvbldpdGhUeXBlZGVmcy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFja0Z1bmN0aW9uV2l0
aFR5cGVkZWZzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAgICBUaGlz
IGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgICAgVGhp
cyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9U
IE1PRElGWSEKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAg
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAg
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkFjdGl2ZURPTUNhbGxiYWNr
LmgiCisjaW5jbHVkZSAiSlNDYWxsYmFja0RhdGEuaCIKKyNpbmNsdWRlICJUZXN0Q2FsbGJhY2tG
dW5jdGlvbldpdGhUeXBlZGVmcy5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSlNUZXN0Q2FsbGJhY2tGdW5jdGlvbldpdGhUeXBlZGVm
cyA6IHB1YmxpYyBUZXN0Q2FsbGJhY2tGdW5jdGlvbldpdGhUeXBlZGVmcywgcHVibGljIEFjdGl2
ZURPTUNhbGxiYWNrIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPEpTVGVzdENhbGxiYWNrRnVu
Y3Rpb25XaXRoVHlwZWRlZnM+IGNyZWF0ZShKU0M6OkpTT2JqZWN0KiBjYWxsYmFjaywgSlNET01H
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IEpTVGVzdENhbGxiYWNrRnVuY3Rpb25XaXRoVHlwZWRlZnMoY2FsbGJhY2ssIGdsb2Jh
bE9iamVjdCkpOworICAgIH0KKworICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIENvbnRleHREZXN0cnVjdGlv
bk9ic2VydmVyOjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7IH0KKworICAgIHZpcnR1YWwgfkpT
VGVzdENhbGxiYWNrRnVuY3Rpb25XaXRoVHlwZWRlZnMoKTsKKyAgICBKU0NhbGxiYWNrRGF0YVN0
cm9uZyogY2FsbGJhY2tEYXRhKCkgeyByZXR1cm4gbV9kYXRhOyB9CisKKyAgICAvLyBGdW5jdGlv
bnMKKyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlRXZlbnQoVmVjdG9yPFJlZlB0cjxMT05HPj4gc2Vx
dWVuY2VBcmcsIGludDMyX3QgbG9uZ0FyZyk7CisKK3ByaXZhdGU6CisgICAgSlNUZXN0Q2FsbGJh
Y2tGdW5jdGlvbldpdGhUeXBlZGVmcyhKU0M6OkpTT2JqZWN0KiBjYWxsYmFjaywgSlNET01HbG9i
YWxPYmplY3QqKTsKKworICAgIEpTQ2FsbGJhY2tEYXRhU3Ryb25nKiBtX2RhdGE7Cit9OworCitK
U0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVz
dENhbGxiYWNrRnVuY3Rpb25XaXRoVHlwZWRlZnMmKTsKK2lubGluZSBKU0M6OkpTVmFsdWUgdG9K
UyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IFRlc3RDYWxsYmFja0Z1bmN0aW9uV2l0aFR5cGVkZWZzKiBpbXBsKSB7IHJldHVybiBpbXBsID8g
dG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCAqaW1wbCkgOiBKU0M6OmpzTnVsbCgpOyB9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFja0ludGVyZmFjZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxiYWNrSW50ZXJm
YWNlLmNwcAkocmV2aXNpb24gMjA4Mzk2KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbGJhY2suY3BwOjIwODM5NikKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFja0ludGVyZmFjZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMzAgQEAKKy8qCisgICAgVGhpcyBmaWxlIGlzIHBh
cnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICAgIFRoaXMgZmlsZSBoYXMg
YmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisK
KyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAg
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpCisK
KyNpbmNsdWRlICJKU1Rlc3RDYWxsYmFjay5oIgorCisjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rv
ci5oIgorI2luY2x1ZGUgIkpTRE9NQ29udmVydC5oIgorI2luY2x1ZGUgIkpTRE9NU3RyaW5nTGlz
dC5oIgorI2luY2x1ZGUgIkpTVGVzdE5vZGUuaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25D
b250ZXh0LmgiCisjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCisjaW5jbHVkZSA8
cnVudGltZS9KU0xvY2suaD4KKyNpbmNsdWRlIDxydW50aW1lL09iamVjdFByb3RvdHlwZS5oPgor
Cit1c2luZyBuYW1lc3BhY2UgSlNDOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0pTVGVzdENh
bGxiYWNrOjpKU1Rlc3RDYWxsYmFjayhKU09iamVjdCogY2FsbGJhY2ssIEpTRE9NR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QpCisgICAgOiBUZXN0Q2FsbGJhY2soKQorICAgICwgQWN0aXZlRE9N
Q2FsbGJhY2soZ2xvYmFsT2JqZWN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCisgICAgLCBt
X2RhdGEobmV3IEpTQ2FsbGJhY2tEYXRhU3Ryb25nKGNhbGxiYWNrLCB0aGlzKSkKK3sKK30KKwor
SlNUZXN0Q2FsbGJhY2s6On5KU1Rlc3RDYWxsYmFjaygpCit7CisgICAgU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAvLyBXaGVu
IHRoZSBjb250ZXh0IGlzIGRlc3Ryb3llZCwgYWxsIHRhc2tzIHdpdGggYSByZWZlcmVuY2UgdG8g
YSBjYWxsYmFjaworICAgIC8vIHNob3VsZCBiZSBkZWxldGVkLiBTbyBpZiB0aGUgY29udGV4dCBp
cyAwLCB3ZSBhcmUgb24gdGhlIGNvbnRleHQgdGhyZWFkLgorICAgIGlmICghY29udGV4dCB8fCBj
b250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSkKKyAgICAgICAgZGVsZXRlIG1fZGF0YTsKKyAgICBl
bHNlCisgICAgICAgIGNvbnRleHQtPnBvc3RUYXNrKERlbGV0ZUNhbGxiYWNrRGF0YVRhc2sobV9k
YXRhKSk7CisjaWZuZGVmIE5ERUJVRworICAgIG1fZGF0YSA9IG51bGxwdHI7CisjZW5kaWYKK30K
KwordXNpbmcgSlNUZXN0Q2FsbGJhY2tDb25zdHJ1Y3RvciA9IEpTRE9NQ29uc3RydWN0b3JOb3RD
b25zdHJ1Y3RhYmxlPEpTVGVzdENhbGxiYWNrPjsKKworLyogSGFzaCB0YWJsZSBmb3IgY29uc3Ry
dWN0b3IgKi8KKworc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdENhbGxiYWNrQ29u
c3RydWN0b3JUYWJsZVZhbHVlc1tdID0KK3sKKyAgICB7ICJDT05TVEFOVDEiLCBEb250RGVsZXRl
IHwgUmVhZE9ubHkgfCBDb25zdGFudEludGVnZXIsIE5vSW50cmluc2ljLCB7IChsb25nIGxvbmcp
KDEpIH0gfSwKKyAgICB7ICJDT05TVEFOVDIiLCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBDb25z
dGFudEludGVnZXIsIE5vSW50cmluc2ljLCB7IChsb25nIGxvbmcpKDIpIH0gfSwKK307CisKK3N0
YXRpY19hc3NlcnQoVGVzdENhbGxiYWNrOjpDT05TVEFOVDEgPT0gMSwgIkNPTlNUQU5UMSBpbiBU
ZXN0Q2FsbGJhY2sgZG9lcyBub3QgbWF0Y2ggdmFsdWUgZnJvbSBJREwiKTsKK3N0YXRpY19hc3Nl
cnQoVGVzdENhbGxiYWNrOjpDT05TVEFOVDIgPT0gMiwgIkNPTlNUQU5UMiBpbiBUZXN0Q2FsbGJh
Y2sgZG9lcyBub3QgbWF0Y2ggdmFsdWUgZnJvbSBJREwiKTsKKwordGVtcGxhdGU8PiBKU1ZhbHVl
IEpTVGVzdENhbGxiYWNrQ29uc3RydWN0b3I6OnByb3RvdHlwZUZvclN0cnVjdHVyZShKU0M6OlZN
JiB2bSwgY29uc3QgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICBVTlVT
RURfUEFSQU0odm0pOworICAgIHJldHVybiBnbG9iYWxPYmplY3Qub2JqZWN0UHJvdG90eXBlKCk7
Cit9CisKK3RlbXBsYXRlPD4gdm9pZCBKU1Rlc3RDYWxsYmFja0NvbnN0cnVjdG9yOjppbml0aWFs
aXplUHJvcGVydGllcyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7
CisgICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5w
cm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcoJnZtLCBTdHJpbmcoQVNDSUlM
aXRlcmFsKCJUZXN0Q2FsbGJhY2siKSkpLCBSZWFkT25seSB8IERvbnRFbnVtKTsKKyAgICBwdXRE
aXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIFJlYWRPbmx5
IHwgRG9udEVudW0pOworICAgIHJlaWZ5U3RhdGljUHJvcGVydGllcyh2bSwgSlNUZXN0Q2FsbGJh
Y2tDb25zdHJ1Y3RvclRhYmxlVmFsdWVzLCAqdGhpcyk7Cit9CisKK3RlbXBsYXRlPD4gY29uc3Qg
Q2xhc3NJbmZvIEpTVGVzdENhbGxiYWNrQ29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIlRlc3RDYWxs
YmFjayIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0Q2FsbGJh
Y2tDb25zdHJ1Y3RvcikgfTsKKworSlNWYWx1ZSBKU1Rlc3RDYWxsYmFjazo6Z2V0Q29uc3RydWN0
b3IoVk0mIHZtLCBjb25zdCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAgIHJl
dHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU1Rlc3RDYWxsYmFja0NvbnN0cnVjdG9yPih2bSwgKmpz
Q2FzdDxjb25zdCBKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCkpOworfQorCisKKy8v
IEZ1bmN0aW9ucworCitib29sIEpTVGVzdENhbGxiYWNrOjpjYWxsYmFja1dpdGhOb1BhcmFtKCkK
K3sKKyAgICBpZiAoIWNhbkludm9rZUNhbGxiYWNrKCkpCisgICAgICAgIHJldHVybiB0cnVlOwor
CisgICAgUmVmPEpTVGVzdENhbGxiYWNrPiBwcm90ZWN0ZWRUaGlzKCp0aGlzKTsKKworICAgIEpT
TG9ja0hvbGRlciBsb2NrKG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPnZtKCkpOworCisgICAgRXhl
Y1N0YXRlKiBzdGF0ZSA9IG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKKyAg
ICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOworCisgICAgTmFrZWRQdHI8SlNDOjpFeGNlcHRp
b24+IHJldHVybmVkRXhjZXB0aW9uOworICAgIG1fZGF0YS0+aW52b2tlQ2FsbGJhY2soYXJncywg
SlNDYWxsYmFja0RhdGE6OkNhbGxiYWNrVHlwZTo6T2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHN0YXRlLCAiY2FsbGJhY2tXaXRoTm9QYXJhbSIpLCByZXR1cm5lZEV4Y2VwdGlvbik7Cisg
ICAgaWYgKHJldHVybmVkRXhjZXB0aW9uKQorICAgICAgICByZXBvcnRFeGNlcHRpb24oc3RhdGUs
IHJldHVybmVkRXhjZXB0aW9uKTsKKyAgICByZXR1cm4gIXJldHVybmVkRXhjZXB0aW9uOworfQor
Citib29sIEpTVGVzdENhbGxiYWNrOjpjYWxsYmFja1dpdGhBcnJheVBhcmFtKFJlZlB0cjxGbG9h
dDMyQXJyYXk+IGFycmF5UGFyYW0pCit7CisgICAgaWYgKCFjYW5JbnZva2VDYWxsYmFjaygpKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIFJlZjxKU1Rlc3RDYWxsYmFjaz4gcHJvdGVjdGVk
VGhpcygqdGhpcyk7CisKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhtX2RhdGEtPmdsb2JhbE9iamVj
dCgpLT52bSgpKTsKKworICAgIEV4ZWNTdGF0ZSogc3RhdGUgPSBtX2RhdGEtPmdsb2JhbE9iamVj
dCgpLT5nbG9iYWxFeGVjKCk7CisgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKKyAgICBh
cmdzLmFwcGVuZCh0b0pTPElETEludGVyZmFjZTxGbG9hdDMyQXJyYXk+Pigqc3RhdGUsICptX2Rh
dGEtPmdsb2JhbE9iamVjdCgpLCBhcnJheVBhcmFtKSk7CisKKyAgICBOYWtlZFB0cjxKU0M6OkV4
Y2VwdGlvbj4gcmV0dXJuZWRFeGNlcHRpb247CisgICAgbV9kYXRhLT5pbnZva2VDYWxsYmFjayhh
cmdzLCBKU0NhbGxiYWNrRGF0YTo6Q2FsbGJhY2tUeXBlOjpPYmplY3QsIElkZW50aWZpZXI6OmZy
b21TdHJpbmcoc3RhdGUsICJjYWxsYmFja1dpdGhBcnJheVBhcmFtIiksIHJldHVybmVkRXhjZXB0
aW9uKTsKKyAgICBpZiAocmV0dXJuZWRFeGNlcHRpb24pCisgICAgICAgIHJlcG9ydEV4Y2VwdGlv
bihzdGF0ZSwgcmV0dXJuZWRFeGNlcHRpb24pOworICAgIHJldHVybiAhcmV0dXJuZWRFeGNlcHRp
b247Cit9CisKK2Jvb2wgSlNUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrV2l0aFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZVBhcmFtKFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+JiYgc3J6UGFyYW0sIGNv
bnN0IFN0cmluZyYgc3RyQXJnKQoreworICAgIGlmICghY2FuSW52b2tlQ2FsbGJhY2soKSkKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBSZWY8SlNUZXN0Q2FsbGJhY2s+IHByb3RlY3RlZFRo
aXMoKnRoaXMpOworCisgICAgSlNMb2NrSG9sZGVyIGxvY2sobV9kYXRhLT5nbG9iYWxPYmplY3Qo
KS0+dm0oKSk7CisKKyAgICBFeGVjU3RhdGUqIHN0YXRlID0gbV9kYXRhLT5nbG9iYWxPYmplY3Qo
KS0+Z2xvYmFsRXhlYygpOworICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CisgICAgYXJn
cy5hcHBlbmQoc3J6UGFyYW0gPyBzcnpQYXJhbS0+ZGVzZXJpYWxpemUoKnN0YXRlLCBtX2RhdGEt
Pmdsb2JhbE9iamVjdCgpKSA6IGpzTnVsbCgpKTsKKyAgICBhcmdzLmFwcGVuZCh0b0pTPElETERP
TVN0cmluZz4oKnN0YXRlLCBzdHJBcmcpKTsKKworICAgIE5ha2VkUHRyPEpTQzo6RXhjZXB0aW9u
PiByZXR1cm5lZEV4Y2VwdGlvbjsKKyAgICBtX2RhdGEtPmludm9rZUNhbGxiYWNrKGFyZ3MsIEpT
Q2FsbGJhY2tEYXRhOjpDYWxsYmFja1R5cGU6Ok9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
ZyhzdGF0ZSwgImNhbGxiYWNrV2l0aFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZVBhcmFtIiksIHJldHVy
bmVkRXhjZXB0aW9uKTsKKyAgICBpZiAocmV0dXJuZWRFeGNlcHRpb24pCisgICAgICAgIHJlcG9y
dEV4Y2VwdGlvbihzdGF0ZSwgcmV0dXJuZWRFeGNlcHRpb24pOworICAgIHJldHVybiAhcmV0dXJu
ZWRFeGNlcHRpb247Cit9CisKK2Jvb2wgSlNUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrV2l0aFN0cmlu
Z0xpc3QoRE9NU3RyaW5nTGlzdCogbGlzdFBhcmFtKQoreworICAgIGlmICghY2FuSW52b2tlQ2Fs
bGJhY2soKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBSZWY8SlNUZXN0Q2FsbGJhY2s+
IHByb3RlY3RlZFRoaXMoKnRoaXMpOworCisgICAgSlNMb2NrSG9sZGVyIGxvY2sobV9kYXRhLT5n
bG9iYWxPYmplY3QoKS0+dm0oKSk7CisKKyAgICBFeGVjU3RhdGUqIHN0YXRlID0gbV9kYXRhLT5n
bG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOworICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFy
Z3M7CisgICAgYXJncy5hcHBlbmQodG9KUzxJRExJbnRlcmZhY2U8RE9NU3RyaW5nTGlzdD4+KCpz
dGF0ZSwgKm1fZGF0YS0+Z2xvYmFsT2JqZWN0KCksIGxpc3RQYXJhbSkpOworCisgICAgTmFrZWRQ
dHI8SlNDOjpFeGNlcHRpb24+IHJldHVybmVkRXhjZXB0aW9uOworICAgIG1fZGF0YS0+aW52b2tl
Q2FsbGJhY2soYXJncywgSlNDYWxsYmFja0RhdGE6OkNhbGxiYWNrVHlwZTo6T2JqZWN0LCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHN0YXRlLCAiY2FsbGJhY2tXaXRoU3RyaW5nTGlzdCIpLCByZXR1
cm5lZEV4Y2VwdGlvbik7CisgICAgaWYgKHJldHVybmVkRXhjZXB0aW9uKQorICAgICAgICByZXBv
cnRFeGNlcHRpb24oc3RhdGUsIHJldHVybmVkRXhjZXB0aW9uKTsKKyAgICByZXR1cm4gIXJldHVy
bmVkRXhjZXB0aW9uOworfQorCitib29sIEpTVGVzdENhbGxiYWNrOjpjYWxsYmFja1dpdGhCb29s
ZWFuKGJvb2wgYm9vbFBhcmFtKQoreworICAgIGlmICghY2FuSW52b2tlQ2FsbGJhY2soKSkKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBSZWY8SlNUZXN0Q2FsbGJhY2s+IHByb3RlY3RlZFRo
aXMoKnRoaXMpOworCisgICAgSlNMb2NrSG9sZGVyIGxvY2sobV9kYXRhLT5nbG9iYWxPYmplY3Qo
KS0+dm0oKSk7CisKKyAgICBFeGVjU3RhdGUqIHN0YXRlID0gbV9kYXRhLT5nbG9iYWxPYmplY3Qo
KS0+Z2xvYmFsRXhlYygpOworICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CisgICAgYXJn
cy5hcHBlbmQodG9KUzxJRExCb29sZWFuPihib29sUGFyYW0pKTsKKworICAgIE5ha2VkUHRyPEpT
Qzo6RXhjZXB0aW9uPiByZXR1cm5lZEV4Y2VwdGlvbjsKKyAgICBtX2RhdGEtPmludm9rZUNhbGxi
YWNrKGFyZ3MsIEpTQ2FsbGJhY2tEYXRhOjpDYWxsYmFja1R5cGU6Ok9iamVjdCwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyhzdGF0ZSwgImNhbGxiYWNrV2l0aEJvb2xlYW4iKSwgcmV0dXJuZWRFeGNl
cHRpb24pOworICAgIGlmIChyZXR1cm5lZEV4Y2VwdGlvbikKKyAgICAgICAgcmVwb3J0RXhjZXB0
aW9uKHN0YXRlLCByZXR1cm5lZEV4Y2VwdGlvbik7CisgICAgcmV0dXJuICFyZXR1cm5lZEV4Y2Vw
dGlvbjsKK30KKworYm9vbCBKU1Rlc3RDYWxsYmFjazo6Y2FsbGJhY2tSZXF1aXJlc1RoaXNUb1Bh
c3MoaW50MzJfdCBsb25nUGFyYW0sIFRlc3ROb2RlKiB0ZXN0Tm9kZVBhcmFtKQoreworICAgIGlm
ICghY2FuSW52b2tlQ2FsbGJhY2soKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBSZWY8
SlNUZXN0Q2FsbGJhY2s+IHByb3RlY3RlZFRoaXMoKnRoaXMpOworCisgICAgSlNMb2NrSG9sZGVy
IGxvY2sobV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+dm0oKSk7CisKKyAgICBFeGVjU3RhdGUqIHN0
YXRlID0gbV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOworICAgIE1hcmtlZEFy
Z3VtZW50QnVmZmVyIGFyZ3M7CisgICAgYXJncy5hcHBlbmQodG9KUzxJRExMb25nPihsb25nUGFy
YW0pKTsKKyAgICBhcmdzLmFwcGVuZCh0b0pTPElETEludGVyZmFjZTxUZXN0Tm9kZT4+KCpzdGF0
ZSwgKm1fZGF0YS0+Z2xvYmFsT2JqZWN0KCksIHRlc3ROb2RlUGFyYW0pKTsKKworICAgIE5ha2Vk
UHRyPEpTQzo6RXhjZXB0aW9uPiByZXR1cm5lZEV4Y2VwdGlvbjsKKyAgICBtX2RhdGEtPmludm9r
ZUNhbGxiYWNrKGFyZ3MsIEpTQ2FsbGJhY2tEYXRhOjpDYWxsYmFja1R5cGU6Ok9iamVjdCwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyhzdGF0ZSwgImNhbGxiYWNrUmVxdWlyZXNUaGlzVG9QYXNzIiks
IHJldHVybmVkRXhjZXB0aW9uKTsKKyAgICBpZiAocmV0dXJuZWRFeGNlcHRpb24pCisgICAgICAg
IHJlcG9ydEV4Y2VwdGlvbihzdGF0ZSwgcmV0dXJuZWRFeGNlcHRpb24pOworICAgIHJldHVybiAh
cmV0dXJuZWRFeGNlcHRpb247Cit9CisKK0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRl
KiwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0Q2FsbGJhY2smIGltcGwpCit7CisgICAgaWYgKCFz
dGF0aWNfY2FzdDxKU1Rlc3RDYWxsYmFjayY+KGltcGwpLmNhbGxiYWNrRGF0YSgpKQorICAgICAg
ICByZXR1cm4ganNOdWxsKCk7CisKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SlNUZXN0Q2FsbGJh
Y2smPihpbXBsKS5jYWxsYmFja0RhdGEoKS0+Y2FsbGJhY2soKTsKKworfQorCit9CisKKyNlbmRp
ZiAvLyBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFja0ludGVyZmFjZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxi
YWNrSW50ZXJmYWNlLmNwcAkocmV2aXNpb24gMjA4Mzk2KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxiYWNrSW50ZXJmYWNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjIsNyArMjIsNyBAQAogCiAjaWYgRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMp
CiAKLSNpbmNsdWRlICJKU1Rlc3RDYWxsYmFjay5oIgorI2luY2x1ZGUgIkpTVGVzdENhbGxiYWNr
SW50ZXJmYWNlLmgiCiAKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAi
SlNET01Db252ZXJ0LmgiCkBAIC0zNywxNCArMzcsMTQgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1KU1Rlc3RDYWxsYmFjazo6SlNUZXN0Q2FsbGJhY2so
SlNPYmplY3QqIGNhbGxiYWNrLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotICAg
IDogVGVzdENhbGxiYWNrKCkKK0pTVGVzdENhbGxiYWNrSW50ZXJmYWNlOjpKU1Rlc3RDYWxsYmFj
a0ludGVyZmFjZShKU09iamVjdCogY2FsbGJhY2ssIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QpCisgICAgOiBUZXN0Q2FsbGJhY2tJbnRlcmZhY2UoKQogICAgICwgQWN0aXZlRE9NQ2Fs
bGJhY2soZ2xvYmFsT2JqZWN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCiAgICAgLCBtX2Rh
dGEobmV3IEpTQ2FsbGJhY2tEYXRhU3Ryb25nKGNhbGxiYWNrLCB0aGlzKSkKIHsKIH0KIAotSlNU
ZXN0Q2FsbGJhY2s6On5KU1Rlc3RDYWxsYmFjaygpCitKU1Rlc3RDYWxsYmFja0ludGVyZmFjZTo6
fkpTVGVzdENhbGxiYWNrSW50ZXJmYWNlKCkKIHsKICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0ID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIC8vIFdoZW4gdGhlIGNv
bnRleHQgaXMgZGVzdHJveWVkLCBhbGwgdGFza3Mgd2l0aCBhIHJlZmVyZW5jZSB0byBhIGNhbGxi
YWNrCkBAIC01OCw0OSArNTgsNDYgQEAgSlNUZXN0Q2FsbGJhY2s6On5KU1Rlc3RDYWxsYmFjaygp
CiAjZW5kaWYKIH0KIAotdXNpbmcgSlNUZXN0Q2FsbGJhY2tDb25zdHJ1Y3RvciA9IEpTRE9NQ29u
c3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlPEpTVGVzdENhbGxiYWNrPjsKK3VzaW5nIEpTVGVzdENh
bGxiYWNrSW50ZXJmYWNlQ29uc3RydWN0b3IgPSBKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0
YWJsZTxKU1Rlc3RDYWxsYmFja0ludGVyZmFjZT47CiAKIC8qIEhhc2ggdGFibGUgZm9yIGNvbnN0
cnVjdG9yICovCiAKLXN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RDYWxsYmFja0Nv
bnN0cnVjdG9yVGFibGVWYWx1ZXNbXSA9CitzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNU
ZXN0Q2FsbGJhY2tJbnRlcmZhY2VDb25zdHJ1Y3RvclRhYmxlVmFsdWVzW10gPQogewogICAgIHsg
IkNPTlNUQU5UMSIsIERvbnREZWxldGUgfCBSZWFkT25seSB8IENvbnN0YW50SW50ZWdlciwgTm9J
bnRyaW5zaWMsIHsgKGxvbmcgbG9uZykoMSkgfSB9LAogICAgIHsgIkNPTlNUQU5UMiIsIERvbnRE
ZWxldGUgfCBSZWFkT25seSB8IENvbnN0YW50SW50ZWdlciwgTm9JbnRyaW5zaWMsIHsgKGxvbmcg
bG9uZykoMikgfSB9LAogfTsKIAotc3RhdGljX2Fzc2VydChUZXN0Q2FsbGJhY2s6OkNPTlNUQU5U
MSA9PSAxLCAiQ09OU1RBTlQxIGluIFRlc3RDYWxsYmFjayBkb2VzIG5vdCBtYXRjaCB2YWx1ZSBm
cm9tIElETCIpOwotc3RhdGljX2Fzc2VydChUZXN0Q2FsbGJhY2s6OkNPTlNUQU5UMiA9PSAyLCAi
Q09OU1RBTlQyIGluIFRlc3RDYWxsYmFjayBkb2VzIG5vdCBtYXRjaCB2YWx1ZSBmcm9tIElETCIp
Oworc3RhdGljX2Fzc2VydChUZXN0Q2FsbGJhY2tJbnRlcmZhY2U6OkNPTlNUQU5UMSA9PSAxLCAi
Q09OU1RBTlQxIGluIFRlc3RDYWxsYmFja0ludGVyZmFjZSBkb2VzIG5vdCBtYXRjaCB2YWx1ZSBm
cm9tIElETCIpOworc3RhdGljX2Fzc2VydChUZXN0Q2FsbGJhY2tJbnRlcmZhY2U6OkNPTlNUQU5U
MiA9PSAyLCAiQ09OU1RBTlQyIGluIFRlc3RDYWxsYmFja0ludGVyZmFjZSBkb2VzIG5vdCBtYXRj
aCB2YWx1ZSBmcm9tIElETCIpOwogCi10ZW1wbGF0ZTw+IEpTVmFsdWUgSlNUZXN0Q2FsbGJhY2tD
b25zdHJ1Y3Rvcjo6cHJvdG90eXBlRm9yU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBjb25zdCBKU0RP
TUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQordGVtcGxhdGU8PiBKU1ZhbHVlIEpTVGVzdENh
bGxiYWNrSW50ZXJmYWNlQ29uc3RydWN0b3I6OnByb3RvdHlwZUZvclN0cnVjdHVyZShKU0M6OlZN
JiB2bSwgY29uc3QgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKIHsKICAgICBVTlVT
RURfUEFSQU0odm0pOwogICAgIHJldHVybiBnbG9iYWxPYmplY3Qub2JqZWN0UHJvdG90eXBlKCk7
CiB9CiAKLXRlbXBsYXRlPD4gdm9pZCBKU1Rlc3RDYWxsYmFja0NvbnN0cnVjdG9yOjppbml0aWFs
aXplUHJvcGVydGllcyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit0
ZW1wbGF0ZTw+IHZvaWQgSlNUZXN0Q2FsbGJhY2tJbnRlcmZhY2VDb25zdHJ1Y3Rvcjo6aW5pdGlh
bGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQog
ewogICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3QpOwotICAgIHB1dERpcmVjdCh2bSwgdm0u
cHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKCZ2bSwgU3RyaW5nKEFTQ0lJ
TGl0ZXJhbCgiVGVzdENhbGxiYWNrIikpKSwgUmVhZE9ubHkgfCBEb250RW51bSk7CisgICAgcHV0
RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcoJnZt
LCBTdHJpbmcoQVNDSUlMaXRlcmFsKCJUZXN0Q2FsbGJhY2tJbnRlcmZhY2UiKSkpLCBSZWFkT25s
eSB8IERvbnRFbnVtKTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0
aCwganNOdW1iZXIoMCksIFJlYWRPbmx5IHwgRG9udEVudW0pOwotICAgIHJlaWZ5U3RhdGljUHJv
cGVydGllcyh2bSwgSlNUZXN0Q2FsbGJhY2tDb25zdHJ1Y3RvclRhYmxlVmFsdWVzLCAqdGhpcyk7
CisgICAgcmVpZnlTdGF0aWNQcm9wZXJ0aWVzKHZtLCBKU1Rlc3RDYWxsYmFja0ludGVyZmFjZUNv
bnN0cnVjdG9yVGFibGVWYWx1ZXMsICp0aGlzKTsKIH0KIAotdGVtcGxhdGU8PiBjb25zdCBDbGFz
c0luZm8gSlNUZXN0Q2FsbGJhY2tDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiVGVzdENhbGxiYWNr
IiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RDYWxsYmFja0Nv
bnN0cnVjdG9yKSB9OwordGVtcGxhdGU8PiBjb25zdCBDbGFzc0luZm8gSlNUZXN0Q2FsbGJhY2tJ
bnRlcmZhY2VDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiVGVzdENhbGxiYWNrSW50ZXJmYWNlIiwg
JkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RDYWxsYmFja0ludGVy
ZmFjZUNvbnN0cnVjdG9yKSB9OwogCi1KU1ZhbHVlIEpTVGVzdENhbGxiYWNrOjpnZXRDb25zdHJ1
Y3RvcihWTSYgdm0sIGNvbnN0IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCitKU1ZhbHVl
IEpTVGVzdENhbGxiYWNrSW50ZXJmYWNlOjpnZXRDb25zdHJ1Y3RvcihWTSYgdm0sIGNvbnN0IEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7Ci0gICAgcmV0dXJuIGdldERPTUNvbnN0cnVj
dG9yPEpTVGVzdENhbGxiYWNrQ29uc3RydWN0b3I+KHZtLCAqanNDYXN0PGNvbnN0IEpTRE9NR2xv
YmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7CisgICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9y
PEpTVGVzdENhbGxiYWNrSW50ZXJmYWNlQ29uc3RydWN0b3I+KHZtLCAqanNDYXN0PGNvbnN0IEpT
RE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7CiB9CiAKLQotLy8gRnVuY3Rpb25zCi0K
LWJvb2wgSlNUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrV2l0aE5vUGFyYW0oKQorYm9vbCBKU1Rlc3RD
YWxsYmFja0ludGVyZmFjZTo6Y2FsbGJhY2tXaXRoTm9QYXJhbSgpCiB7CiAgICAgaWYgKCFjYW5J
bnZva2VDYWxsYmFjaygpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIFJlZjxKU1Rlc3RD
YWxsYmFjaz4gcHJvdGVjdGVkVGhpcygqdGhpcyk7CisgICAgUmVmPEpTVGVzdENhbGxiYWNrSW50
ZXJmYWNlPiBwcm90ZWN0ZWRUaGlzKCp0aGlzKTsKIAogICAgIEpTTG9ja0hvbGRlciBsb2NrKG1f
ZGF0YS0+Z2xvYmFsT2JqZWN0KCktPnZtKCkpOwogCkBAIC0xMTQsMTIgKzExMSwxMiBAQCBib29s
IEpTVGVzdENhbGxiYWNrOjpjYWxsYmFja1dpdGhOb1BhcmFtCiAgICAgcmV0dXJuICFyZXR1cm5l
ZEV4Y2VwdGlvbjsKIH0KIAotYm9vbCBKU1Rlc3RDYWxsYmFjazo6Y2FsbGJhY2tXaXRoQXJyYXlQ
YXJhbShSZWZQdHI8RmxvYXQzMkFycmF5PiBhcnJheVBhcmFtKQorYm9vbCBKU1Rlc3RDYWxsYmFj
a0ludGVyZmFjZTo6Y2FsbGJhY2tXaXRoQXJyYXlQYXJhbShSZWZQdHI8RmxvYXQzMkFycmF5PiBh
cnJheVBhcmFtKQogewogICAgIGlmICghY2FuSW52b2tlQ2FsbGJhY2soKSkKICAgICAgICAgcmV0
dXJuIHRydWU7CiAKLSAgICBSZWY8SlNUZXN0Q2FsbGJhY2s+IHByb3RlY3RlZFRoaXMoKnRoaXMp
OworICAgIFJlZjxKU1Rlc3RDYWxsYmFja0ludGVyZmFjZT4gcHJvdGVjdGVkVGhpcygqdGhpcyk7
CiAKICAgICBKU0xvY2tIb2xkZXIgbG9jayhtX2RhdGEtPmdsb2JhbE9iamVjdCgpLT52bSgpKTsK
IApAQCAtMTM0LDE5ICsxMzEsMTkgQEAgYm9vbCBKU1Rlc3RDYWxsYmFjazo6Y2FsbGJhY2tXaXRo
QXJyYXlQYQogICAgIHJldHVybiAhcmV0dXJuZWRFeGNlcHRpb247CiB9CiAKLWJvb2wgSlNUZXN0
Q2FsbGJhY2s6OmNhbGxiYWNrV2l0aFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZVBhcmFtKFJlZlB0cjxT
ZXJpYWxpemVkU2NyaXB0VmFsdWU+JiYgc3J6UGFyYW0sIGNvbnN0IFN0cmluZyYgc3RyQXJnKQor
Ym9vbCBKU1Rlc3RDYWxsYmFja0ludGVyZmFjZTo6Y2FsbGJhY2tXaXRoU2VyaWFsaXplZFNjcmlw
dFZhbHVlUGFyYW0oUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4mJiBzcnpQYXJhbSwgY29u
c3QgU3RyaW5nJiBzdHJQYXJhbSkKIHsKICAgICBpZiAoIWNhbkludm9rZUNhbGxiYWNrKCkpCiAg
ICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgUmVmPEpTVGVzdENhbGxiYWNrPiBwcm90ZWN0ZWRU
aGlzKCp0aGlzKTsKKyAgICBSZWY8SlNUZXN0Q2FsbGJhY2tJbnRlcmZhY2U+IHByb3RlY3RlZFRo
aXMoKnRoaXMpOwogCiAgICAgSlNMb2NrSG9sZGVyIGxvY2sobV9kYXRhLT5nbG9iYWxPYmplY3Qo
KS0+dm0oKSk7CiAKICAgICBFeGVjU3RhdGUqIHN0YXRlID0gbV9kYXRhLT5nbG9iYWxPYmplY3Qo
KS0+Z2xvYmFsRXhlYygpOwogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CiAgICAgYXJn
cy5hcHBlbmQoc3J6UGFyYW0gPyBzcnpQYXJhbS0+ZGVzZXJpYWxpemUoKnN0YXRlLCBtX2RhdGEt
Pmdsb2JhbE9iamVjdCgpKSA6IGpzTnVsbCgpKTsKLSAgICBhcmdzLmFwcGVuZCh0b0pTPElETERP
TVN0cmluZz4oKnN0YXRlLCBzdHJBcmcpKTsKKyAgICBhcmdzLmFwcGVuZCh0b0pTPElETERPTVN0
cmluZz4oKnN0YXRlLCBzdHJQYXJhbSkpOwogCiAgICAgTmFrZWRQdHI8SlNDOjpFeGNlcHRpb24+
IHJldHVybmVkRXhjZXB0aW9uOwogICAgIG1fZGF0YS0+aW52b2tlQ2FsbGJhY2soYXJncywgSlND
YWxsYmFja0RhdGE6OkNhbGxiYWNrVHlwZTo6T2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KHN0YXRlLCAiY2FsbGJhY2tXaXRoU2VyaWFsaXplZFNjcmlwdFZhbHVlUGFyYW0iKSwgcmV0dXJu
ZWRFeGNlcHRpb24pOwpAQCAtMTU1LDEyICsxNTIsMTIgQEAgYm9vbCBKU1Rlc3RDYWxsYmFjazo6
Y2FsbGJhY2tXaXRoU2VyaWFsaQogICAgIHJldHVybiAhcmV0dXJuZWRFeGNlcHRpb247CiB9CiAK
LWJvb2wgSlNUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrV2l0aFN0cmluZ0xpc3QoRE9NU3RyaW5nTGlz
dCogbGlzdFBhcmFtKQorYm9vbCBKU1Rlc3RDYWxsYmFja0ludGVyZmFjZTo6Y2FsbGJhY2tXaXRo
U3RyaW5nTGlzdChET01TdHJpbmdMaXN0KiBsaXN0UGFyYW0pCiB7CiAgICAgaWYgKCFjYW5JbnZv
a2VDYWxsYmFjaygpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIFJlZjxKU1Rlc3RDYWxs
YmFjaz4gcHJvdGVjdGVkVGhpcygqdGhpcyk7CisgICAgUmVmPEpTVGVzdENhbGxiYWNrSW50ZXJm
YWNlPiBwcm90ZWN0ZWRUaGlzKCp0aGlzKTsKIAogICAgIEpTTG9ja0hvbGRlciBsb2NrKG1fZGF0
YS0+Z2xvYmFsT2JqZWN0KCktPnZtKCkpOwogCkBAIC0xNzUsMTIgKzE3MiwxMiBAQCBib29sIEpT
VGVzdENhbGxiYWNrOjpjYWxsYmFja1dpdGhTdHJpbmdMCiAgICAgcmV0dXJuICFyZXR1cm5lZEV4
Y2VwdGlvbjsKIH0KIAotYm9vbCBKU1Rlc3RDYWxsYmFjazo6Y2FsbGJhY2tXaXRoQm9vbGVhbihi
b29sIGJvb2xQYXJhbSkKK2Jvb2wgSlNUZXN0Q2FsbGJhY2tJbnRlcmZhY2U6OmNhbGxiYWNrV2l0
aEJvb2xlYW4oYm9vbCBib29sUGFyYW0pCiB7CiAgICAgaWYgKCFjYW5JbnZva2VDYWxsYmFjaygp
KQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIFJlZjxKU1Rlc3RDYWxsYmFjaz4gcHJvdGVj
dGVkVGhpcygqdGhpcyk7CisgICAgUmVmPEpTVGVzdENhbGxiYWNrSW50ZXJmYWNlPiBwcm90ZWN0
ZWRUaGlzKCp0aGlzKTsKIAogICAgIEpTTG9ja0hvbGRlciBsb2NrKG1fZGF0YS0+Z2xvYmFsT2Jq
ZWN0KCktPnZtKCkpOwogCkBAIC0xOTUsMTIgKzE5MiwxMiBAQCBib29sIEpTVGVzdENhbGxiYWNr
OjpjYWxsYmFja1dpdGhCb29sZWFuCiAgICAgcmV0dXJuICFyZXR1cm5lZEV4Y2VwdGlvbjsKIH0K
IAotYm9vbCBKU1Rlc3RDYWxsYmFjazo6Y2FsbGJhY2tSZXF1aXJlc1RoaXNUb1Bhc3MoaW50MzJf
dCBsb25nUGFyYW0sIFRlc3ROb2RlKiB0ZXN0Tm9kZVBhcmFtKQorYm9vbCBKU1Rlc3RDYWxsYmFj
a0ludGVyZmFjZTo6Y2FsbGJhY2tSZXF1aXJlc1RoaXNUb1Bhc3MoaW50MzJfdCBsb25nUGFyYW0s
IFRlc3ROb2RlKiB0ZXN0Tm9kZVBhcmFtKQogewogICAgIGlmICghY2FuSW52b2tlQ2FsbGJhY2so
KSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBSZWY8SlNUZXN0Q2FsbGJhY2s+IHByb3Rl
Y3RlZFRoaXMoKnRoaXMpOworICAgIFJlZjxKU1Rlc3RDYWxsYmFja0ludGVyZmFjZT4gcHJvdGVj
dGVkVGhpcygqdGhpcyk7CiAKICAgICBKU0xvY2tIb2xkZXIgbG9jayhtX2RhdGEtPmdsb2JhbE9i
amVjdCgpLT52bSgpKTsKIApAQCAtMjE2LDE1ICsyMTMsMTUgQEAgYm9vbCBKU1Rlc3RDYWxsYmFj
azo6Y2FsbGJhY2tSZXF1aXJlc1RoaQogICAgIHJldHVybiAhcmV0dXJuZWRFeGNlcHRpb247CiB9
CiAKLUpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3Qq
LCBUZXN0Q2FsbGJhY2smIGltcGwpCitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSos
IEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdENhbGxiYWNrSW50ZXJmYWNlJiBpbXBsKQogewotICAg
IGlmICghc3RhdGljX2Nhc3Q8SlNUZXN0Q2FsbGJhY2smPihpbXBsKS5jYWxsYmFja0RhdGEoKSkK
KyAgICBpZiAoIXN0YXRpY19jYXN0PEpTVGVzdENhbGxiYWNrSW50ZXJmYWNlJj4oaW1wbCkuY2Fs
bGJhY2tEYXRhKCkpCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKIAotICAgIHJldHVybiBzdGF0
aWNfY2FzdDxKU1Rlc3RDYWxsYmFjayY+KGltcGwpLmNhbGxiYWNrRGF0YSgpLT5jYWxsYmFjaygp
OworICAgIHJldHVybiBzdGF0aWNfY2FzdDxKU1Rlc3RDYWxsYmFja0ludGVyZmFjZSY+KGltcGwp
LmNhbGxiYWNrRGF0YSgpLT5jYWxsYmFjaygpOwogCiB9CiAKLX0KK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxiYWNrSW50ZXJmYWNl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdENhbGxiYWNrSW50ZXJmYWNlLmgJKHJldmlzaW9uIDIwODM5NikJKGZyb20gU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxiYWNrLmg6MjA4Mzk2
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxi
YWNrSW50ZXJmYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAgICBU
aGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgICAg
VGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8g
Tk9UIE1PRElGWSEKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKwor
ICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhF
U0lTKQorCisjaW5jbHVkZSAiQWN0aXZlRE9NQ2FsbGJhY2suaCIKKyNpbmNsdWRlICJKU0NhbGxi
YWNrRGF0YS5oIgorI2luY2x1ZGUgIlRlc3RDYWxsYmFjay5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3
YXJkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSlNUZXN0Q2FsbGJhY2sgOiBw
dWJsaWMgVGVzdENhbGxiYWNrLCBwdWJsaWMgQWN0aXZlRE9NQ2FsbGJhY2sgeworcHVibGljOgor
ICAgIHN0YXRpYyBSZWY8SlNUZXN0Q2FsbGJhY2s+IGNyZWF0ZShKU0M6OkpTT2JqZWN0KiBjYWxs
YmFjaywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IEpTVGVzdENhbGxiYWNrKGNhbGxiYWNrLCBnbG9iYWxPYmplY3Qp
KTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKSBjb25zdCB7IHJldHVybiBDb250ZXh0RGVzdHJ1Y3Rpb25PYnNlcnZl
cjo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOyB9CisKKyAgICB2aXJ0dWFsIH5KU1Rlc3RDYWxs
YmFjaygpOworICAgIEpTQ2FsbGJhY2tEYXRhU3Ryb25nKiBjYWxsYmFja0RhdGEoKSB7IHJldHVy
biBtX2RhdGE7IH0KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6
Vk0mLCBjb25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CisKKyAgICAvLyBGdW5jdGlvbnMKKyAg
ICB2aXJ0dWFsIGJvb2wgY2FsbGJhY2tXaXRoTm9QYXJhbSgpOworICAgIHZpcnR1YWwgYm9vbCBj
YWxsYmFja1dpdGhBcnJheVBhcmFtKFJlZlB0cjxGbG9hdDMyQXJyYXk+IGFycmF5UGFyYW0pOwor
ICAgIHZpcnR1YWwgYm9vbCBjYWxsYmFja1dpdGhTZXJpYWxpemVkU2NyaXB0VmFsdWVQYXJhbShS
ZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiYmIHNyelBhcmFtLCBjb25zdCBTdHJpbmcmIHN0
ckFyZyk7CisgICAgdmlydHVhbCBpbnQzMl90IGNhbGxiYWNrV2l0aE5vbkJvb2xSZXR1cm5UeXBl
KGNvbnN0IFN0cmluZyYgc3RyQXJnKTsKKyAgICB2aXJ0dWFsIGludDMyX3QgY3VzdG9tQ2FsbGJh
Y2soQ2xhc3M1KiBjbGFzczVQYXJhbSwgQ2xhc3M2KiBjbGFzczZQYXJhbSk7CisgICAgdmlydHVh
bCBib29sIGNhbGxiYWNrV2l0aFN0cmluZ0xpc3QoRE9NU3RyaW5nTGlzdCogbGlzdFBhcmFtKTsK
KyAgICB2aXJ0dWFsIGJvb2wgY2FsbGJhY2tXaXRoQm9vbGVhbihib29sIGJvb2xQYXJhbSk7Cisg
ICAgdmlydHVhbCBib29sIGNhbGxiYWNrUmVxdWlyZXNUaGlzVG9QYXNzKGludDMyX3QgbG9uZ1Bh
cmFtLCBUZXN0Tm9kZSogdGVzdE5vZGVQYXJhbSk7CisKK3ByaXZhdGU6CisgICAgSlNUZXN0Q2Fs
bGJhY2soSlNDOjpKU09iamVjdCogY2FsbGJhY2ssIEpTRE9NR2xvYmFsT2JqZWN0Kik7CisKKyAg
ICBKU0NhbGxiYWNrRGF0YVN0cm9uZyogbV9kYXRhOworfTsKKworSlNDOjpKU1ZhbHVlIHRvSlMo
SlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3RDYWxsYmFjayYpOworaW5s
aW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdENhbGxiYWNrKiBpbXBsKSB7IHJldHVybiBpbXBsID8g
dG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCAqaW1wbCkgOiBKU0M6OmpzTnVsbCgpOyB9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lT
KQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENh
bGxiYWNrSW50ZXJmYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxiYWNrSW50ZXJmYWNlLmgJKHJldmlzaW9uIDIwODM5
NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxs
YmFja0ludGVyZmFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw0MiArMjQsNDEgQEAKIAogI2lu
Y2x1ZGUgIkFjdGl2ZURPTUNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiSlNDYWxsYmFja0RhdGEuaCIK
LSNpbmNsdWRlICJUZXN0Q2FsbGJhY2suaCIKKyNpbmNsdWRlICJUZXN0Q2FsbGJhY2tJbnRlcmZh
Y2UuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LWNsYXNzIEpTVGVzdENhbGxiYWNrIDogcHVibGljIFRlc3RDYWxsYmFjaywgcHVibGljIEFjdGl2
ZURPTUNhbGxiYWNrIHsKK2NsYXNzIEpTVGVzdENhbGxiYWNrSW50ZXJmYWNlIDogcHVibGljIFRl
c3RDYWxsYmFja0ludGVyZmFjZSwgcHVibGljIEFjdGl2ZURPTUNhbGxiYWNrIHsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgUmVmPEpTVGVzdENhbGxiYWNrPiBjcmVhdGUoSlNDOjpKU09iamVjdCogY2Fs
bGJhY2ssIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCisgICAgc3RhdGljIFJlZjxK
U1Rlc3RDYWxsYmFja0ludGVyZmFjZT4gY3JlYXRlKEpTQzo6SlNPYmplY3QqIGNhbGxiYWNrLCBK
U0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgSlNUZXN0Q2FsbGJhY2soY2FsbGJhY2ssIGdsb2JhbE9iamVjdCkpOworICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBKU1Rlc3RDYWxsYmFja0ludGVyZmFjZShjYWxsYmFj
aywgZ2xvYmFsT2JqZWN0KSk7CiAgICAgfQogCiAgICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QgeyByZXR1cm4gQ29udGV4dERl
c3RydWN0aW9uT2JzZXJ2ZXI6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsgfQogCi0gICAgdmly
dHVhbCB+SlNUZXN0Q2FsbGJhY2soKTsKKyAgICB2aXJ0dWFsIH5KU1Rlc3RDYWxsYmFja0ludGVy
ZmFjZSgpOwogICAgIEpTQ2FsbGJhY2tEYXRhU3Ryb25nKiBjYWxsYmFja0RhdGEoKSB7IHJldHVy
biBtX2RhdGE7IH0KICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6
Vk0mLCBjb25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CiAKICAgICAvLyBGdW5jdGlvbnMKICAg
ICB2aXJ0dWFsIGJvb2wgY2FsbGJhY2tXaXRoTm9QYXJhbSgpOwogICAgIHZpcnR1YWwgYm9vbCBj
YWxsYmFja1dpdGhBcnJheVBhcmFtKFJlZlB0cjxGbG9hdDMyQXJyYXk+IGFycmF5UGFyYW0pOwot
ICAgIHZpcnR1YWwgYm9vbCBjYWxsYmFja1dpdGhTZXJpYWxpemVkU2NyaXB0VmFsdWVQYXJhbShS
ZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiYmIHNyelBhcmFtLCBjb25zdCBTdHJpbmcmIHN0
ckFyZyk7Ci0gICAgdmlydHVhbCBpbnQzMl90IGNhbGxiYWNrV2l0aE5vbkJvb2xSZXR1cm5UeXBl
KGNvbnN0IFN0cmluZyYgc3RyQXJnKTsKKyAgICB2aXJ0dWFsIGJvb2wgY2FsbGJhY2tXaXRoU2Vy
aWFsaXplZFNjcmlwdFZhbHVlUGFyYW0oUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4mJiBz
cnpQYXJhbSwgY29uc3QgU3RyaW5nJiBzdHJQYXJhbSk7CiAgICAgdmlydHVhbCBpbnQzMl90IGN1
c3RvbUNhbGxiYWNrKENsYXNzNSogY2xhc3M1UGFyYW0sIENsYXNzNiogY2xhc3M2UGFyYW0pOwog
ICAgIHZpcnR1YWwgYm9vbCBjYWxsYmFja1dpdGhTdHJpbmdMaXN0KERPTVN0cmluZ0xpc3QqIGxp
c3RQYXJhbSk7CiAgICAgdmlydHVhbCBib29sIGNhbGxiYWNrV2l0aEJvb2xlYW4oYm9vbCBib29s
UGFyYW0pOwogICAgIHZpcnR1YWwgYm9vbCBjYWxsYmFja1JlcXVpcmVzVGhpc1RvUGFzcyhpbnQz
Ml90IGxvbmdQYXJhbSwgVGVzdE5vZGUqIHRlc3ROb2RlUGFyYW0pOwogCiBwcml2YXRlOgotICAg
IEpTVGVzdENhbGxiYWNrKEpTQzo6SlNPYmplY3QqIGNhbGxiYWNrLCBKU0RPTUdsb2JhbE9iamVj
dCopOworICAgIEpTVGVzdENhbGxiYWNrSW50ZXJmYWNlKEpTQzo6SlNPYmplY3QqIGNhbGxiYWNr
LCBKU0RPTUdsb2JhbE9iamVjdCopOwogCiAgICAgSlNDYWxsYmFja0RhdGFTdHJvbmcqIG1fZGF0
YTsKIH07CiAKLUpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxP
YmplY3QqLCBUZXN0Q2FsbGJhY2smKTsKLWlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4
ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3RDYWxs
YmFjayogaW1wbCkgeyByZXR1cm4gaW1wbCA/IHRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgKmlt
cGwpIDogSlNDOjpqc051bGwoKTsgfQorSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUq
LCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3RDYWxsYmFja0ludGVyZmFjZSYpOworaW5saW5lIEpT
Qzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgVGVzdENhbGxiYWNrSW50ZXJmYWNlKiBpbXBsKSB7IHJldHVybiBpbXBs
ID8gdG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCAqaW1wbCkgOiBKU0M6OmpzTnVsbCgpOyB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAJKHJldmlzaW9uIDIwODM5
NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmou
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw4ICs0NCw4IEBACiAjaW5jbHVkZSAiSlNQcm9taXNl
LmgiCiAjaW5jbHVkZSAiSlNTVkdEb2N1bWVudC5oIgogI2luY2x1ZGUgIkpTU1ZHUG9pbnQuaCIK
LSNpbmNsdWRlICJKU1Rlc3RDYWxsYmFjay5oIgogI2luY2x1ZGUgIkpTVGVzdENhbGxiYWNrRnVu
Y3Rpb24uaCIKKyNpbmNsdWRlICJKU1Rlc3RDYWxsYmFja0ludGVyZmFjZS5oIgogI2luY2x1ZGUg
IkpTVGVzdEludGVyZmFjZS5oIgogI2luY2x1ZGUgIkpTVGVzdE5vZGUuaCIKICNpbmNsdWRlICJK
U1Rlc3RPYmouaCIKQEAgLTE0MDcsNyArMTQwNyw3IEBAIHRlbXBsYXRlPD4gRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCAKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhy
b3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBpZiAo
VU5MSUtFTFkoIXN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKS5pc09iamVjdCgpKSkKICAgICAg
ICAgcmV0dXJuIHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKCpzdGF0ZSwgdGhyb3dT
Y29wZSwgMCwgInRlc3RDYWxsYmFjayIsICJUZXN0T2JqZWN0IiwgbnVsbHB0cik7Ci0gICAgYXV0
byB0ZXN0Q2FsbGJhY2sgPSBKU1Rlc3RDYWxsYmFjazo6Y3JlYXRlKGFzT2JqZWN0KHN0YXRlLT51
bmNoZWNrZWRBcmd1bWVudCgwKSksIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKTsKKyAgICBh
dXRvIHRlc3RDYWxsYmFjayA9IEpTVGVzdENhbGxiYWNrSW50ZXJmYWNlOjpjcmVhdGUoYXNPYmpl
Y3Qoc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0
KCkpOwogICAgIGlmIChVTkxJS0VMWSghc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLmlzRnVu
Y3Rpb24oKSkpCiAgICAgICAgIHJldHVybiB0aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25FcnJv
cigqc3RhdGUsIHRocm93U2NvcGUsIDEsICJ0ZXN0Q2FsbGJhY2tGdW5jdGlvbiIsICJUZXN0T2Jq
ZWN0IiwgbnVsbHB0cik7CiAgICAgYXV0byB0ZXN0Q2FsbGJhY2tGdW5jdGlvbiA9IEpTVGVzdENh
bGxiYWNrRnVuY3Rpb246OmNyZWF0ZShhc09iamVjdChzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQo
MSkpLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSk7CkBAIC02MjkyLDcgKzYyOTIsNyBAQCBz
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0CiAgICAgICAgIHJldHVybiB0
aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vy
cm9yKHN0YXRlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQo
MCkuaXNPYmplY3QoKSkpCiAgICAgICAgIHJldHVybiB0aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rp
b25FcnJvcigqc3RhdGUsIHRocm93U2NvcGUsIDAsICJjYWxsYmFjayIsICJUZXN0T2JqZWN0Iiwg
Im1ldGhvZFdpdGhDYWxsYmFja0FyZyIpOwotICAgIGF1dG8gY2FsbGJhY2sgPSBKU1Rlc3RDYWxs
YmFjazo6Y3JlYXRlKGFzT2JqZWN0KHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSksIGNhc3Rl
ZFRoaXMtPmdsb2JhbE9iamVjdCgpKTsKKyAgICBhdXRvIGNhbGxiYWNrID0gSlNUZXN0Q2FsbGJh
Y2tJbnRlcmZhY2U6OmNyZWF0ZShhc09iamVjdChzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkp
LCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoQ2FsbGJh
Y2tBcmcoV1RGTW92ZShjYWxsYmFjaykpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiB9CkBAIC02MzE1LDcgKzYzMTUsNyBAQCBzdGF0aWMgaW5saW5lIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpZiAoVU5MSUtFTFkoIXN0YXRlLT51bmNoZWNrZWRB
cmd1bWVudCgxKS5pc09iamVjdCgpKSkKICAgICAgICAgcmV0dXJuIHRocm93QXJndW1lbnRNdXN0
QmVGdW5jdGlvbkVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgMSwgImNhbGxiYWNrIiwgIlRlc3RP
YmplY3QiLCAibWV0aG9kV2l0aE5vbkNhbGxiYWNrQXJnQW5kQ2FsbGJhY2tBcmciKTsKLSAgICBh
dXRvIGNhbGxiYWNrID0gSlNUZXN0Q2FsbGJhY2s6OmNyZWF0ZShhc09iamVjdChzdGF0ZS0+dW5j
aGVja2VkQXJndW1lbnQoMSkpLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSk7CisgICAgYXV0
byBjYWxsYmFjayA9IEpTVGVzdENhbGxiYWNrSW50ZXJmYWNlOjpjcmVhdGUoYXNPYmplY3Qoc3Rh
dGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpKSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkpOwog
ICAgIGltcGwubWV0aG9kV2l0aE5vbkNhbGxiYWNrQXJnQW5kQ2FsbGJhY2tBcmcoV1RGTW92ZShu
b25DYWxsYmFjayksIFdURk1vdmUoY2FsbGJhY2spKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogfQpAQCAtNjMzMiwxMSArNjMzMiwxMSBAQCBzdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsK
ICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPndyYXBwZWQoKTsKLSAgICBSZWZQdHI8VGVzdENhbGxiYWNrPiBjYWxsYmFjazsKKyAgICBS
ZWZQdHI8VGVzdENhbGxiYWNrSW50ZXJmYWNlPiBjYWxsYmFjazsKICAgICBpZiAoIXN0YXRlLT5h
cmd1bWVudCgwKS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7CiAgICAgICAgIGlmICghc3RhdGUtPnVu
Y2hlY2tlZEFyZ3VtZW50KDApLmlzT2JqZWN0KCkpCiAgICAgICAgICAgICByZXR1cm4gdGhyb3dB
cmd1bWVudE11c3RCZUZ1bmN0aW9uRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAwLCAiY2FsbGJh
Y2siLCAiVGVzdE9iamVjdCIsICJtZXRob2RXaXRoQ2FsbGJhY2tBbmRPcHRpb25hbEFyZyIpOwot
ICAgICAgICBjYWxsYmFjayA9IEpTVGVzdENhbGxiYWNrOjpjcmVhdGUoYXNPYmplY3Qoc3RhdGUt
PnVuY2hlY2tlZEFyZ3VtZW50KDApKSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkpOworICAg
ICAgICBjYWxsYmFjayA9IEpTVGVzdENhbGxiYWNrSW50ZXJmYWNlOjpjcmVhdGUoYXNPYmplY3Qo
c3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkp
OwogICAgIH0KICAgICBpbXBsLm1ldGhvZFdpdGhDYWxsYmFja0FuZE9wdGlvbmFsQXJnKFdURk1v
dmUoY2FsbGJhY2spKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwpAQCAtNjQxMywxMSArNjQxMywxMSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9iakNvCiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwotICAgIFJlZlB0cjxUZXN0Q2FsbGJhY2s+IGNhbGxiYWNrOworICAgIFJlZlB0cjxUZXN0Q2Fs
bGJhY2tJbnRlcmZhY2U+IGNhbGxiYWNrOwogICAgIGlmICghc3RhdGUtPmFyZ3VtZW50KDApLmlz
VW5kZWZpbmVkT3JOdWxsKCkpIHsKICAgICAgICAgaWYgKCFzdGF0ZS0+dW5jaGVja2VkQXJndW1l
bnQoMCkuaXNPYmplY3QoKSkKICAgICAgICAgICAgIHJldHVybiB0aHJvd0FyZ3VtZW50TXVzdEJl
RnVuY3Rpb25FcnJvcigqc3RhdGUsIHRocm93U2NvcGUsIDAsICJjYWxsYmFjayIsICJUZXN0T2Jq
ZWN0IiwgInN0YXRpY01ldGhvZFdpdGhDYWxsYmFja0FuZE9wdGlvbmFsQXJnIik7Ci0gICAgICAg
IGNhbGxiYWNrID0gY3JlYXRlRnVuY3Rpb25Pbmx5Q2FsbGJhY2s8SlNUZXN0Q2FsbGJhY2s+KHN0
YXRlLCBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpKSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICAgICAgY2FsbGJhY2sgPSBj
cmVhdGVGdW5jdGlvbk9ubHlDYWxsYmFjazxKU1Rlc3RDYWxsYmFja0ludGVyZmFjZT4oc3RhdGUs
IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkp
LCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwogICAgIH0KICAgICBUZXN0T2JqOjpzdGF0
aWNNZXRob2RXaXRoQ2FsbGJhY2tBbmRPcHRpb25hbEFyZyhXVEZNb3ZlKGNhbGxiYWNrKSk7CiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTY0MzIsNyArNjQz
Miw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqQ28KICAgICAgICAg
cmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJn
dW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBpZiAoVU5MSUtFTFkoIXN0YXRlLT51bmNoZWNrZWRB
cmd1bWVudCgwKS5pc09iamVjdCgpKSkKICAgICAgICAgcmV0dXJuIHRocm93QXJndW1lbnRNdXN0
QmVGdW5jdGlvbkVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgMCwgImNhbGxiYWNrIiwgIlRlc3RP
YmplY3QiLCAic3RhdGljTWV0aG9kV2l0aENhbGxiYWNrQXJnIik7Ci0gICAgYXV0byBjYWxsYmFj
ayA9IGNyZWF0ZUZ1bmN0aW9uT25seUNhbGxiYWNrPEpTVGVzdENhbGxiYWNrPihzdGF0ZSwganND
YXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSksIHN0
YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgYXV0byBjYWxsYmFjayA9IGNyZWF0ZUZ1
bmN0aW9uT25seUNhbGxiYWNrPEpTVGVzdENhbGxiYWNrSW50ZXJmYWNlPihzdGF0ZSwganNDYXN0
PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSksIHN0YXRl
LT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAgICAgVGVzdE9iajo6c3RhdGljTWV0aG9kV2l0aENh
bGxiYWNrQXJnKFdURk1vdmUoY2FsbGJhY2spKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogfQpAQCAtNjU5NCw3ICs2NTk0LDcgQEAgc3RhdGljIGlubGluZSBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdAogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0
YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwog
ICAgIGlmIChVTkxJS0VMWSghc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLmlzT2JqZWN0KCkp
KQogICAgICAgICByZXR1cm4gdGhyb3dBcmd1bWVudE11c3RCZUZ1bmN0aW9uRXJyb3IoKnN0YXRl
LCB0aHJvd1Njb3BlLCAwLCAiY2FsbGJhY2siLCAiVGVzdE9iamVjdCIsICJvdmVybG9hZGVkTWV0
aG9kIik7Ci0gICAgYXV0byBjYWxsYmFjayA9IEpTVGVzdENhbGxiYWNrOjpjcmVhdGUoYXNPYmpl
Y3Qoc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0
KCkpOworICAgIGF1dG8gY2FsbGJhY2sgPSBKU1Rlc3RDYWxsYmFja0ludGVyZmFjZTo6Y3JlYXRl
KGFzT2JqZWN0KHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSksIGNhc3RlZFRoaXMtPmdsb2Jh
bE9iamVjdCgpKTsKICAgICBpbXBsLm92ZXJsb2FkZWRNZXRob2QoV1RGTW92ZShjYWxsYmFjaykp
OwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CkBAIC02Nzcy
LDcgKzY3NzIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAg
ICAgICAgICAgICByZXR1cm4ganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0
aG9kMihzdGF0ZSk7CiAgICAgICAgIGlmIChkaXN0aW5ndWlzaGluZ0FyZy5pc09iamVjdCgpICYm
IGFzT2JqZWN0KGRpc3Rpbmd1aXNoaW5nQXJnKS0+aW5oZXJpdHMoSlNUZXN0T2JqOjppbmZvKCkp
KQogICAgICAgICAgICAgcmV0dXJuIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRl
ZE1ldGhvZDIoc3RhdGUpOwotICAgICAgICBpZiAoZGlzdGluZ3Vpc2hpbmdBcmcuaXNPYmplY3Qo
KSAmJiBhc09iamVjdChkaXN0aW5ndWlzaGluZ0FyZyktPmluaGVyaXRzKEpTVGVzdENhbGxiYWNr
OjppbmZvKCkpKQorICAgICAgICBpZiAoZGlzdGluZ3Vpc2hpbmdBcmcuaXNPYmplY3QoKSAmJiBh
c09iamVjdChkaXN0aW5ndWlzaGluZ0FyZyktPmluaGVyaXRzKEpTVGVzdENhbGxiYWNrSW50ZXJm
YWNlOjppbmZvKCkpKQogICAgICAgICAgICAgcmV0dXJuIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uT3ZlcmxvYWRlZE1ldGhvZDUoc3RhdGUpOwogICAgICAgICBpZiAoZGlzdGluZ3Vpc2hpbmdB
cmcuaXNPYmplY3QoKSAmJiBhc09iamVjdChkaXN0aW5ndWlzaGluZ0FyZyktPmluaGVyaXRzKEpT
RE9NU3RyaW5nTGlzdDo6aW5mbygpKSkKICAgICAgICAgICAgIHJldHVybiBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Q2KHN0YXRlKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVk
ZWZzLmNwcAkocmV2aXNpb24gMjA4Mzk2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyAr
MjYsOCBAQAogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJKU0RPTUNv
bnZlcnQuaCIKICNpbmNsdWRlICJKU1NWR1BvaW50LmgiCi0jaW5jbHVkZSAiSlNUZXN0Q2FsbGJh
Y2suaCIKKyNpbmNsdWRlICJKU1Rlc3RDYWxsYmFja0Z1bmN0aW9uLmgiCisjaW5jbHVkZSAiSlNU
ZXN0Q2FsbGJhY2tJbnRlcmZhY2UuaCIKICNpbmNsdWRlICJKU1Rlc3RFdmVudFRhcmdldC5oIgog
I2luY2x1ZGUgIkpTVGVzdFN1Yk9iai5oIgogI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZS5oIgpAQCAtMTMwLDE0ICsxMzEsMTcgQEAgdGVtcGxhdGU8PiBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIAogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvKiBjYXN0
ZWRUaGlzID0ganNDYXN0PEpTVGVzdFR5cGVkZWZzQ29uc3RydWN0b3IqPihzdGF0ZS0+Y2FsbGVl
KCkpOwogICAgIEFTU0VSVChjYXN0ZWRUaGlzKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFy
Z3VtZW50Q291bnQoKSA8IDIpKQorICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3Vu
dCgpIDwgMykpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUs
IGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBoZWxsbyA9
IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgw
KSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7CiAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICBpZiAoVU5MSUtF
TFkoIXN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgxKS5pc09iamVjdCgpKSkKLSAgICAgICAgcmV0
dXJuIHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwg
MSwgInRlc3RDYWxsYmFjayIsICJUZXN0VHlwZWRlZnMiLCBudWxscHRyKTsKLSAgICBhdXRvIHRl
c3RDYWxsYmFjayA9IEpTVGVzdENhbGxiYWNrOjpjcmVhdGUoYXNPYmplY3Qoc3RhdGUtPnVuY2hl
Y2tlZEFyZ3VtZW50KDEpKSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkpOwotICAgIGF1dG8g
b2JqZWN0ID0gVGVzdFR5cGVkZWZzOjpjcmVhdGUoV1RGTW92ZShoZWxsbyksIFdURk1vdmUodGVz
dENhbGxiYWNrKSk7CisgICAgaWYgKFVOTElLRUxZKCFzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQo
MSkuaXNGdW5jdGlvbigpKSkKKyAgICAgICAgcmV0dXJuIHRocm93QXJndW1lbnRNdXN0QmVGdW5j
dGlvbkVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgMSwgInRlc3RDYWxsYmFja0Z1bmN0aW9uIiwg
IlRlc3RUeXBlZGVmcyIsIG51bGxwdHIpOworICAgIGF1dG8gdGVzdENhbGxiYWNrRnVuY3Rpb24g
PSBKU1Rlc3RDYWxsYmFja0Z1bmN0aW9uOjpjcmVhdGUoYXNPYmplY3Qoc3RhdGUtPnVuY2hlY2tl
ZEFyZ3VtZW50KDEpKSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkpOworICAgIGlmIChVTkxJ
S0VMWSghc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDIpLmlzT2JqZWN0KCkpKQorICAgICAgICBy
ZXR1cm4gdGhyb3dBcmd1bWVudE11c3RCZUZ1bmN0aW9uRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3Bl
LCAyLCAidGVzdENhbGxiYWNrSW50ZXJmYWNlIiwgIlRlc3RUeXBlZGVmcyIsIG51bGxwdHIpOwor
ICAgIGF1dG8gdGVzdENhbGxiYWNrSW50ZXJmYWNlID0gSlNUZXN0Q2FsbGJhY2tJbnRlcmZhY2U6
OmNyZWF0ZShhc09iamVjdChzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMikpLCBjYXN0ZWRUaGlz
LT5nbG9iYWxPYmplY3QoKSk7CisgICAgYXV0byBvYmplY3QgPSBUZXN0VHlwZWRlZnM6OmNyZWF0
ZShXVEZNb3ZlKGhlbGxvKSwgV1RGTW92ZSh0ZXN0Q2FsbGJhY2tGdW5jdGlvbiksIFdURk1vdmUo
dGVzdENhbGxiYWNrSW50ZXJmYWNlKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pT
TmV3bHlDcmVhdGVkKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGTW92ZShv
YmplY3QpKSk7CiB9CiAKQEAgLTE1MSw3ICsxNTUsNyBAQCB0ZW1wbGF0ZTw+IHZvaWQgSlNUZXN0
VHlwZWRlZnNDb25zdHJ1Y3RvCiB7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVz
LT5wcm90b3R5cGUsIEpTVGVzdFR5cGVkZWZzOjpwcm90b3R5cGUodm0sICZnbG9iYWxPYmplY3Qp
LCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBEb250RW51bSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2
bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcoJnZtLCBTdHJpbmcoQVND
SUlMaXRlcmFsKCJUZXN0VHlwZWRlZnMiKSkpLCBSZWFkT25seSB8IERvbnRFbnVtKTsKLSAgICBw
dXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMiksIFJlYWRP
bmx5IHwgRG9udEVudW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVu
Z3RoLCBqc051bWJlcigzKSwgUmVhZE9ubHkgfCBEb250RW51bSk7CiAgICAgcmVpZnlTdGF0aWNQ
cm9wZXJ0aWVzKHZtLCBKU1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yVGFibGVWYWx1ZXMsICp0aGlz
KTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlMaXN0TGlzdGVuZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeUxpc3RMaXN0ZW5l
ci5oCShyZXZpc2lvbiAyMDgzOTYpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeUxp
c3RMaXN0ZW5lci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBAIHB1YmxpYzoKICAg
ICAgICAgSlNNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyVHlwZQogICAgIH07CiAKLSAgICB2aXJ0dWFs
IGJvb2wgcXVlcnlDaGFuZ2VkKE1lZGlhUXVlcnlMaXN0KikgPSAwOworICAgIHZpcnR1YWwgYm9v
bCBoYW5kbGVFdmVudChNZWRpYVF1ZXJ5TGlzdCopID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyJikgY29uc3QgPSAwOwogICAgIHZp
cnR1YWwgfk1lZGlhUXVlcnlMaXN0TGlzdGVuZXIoKSB7IH0KIApJbmRleDogU291cmNlL1dlYkNv
cmUvY3NzL01lZGlhUXVlcnlMaXN0TGlzdGVuZXIuaWRsCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmlkbAkocmV2aXNpb24gMjA4Mzk2KQor
KysgU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlMaXN0TGlzdGVuZXIuaWRsCSh3b3JraW5n
IGNvcHkpCkBAIC0xOCw4ICsxOCw2IEBACiAgKi8KIAogWwotICAgIENhbGxiYWNrTmVlZHNPcGVy
YXRvckVxdWFsLAotICAgIENhbGxiYWNrPUZ1bmN0aW9uT25seSwKLV0gY2FsbGJhY2sgaW50ZXJm
YWNlIE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIgewotICAgIGJvb2xlYW4gcXVlcnlDaGFuZ2VkKG9w
dGlvbmFsIE1lZGlhUXVlcnlMaXN0PyBsaXN0ID0gbnVsbCk7Ci19OworICAgIENhbGxiYWNrTmVl
ZHNPcGVyYXRvckVxdWFsCitdIGNhbGxiYWNrIE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIgPSB2b2lk
IChvcHRpb25hbCBNZWRpYVF1ZXJ5TGlzdD8gbGlzdCA9IG51bGwpOworCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9jc3MvTWVkaWFRdWVyeU1hdGNoZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5TWF0Y2hlci5jcHAJKHJldmlzaW9uIDIwODM5NikKKysrIFNv
dXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5TWF0Y2hlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEyNyw3ICsxMjcsNyBAQCB2b2lkIE1lZGlhUXVlcnlNYXRjaGVyOjpzdHlsZVJlc29sdmVyQ2hh
CiAgICAgICAgIGJvb2wgbm90aWZ5OwogICAgICAgICBsaXN0ZW5lci5xdWVyeS0+ZXZhbHVhdGUo
ZXZhbHVhdG9yLCBub3RpZnkpOwogICAgICAgICBpZiAobm90aWZ5KQotICAgICAgICAgICAgbGlz
dGVuZXIubGlzdGVuZXItPnF1ZXJ5Q2hhbmdlZChsaXN0ZW5lci5xdWVyeS5wdHIoKSk7CisgICAg
ICAgICAgICBsaXN0ZW5lci5saXN0ZW5lci0+aGFuZGxlRXZlbnQobGlzdGVuZXIucXVlcnkucHRy
KCkpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1JlcXVlc3RBbmltYXRp
b25GcmFtZUNhbGxiYWNrLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vUmVx
dWVzdEFuaW1hdGlvbkZyYW1lQ2FsbGJhY2suaWRsCShyZXZpc2lvbiAyMDgzOTYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9kb20vUmVxdWVzdEFuaW1hdGlvbkZyYW1lQ2FsbGJhY2suaWRsCSh3b3JraW5n
IGNvcHkpCkBAIC0yOCwxMSArMjgsOSBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCisvLyBoaWdo
UmVzVGltZSBpcyBwYXNzZWQgYXMgaGlnaCByZXNvbHV0aW9uIHRpbWVzdGFtcCwgc2VlCisvLyBo
dHRwOi8vd3d3LnczLm9yZy9UUi9oci10aW1lLyBmb3IgZGV0YWlscy4KKwogWwogICAgIENvbmRp
dGlvbmFsPVJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FLAotICAgIENhbGxiYWNrPUZ1bmN0aW9uT25s
eSwKLV0gY2FsbGJhY2sgaW50ZXJmYWNlIFJlcXVlc3RBbmltYXRpb25GcmFtZUNhbGxiYWNrIHsK
LSAgICAvLyBoaWdoUmVzVGltZSBpcyBwYXNzZWQgYXMgaGlnaCByZXNvbHV0aW9uIHRpbWVzdGFt
cCwgc2VlCi0gICAgLy8gaHR0cDovL3d3dy53My5vcmcvVFIvaHItdGltZS8gZm9yIGRldGFpbHMu
Ci0gICAgYm9vbGVhbiBoYW5kbGVFdmVudCh1bnJlc3RyaWN0ZWQgZG91YmxlIGhpZ2hSZXNUaW1l
KTsKLX07CitdIGNhbGxiYWNrIFJlcXVlc3RBbmltYXRpb25GcmFtZUNhbGxiYWNrID0gdm9pZCAo
dW5yZXN0cmljdGVkIGRvdWJsZSBoaWdoUmVzVGltZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9k
b20vU3RyaW5nQ2FsbGJhY2suaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9T
dHJpbmdDYWxsYmFjay5pZGwJKHJldmlzaW9uIDIwODM5NikKKysrIFNvdXJjZS9XZWJDb3JlL2Rv
bS9TdHJpbmdDYWxsYmFjay5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTI4LDggKzI4LDQgQEAKICAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCiAgKi8KIAotWwotICAgIENhbGxiYWNrPUZ1bmN0aW9uT25seSwKLV0gY2Fs
bGJhY2sgaW50ZXJmYWNlIFN0cmluZ0NhbGxiYWNrIHsKLSAgICBib29sZWFuIGhhbmRsZUV2ZW50
KERPTVN0cmluZyBkYXRhKTsKLX07CitjYWxsYmFjayBTdHJpbmdDYWxsYmFjayA9IHZvaWQgKERP
TVN0cmluZyBkYXRhKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvVm9pZENhbGxiYWNrLmlk
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL1ZvaWRDYWxsYmFjay5pZGwJKHJl
dmlzaW9uIDIwODM5NikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvVm9pZENhbGxiYWNrLmlkbAko
d29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIsNSBAQAogICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCiAgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKICAqLwotWwotICAgIENhbGxiYWNrPUZ1bmN0aW9uT25seSwKLV0gY2FsbGJhY2sg
aW50ZXJmYWNlIFZvaWRDYWxsYmFjayB7Ci0gICAgYm9vbGVhbiBoYW5kbGVFdmVudCgpOwotfTsK
KworY2FsbGJhY2sgVm9pZENhbGxiYWNrID0gdm9pZCAoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvSW50ZXJzZWN0aW9uT2JzZXJ2ZXJDYWxsYmFjay5pZGwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGFnZS9JbnRlcnNlY3Rpb25PYnNlcnZlckNhbGxiYWNrLmlkbAkocmV2aXNp
b24gMjA4Mzk2KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9JbnRlcnNlY3Rpb25PYnNlcnZlckNh
bGxiYWNrLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMjYsOCArMjYsNSBAQAogLy8gaHR0cHM6Ly93
aWNnLmdpdGh1Yi5pby9JbnRlcnNlY3Rpb25PYnNlcnZlci8KIAogWwotICAgIENvbmRpdGlvbmFs
PUlOVEVSU0VDVElPTl9PQlNFUlZFUiwKLSAgICBDYWxsYmFjaz1GdW5jdGlvbk9ubHksCi1dIGNh
bGxiYWNrIGludGVyZmFjZSBJbnRlcnNlY3Rpb25PYnNlcnZlckNhbGxiYWNrIHsKLSAgICBib29s
ZWFuIGhhbmRsZUV2ZW50KHNlcXVlbmNlPEludGVyc2VjdGlvbk9ic2VydmVyRW50cnk+IGVudHJp
ZXMsIEludGVyc2VjdGlvbk9ic2VydmVyIG9ic2VydmVyKTsKLX07CisgICAgQ29uZGl0aW9uYWw9
SU5URVJTRUNUSU9OX09CU0VSVkVSCitdIGNhbGxiYWNrIEludGVyc2VjdGlvbk9ic2VydmVyQ2Fs
bGJhY2sgPSB2b2lkIChzZXF1ZW5jZTxJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5PiBlbnRyaWVz
LCBJbnRlcnNlY3Rpb25PYnNlcnZlciBvYnNlcnZlcik7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>