<?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>38167</bug_id>
          
          <creation_ts>2010-04-26 21:31:19 -0700</creation_ts>
          <short_desc>Add testing infrastructure for JSC bindings generator</short_desc>
          <delta_ts>2010-04-27 14:25:07 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</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="Adam Barth">abarth</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>eric</cc>
    
    <cc>yaar</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>217497</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-04-26 21:31:19 -0700</bug_when>
    <thetext>Add testing infrastructure for JSC bindings generator</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>217498</commentid>
    <comment_count>1</comment_count>
      <attachid>54379</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-04-26 21:33:34 -0700</bug_when>
    <thetext>Created attachment 54379
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>217501</commentid>
    <comment_count>2</comment_count>
      <attachid>54379</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-04-26 21:42:12 -0700</bug_when>
    <thetext>Comment on attachment 54379
Patch

WebCore/ChangeLog:67
 +          * bindings/scripts/test/V8/V8TestObj.cpp: Renamed from WebCore/bindings/scripts/test/V8TestObj.cpp.
It&apos;s unclear to me why these moved from v8/test to test/v8.  Seems slightly silly.

WebCore/bindings/scripts/test/JS/JSTestObj.cpp:6
 +      modify it under the terms of the GNU Library General Public
Why are we generating LGPL code?  Also seems silly.  But that&apos;s something to fix later.

WebKitTools/Scripts/run-bindings-tests:46
 +             # place holder for defines (generate-bindings.pl requirement)
This comment is no longer valid.

WebKitTools/Scripts/run-bindings-tests:118
 +          # FIXME: Add ObjC
COM too?  Or did we kill COM?

WebKitTools/Scripts/run-bindings-tests:123
 +              os.path.join(&apos;WebCore&apos;, &apos;bindings&apos;, &apos;scripts&apos;, &apos;test&apos;), # Input dir
I would have put the big joins into little local vars first.

Looks OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>217503</commentid>
    <comment_count>3</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-04-26 21:50:05 -0700</bug_when>
    <thetext>Comments addressed and landed in r58288</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54379</attachid>
            <date>2010-04-26 21:33:34 -0700</date>
            <delta_ts>2010-04-26 21:42:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-38167-20100426213332.patch</filename>
            <type>text/plain</type>
            <size>43308</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MDgzNzMxYmM5OTNiYjFmZmY3OGRmNDBlZjdjMDllY2YxM2Y4NjgwMC4uMzRhYmYyYjM3NzQ0MTg3
ODk5N2IxMTk4NGViZGQxMGNkNWQ4YWVjNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsNSArMSwxMTQgQEAKIDIwMTAtMDQtMjYgIEFk
YW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KIAorICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgdGVzdGluZyBpbmZyYXN0cnVjdHVyZSBmb3IgSlND
IGJpbmRpbmdzIGdlbmVyYXRvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MzgxNjcKKworICAgICAgICBUaGlzIHJlcXVpcmVkIG1vdmluZyB0aGUgdGVz
dCBmaWxlcyBhcm91bmQgYSBiaXQgbW9yZS4KKworICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RPYmouY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oik6CisgICAg
ICAgIChXZWJDb3JlOjpKU1Rlc3RPYmpDb25zdHJ1Y3Rvcjo6SlNUZXN0T2JqQ29uc3RydWN0b3Ip
OgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0T2JqQ29uc3RydWN0b3I6OmNsYXNzSW5mbyk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3RPYmpDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKToK
KyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE9iakNvbnN0cnVjdG9yOjpnZXRPd25Qcm9wZXJ0eVNs
b3QpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0T2JqQ29uc3RydWN0b3I6OmdldE93blByb3Bl
cnR5RGVzY3JpcHRvcik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RPYmpQcm90b3R5cGU6OnNl
bGYpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0T2JqUHJvdG90eXBlOjpnZXRPd25Qcm9wZXJ0
eVNsb3QpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0T2JqUHJvdG90eXBlOjpnZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3IpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0T2JqOjpKU1Rlc3RPYmop
OgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0T2JqOjp+SlNUZXN0T2JqKToKKyAgICAgICAgKFdl
YkNvcmU6OkpTVGVzdE9iajo6Y3JlYXRlUHJvdG90eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkpT
VGVzdE9iajo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE9i
ajo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9i
alJlYWRPbmx5SW50QXR0cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpSZWFkT25seVN0
cmluZ0F0dHIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUmVhZE9ubHlUZXN0T2JqQXR0
cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpJbnRBdHRyKToKKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdE9ialN0cmluZ0F0dHIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqVGVz
dE9iakF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqQXR0cldpdGhFeGNlcHRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6anNUZXN0T2JqQ3VzdG9tQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpq
c1Rlc3RPYmpDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RPYmo6OnB1dCk6
CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpJbnRBdHRyKToKKyAgICAgICAgKFdlYkNv
cmU6OnNldEpTVGVzdE9ialN0cmluZ0F0dHIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0
T2JqVGVzdE9iakF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqQXR0cldpdGhF
eGNlcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqQXR0cldpdGhTZXR0ZXJF
eGNlcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqQXR0cldpdGhHZXR0ZXJF
eGNlcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqQ3VzdG9tQXR0cik6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3RPYmo6OmdldENvbnN0cnVjdG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVm9pZE1ldGhvZCk6CisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblZvaWRNZXRob2RXaXRoQXJncyk6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkludE1ldGhvZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkludE1ldGhvZFdpdGhB
cmdzKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT2JqTWV0
aG9kKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT2JqTWV0
aG9kV2l0aEFyZ3MpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25NZXRob2RXaXRoRXhjZXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uQ3VzdG9tTWV0aG9kKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uQ3VzdG9tTWV0aG9kV2l0aEFyZ3MpOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBcmcpOgorICAgICAg
ICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9uT3B0aW9u
YWxBcmdBbmRPcHRpb25hbEFyZyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZFR3b09wdGlvbmFsQXJncyk6Cisg
ICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKFdlYkNvcmU6OnRvVGVzdE9iaik6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkpTVGVzdE9iajo6Y2xhc3NJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTVGVzdE9iajo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE9i
ajo6aW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RPYmpQcm90b3R5cGU6OmNsYXNzSW5m
byk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RPYmpQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVy
ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RPYmpQcm90b3R5cGU6OkpTVGVzdE9ialByb3Rv
dHlwZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsOgorICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwOiBSZW5hbWVkIGZy
b20gV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjhUZXN0T2JqLmNwcC4KKyAgICAgICAg
KFdlYkNvcmU6Oik6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqSW50ZXJuYWw6OlY4X1VTRSk6
CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqSW50ZXJuYWw6OnJlYWRPbmx5SW50QXR0ckF0dHJH
ZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9iakludGVybmFsOjpyZWFkT25seVN0cmlu
Z0F0dHJBdHRyR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpJbnRlcm5hbDo6cmVh
ZE9ubHlUZXN0T2JqQXR0ckF0dHJHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9iaklu
dGVybmFsOjppbnRBdHRyQXR0ckdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqSW50
ZXJuYWw6OmludEF0dHJBdHRyU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpJbnRl
cm5hbDo6c3RyaW5nQXR0ckF0dHJHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9iaklu
dGVybmFsOjpzdHJpbmdBdHRyQXR0clNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2Jq
SW50ZXJuYWw6OnRlc3RPYmpBdHRyQXR0ckdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXN0
T2JqSW50ZXJuYWw6OnRlc3RPYmpBdHRyQXR0clNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpU
ZXN0T2JqSW50ZXJuYWw6OmF0dHJXaXRoRXhjZXB0aW9uQXR0ckdldHRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpUZXN0T2JqSW50ZXJuYWw6OmF0dHJXaXRoRXhjZXB0aW9uQXR0clNldHRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXN0T2JqSW50ZXJuYWw6OmF0dHJXaXRoU2V0dGVyRXhjZXB0aW9u
QXR0ckdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqSW50ZXJuYWw6OmF0dHJXaXRo
U2V0dGVyRXhjZXB0aW9uQXR0clNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqSW50
ZXJuYWw6OmF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uQXR0ckdldHRlcik6CisgICAgICAgIChXZWJD
b3JlOjpUZXN0T2JqSW50ZXJuYWw6OmF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uQXR0clNldHRlcik6
CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqSW50ZXJuYWw6OnZvaWRNZXRob2RDYWxsYmFjayk6
CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqSW50ZXJuYWw6OnZvaWRNZXRob2RXaXRoQXJnc0Nh
bGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpJbnRlcm5hbDo6aW50TWV0aG9kQ2Fs
bGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9iakludGVybmFsOjppbnRNZXRob2RXaXRo
QXJnc0NhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpJbnRlcm5hbDo6b2JqTWV0
aG9kQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9iakludGVybmFsOjpvYmpNZXRo
b2RXaXRoQXJnc0NhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpJbnRlcm5hbDo6
bWV0aG9kV2l0aEV4Y2VwdGlvbkNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpJ
bnRlcm5hbDo6bWV0aG9kV2l0aE9wdGlvbmFsQXJnQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29y
ZTo6VGVzdE9iakludGVybmFsOjptZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRPcHRpb25hbEFy
Z0NhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpJbnRlcm5hbDo6bWV0aG9kV2l0
aE5vbk9wdGlvbmFsQXJnQW5kVHdvT3B0aW9uYWxBcmdzQ2FsbGJhY2spOgorICAgICAgICAoV2Vi
Q29yZTo6VGVzdE9iakludGVybmFsOjpvdmVybG9hZGVkTWV0aG9kMUNhbGxiYWNrKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRlc3RPYmpJbnRlcm5hbDo6b3ZlcmxvYWRlZE1ldGhvZDJDYWxsYmFjayk6
CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqSW50ZXJuYWw6Om92ZXJsb2FkZWRNZXRob2QzQ2Fs
bGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9iakludGVybmFsOjpvdmVybG9hZGVkTWV0
aG9kNENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpJbnRlcm5hbDo6b3Zlcmxv
YWRlZE1ldGhvZENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbmZpZ3VyZVY4VGVzdE9i
alRlbXBsYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4VGVzdE9iajo6R2V0UmF3VGVtcGxhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0T2JqOjpHZXRUZW1wbGF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpWOFRlc3RPYmo6OnRvTmF0aXZlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4VGVzdE9i
ajo6SGFzSW5zdGFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0T2JqOjp3cmFwKToKKyAg
ICAgICAgKFdlYkNvcmU6OnRvVjgpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0T2JqOjpkZXJl
Zk9iamVjdCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5o
OiBSZW5hbWVkIGZyb20gV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjhUZXN0T2JqLmgu
CisKKzIwMTAtMDQtMjYgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KKwogICAgICAg
ICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KIAogICAgICAgICBNb3ZlIGJpbmRpbmdzIHRlc3Qg
ZGlyZWN0b3J5IGludG8gdGhlIHNjcmlwdHMgZGlyZWN0b3J5CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwIGIvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NmJkOTFhMDM4Yzgz
MjNlMDQ2NzUyZDlhOGRkN2E2MDI4NDI0MzJlCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcApAQCAtMCwwICsxLDUyNCBAQAor
LyoKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2pl
Y3QuCisgICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5n
cy5wbC4gRE8gTk9UIE1PRElGWSEKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
SlNUZXN0T2JqLmgiCisKKyNpbmNsdWRlICJKU1Rlc3RPYmouaCIKKyNpbmNsdWRlICJLVVJMLmgi
CisjaW5jbHVkZSAiVGVzdE9iai5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KKyNpbmNs
dWRlIDxydW50aW1lL0pTTnVtYmVyQ2VsbC5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNTdHJpbmcu
aD4KKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworQVNTRVJUX0NMQVNTX0ZJVFNfSU5fQ0VMTChKU1Rlc3RPYmop
OworCisvKiBIYXNoIHRhYmxlICovCisKK3N0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rl
c3RPYmpUYWJsZVZhbHVlc1sxMl0gPQoreworICAgIHsgInJlYWRPbmx5SW50QXR0ciIsIERvbnRE
ZWxldGV8UmVhZE9ubHksIChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZh
bHVlRnVuYz4oanNUZXN0T2JqUmVhZE9ubHlJbnRBdHRyKSwgKGludHB0cl90KTAgfSwKKyAgICB7
ICJyZWFkT25seVN0cmluZ0F0dHIiLCBEb250RGVsZXRlfFJlYWRPbmx5LCAoaW50cHRyX3Qpc3Rh
dGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdE9ialJlYWRPbmx5U3Ry
aW5nQXR0ciksIChpbnRwdHJfdCkwIH0sCisgICAgeyAicmVhZE9ubHlUZXN0T2JqQXR0ciIsIERv
bnREZWxldGV8UmVhZE9ubHksIChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6Okdl
dFZhbHVlRnVuYz4oanNUZXN0T2JqUmVhZE9ubHlUZXN0T2JqQXR0ciksIChpbnRwdHJfdCkwIH0s
CisgICAgeyAiaW50QXR0ciIsIERvbnREZWxldGUsIChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9w
ZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0T2JqSW50QXR0ciksIChpbnRwdHJfdClzZXRK
U1Rlc3RPYmpJbnRBdHRyIH0sCisgICAgeyAic3RyaW5nQXR0ciIsIERvbnREZWxldGUsIChpbnRw
dHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0T2JqU3Ry
aW5nQXR0ciksIChpbnRwdHJfdClzZXRKU1Rlc3RPYmpTdHJpbmdBdHRyIH0sCisgICAgeyAidGVz
dE9iakF0dHIiLCBEb250RGVsZXRlLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90
OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdE9ialRlc3RPYmpBdHRyKSwgKGludHB0cl90KXNldEpTVGVz
dE9ialRlc3RPYmpBdHRyIH0sCisgICAgeyAiYXR0cldpdGhFeGNlcHRpb24iLCBEb250RGVsZXRl
LCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVz
dE9iakF0dHJXaXRoRXhjZXB0aW9uKSwgKGludHB0cl90KXNldEpTVGVzdE9iakF0dHJXaXRoRXhj
ZXB0aW9uIH0sCisgICAgeyAiYXR0cldpdGhTZXR0ZXJFeGNlcHRpb24iLCBEb250RGVsZXRlLCAo
aW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdE9i
akF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKSwgKGludHB0cl90KXNldEpTVGVzdE9iakF0dHJXaXRo
U2V0dGVyRXhjZXB0aW9uIH0sCisgICAgeyAiYXR0cldpdGhHZXR0ZXJFeGNlcHRpb24iLCBEb250
RGVsZXRlLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+
KGpzVGVzdE9iakF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKSwgKGludHB0cl90KXNldEpTVGVzdE9i
akF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uIH0sCisgICAgeyAiY3VzdG9tQXR0ciIsIERvbnREZWxl
dGUsIChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNU
ZXN0T2JqQ3VzdG9tQXR0ciksIChpbnRwdHJfdClzZXRKU1Rlc3RPYmpDdXN0b21BdHRyIH0sCisg
ICAgeyAiY29uc3RydWN0b3IiLCBEb250RW51bXxSZWFkT25seSwgKGludHB0cl90KXN0YXRpY19j
YXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RPYmpDb25zdHJ1Y3RvciksIChp
bnRwdHJfdCkwIH0sCisgICAgeyAwLCAwLCAwLCAwIH0KK307CisKK3N0YXRpYyBKU0NfQ09OU1Rf
SEFTSFRBQkxFIEhhc2hUYWJsZSBKU1Rlc3RPYmpUYWJsZSA9CisjaWYgRU5BQkxFKFBFUkZFQ1Rf
SEFTSF9TSVpFKQorICAgIHsgMTI3LCBKU1Rlc3RPYmpUYWJsZVZhbHVlcywgMCB9OworI2Vsc2UK
KyAgICB7IDM0LCAzMSwgSlNUZXN0T2JqVGFibGVWYWx1ZXMsIDAgfTsKKyNlbmRpZgorCisvKiBI
YXNoIHRhYmxlIGZvciBjb25zdHJ1Y3RvciAqLworCitzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFs
dWUgSlNUZXN0T2JqQ29uc3RydWN0b3JUYWJsZVZhbHVlc1sxXSA9Cit7CisgICAgeyAwLCAwLCAw
LCAwIH0KK307CisKK3N0YXRpYyBKU0NfQ09OU1RfSEFTSFRBQkxFIEhhc2hUYWJsZSBKU1Rlc3RP
YmpDb25zdHJ1Y3RvclRhYmxlID0KKyNpZiBFTkFCTEUoUEVSRkVDVF9IQVNIX1NJWkUpCisgICAg
eyAwLCBKU1Rlc3RPYmpDb25zdHJ1Y3RvclRhYmxlVmFsdWVzLCAwIH07CisjZWxzZQorICAgIHsg
MSwgMCwgSlNUZXN0T2JqQ29uc3RydWN0b3JUYWJsZVZhbHVlcywgMCB9OworI2VuZGlmCisKK2Ns
YXNzIEpTVGVzdE9iakNvbnN0cnVjdG9yIDogcHVibGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsK
K3B1YmxpYzoKKyAgICBKU1Rlc3RPYmpDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpTRE9N
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCisgICAgICAgIDogRE9NQ29uc3RydWN0b3JPYmpl
Y3QoSlNUZXN0T2JqQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShnbG9iYWxPYmplY3QtPm9i
amVjdFByb3RvdHlwZSgpKSwgZ2xvYmFsT2JqZWN0KQorICAgIHsKKyAgICAgICAgcHV0RGlyZWN0
KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIEpTVGVzdE9ialByb3RvdHlwZTo6c2Vs
ZihleGVjLCBnbG9iYWxPYmplY3QpLCBOb25lKTsKKyAgICB9CisgICAgdmlydHVhbCBib29sIGdl
dE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlT
bG90Jik7CisgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihFeGVjU3Rh
dGUqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlEZXNjcmlwdG9yJik7CisgICAgdmlydHVh
bCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZzX2luZm87IH0K
KyAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKKworICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFN0cnVjdHVyZT4gY3JlYXRlU3RydWN0dXJlKEpTVmFsdWUgcHJvdG8pIAorICAgIHsgCisg
ICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShwcm90bywgVHlwZUluZm8oT2JqZWN0VHlw
ZSwgU3RydWN0dXJlRmxhZ3MpLCBBbm9ueW1vdXNTbG90Q291bnQpOyAKKyAgICB9CisgICAgCitw
cm90ZWN0ZWQ6CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3Zl
cnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSW1wbGVtZW50c0hhc0luc3RhbmNlIHwgRE9NQ29u
c3RydWN0b3JPYmplY3Q6OlN0cnVjdHVyZUZsYWdzOworfTsKKworY29uc3QgQ2xhc3NJbmZvIEpT
VGVzdE9iakNvbnN0cnVjdG9yOjpzX2luZm8gPSB7ICJUZXN0T2JqQ29uc3RydWN0b3IiLCAwLCAm
SlNUZXN0T2JqQ29uc3RydWN0b3JUYWJsZSwgMCB9OworCitib29sIEpTVGVzdE9iakNvbnN0cnVj
dG9yOjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICByZXR1cm4gZ2V0U3Rh
dGljVmFsdWVTbG90PEpTVGVzdE9iakNvbnN0cnVjdG9yLCBET01PYmplY3Q+KGV4ZWMsICZKU1Rl
c3RPYmpDb25zdHJ1Y3RvclRhYmxlLCB0aGlzLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOworfQorCiti
b29sIEpTVGVzdE9iakNvbnN0cnVjdG9yOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3Jp
cHRvciYgZGVzY3JpcHRvcikKK3sKKyAgICByZXR1cm4gZ2V0U3RhdGljVmFsdWVEZXNjcmlwdG9y
PEpTVGVzdE9iakNvbnN0cnVjdG9yLCBET01PYmplY3Q+KGV4ZWMsICZKU1Rlc3RPYmpDb25zdHJ1
Y3RvclRhYmxlLCB0aGlzLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOworfQorCisvKiBIYXNo
IHRhYmxlIGZvciBwcm90b3R5cGUgKi8KKworc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpT
VGVzdE9ialByb3RvdHlwZVRhYmxlVmFsdWVzWzEzXSA9Cit7CisgICAgeyAidm9pZE1ldGhvZCIs
IERvbnREZWxldGV8RnVuY3Rpb24sIChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlv
bj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Wb2lkTWV0aG9kKSwgKGludHB0cl90KTAgfSwK
KyAgICB7ICJ2b2lkTWV0aG9kV2l0aEFyZ3MiLCBEb250RGVsZXRlfEZ1bmN0aW9uLCAoaW50cHRy
X3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
Vm9pZE1ldGhvZFdpdGhBcmdzKSwgKGludHB0cl90KTMgfSwKKyAgICB7ICJpbnRNZXRob2QiLCBE
b250RGVsZXRlfEZ1bmN0aW9uLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+
KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uSW50TWV0aG9kKSwgKGludHB0cl90KTAgfSwKKyAg
ICB7ICJpbnRNZXRob2RXaXRoQXJncyIsIERvbnREZWxldGV8RnVuY3Rpb24sIChpbnRwdHJfdClz
dGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25JbnRN
ZXRob2RXaXRoQXJncyksIChpbnRwdHJfdCkzIH0sCisgICAgeyAib2JqTWV0aG9kIiwgRG9udERl
bGV0ZXxGdW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk9iak1ldGhvZCksIChpbnRwdHJfdCkwIH0sCisgICAgeyAi
b2JqTWV0aG9kV2l0aEFyZ3MiLCBEb250RGVsZXRlfEZ1bmN0aW9uLCAoaW50cHRyX3Qpc3RhdGlj
X2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT2JqTWV0aG9k
V2l0aEFyZ3MpLCAoaW50cHRyX3QpMyB9LAorICAgIHsgIm1ldGhvZFdpdGhFeGNlcHRpb24iLCBE
b250RGVsZXRlfEZ1bmN0aW9uLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+
KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEV4Y2VwdGlvbiksIChpbnRwdHJf
dCkwIH0sCisgICAgeyAiY3VzdG9tTWV0aG9kIiwgRG9udERlbGV0ZXxGdW5jdGlvbiwgKGludHB0
cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bkN1c3RvbU1ldGhvZCksIChpbnRwdHJfdCkwIH0sCisgICAgeyAiY3VzdG9tTWV0aG9kV2l0aEFy
Z3MiLCBEb250RGVsZXRlfEZ1bmN0aW9uLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVu
Y3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ3VzdG9tTWV0aG9kV2l0aEFyZ3MpLCAo
aW50cHRyX3QpMyB9LAorICAgIHsgIm1ldGhvZFdpdGhPcHRpb25hbEFyZyIsIERvbnREZWxldGV8
RnVuY3Rpb24sIChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBcmcpLCAoaW50cHRyX3QpMSB9LAor
ICAgIHsgIm1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZE9wdGlvbmFsQXJnIiwgRG9udERlbGV0
ZXxGdW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZE9wdGlvbmFsQXJn
KSwgKGludHB0cl90KTIgfSwKKyAgICB7ICJtZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRUd29P
cHRpb25hbEFyZ3MiLCBEb250RGVsZXRlfEZ1bmN0aW9uLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8
TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE5vbk9w
dGlvbmFsQXJnQW5kVHdvT3B0aW9uYWxBcmdzKSwgKGludHB0cl90KTMgfSwKKyAgICB7IDAsIDAs
IDAsIDAgfQorfTsKKworc3RhdGljIEpTQ19DT05TVF9IQVNIVEFCTEUgSGFzaFRhYmxlIEpTVGVz
dE9ialByb3RvdHlwZVRhYmxlID0KKyNpZiBFTkFCTEUoUEVSRkVDVF9IQVNIX1NJWkUpCisgICAg
eyAyMDQ3LCBKU1Rlc3RPYmpQcm90b3R5cGVUYWJsZVZhbHVlcywgMCB9OworI2Vsc2UKKyAgICB7
IDM1LCAzMSwgSlNUZXN0T2JqUHJvdG90eXBlVGFibGVWYWx1ZXMsIDAgfTsKKyNlbmRpZgorCitj
b25zdCBDbGFzc0luZm8gSlNUZXN0T2JqUHJvdG90eXBlOjpzX2luZm8gPSB7ICJUZXN0T2JqUHJv
dG90eXBlIiwgMCwgJkpTVGVzdE9ialByb3RvdHlwZVRhYmxlLCAwIH07CisKK0pTT2JqZWN0KiBK
U1Rlc3RPYmpQcm90b3R5cGU6OnNlbGYoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNUZXN0T2JqPihl
eGVjLCBnbG9iYWxPYmplY3QpOworfQorCitib29sIEpTVGVzdE9ialByb3RvdHlwZTo6Z2V0T3du
UHJvcGVydHlTbG90KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlO
YW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgcmV0dXJuIGdldFN0YXRpY0Z1bmN0aW9u
U2xvdDxKU09iamVjdD4oZXhlYywgJkpTVGVzdE9ialByb3RvdHlwZVRhYmxlLCB0aGlzLCBwcm9w
ZXJ0eU5hbWUsIHNsb3QpOworfQorCitib29sIEpTVGVzdE9ialByb3RvdHlwZTo6Z2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCit7CisgICAgcmV0dXJuIGdl
dFN0YXRpY0Z1bmN0aW9uRGVzY3JpcHRvcjxKU09iamVjdD4oZXhlYywgJkpTVGVzdE9ialByb3Rv
dHlwZVRhYmxlLCB0aGlzLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOworfQorCitjb25zdCBD
bGFzc0luZm8gSlNUZXN0T2JqOjpzX2luZm8gPSB7ICJUZXN0T2JqIiwgMCwgJkpTVGVzdE9ialRh
YmxlLCAwIH07CisKK0pTVGVzdE9iajo6SlNUZXN0T2JqKE5vbk51bGxQYXNzUmVmUHRyPFN0cnVj
dHVyZT4gc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVm
UHRyPFRlc3RPYmo+IGltcGwpCisgICAgOiBET01PYmplY3RXaXRoR2xvYmFsUG9pbnRlcihzdHJ1
Y3R1cmUsIGdsb2JhbE9iamVjdCkKKyAgICAsIG1faW1wbChpbXBsKQoreworfQorCitKU1Rlc3RP
Ymo6On5KU1Rlc3RPYmooKQoreworICAgIGZvcmdldERPTU9iamVjdCh0aGlzLCBpbXBsKCkpOwor
fQorCitKU09iamVjdCogSlNUZXN0T2JqOjpjcmVhdGVQcm90b3R5cGUoRXhlY1N0YXRlKiBleGVj
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBuZXcgKGV4ZWMp
IEpTVGVzdE9ialByb3RvdHlwZShKU1Rlc3RPYmpQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShn
bG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpKSk7Cit9CisKK2Jvb2wgSlNUZXN0T2JqOjpn
ZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICByZXR1cm4gZ2V0U3RhdGljVmFs
dWVTbG90PEpTVGVzdE9iaiwgQmFzZT4oZXhlYywgJkpTVGVzdE9ialRhYmxlLCB0aGlzLCBwcm9w
ZXJ0eU5hbWUsIHNsb3QpOworfQorCitib29sIEpTVGVzdE9iajo6Z2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQ
cm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCit7CisgICAgcmV0dXJuIGdldFN0YXRpY1Zh
bHVlRGVzY3JpcHRvcjxKU1Rlc3RPYmosIEJhc2U+KGV4ZWMsICZKU1Rlc3RPYmpUYWJsZSwgdGhp
cywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RPYmpSZWFk
T25seUludEF0dHIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHNsb3RCYXNlLCBjb25zdCBJZGVu
dGlmaWVyJikKK3sKKyAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rl
c3RPYmoqPihhc09iamVjdChzbG90QmFzZSkpOworICAgIFVOVVNFRF9QQVJBTShleGVjKTsKKyAg
ICBUZXN0T2JqKiBpbXAgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgp
KTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGV4ZWMsIGltcC0+cmVhZE9ubHlJbnRB
dHRyKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0pTVmFsdWUganNUZXN0T2JqUmVhZE9u
bHlTdHJpbmdBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBzbG90QmFzZSwgY29uc3QgSWRl
bnRpZmllciYpCit7CisgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNU
ZXN0T2JqKj4oYXNPYmplY3Qoc2xvdEJhc2UpKTsKKyAgICBVTlVTRURfUEFSQU0oZXhlYyk7Cisg
ICAgVGVzdE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwo
KSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZyhleGVjLCBpbXAtPnJlYWRPbmx5U3Ry
aW5nQXR0cigpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitKU1ZhbHVlIGpzVGVzdE9ialJl
YWRPbmx5VGVzdE9iakF0dHIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHNsb3RCYXNlLCBjb25z
dCBJZGVudGlmaWVyJikKK3sKKyAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2Fz
dDxKU1Rlc3RPYmoqPihhc09iamVjdChzbG90QmFzZSkpOworICAgIFVOVVNFRF9QQVJBTShleGVj
KTsKKyAgICBUZXN0T2JqKiBpbXAgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+
aW1wbCgpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoZXhlYywgY2FzdGVkVGhpcy0+Z2xv
YmFsT2JqZWN0KCksIFdURjo6Z2V0UHRyKGltcC0+cmVhZE9ubHlUZXN0T2JqQXR0cigpKSk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworSlNWYWx1ZSBqc1Rlc3RPYmpJbnRBdHRyKEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZSBzbG90QmFzZSwgY29uc3QgSWRlbnRpZmllciYpCit7CisgICAgSlNU
ZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3Qoc2xv
dEJhc2UpKTsKKyAgICBVTlVTRURfUEFSQU0oZXhlYyk7CisgICAgVGVzdE9iaiogaW1wID0gc3Rh
dGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7CisgICAgSlNWYWx1ZSByZXN1
bHQgPSBqc051bWJlcihleGVjLCBpbXAtPmludEF0dHIoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKworSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSBzbG90QmFzZSwgY29uc3QgSWRlbnRpZmllciYpCit7CisgICAgSlNUZXN0T2JqKiBjYXN0ZWRU
aGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3Qoc2xvdEJhc2UpKTsKKyAgICBV
TlVTRURfUEFSQU0oZXhlYyk7CisgICAgVGVzdE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9i
aio+KGNhc3RlZFRoaXMtPmltcGwoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZyhl
eGVjLCBpbXAtPnN0cmluZ0F0dHIoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworSlNWYWx1
ZSBqc1Rlc3RPYmpUZXN0T2JqQXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgc2xvdEJhc2Us
IGNvbnN0IElkZW50aWZpZXImKQoreworICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRp
Y19jYXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0KHNsb3RCYXNlKSk7CisgICAgVU5VU0VEX1BBUkFN
KGV4ZWMpOworICAgIFRlc3RPYmoqIGltcCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRU
aGlzLT5pbXBsKCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhleGVjLCBjYXN0ZWRUaGlz
LT5nbG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQdHIoaW1wLT50ZXN0T2JqQXR0cigpKSk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworSlNWYWx1ZSBqc1Rlc3RPYmpBdHRyV2l0aEV4Y2VwdGlvbihF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgc2xvdEJhc2UsIGNvbnN0IElkZW50aWZpZXImKQorewor
ICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+KGFzT2Jq
ZWN0KHNsb3RCYXNlKSk7CisgICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFRlc3RPYmoqIGlt
cCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOworICAgIEpTVmFs
dWUgcmVzdWx0ID0ganNOdW1iZXIoZXhlYywgaW1wLT5hdHRyV2l0aEV4Y2VwdGlvbigpKTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCitKU1ZhbHVlIGpzVGVzdE9iakF0dHJXaXRoU2V0dGVyRXhj
ZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBzbG90QmFzZSwgY29uc3QgSWRlbnRpZmll
ciYpCit7CisgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2Jq
Kj4oYXNPYmplY3Qoc2xvdEJhc2UpKTsKKyAgICBVTlVTRURfUEFSQU0oZXhlYyk7CisgICAgVGVz
dE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7Cisg
ICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihleGVjLCBpbXAtPmF0dHJXaXRoU2V0dGVyRXhj
ZXB0aW9uKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0pTVmFsdWUganNUZXN0T2JqQXR0
cldpdGhHZXR0ZXJFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHNsb3RCYXNlLCBj
b25zdCBJZGVudGlmaWVyJikKK3sKKyAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNf
Y2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdChzbG90QmFzZSkpOworICAgIFVOVVNFRF9QQVJBTShl
eGVjKTsKKyAgICBUZXN0T2JqKiBpbXAgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhp
cy0+aW1wbCgpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGV4ZWMsIGltcC0+YXR0
cldpdGhHZXR0ZXJFeGNlcHRpb24oKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworSlNWYWx1
ZSBqc1Rlc3RPYmpDdXN0b21BdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBzbG90QmFzZSwg
Y29uc3QgSWRlbnRpZmllciYpCit7CisgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGlj
X2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3Qoc2xvdEJhc2UpKTsKKyAgICByZXR1cm4gY2FzdGVk
VGhpcy0+Y3VzdG9tQXR0cihleGVjKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3Rv
cihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgc2xvdEJhc2UsIGNvbnN0IElkZW50aWZpZXImKQor
eworICAgIEpTVGVzdE9iaiogZG9tT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNP
YmplY3Qoc2xvdEJhc2UpKTsKKyAgICByZXR1cm4gSlNUZXN0T2JqOjpnZXRDb25zdHJ1Y3Rvcihl
eGVjLCBkb21PYmplY3QtPmdsb2JhbE9iamVjdCgpKTsKK30KK3ZvaWQgSlNUZXN0T2JqOjpwdXQo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUg
dmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBsb29rdXBQdXQ8SlNUZXN0T2Jq
LCBCYXNlPihleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCAmSlNUZXN0T2JqVGFibGUsIHRoaXMs
IHNsb3QpOworfQorCit2b2lkIHNldEpTVGVzdE9iakludEF0dHIoRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCogdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBKU1Rlc3RPYmoqIGNh
c3RlZFRoaXNPYmogPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoqPih0aGlzT2JqZWN0KTsKKyAgICBU
ZXN0T2JqKiBpbXAgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpc09iai0+aW1wbCgp
KTsKKyAgICBpbXAtPnNldEludEF0dHIodmFsdWUudG9JbnQzMihleGVjKSk7Cit9CisKK3ZvaWQg
c2V0SlNUZXN0T2JqU3RyaW5nQXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2Jq
ZWN0LCBKU1ZhbHVlIHZhbHVlKQoreworICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpc09iaiA9IHN0
YXRpY19jYXN0PEpTVGVzdE9iaio+KHRoaXNPYmplY3QpOworICAgIFRlc3RPYmoqIGltcCA9IHN0
YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzT2JqLT5pbXBsKCkpOworICAgIGltcC0+c2V0
U3RyaW5nQXR0cih1c3RyaW5nVG9TdHJpbmcodmFsdWUudG9TdHJpbmcoZXhlYykpKTsKK30KKwor
dm9pZCBzZXRKU1Rlc3RPYmpUZXN0T2JqQXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0
aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQoreworICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpc09i
aiA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+KHRoaXNPYmplY3QpOworICAgIFRlc3RPYmoqIGlt
cCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzT2JqLT5pbXBsKCkpOworICAgIGlt
cC0+c2V0VGVzdE9iakF0dHIodG9UZXN0T2JqKHZhbHVlKSk7Cit9CisKK3ZvaWQgc2V0SlNUZXN0
T2JqQXR0cldpdGhFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iamVj
dCwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXNPYmogPSBzdGF0
aWNfY2FzdDxKU1Rlc3RPYmoqPih0aGlzT2JqZWN0KTsKKyAgICBUZXN0T2JqKiBpbXAgPSBzdGF0
aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpc09iai0+aW1wbCgpKTsKKyAgICBpbXAtPnNldEF0
dHJXaXRoRXhjZXB0aW9uKHZhbHVlLnRvSW50MzIoZXhlYykpOworfQorCit2b2lkIHNldEpTVGVz
dE9iakF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRo
aXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzT2Jq
ID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4odGhpc09iamVjdCk7CisgICAgVGVzdE9iaiogaW1w
ID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXNPYmotPmltcGwoKSk7CisgICAgaW1w
LT5zZXRBdHRyV2l0aFNldHRlckV4Y2VwdGlvbih2YWx1ZS50b0ludDMyKGV4ZWMpKTsKK30KKwor
dm9pZCBzZXRKU1Rlc3RPYmpBdHRyV2l0aEdldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQoreworICAgIEpTVGVzdE9iaiog
Y2FzdGVkVGhpc09iaiA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+KHRoaXNPYmplY3QpOworICAg
IFRlc3RPYmoqIGltcCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzT2JqLT5pbXBs
KCkpOworICAgIGltcC0+c2V0QXR0cldpdGhHZXR0ZXJFeGNlcHRpb24odmFsdWUudG9JbnQzMihl
eGVjKSk7Cit9CisKK3ZvaWQgc2V0SlNUZXN0T2JqQ3VzdG9tQXR0cihFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQoreworICAgIHN0YXRpY19jYXN0
PEpTVGVzdE9iaio+KHRoaXNPYmplY3QpLT5zZXRDdXN0b21BdHRyKGV4ZWMsIHZhbHVlKTsKK30K
KworSlNWYWx1ZSBKU1Rlc3RPYmo6OmdldENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0
b3I8SlNUZXN0T2JqQ29uc3RydWN0b3I+KGV4ZWMsIHN0YXRpY19jYXN0PEpTRE9NR2xvYmFsT2Jq
ZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7Cit9CisKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvblZvaWRNZXRob2QoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCos
IEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQoreworICAgIFVOVVNFRF9Q
QVJBTShhcmdzKTsKKyAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmSlNUZXN0T2JqOjpzX2lu
Zm8pKQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOworICAgIEpT
VGVzdE9iaiogY2FzdGVkVGhpc09iaiA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0
KHRoaXNWYWx1ZSkpOworICAgIFRlc3RPYmoqIGltcCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihj
YXN0ZWRUaGlzT2JqLT5pbXBsKCkpOworCisgICAgaW1wLT52b2lkTWV0aG9kKCk7CisgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7Cit9CisKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvblZvaWRNZXRob2RXaXRoQXJncyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCit7CisgICAgVU5V
U0VEX1BBUkFNKGFyZ3MpOworICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCZKU1Rlc3RPYmo6
OnNfaW5mbykpCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7Cisg
ICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzT2JqID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNP
YmplY3QodGhpc1ZhbHVlKSk7CisgICAgVGVzdE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9i
aio+KGNhc3RlZFRoaXNPYmotPmltcGwoKSk7CisgICAgaW50IGludEFyZyA9IGFyZ3MuYXQoMCku
dG9JbnQzMihleGVjKTsKKyAgICBjb25zdCBTdHJpbmcmIHN0ckFyZyA9IHVzdHJpbmdUb1N0cmlu
ZyhhcmdzLmF0KDEpLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICBUZXN0T2JqKiBvYmpBcmcgPSB0b1Rl
c3RPYmooYXJncy5hdCgyKSk7CisKKyAgICBpbXAtPnZvaWRNZXRob2RXaXRoQXJncyhpbnRBcmcs
IHN0ckFyZywgb2JqQXJnKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKK30KKworSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uSW50TWV0aG9kKEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYg
YXJncykKK3sKKyAgICBVTlVTRURfUEFSQU0oYXJncyk7CisgICAgaWYgKCF0aGlzVmFsdWUuaW5o
ZXJpdHMoJkpTVGVzdE9iajo6c19pbmZvKSkKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhl
YywgVHlwZUVycm9yKTsKKyAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXNPYmogPSBzdGF0aWNfY2Fz
dDxKU1Rlc3RPYmoqPihhc09iamVjdCh0aGlzVmFsdWUpKTsKKyAgICBUZXN0T2JqKiBpbXAgPSBz
dGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpc09iai0+aW1wbCgpKTsKKworCisgICAgSlND
OjpKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGV4ZWMsIGltcC0+aW50TWV0aG9kKCkpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbkludE1ldGhvZFdpdGhBcmdzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qq
LCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK3sKKyAgICBVTlVTRURf
UEFSQU0oYXJncyk7CisgICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJkpTVGVzdE9iajo6c19p
bmZvKSkKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKKyAgICBK
U1Rlc3RPYmoqIGNhc3RlZFRoaXNPYmogPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoqPihhc09iamVj
dCh0aGlzVmFsdWUpKTsKKyAgICBUZXN0T2JqKiBpbXAgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4o
Y2FzdGVkVGhpc09iai0+aW1wbCgpKTsKKyAgICBpbnQgaW50QXJnID0gYXJncy5hdCgwKS50b0lu
dDMyKGV4ZWMpOworICAgIGNvbnN0IFN0cmluZyYgc3RyQXJnID0gdXN0cmluZ1RvU3RyaW5nKGFy
Z3MuYXQoMSkudG9TdHJpbmcoZXhlYykpOworICAgIFRlc3RPYmoqIG9iakFyZyA9IHRvVGVzdE9i
aihhcmdzLmF0KDIpKTsKKworCisgICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGV4
ZWMsIGltcC0+aW50TWV0aG9kV2l0aEFyZ3MoaW50QXJnLCBzdHJBcmcsIG9iakFyZykpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk9iak1ldGhvZChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1
ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCit7CisgICAgVU5VU0VEX1BBUkFNKGFy
Z3MpOworICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCZKU1Rlc3RPYmo6OnNfaW5mbykpCisg
ICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CisgICAgSlNUZXN0T2Jq
KiBjYXN0ZWRUaGlzT2JqID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3QodGhpc1Zh
bHVlKSk7CisgICAgVGVzdE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRo
aXNPYmotPmltcGwoKSk7CisKKworICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQgPSB0b0pTKGV4ZWMs
IGNhc3RlZFRoaXNPYmotPmdsb2JhbE9iamVjdCgpLCBXVEY6OmdldFB0cihpbXAtPm9iak1ldGhv
ZCgpKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT2JqTWV0aG9kV2l0aEFyZ3MoRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorewor
ICAgIFVOVVNFRF9QQVJBTShhcmdzKTsKKyAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmSlNU
ZXN0T2JqOjpzX2luZm8pKQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJy
b3IpOworICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpc09iaiA9IHN0YXRpY19jYXN0PEpTVGVzdE9i
aio+KGFzT2JqZWN0KHRoaXNWYWx1ZSkpOworICAgIFRlc3RPYmoqIGltcCA9IHN0YXRpY19jYXN0
PFRlc3RPYmoqPihjYXN0ZWRUaGlzT2JqLT5pbXBsKCkpOworICAgIGludCBpbnRBcmcgPSBhcmdz
LmF0KDApLnRvSW50MzIoZXhlYyk7CisgICAgY29uc3QgU3RyaW5nJiBzdHJBcmcgPSB1c3RyaW5n
VG9TdHJpbmcoYXJncy5hdCgxKS50b1N0cmluZyhleGVjKSk7CisgICAgVGVzdE9iaiogb2JqQXJn
ID0gdG9UZXN0T2JqKGFyZ3MuYXQoMikpOworCisKKyAgICBKU0M6OkpTVmFsdWUgcmVzdWx0ID0g
dG9KUyhleGVjLCBjYXN0ZWRUaGlzT2JqLT5nbG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQdHIoaW1w
LT5vYmpNZXRob2RXaXRoQXJncyhpbnRBcmcsIHN0ckFyZywgb2JqQXJnKSkpOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk1ldGhvZFdpdGhFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpT
VmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQoreworICAgIFVOVVNFRF9QQVJB
TShhcmdzKTsKKyAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmSlNUZXN0T2JqOjpzX2luZm8p
KQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOworICAgIEpTVGVz
dE9iaiogY2FzdGVkVGhpc09iaiA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0KHRo
aXNWYWx1ZSkpOworICAgIFRlc3RPYmoqIGltcCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0
ZWRUaGlzT2JqLT5pbXBsKCkpOworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworCisgICAgaW1w
LT5tZXRob2RXaXRoRXhjZXB0aW9uKGVjKTsKKyAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMp
OworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworfQorCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25DdXN0b21NZXRob2QoRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQoreworICAg
IFVOVVNFRF9QQVJBTShhcmdzKTsKKyAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmSlNUZXN0
T2JqOjpzX2luZm8pKQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3Ip
OworICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpc09iaiA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+
KGFzT2JqZWN0KHRoaXNWYWx1ZSkpOworICAgIHJldHVybiBjYXN0ZWRUaGlzT2JqLT5jdXN0b21N
ZXRob2QoZXhlYywgYXJncyk7Cit9CisKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbkN1c3RvbU1ldGhvZFdpdGhBcmdzKEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK3sKKyAgICBV
TlVTRURfUEFSQU0oYXJncyk7CisgICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJkpTVGVzdE9i
ajo6c19pbmZvKSkKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsK
KyAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXNPYmogPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoqPihh
c09iamVjdCh0aGlzVmFsdWUpKTsKKyAgICByZXR1cm4gY2FzdGVkVGhpc09iai0+Y3VzdG9tTWV0
aG9kV2l0aEFyZ3MoZXhlYywgYXJncyk7Cit9CisKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEFyZyhFeGVjU3RhdGUqIGV4
ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCit7
CisgICAgVU5VU0VEX1BBUkFNKGFyZ3MpOworICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCZK
U1Rlc3RPYmo6OnNfaW5mbykpCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVF
cnJvcik7CisgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzT2JqID0gc3RhdGljX2Nhc3Q8SlNUZXN0
T2JqKj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7CisgICAgVGVzdE9iaiogaW1wID0gc3RhdGljX2Nh
c3Q8VGVzdE9iaio+KGNhc3RlZFRoaXNPYmotPmltcGwoKSk7CisKKyAgICBpbnQgYXJnc0NvdW50
ID0gYXJncy5zaXplKCk7CisgICAgaWYgKGFyZ3NDb3VudCA8IDEpIHsKKyAgICAgICAgaW1wLT5t
ZXRob2RXaXRoT3B0aW9uYWxBcmcoKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Cisg
ICAgfQorCisgICAgaW50IG9wdCA9IGFyZ3MuYXQoMCkudG9JbnQzMihleGVjKTsKKworICAgIGlt
cC0+bWV0aG9kV2l0aE9wdGlvbmFsQXJnKG9wdCk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
Cit9CisKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1l
dGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZE9wdGlvbmFsQXJnKEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK3sKKyAgICBV
TlVTRURfUEFSQU0oYXJncyk7CisgICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJkpTVGVzdE9i
ajo6c19pbmZvKSkKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsK
KyAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXNPYmogPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoqPihh
c09iamVjdCh0aGlzVmFsdWUpKTsKKyAgICBUZXN0T2JqKiBpbXAgPSBzdGF0aWNfY2FzdDxUZXN0
T2JqKj4oY2FzdGVkVGhpc09iai0+aW1wbCgpKTsKKyAgICBpbnQgbm9uT3B0ID0gYXJncy5hdCgw
KS50b0ludDMyKGV4ZWMpOworCisgICAgaW50IGFyZ3NDb3VudCA9IGFyZ3Muc2l6ZSgpOworICAg
IGlmIChhcmdzQ291bnQgPCAyKSB7CisgICAgICAgIGltcC0+bWV0aG9kV2l0aE5vbk9wdGlvbmFs
QXJnQW5kT3B0aW9uYWxBcmcobm9uT3B0KTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CisgICAgfQorCisgICAgaW50IG9wdCA9IGFyZ3MuYXQoMSkudG9JbnQzMihleGVjKTsKKworICAg
IGltcC0+bWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kT3B0aW9uYWxBcmcobm9uT3B0LCBvcHQp
OworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworfQorCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRUd29P
cHRpb25hbEFyZ3MoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVl
LCBjb25zdCBBcmdMaXN0JiBhcmdzKQoreworICAgIFVOVVNFRF9QQVJBTShhcmdzKTsKKyAgICBp
ZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmSlNUZXN0T2JqOjpzX2luZm8pKQorICAgICAgICByZXR1
cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOworICAgIEpTVGVzdE9iaiogY2FzdGVkVGhp
c09iaiA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0KHRoaXNWYWx1ZSkpOworICAg
IFRlc3RPYmoqIGltcCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzT2JqLT5pbXBs
KCkpOworICAgIGludCBub25PcHQgPSBhcmdzLmF0KDApLnRvSW50MzIoZXhlYyk7CisKKyAgICBp
bnQgYXJnc0NvdW50ID0gYXJncy5zaXplKCk7CisgICAgaWYgKGFyZ3NDb3VudCA8IDIpIHsKKyAg
ICAgICAgaW1wLT5tZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRUd29PcHRpb25hbEFyZ3Mobm9u
T3B0KTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfQorCisgICAgaW50IG9w
dDEgPSBhcmdzLmF0KDEpLnRvSW50MzIoZXhlYyk7CisgICAgaWYgKGFyZ3NDb3VudCA8IDMpIHsK
KyAgICAgICAgaW1wLT5tZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRUd29PcHRpb25hbEFyZ3Mo
bm9uT3B0LCBvcHQxKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfQorCisg
ICAgaW50IG9wdDIgPSBhcmdzLmF0KDIpLnRvSW50MzIoZXhlYyk7CisKKyAgICBpbXAtPm1ldGhv
ZFdpdGhOb25PcHRpb25hbEFyZ0FuZFR3b09wdGlvbmFsQXJncyhub25PcHQsIG9wdDEsIG9wdDIp
OworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworfQorCitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6
OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdE9i
aiogb2JqZWN0KQoreworICAgIHJldHVybiBnZXRET01PYmplY3RXcmFwcGVyPEpTVGVzdE9iaj4o
ZXhlYywgZ2xvYmFsT2JqZWN0LCBvYmplY3QpOworfQorVGVzdE9iaiogdG9UZXN0T2JqKEpTQzo6
SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdmFsdWUuaW5oZXJpdHMoJkpTVGVzdE9iajo6
c19pbmZvKSA/IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0KHZhbHVlKSktPmltcGwo
KSA6IDA7Cit9CisKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE9iai5oIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
T2JqLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZTc0MTc4Zjk3OWFhNjBiMmRhOWRjZThiNmNhZGU2NDRhZDJhMDJk
MQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE9iai5oCkBAIC0wLDAgKzEsMTIzIEBACisvKgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9m
IHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAgICBUaGlzIGZpbGUgaGFzIGJlZW4g
Z2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorCisgICAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
ICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNp
Zm5kZWYgSlNUZXN0T2JqX2gKKyNkZWZpbmUgSlNUZXN0T2JqX2gKKworI2luY2x1ZGUgIkpTRE9N
QmluZGluZy5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaD4KKyNpbmNsdWRl
IDxydW50aW1lL09iamVjdFByb3RvdHlwZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIFRlc3RPYmo7CisKK2NsYXNzIEpTVGVzdE9iaiA6IHB1YmxpYyBET01PYmplY3RXaXRoR2xv
YmFsUG9pbnRlciB7CisgICAgdHlwZWRlZiBET01PYmplY3RXaXRoR2xvYmFsUG9pbnRlciBCYXNl
OworcHVibGljOgorICAgIEpTVGVzdE9iaihOb25OdWxsUGFzc1JlZlB0cjxKU0M6OlN0cnVjdHVy
ZT4sIEpTRE9NR2xvYmFsT2JqZWN0KiwgUGFzc1JlZlB0cjxUZXN0T2JqPik7CisgICAgdmlydHVh
bCB+SlNUZXN0T2JqKCk7CisgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGNyZWF0ZVByb3RvdHlw
ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKKyAgICB2aXJ0dWFsIGJv
b2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlm
aWVyJiBwcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CisgICAgdmlydHVhbCBib29s
IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRl
bnRpZmllciYgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYpOworICAgIHZp
cnR1YWwgdm9pZCBwdXQoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImIHBy
b3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBKU0M6OlB1dFByb3BlcnR5U2xvdCYpOworICAgIHZp
cnR1YWwgY29uc3QgSlNDOjpDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZz
X2luZm87IH0KKyAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOworCisgICAg
c3RhdGljIFBhc3NSZWZQdHI8SlNDOjpTdHJ1Y3R1cmU+IGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpT
VmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpj
cmVhdGUocHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJl
RmxhZ3MpLCBBbm9ueW1vdXNTbG90Q291bnQpOworICAgIH0KKworICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTR2xvYmFsT2JqZWN0
Kik7CisKKyAgICAvLyBDdXN0b20gYXR0cmlidXRlcworICAgIEpTQzo6SlNWYWx1ZSBjdXN0b21B
dHRyKEpTQzo6RXhlY1N0YXRlKikgY29uc3Q7CisgICAgdm9pZCBzZXRDdXN0b21BdHRyKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlKTsKKworICAgIC8vIEN1c3RvbSBmdW5jdGlvbnMKKyAg
ICBKU0M6OkpTVmFsdWUgY3VzdG9tTWV0aG9kKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpB
cmdMaXN0Jik7CisgICAgSlNDOjpKU1ZhbHVlIGN1c3RvbU1ldGhvZFdpdGhBcmdzKEpTQzo6RXhl
Y1N0YXRlKiwgY29uc3QgSlNDOjpBcmdMaXN0Jik7CisgICAgVGVzdE9iaiogaW1wbCgpIGNvbnN0
IHsgcmV0dXJuIG1faW1wbC5nZXQoKTsgfQorCitwcml2YXRlOgorICAgIFJlZlB0cjxUZXN0T2Jq
PiBtX2ltcGw7Citwcm90ZWN0ZWQ6CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVy
ZUZsYWdzID0gSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBCYXNlOjpTdHJ1Y3R1
cmVGbGFnczsKK307CisKK0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01H
bG9iYWxPYmplY3QqLCBUZXN0T2JqKik7CitUZXN0T2JqKiB0b1Rlc3RPYmooSlNDOjpKU1ZhbHVl
KTsKKworY2xhc3MgSlNUZXN0T2JqUHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNPYmplY3Qgewor
ICAgIHR5cGVkZWYgSlNDOjpKU09iamVjdCBCYXNlOworcHVibGljOgorICAgIHN0YXRpYyBKU0M6
OkpTT2JqZWN0KiBzZWxmKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOwor
ICAgIHZpcnR1YWwgY29uc3QgSlNDOjpDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0
dXJuICZzX2luZm87IH0KKyAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOwor
ICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpFeGVjU3RhdGUqLCBjb25z
dCBKU0M6OklkZW50aWZpZXImLCBKU0M6OlByb3BlcnR5U2xvdCYpOworICAgIHZpcnR1YWwgYm9v
bCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6Oklk
ZW50aWZpZXImLCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYpOworICAgIHN0YXRpYyBQYXNzUmVm
UHRyPEpTQzo6U3RydWN0dXJlPiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpKU1ZhbHVlIHByb3RvdHlw
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHByb3RvdHlw
ZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgQW5vbnlt
b3VzU2xvdENvdW50KTsKKyAgICB9CisgICAgSlNUZXN0T2JqUHJvdG90eXBlKE5vbk51bGxQYXNz
UmVmUHRyPEpTQzo6U3RydWN0dXJlPiBzdHJ1Y3R1cmUpIDogSlNDOjpKU09iamVjdChzdHJ1Y3R1
cmUpIHsgfQorcHJvdGVjdGVkOgorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgQmFzZTo6U3RydWN0dXJl
RmxhZ3M7Cit9OworCisvLyBGdW5jdGlvbnMKKworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Wb2lkTWV0aG9kKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpKU09iamVjdCosIEpTQzo6SlNWYWx1ZSwgY29uc3QgSlNDOjpBcmdMaXN0Jik7CitKU0M6OkpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblZvaWRNZXRob2RX
aXRoQXJncyhKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTVmFsdWUsIGNv
bnN0IEpTQzo6QXJnTGlzdCYpOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25JbnRNZXRob2QoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0
KiwgSlNDOjpKU1ZhbHVlLCBjb25zdCBKU0M6OkFyZ0xpc3QmKTsKK0pTQzo6SlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uSW50TWV0aG9kV2l0aEFyZ3MoSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU1ZhbHVlLCBjb25zdCBKU0M6OkFy
Z0xpc3QmKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uT2JqTWV0aG9kKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCosIEpTQzo6SlNW
YWx1ZSwgY29uc3QgSlNDOjpBcmdMaXN0Jik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9iak1ldGhvZFdpdGhBcmdzKEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpKU09iamVjdCosIEpTQzo6SlNWYWx1ZSwgY29uc3QgSlNDOjpBcmdMaXN0Jik7CitK
U0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhv
ZFdpdGhFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU1Zh
bHVlLCBjb25zdCBKU0M6OkFyZ0xpc3QmKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ3VzdG9tTWV0aG9kKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpKU09iamVjdCosIEpTQzo6SlNWYWx1ZSwgY29uc3QgSlNDOjpBcmdMaXN0Jik7CitKU0M6OkpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkN1c3RvbU1ldGhv
ZFdpdGhBcmdzKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCosIEpTQzo6SlNWYWx1ZSwg
Y29uc3QgSlNDOjpBcmdMaXN0Jik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEFyZyhKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTVmFsdWUsIGNvbnN0IEpTQzo6QXJnTGlzdCYpOworSlND
OjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RX
aXRoTm9uT3B0aW9uYWxBcmdBbmRPcHRpb25hbEFyZyhKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNP
YmplY3QqLCBKU0M6OkpTVmFsdWUsIGNvbnN0IEpTQzo6QXJnTGlzdCYpOworSlNDOjpKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9uT3B0
aW9uYWxBcmdBbmRUd29PcHRpb25hbEFyZ3MoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0
KiwgSlNDOjpKU1ZhbHVlLCBjb25zdCBKU0M6OkFyZ0xpc3QmKTsKKy8vIEF0dHJpYnV0ZXMKKwor
SlNDOjpKU1ZhbHVlIGpzVGVzdE9ialJlYWRPbmx5SW50QXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6SlNWYWx1ZSwgY29uc3QgSlNDOjpJZGVudGlmaWVyJik7CitKU0M6OkpTVmFsdWUganNUZXN0
T2JqUmVhZE9ubHlTdHJpbmdBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBjb25z
dCBKU0M6OklkZW50aWZpZXImKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpSZWFkT25seVRlc3RP
YmpBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBjb25zdCBKU0M6OklkZW50aWZp
ZXImKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpJbnRBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpKU1ZhbHVlLCBjb25zdCBKU0M6OklkZW50aWZpZXImKTsKK3ZvaWQgc2V0SlNUZXN0T2JqSW50
QXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTVmFsdWUpOworSlND
OjpKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ0F0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFs
dWUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYpOwordm9pZCBzZXRKU1Rlc3RPYmpTdHJpbmdBdHRy
KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCosIEpTQzo6SlNWYWx1ZSk7CitKU0M6OkpT
VmFsdWUganNUZXN0T2JqVGVzdE9iakF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUs
IGNvbnN0IEpTQzo6SWRlbnRpZmllciYpOwordm9pZCBzZXRKU1Rlc3RPYmpUZXN0T2JqQXR0cihK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTVmFsdWUpOworSlNDOjpKU1Zh
bHVlIGpzVGVzdE9iakF0dHJXaXRoRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1Zh
bHVlLCBjb25zdCBKU0M6OklkZW50aWZpZXImKTsKK3ZvaWQgc2V0SlNUZXN0T2JqQXR0cldpdGhF
eGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU1ZhbHVlKTsK
K0pTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6SlNWYWx1ZSwgY29uc3QgSlNDOjpJZGVudGlmaWVyJik7Cit2b2lkIHNldEpT
VGVzdE9iakF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09i
amVjdCosIEpTQzo6SlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0T2JqQXR0cldpdGhHZXR0
ZXJFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIGNvbnN0IEpTQzo6SWRl
bnRpZmllciYpOwordm9pZCBzZXRKU1Rlc3RPYmpBdHRyV2l0aEdldHRlckV4Y2VwdGlvbihKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTVmFsdWUpOworSlNDOjpKU1ZhbHVl
IGpzVGVzdE9iakN1c3RvbUF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIGNvbnN0
IEpTQzo6SWRlbnRpZmllciYpOwordm9pZCBzZXRKU1Rlc3RPYmpDdXN0b21BdHRyKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpKU09iamVjdCosIEpTQzo6SlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNU
ZXN0T2JqQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIGNvbnN0IEpT
Qzo6SWRlbnRpZmllciYpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwgYi9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0T2JqLmlkbAppbmRleCA2NjJhYzY0ZTljMjU0
NDI4NDczNGQ3ZTA2MDY2MWFmYmY1Mjg1YzczLi5kYmE0NGU2MWQyOTgzODE5YmM4N2FhNDdjZjRl
OGUzYzQ4ZjUxZDUwIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9U
ZXN0T2JqLmlkbAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0T2JqLmlk
bApAQCAtNjIsMTAgKzYyLDEyIEBAIG1vZHVsZSB0ZXN0IHsKICAgICAgICAgdm9pZCAgICBtZXRo
b2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRPcHRpb25hbEFyZyhpbiBsb25nIG5vbk9wdCwgaW4gW09w
dGlvbmFsXSBsb25nIG9wdCk7CiAgICAgICAgIHZvaWQgICAgbWV0aG9kV2l0aE5vbk9wdGlvbmFs
QXJnQW5kVHdvT3B0aW9uYWxBcmdzKGluIGxvbmcgbm9uT3B0LCBpbiBbT3B0aW9uYWxdIGxvbmcg
b3B0MSwgaW4gbG9uZyBvcHQyKTsKIAorI2lmZGVmIFRFU1RJTkdfVjgKICAgICAgICAgLy8gT3Zl
cmxvYWRzCiAgICAgICAgIHZvaWQgICAgb3ZlcmxvYWRlZE1ldGhvZChpbiBUZXN0T2JqIG9iakFy
ZywgaW4gRE9NU3RyaW5nIHN0ckFyZyk7CiAgICAgICAgIHZvaWQgICAgb3ZlcmxvYWRlZE1ldGhv
ZChpbiBUZXN0T2JqIG9iakFyZywgaW4gW09wdGlvbmFsXSBsb25nIGludEFyZyk7CiAgICAgICAg
IHZvaWQgICAgb3ZlcmxvYWRlZE1ldGhvZChpbiBET01TdHJpbmcgc3RyQXJnKTsKICAgICAgICAg
dm9pZCAgICBvdmVybG9hZGVkTWV0aG9kKGluIGxvbmcgaW50QXJnKTsKKyNlbmRpZgogICAgIH07
CiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOFRlc3RPYmou
Y3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcApzaW1p
bGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvVjhUZXN0T2JqLmNwcApyZW5hbWUgdG8gV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
VjgvVjhUZXN0T2JqLmNwcApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvVjhUZXN0T2JqLmggYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RP
YmouaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvVjhUZXN0T2JqLmgKcmVuYW1lIHRvIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Y4L1Y4VGVzdE9iai5oCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9DaGFuZ2VMb2cg
Yi9XZWJLaXRUb29scy9DaGFuZ2VMb2cKaW5kZXggZDJjMGFkZGRlZGZlZjhkOGQ2ZGZlN2Q0ZDIw
YmJhZTJlZGFiYWNmYy4uNTI5NmJlNmRlNzc0MDBkY2ZkNzZkYzc4YjgwNDRlNDY4NWEwMjM5ZSAx
MDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCisrKyBiL1dlYktpdFRvb2xzL0NoYW5n
ZUxvZwpAQCAtMSw1ICsxLDE3IEBACiAyMDEwLTA0LTI2ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdl
YmtpdC5vcmc+CiAKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQWRkIHRlc3RpbmcgaW5mcmFzdHJ1Y3R1cmUgZm9yIEpTQyBiaW5kaW5ncyBnZW5lcmF0b3IK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM4MTY3CisK
KyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIHRlc3RpbmcgbW9yZSB0aGFuIG9uZSBiaW5kaW5ncy4g
IEFsc28sIGNvbnZlcnRlZCB0aGUKKyAgICAgICAgc2NyaXB0IHRvIFBFUDggc3R5bGUuCisKKyAg
ICAgICAgKiBTY3JpcHRzL3J1bi1iaW5kaW5ncy10ZXN0czoKKworMjAxMC0wNC0yNiAgQWRhbSBC
YXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgorCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcg
b3V0IHI1ODI2NS4KICAgICAgICAgaHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvNTgy
NjUKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM4MDIx
CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3J1bi1iaW5kaW5ncy10ZXN0cyBiL1dl
YktpdFRvb2xzL1NjcmlwdHMvcnVuLWJpbmRpbmdzLXRlc3RzCmluZGV4IGM0MWY4Y2YyZjBkYmY0
NTU0NmMzYTVmOGVhODNkMWM3M2VjM2QyYmIuLjk5M2JjNjE2YTQ2OTAzMzQ5ZmUwMzk2MjdlMjg1
OGY5NzY2MTcyNmMgMTAwNzU1Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvcnVuLWJpbmRpbmdz
LXRlc3RzCisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvcnVuLWJpbmRpbmdzLXRlc3RzCkBAIC0z
Nyw1NiArMzcsNTkgQEAgaW1wb3J0IHRlbXBmaWxlCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5jaGVj
a291dCBpbXBvcnQgc2NtCiAKIAotZGVmIGdlbmVyYXRlRnJvbUlETChnZW5lcmF0b3IsIGlkbEZp
bGUsIG91dHB1dERpcik6CitkZWYgZ2VuZXJhdGVfZnJvbV9pZGwoZ2VuZXJhdG9yLCBpZGxfZmls
ZSwgb3V0cHV0X2RpcmVjdG9yeSk6CiAgICAgY21kID0gWydwZXJsJywgJy13JywKICAgICAgICAg
ICAgJy1JV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzJywKICAgICAgICAgICAgJ1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy9nZW5lcmF0ZS1iaW5kaW5ncy5wbCcsCiAgICAgICAgICAgICMgaWRsIGlu
Y2x1ZGUgZGlyZWN0b3JpZXMgKHBhdGggcmVsYXRpdmUgdG8gZ2VuZXJhdGUtYmluZGluZ3MucGwp
CiAgICAgICAgICAgICctLWluY2x1ZGUnLCAnLicsCiAgICAgICAgICAgICMgcGxhY2UgaG9sZGVy
IGZvciBkZWZpbmVzIChnZW5lcmF0ZS1iaW5kaW5ncy5wbCByZXF1aXJlbWVudCkKLSAgICAgICAg
ICAgJy0tZGVmaW5lcycsICd4JywKKyAgICAgICAgICAgJy0tZGVmaW5lcycsICdURVNUSU5HXyVz
JyAlIGdlbmVyYXRvciwKICAgICAgICAgICAgJy0tZ2VuZXJhdG9yJywgZ2VuZXJhdG9yLAotICAg
ICAgICAgICAnLS1vdXRwdXREaXInLCBvdXRwdXREaXIsCi0gICAgICAgICAgIGlkbEZpbGVdCisg
ICAgICAgICAgICctLW91dHB1dERpcicsIG91dHB1dF9kaXJlY3RvcnksCisgICAgICAgICAgIGlk
bF9maWxlXQogICAgIHJldHVybiBzdWJwcm9jZXNzLmNhbGwoY21kKSA9PSAwCiAKIAotZGVmIGRl
dGVjdENoYW5nZXMod29ya0RpciwgcmVmZXJlbmNlRGlyKToKLSAgICBjaGFuZ2VzRm91bmQgPSBG
YWxzZQotICAgIGZvciBvdXRwdXRGaWxlIGluIG9zLmxpc3RkaXIod29ya0Rpcik6Ci0gICAgICAg
IHByaW50ICdEZXRlY3RpbmcgY2hhbmdlcyBpbiAlcy4uLicgJSBvdXRwdXRGaWxlCitkZWYgZGV0
ZWN0X2NoYW5nZXMod29ya19kaXJlY3RvcnksIHJlZmVyZW5jZV9kaXJlY3RvcnkpOgorICAgIGNo
YW5nZXNfZm91bmQgPSBGYWxzZQorICAgIGZvciBvdXRwdXRfZmlsZSBpbiBvcy5saXN0ZGlyKHdv
cmtfZGlyZWN0b3J5KToKKyAgICAgICAgcHJpbnQgJ0RldGVjdGluZyBjaGFuZ2VzIGluICVzLi4u
JyAlIG91dHB1dF9maWxlCiAgICAgICAgIGNtZCA9IFsnZGlmZicsCi0gICAgICAgICAgICAgICBv
cy5wYXRoLmpvaW4ocmVmZXJlbmNlRGlyLCBvdXRwdXRGaWxlKSwKLSAgICAgICAgICAgICAgIG9z
LnBhdGguam9pbih3b3JrRGlyLCBvdXRwdXRGaWxlKV0KKyAgICAgICAgICAgICAgICctdScsCisg
ICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4ocmVmZXJlbmNlX2RpcmVjdG9yeSwgb3V0cHV0X2Zp
bGUpLAorICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHdvcmtfZGlyZWN0b3J5LCBvdXRwdXRf
ZmlsZSldCiAgICAgICAgIGlmIHN1YnByb2Nlc3MuY2FsbChjbWQpICE9IDA6Ci0gICAgICAgICAg
ICBwcmludCAnRGV0ZWN0ZWQgY2hhbmdlcyBpbiAlcyAoc2VlIGFib3ZlKScgJSBvdXRwdXRGaWxl
Ci0gICAgICAgICAgICBjaGFuZ2VzRm91bmQgPSBUcnVlCisgICAgICAgICAgICBwcmludCAnRGV0
ZWN0ZWQgY2hhbmdlcyBpbiAlcyAoc2VlIGFib3ZlKScgJSBvdXRwdXRfZmlsZQorICAgICAgICAg
ICAgY2hhbmdlc19mb3VuZCA9IFRydWUKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHByaW50
ICdObyBjaGFuZ2VzIGZvdW5kLicKIAotICAgIHJldHVybiBjaGFuZ2VzRm91bmQKKyAgICByZXR1
cm4gY2hhbmdlc19mb3VuZAogCiAKLWRlZiBydW5UZXN0cyhnZW5lcmF0b3IsIGlucHV0RGlyLCBy
ZWZlcmVuY2VEaXIsIG92ZXJ3cml0ZSk6Ci0gICAgd29ya0RpciA9IHJlZmVyZW5jZURpcgorZGVm
IHJ1bl90ZXN0cyhnZW5lcmF0b3IsIGlucHV0X2RpcmVjdG9yeSwgcmVmZXJlbmNlX2RpcmVjdG9y
eSwgb3ZlcndyaXRlKToKKyAgICB3b3JrX2RpcmVjdG9yeSA9IHJlZmVyZW5jZV9kaXJlY3RvcnkK
IAogICAgIHBhc3NlZCA9IFRydWUKLSAgICBmb3IgaW5wdXRGaWxlIGluIG9zLmxpc3RkaXIoaW5w
dXREaXIpOgotICAgICAgICAobmFtZSwgZXh0KSA9IG9zLnBhdGguc3BsaXRleHQoaW5wdXRGaWxl
KQotICAgICAgICBpZiBleHQgIT0gJy5pZGwnOgorICAgIGZvciBpbnB1dF9maWxlIGluIG9zLmxp
c3RkaXIoaW5wdXRfZGlyZWN0b3J5KToKKyAgICAgICAgKG5hbWUsIGV4dGVuc2lvbikgPSBvcy5w
YXRoLnNwbGl0ZXh0KGlucHV0X2ZpbGUpCisgICAgICAgIGlmIGV4dGVuc2lvbiAhPSAnLmlkbCc6
CiAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICBwcmludCAnVGVzdGluZyB0aGUgJXMgZ2Vu
ZXJhdG9yIG9uICVzJyAlIChnZW5lcmF0b3IsIGlucHV0RmlsZSkKKyAgICAgICAgcHJpbnQgJ1Rl
c3RpbmcgdGhlICVzIGdlbmVyYXRvciBvbiAlcycgJSAoZ2VuZXJhdG9yLCBpbnB1dF9maWxlKQog
ICAgICAgICAjIEdlbmVyYXRlIG91dHB1dCBpbnRvIHRoZSB3b3JrIGRpcmVjdG9yeSAoZWl0aGVy
IHRoZSBnaXZlbiBvbmUgb3IgYSAKICAgICAgICAgIyB0ZW1wIG9uZSBpZiBub3Qgb3ZlcndyaXRl
IGlzIHBlcmZvcm1lZCkKICAgICAgICAgaWYgbm90IG92ZXJ3cml0ZToKLSAgICAgICAgICAgIHdv
cmtEaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKCkKLSAgICAgICAgaWYgbm90IGdlbmVyYXRlRnJvbUlE
TChnZW5lcmF0b3IsIG9zLnBhdGguam9pbihpbnB1dERpciwgaW5wdXRGaWxlKSwgd29ya0Rpcik6
CisgICAgICAgICAgICB3b3JrX2RpcmVjdG9yeSA9IHRlbXBmaWxlLm1rZHRlbXAoKQorICAgICAg
ICBpZiBub3QgZ2VuZXJhdGVfZnJvbV9pZGwoZ2VuZXJhdG9yLCBvcy5wYXRoLmpvaW4oaW5wdXRf
ZGlyZWN0b3J5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW5wdXRfZmlsZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB3b3JrX2RpcmVjdG9yeSk6CiAgICAgICAgICAgICBwYXNzZWQgPSBGYWxzZQogICAgICAgICBp
ZiBvdmVyd3JpdGU6CiAgICAgICAgICAgICBwcmludCAiT3Zlcndyb3RlIHJlZmVyZW5jZSBmaWxl
cyIKICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICMgRGV0ZWN0IGNoYW5nZXMKLSAgICAg
ICAgaWYgZGV0ZWN0Q2hhbmdlcyh3b3JrRGlyLCByZWZlcmVuY2VEaXIpOgorICAgICAgICBpZiBk
ZXRlY3RfY2hhbmdlcyh3b3JrX2RpcmVjdG9yeSwgcmVmZXJlbmNlX2RpcmVjdG9yeSk6CiAgICAg
ICAgICAgICBwYXNzZWQgPSBGYWxzZQogCiAgICAgaWYgbm90IHBhc3NlZDoKQEAgLTEwNCwyMSAr
MTA3LDI1IEBAIGRlZiBtYWluKGFyZ3YpOgogICAgICIiIgogICAgIG92ZXJ3cml0ZSA9ICItLW92
ZXJ3cml0ZSIgaW4gYXJndgogCi0gICAgc2NtU3lzdGVtID0gc2NtLmRldGVjdF9zY21fc3lzdGVt
KG9zLmN1cmRpcikKLSAgICBwcmludCBzY21TeXN0ZW0KKyAgICBjdXJyZW50X3NjbSA9IHNjbS5k
ZXRlY3Rfc2NtX3N5c3RlbShvcy5jdXJkaXIpCisgICAgb3MuY2hkaXIoY3VycmVudF9zY20uY2hl
Y2tvdXRfcm9vdCkKIAotICAgIG9zLmNoZGlyKHNjbVN5c3RlbS5jaGVja291dF9yb290KQorICAg
IGFsbF90ZXN0c19wYXNzZWQgPSBUcnVlCiAKLSAgICBhbGxUZXN0c1Bhc3NlZCA9IFRydWUKLSAg
ICBpZiBub3QgcnVuVGVzdHMoJ1Y4JywKLSAgICAgICAgb3MucGF0aC5qb2luKCdXZWJDb3JlJywg
J2JpbmRpbmdzJywgJ3NjcmlwdHMnLCAndGVzdCcpLCAjIElucHV0IGRpcgotICAgICAgICBvcy5w
YXRoLmpvaW4oJ1dlYkNvcmUnLCAnYmluZGluZ3MnLCAnc2NyaXB0cycsICd0ZXN0JyksICMgUmVm
ZXJlbmNlIGRpcgotICAgICAgICBvdmVyd3JpdGUpOgotICAgICAgICBhbGxUZXN0c1Bhc3NlZCA9
IEZhbHNlCisgICAgZ2VuZXJhdG9ycyA9IFsKKyAgICAgICAgJ0pTJywKKyAgICAgICAgJ1Y4JywK
KyAgICAgICAgIyBGSVhNRTogQWRkIE9iakMKKyAgICBdCiAKLSAgICAjIEZJWE1FOiBBZGQgdGVz
dHMgZm9yIEpTQywgT2JqQworICAgIGZvciBnZW5lcmF0b3IgaW4gZ2VuZXJhdG9yczoKKyAgICAg
ICAgaWYgbm90IHJ1bl90ZXN0cyhnZW5lcmF0b3IsCisgICAgICAgICAgICBvcy5wYXRoLmpvaW4o
J1dlYkNvcmUnLCAnYmluZGluZ3MnLCAnc2NyaXB0cycsICd0ZXN0JyksICMgSW5wdXQgZGlyCisg
ICAgICAgICAgICBvcy5wYXRoLmpvaW4oJ1dlYkNvcmUnLCAnYmluZGluZ3MnLCAnc2NyaXB0cycs
ICd0ZXN0JywgZ2VuZXJhdG9yKSwgIyBSZWZlcmVuY2UgZGlyCisgICAgICAgICAgICBvdmVyd3Jp
dGUpOgorICAgICAgICAgICAgYWxsX3Rlc3RzX3Bhc3NlZCA9IEZhbHNlCiAKLSAgICBpZiBhbGxU
ZXN0c1Bhc3NlZDoKKyAgICBpZiBhbGxfdGVzdHNfcGFzc2VkOgogICAgICAgICBwcmludCAnQWxs
IHRlc3RzIHBhc3NlZCEnCiAgICAgICAgIHJldHVybiAwCiAgICAgZWxzZToK
</data>
<flag name="review"
          id="38332"
          type_id="1"
          status="+"
          setter="eric"
    />
    <flag name="commit-queue"
          id="38333"
          type_id="3"
          status="-"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>