<?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>156291</bug_id>
          
          <creation_ts>2016-04-06 09:24:58 -0700</creation_ts>
          <short_desc>[IDL] Extend support for [EnabledAtRuntime] attributes / operations to all global objects, not just Window</short_desc>
          <delta_ts>2016-04-06 10:34:03 -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>Bindings</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=156272</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>156113</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>achristensen</cc>
    
    <cc>cgarcia</cc>
    
    <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ggaren</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>rniwa</cc>
    
    <cc>sam</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1181262</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-04-06 09:24:58 -0700</bug_when>
    <thetext>Extend support for [EnabledAtRuntime] attributes / operations to all global objects, not just Window.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1181267</commentid>
    <comment_count>1</comment_count>
      <attachid>275775</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-04-06 09:42:45 -0700</bug_when>
    <thetext>Created attachment 275775
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1181270</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-04-06 09:44:51 -0700</bug_when>
    <thetext>Attachment 275775 did not pass style-queue:


ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestGlobalObject.cpp:164:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestGlobalObject.cpp:180:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestGlobalObject.cpp:215:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestGlobalObject.cpp:233:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestGlobalObject.cpp:341:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/bindings/scripts/test/ObjC/DOMTestGlobalObject.mm:30:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 6 in 11 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1181271</commentid>
    <comment_count>3</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-04-06 09:45:26 -0700</bug_when>
    <thetext>Diff on generated JSWorkerGlobalScope.cpp:
http://pastebin.com/4esG76hq</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1181273</commentid>
    <comment_count>4</comment_count>
      <attachid>275775</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-04-06 09:46:40 -0700</bug_when>
    <thetext>Comment on attachment 275775
Patch

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

&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:381
&gt; +    return $interface-&gt;name eq &quot;DOMWindow&quot; || $codeGenerator-&gt;InheritsInterface($interface, &quot;WorkerGlobalScope&quot;) || $interface-&gt;name eq &quot;TestGlobalObject&quot;;

Great! I was thinking last night, &quot;there&apos;s no test for this&quot;.  Now I can sleep better.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1181274</commentid>
    <comment_count>5</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-04-06 09:47:20 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Comment on attachment 275775 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=275775&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:381
&gt; &gt; +    return $interface-&gt;name eq &quot;DOMWindow&quot; || $codeGenerator-&gt;InheritsInterface($interface, &quot;WorkerGlobalScope&quot;) || $interface-&gt;name eq &quot;TestGlobalObject&quot;;
&gt; 
&gt; Great! I was thinking last night, &quot;there&apos;s no test for this&quot;.  Now I can
&gt; sleep better.

Yeah, I was tired last night :P</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1181283</commentid>
    <comment_count>6</comment_count>
      <attachid>275775</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-04-06 10:33:58 -0700</bug_when>
    <thetext>Comment on attachment 275775
Patch

Clearing flags on attachment: 275775

Committed r199103: &lt;http://trac.webkit.org/changeset/199103&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1181284</commentid>
    <comment_count>7</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-04-06 10:34:03 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>275775</attachid>
            <date>2016-04-06 09:42:45 -0700</date>
            <delta_ts>2016-04-06 10:33:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-156291-20160406094246.patch</filename>
            <type>text/plain</type>
            <size>63270</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk5MDk5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDY2YmI0YTg1NjBlZmFi
ZmM2ZmVmOWFiZjI2ZjBmZGFlMDhlYzg5OS4uNWUxMzY2Y2U2NjJiODA0YjdhNGI1YWE5NmJjM2Jl
NjAzNzczMjFkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg2IEBACisyMDE2LTA0LTA2ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgW0lETF0gRXh0ZW5kIHN1cHBv
cnQgZm9yIFtFbmFibGVkQXRSdW50aW1lXSBhdHRyaWJ1dGVzIC8gb3BlcmF0aW9ucyB0byBhbGwg
Z2xvYmFsIG9iamVjdHMsIG5vdCBqdXN0IFdpbmRvdworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2MjkxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgRXh0ZW5kIHN1cHBvcnQgZm9yIFtFbmFibGVkQXRSdW50
aW1lXSBhdHRyaWJ1dGVzIC8gb3BlcmF0aW9ucyB0byBhbGwKKyAgICAgICAgZ2xvYmFsIG9iamVj
dHMsIG5vdCBqdXN0IFdpbmRvdy4gVGhpcyBpcyBuZWVkZWQgYnkgdGhlIEZldGNoIEFQSSB3aGlj
aAorICAgICAgICBpcyBlbmFibGVkIGF0IHJ1bnRpbWUgYW5kIGV4cG9zZWQgb24gYm90aCBXaW5k
b3cgYW5kIFdvcmtlckdsb2JhbFNjb3BlLgorCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9D
b2RlR2VuZXJhdG9ySlMucG06CisgICAgICAgIChJc0RPTUdsb2JhbE9iamVjdCk6CisgICAgICAg
IChPcGVyYXRpb25TaG91bGRCZU9uSW5zdGFuY2UpOgorICAgICAgICAoR2VuZXJhdGVIZWFkZXIp
OgorICAgICAgICAoR2VuZXJhdGVQcm9wZXJ0aWVzSGFzaFRhYmxlKToKKyAgICAgICAgKEdlbmVy
YXRlSW1wbGVtZW50YXRpb24pOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2Jq
ZWN0L1dlYktpdERPTVRlc3RHbG9iYWxPYmplY3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktp
dDo6a2l0KToKKyAgICAgICAgKFdlYktpdDo6Y29yZSk6CisgICAgICAgIChXZWJLaXQ6OndyYXBU
ZXN0R2xvYmFsT2JqZWN0KToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9nbG9iYWxfb2JqZWN0
X2ZpbmFsaXplKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9nbG9iYWxfb2JqZWN0X3NldF9w
cm9wZXJ0eSk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3RfZ2xvYmFsX29iamVjdF9nZXRfcHJv
cGVydHkpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X2dsb2JhbF9vYmplY3RfY29uc3RydWN0
b3IpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X2dsb2JhbF9vYmplY3RfY2xhc3NfaW5pdCk6
CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3RfZ2xvYmFsX29iamVjdF9pbml0KToKKyAgICAgICAg
KHdlYmtpdF9kb21fdGVzdF9nbG9iYWxfb2JqZWN0X3JlZ3VsYXJfb3BlcmF0aW9uKToKKyAgICAg
ICAgKHdlYmtpdF9kb21fdGVzdF9nbG9iYWxfb2JqZWN0X2VuYWJsZWRfYXRfcnVudGltZV9vcGVy
YXRpb24pOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X2dsb2JhbF9vYmplY3RfZ2V0X3JlZ3Vs
YXJfYXR0cmlidXRlKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9nbG9iYWxfb2JqZWN0X3Nl
dF9yZWd1bGFyX2F0dHJpYnV0ZSk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3RfZ2xvYmFsX29i
amVjdF9nZXRfZW5hYmxlZF9hdF9ydW50aW1lX2F0dHJpYnV0ZSk6CisgICAgICAgICh3ZWJraXRf
ZG9tX3Rlc3RfZ2xvYmFsX29iamVjdF9zZXRfZW5hYmxlZF9hdF9ydW50aW1lX2F0dHJpYnV0ZSk6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEds
b2JhbE9iamVjdC5oOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09i
amVjdC9XZWJLaXRET01UZXN0R2xvYmFsT2JqZWN0UHJpdmF0ZS5oOiBBZGRlZC4KKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0LmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RHbG9iYWxPYmplY3RDb25zdHJ1Y3Rvcjo6cHJvdG90
eXBlRm9yU3RydWN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEdsb2JhbE9iamVjdENv
bnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rl
c3RHbG9iYWxPYmplY3RQcm90b3R5cGU6OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChX
ZWJDb3JlOjpKU1Rlc3RHbG9iYWxPYmplY3Q6OkpTVGVzdEdsb2JhbE9iamVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpKU1Rlc3RHbG9iYWxPYmplY3Q6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkpTVGVzdEdsb2JhbE9iamVjdDo6ZGVzdHJveSk6CisgICAgICAgIChXZWJDb3Jl
OjpKU1Rlc3RHbG9iYWxPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChXZWJD
b3JlOjpqc1Rlc3RHbG9iYWxPYmplY3RSZWd1bGFyQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdEdsb2JhbE9iamVjdEVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGUpOgorICAgICAg
ICAoV2ViQ29yZTo6anNUZXN0R2xvYmFsT2JqZWN0Q29uc3RydWN0b3IpOgorICAgICAgICAoV2Vi
Q29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0Q29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29y
ZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0UmVndWxhckF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RFbmFibGVkQXRSdW50aW1lQXR0cmlidXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTVGVzdEdsb2JhbE9iamVjdDo6Z2V0Q29uc3RydWN0b3IpOgorICAg
ICAgICAoV2ViQ29yZTo6anNUZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5jdGlvblJlZ3VsYXJP
cGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VG
dW5jdGlvbkVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRpb24xKToKKyAgICAgICAgKFdlYkNvcmU6Ompz
VGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25FbmFibGVkQXRSdW50aW1lT3BlcmF0aW9u
Mik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9u
RW5hYmxlZEF0UnVudGltZU9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RHbG9i
YWxPYmplY3RPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMpOgorICAgICAgICAoV2Vi
Q29yZTo6SlNUZXN0R2xvYmFsT2JqZWN0T3duZXI6OmZpbmFsaXplKToKKyAgICAgICAgKFdlYkNv
cmU6OnRvSlNOZXdseUNyZWF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAg
IChXZWJDb3JlOjpKU1Rlc3RHbG9iYWxPYmplY3Q6OnRvV3JhcHBlZCk6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdsb2JhbE9iamVjdC5oOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkpTVGVzdEdsb2JhbE9iamVjdDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkpTVGVzdEdsb2JhbE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKFdlYkNv
cmU6OkpTVGVzdEdsb2JhbE9iamVjdDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6d3JhcHBlck93bmVyKToKKyAgICAgICAgKFdlYkNvcmU6OndyYXBwZXJLZXkpOgorICAgICAg
ICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RHbG9iYWxPYmplY3RQ
cm90b3R5cGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RHbG9iYWxPYmplY3RQ
cm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RHbG9i
YWxPYmplY3RQcm90b3R5cGU6OkpTVGVzdEdsb2JhbE9iamVjdFByb3RvdHlwZSk6CisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdEdsb2JhbE9iamVjdC5oOiBBZGRl
ZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0R2xvYmFsT2Jq
ZWN0Lm1tOiBBZGRlZC4KKyAgICAgICAgKC1bRE9NVGVzdEdsb2JhbE9iamVjdCBkZWFsbG9jXSk6
CisgICAgICAgICgtW0RPTVRlc3RHbG9iYWxPYmplY3QgcmVndWxhckF0dHJpYnV0ZV0pOgorICAg
ICAgICAoLVtET01UZXN0R2xvYmFsT2JqZWN0IHNldFJlZ3VsYXJBdHRyaWJ1dGU6XSk6CisgICAg
ICAgICgtW0RPTVRlc3RHbG9iYWxPYmplY3QgZW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZV0pOgor
ICAgICAgICAoLVtET01UZXN0R2xvYmFsT2JqZWN0IHNldEVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1
dGU6XSk6CisgICAgICAgICgtW0RPTVRlc3RHbG9iYWxPYmplY3QgcmVndWxhck9wZXJhdGlvbjpd
KToKKyAgICAgICAgKC1bRE9NVGVzdEdsb2JhbE9iamVjdCBlbmFibGVkQXRSdW50aW1lT3BlcmF0
aW9uOl0pOgorICAgICAgICAoY29yZSk6CisgICAgICAgIChraXQpOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RHbG9iYWxPYmplY3RJbnRlcm5hbC5oOiBBZGRl
ZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdEdsb2JhbE9iamVjdC5pZGw6
IEFkZGVkLgorCiAyMDE2LTA0LTA2ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4K
IAogICAgICAgICBSRUdSRVNTSU9OKHIxOTY2MjkpOiBNZXNzYWdlcyB0ZXh0IHNpemUgb25seSBj
aGFuZ2VzIGZvciBzZW5kaW5nIHRleHQsIGNvbnZlcnNhdGlvbiB0ZXh0IHNpemUgZG9lcyBub3Qg
Y2hhbmdlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JKUy5wbSBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVy
YXRvckpTLnBtCmluZGV4IDYyN2Y4MDViMDVmYTRiMjNhYzYyZDUzOWY2NTk3NDVjNGEyOWJmODUu
LjNiZjIyMDMwMzc3YmI4YWI2YTQ4MjllZjU3YjFjNWQ5NmFkZjMwNjEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCkBAIC0zNzgs
NyArMzc4LDcgQEAgc3ViIEdldEN1c3RvbUlzUmVhY2hhYmxlCiBzdWIgSXNET01HbG9iYWxPYmpl
Y3QKIHsKICAgICBteSAkaW50ZXJmYWNlID0gc2hpZnQ7Ci0gICAgcmV0dXJuICRpbnRlcmZhY2Ut
Pm5hbWUgZXEgIkRPTVdpbmRvdyIgfHwgJGNvZGVHZW5lcmF0b3ItPkluaGVyaXRzSW50ZXJmYWNl
KCRpbnRlcmZhY2UsICJXb3JrZXJHbG9iYWxTY29wZSIpOworICAgIHJldHVybiAkaW50ZXJmYWNl
LT5uYW1lIGVxICJET01XaW5kb3ciIHx8ICRjb2RlR2VuZXJhdG9yLT5Jbmhlcml0c0ludGVyZmFj
ZSgkaW50ZXJmYWNlLCAiV29ya2VyR2xvYmFsU2NvcGUiKSB8fCAkaW50ZXJmYWNlLT5uYW1lIGVx
ICJUZXN0R2xvYmFsT2JqZWN0IjsKIH0KIAogc3ViIEdlbmVyYXRlR2V0T3duUHJvcGVydHlTbG90
Qm9keQpAQCAtNzIxLDExICs3MjEsMTEgQEAgc3ViIE9wZXJhdGlvblNob3VsZEJlT25JbnN0YW5j
ZQogICAgIG15ICRpbnRlcmZhY2UgPSBzaGlmdDsKICAgICBteSAkZnVuY3Rpb24gPSBzaGlmdDsK
IAotICAgICMgRklYTUU6IFRoZSBiaW5kaW5ncyBnZW5lcmF0b3IgZG9lcyBub3Qgc3VwcG9ydCBw
dXR0aW5nIHJ1bnRpbWUtZW5hYmxlZCBvbiB0aGUgaW5zdGFuY2UgeWV0IChleGNlcHQgZm9yIFdp
bmRvdykuCi0gICAgcmV0dXJuIDAgaWYgJGZ1bmN0aW9uLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0
cmlidXRlcy0+eyJFbmFibGVkQXRSdW50aW1lIn0gJiYgJGludGVyZmFjZS0+bmFtZSBuZSAiRE9N
V2luZG93IjsKLQogICAgIHJldHVybiAxIGlmIElzRE9NR2xvYmFsT2JqZWN0KCRpbnRlcmZhY2Up
OwogCisgICAgIyBGSVhNRTogVGhlIGJpbmRpbmdzIGdlbmVyYXRvciBkb2VzIG5vdCBzdXBwb3J0
IHB1dHRpbmcgcnVudGltZS1lbmFibGVkIG9uIHRoZSBpbnN0YW5jZSB5ZXQgKGV4Y2VwdCBmb3Ig
Z2xvYmFsIG9iamVjdHMpLgorICAgIHJldHVybiAwIGlmICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPnsiRW5hYmxlZEF0UnVudGltZSJ9OworCiAgICAgIyBbVW5mb3Jn
ZWFibGVdIG9wZXJhdGlvbnMgc2hvdWxkIGJlIG9uIHRoZSBpbnN0YW5jZS4KICAgICAjIGh0dHBz
Oi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI1VuZm9yZ2VhYmxlCiAgICAgcmV0dXJuIDEgaWYg
SXNVbmZvcmdlYWJsZSgkaW50ZXJmYWNlLCAkZnVuY3Rpb24pOwpAQCAtMTI0Nyw3ICsxMjQ3LDYg
QEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgICAgIyBDb25zdHJ1Y3RvcgogICAgIGlmICgkaW50ZXJm
YWNlTmFtZSBlcSAiRE9NV2luZG93IikgewogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAi
ICAgICRjbGFzc05hbWUoSlNDOjpWTSYsIEpTQzo6U3RydWN0dXJlKiwgUmVmPCRpbXBsVHlwZT4m
JiwgSlNET01XaW5kb3dTaGVsbCopO1xuIik7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQs
ICIgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgSlNET01XaW5kb3dTaGVsbCopO1xu
Iik7CiAgICAgfSBlbHNpZiAoJGNvZGVHZW5lcmF0b3ItPkluaGVyaXRzSW50ZXJmYWNlKCRpbnRl
cmZhY2UsICJXb3JrZXJHbG9iYWxTY29wZSIpKSB7CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRl
bnQsICIgICAgJGNsYXNzTmFtZShKU0M6OlZNJiwgSlNDOjpTdHJ1Y3R1cmUqLCBSZWY8JGltcGxU
eXBlPiYmKTtcbiIpOwogICAgIH0gZWxzaWYgKCFOZWVkc0ltcGxlbWVudGF0aW9uQ2xhc3MoJGlu
dGVyZmFjZSkpIHsKQEAgLTEyNjEsNiArMTI2MCwxNCBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKICAg
ICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB9XG5cbiIpOwogICAgIH0KIAorICAgIGlm
IChJc0RPTUdsb2JhbE9iamVjdCgkaW50ZXJmYWNlKSkgeworICAgICAgICBpZiAoJGludGVyZmFj
ZU5hbWUgZXEgIkRPTVdpbmRvdyIpIHsKKyAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQs
ICIgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgSlNET01XaW5kb3dTaGVsbCopO1xu
Iik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAi
ICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpO1xuIik7CisgICAgICAgIH0KKyAgICB9
CisKICAgICAjIEluZGV4IHNldHRlcgogICAgIGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiQ3VzdG9tSW5kZXhlZFNldHRlciJ9KSB7CiAgICAgICAgIHB1c2goQGhlYWRlckNv
bnRlbnQsICIgICAgdm9pZCBpbmRleFNldHRlcihKU0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkIGlu
ZGV4LCBKU0M6OkpTVmFsdWUpO1xuIik7CkBAIC0xNDExLDggKzE0MTgsOCBAQCBzdWIgR2VuZXJh
dGVQcm9wZXJ0aWVzSGFzaFRhYmxlCiAgICAgICAgIG5leHQgaWYgKCRhdHRyaWJ1dGUtPmlzU3Rh
dGljKTsKICAgICAgICAgbmV4dCBpZiBBdHRyaWJ1dGVTaG91bGRCZU9uSW5zdGFuY2UoJGludGVy
ZmFjZSwgJGF0dHJpYnV0ZSkgIT0gJGlzSW5zdGFuY2U7CiAKLSAgICAgICAgIyBET01XaW5kb3cg
YWRkcyBSdW50aW1lRW5hYmxlZCBhdHRyaWJ1dGVzIGFmdGVyIGNyZWF0aW9uIHNvIGRvIG5vdCBh
ZGQgdGhlbSB0byB0aGUgc3RhdGljIHRhYmxlLgotICAgICAgICBpZiAoJGludGVyZmFjZU5hbWUg
ZXEgIkRPTVdpbmRvdyIgJiYgJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPnsiRW5hYmxlZEF0UnVudGltZSJ9KSB7CisgICAgICAgICMgR2xvYmFsIG9iamVjdHMgYWRk
IFJ1bnRpbWVFbmFibGVkIGF0dHJpYnV0ZXMgYWZ0ZXIgY3JlYXRpb24gc28gZG8gbm90IGFkZCB0
aGVtIHRvIHRoZSBzdGF0aWMgdGFibGUuCisgICAgICAgIGlmIChJc0RPTUdsb2JhbE9iamVjdCgk
aW50ZXJmYWNlKSAmJiAkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+
eyJFbmFibGVkQXRSdW50aW1lIn0pIHsKICAgICAgICAgICAgICRwcm9wZXJ0eUNvdW50IC09IDE7
CiAgICAgICAgICAgICBuZXh0OwogICAgICAgICB9CkBAIC0xNDQ4LDggKzE0NTUsOCBAQCBzdWIg
R2VuZXJhdGVQcm9wZXJ0aWVzSGFzaFRhYmxlCiAgICAgICAgIG5leHQgaWYgT3BlcmF0aW9uU2hv
dWxkQmVPbkluc3RhbmNlKCRpbnRlcmZhY2UsICRmdW5jdGlvbikgIT0gJGlzSW5zdGFuY2U7CiAg
ICAgICAgIG5leHQgaWYgJGZ1bmN0aW9uLT5zaWduYXR1cmUtPm5hbWUgZXEgIltTeW1ib2wuSXRl
cmF0b3JdIjsKIAotICAgICAgICAjIERPTVdpbmRvdyBhZGRzIFJ1bnRpbWVFbmFibGVkIG9wZXJh
dGlvbnMgYWZ0ZXIgY3JlYXRpb24gc28gZG8gbm90IGFkZCB0aGVtIHRvIHRoZSBzdGF0aWMgdGFi
bGUuCi0gICAgICAgIGlmICgkaW50ZXJmYWNlTmFtZSBlcSAiRE9NV2luZG93IiAmJiAkZnVuY3Rp
b24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkVuYWJsZWRBdFJ1bnRpbWUifSkg
eworICAgICAgICAjIEdsb2JhbCBvYmplY3RzIGFkZCBSdW50aW1lRW5hYmxlZCBvcGVyYXRpb25z
IGFmdGVyIGNyZWF0aW9uIHNvIGRvIG5vdCBhZGQgdGhlbSB0byB0aGUgc3RhdGljIHRhYmxlLgor
ICAgICAgICBpZiAoSXNET01HbG9iYWxPYmplY3QoJGludGVyZmFjZSkgJiYgJGZ1bmN0aW9uLT5z
aWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJFbmFibGVkQXRSdW50aW1lIn0pIHsKICAg
ICAgICAgICAgICRwcm9wZXJ0eUNvdW50IC09IDE7CiAgICAgICAgICAgICBuZXh0OwogICAgICAg
ICB9CkBAIC0xNDcyLDcgKzE0NzksNyBAQCBzdWIgR2VuZXJhdGVQcm9wZXJ0aWVzSGFzaFRhYmxl
CiAKICAgICAgICAgaWYgKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMt
PnsiRW5hYmxlZEF0UnVudGltZSJ9KSB7CiAgICAgICAgICAgICBpZiAoJGlzSW5zdGFuY2UpIHsK
LSAgICAgICAgICAgICAgICBkaWUgIldlIGN1cnJlbnRseSBkbyBub3Qgc3VwcG9ydCBbRW5hYmxl
ZEF0UnVudGltZV0gb3BlcmF0aW9ucyBvbiB0aGUgaW5zdGFuY2UuIjsKKyAgICAgICAgICAgICAg
ICBkaWUgIldlIGN1cnJlbnRseSBkbyBub3Qgc3VwcG9ydCBbRW5hYmxlZEF0UnVudGltZV0gb3Bl
cmF0aW9ucyBvbiB0aGUgaW5zdGFuY2UgKGV4Y2VwdCBmb3IgZ2xvYmFsIG9iamVjdHMpLiI7CiAg
ICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHB1c2goQCRydW50aW1lRW5hYmxl
ZEZ1bmN0aW9ucywgJGZ1bmN0aW9uKTsKICAgICAgICAgICAgIH0KQEAgLTIxOTcsMTEgKzIyMDQs
MzMgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgOiAkcGFyZW50Q2xhc3NOYW1lKHZtLCBzdHJ1Y3R1cmUsIFdURk1vdmUoaW1wbCks
IHNoZWxsKVxuIik7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CiAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsKLQotICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgInZvaWQgJHtjbGFzc05hbWV9OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTRE9NV2luZG93
U2hlbGwqIHNoZWxsKVxuIik7CisgICAgfSBlbHNpZiAoJGNvZGVHZW5lcmF0b3ItPkluaGVyaXRz
SW50ZXJmYWNlKCRpbnRlcmZhY2UsICJXb3JrZXJHbG9iYWxTY29wZSIpKSB7CisgICAgICAgIEFk
ZEluY2x1ZGVzRm9yVHlwZUluSW1wbCgkaW50ZXJmYWNlTmFtZSk7CisgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiJHtjbGFzc05hbWV9OjokY2xhc3NOYW1lKFZNJiB2bSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIFJlZjwkaW1wbFR5cGU+JiYgaW1wbClcbiIpOworICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICA6ICRwYXJlbnRDbGFzc05hbWUodm0sIHN0cnVjdHVyZSwgV1RGTW92ZShp
bXBsKSlcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwotICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSwgc2hlbGwpO1xu
XG4iKTsKLSAgICAgICAgIyBTdXBwb3J0IGZvciBSdW50aW1lRW5hYmxlZCBhdHRyaWJ1dGVzIG9u
IERPTVdpbmRvdy4KKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOworICAgIH0g
ZWxzaWYgKCFOZWVkc0ltcGxlbWVudGF0aW9uQ2xhc3MoJGludGVyZmFjZSkpIHsKKyAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIke2NsYXNzTmFtZX06OiRjbGFzc05hbWUoU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpXG4iKTsKKyAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgOiAkcGFyZW50Q2xhc3NOYW1lKHN0cnVjdHVyZSwgZ2xv
YmFsT2JqZWN0KSB7IH1cblxuIik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIke2NsYXNzTmFtZX06OiRjbGFzc05hbWUoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpT
RE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFJlZjwkaW1wbFR5cGU+JiYgaW1wbClcbiIp
OworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICA6ICRwYXJlbnRDbGFzc05hbWUoc3Ry
dWN0dXJlLCBnbG9iYWxPYmplY3QsIFdURk1vdmUoaW1wbCkpXG4iKTsKKyAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICJ7XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIp
OworICAgIH0KKworICAgIGlmIChJc0RPTUdsb2JhbE9iamVjdCgkaW50ZXJmYWNlKSkgeworICAg
ICAgICBpZiAoJGludGVyZmFjZU5hbWUgZXEgIkRPTVdpbmRvdyIpIHsKKyAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAidm9pZCAke2NsYXNzTmFtZX06OmZpbmlzaENyZWF0aW9uKFZNJiB2
bSwgSlNET01XaW5kb3dTaGVsbCogc2hlbGwpXG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAie1xuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBCYXNl
OjpmaW5pc2hDcmVhdGlvbih2bSwgc2hlbGwpO1xuXG4iKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAidm9pZCAke2NsYXNzTmFtZX06OmZpbmlzaENy
ZWF0aW9uKFZNJiB2bSlcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4i
KTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEJhc2U6OmZpbmlzaENyZWF0
aW9uKHZtKTtcblxuIik7CisgICAgICAgIH0KKyAgICAgICAgIyBTdXBwb3J0IGZvciBSdW50aW1l
RW5hYmxlZCBhdHRyaWJ1dGVzIG9uIGdsb2JhbCBvYmplY3RzLgogICAgICAgICBmb3JlYWNoIG15
ICRhdHRyaWJ1dGUgKEB7JGludGVyZmFjZS0+YXR0cmlidXRlc30pIHsKICAgICAgICAgICAgIG5l
eHQgdW5sZXNzICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkVu
YWJsZWRBdFJ1bnRpbWUifTsKIApAQCAtMjIxOSw3ICsyMjQ4LDcgQEAgc3ViIEdlbmVyYXRlSW1w
bGVtZW50YXRpb24KICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIH1cbiIpOwog
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIjZW5kaWZcbiIpIGlmICRjb25kaXRpb25h
bFN0cmluZzsKICAgICAgICAgfQotICAgICAgICAjIFN1cHBvcnQgZm9yIFJ1bnRpbWVFbmFibGVk
IG9wZXJhdGlvbnMgb24gRE9NV2luZG93LgorICAgICAgICAjIFN1cHBvcnQgZm9yIFJ1bnRpbWVF
bmFibGVkIG9wZXJhdGlvbnMgb24gZ2xvYmFsIG9iamVjdHMuCiAgICAgICAgIGZvcmVhY2ggbXkg
JGZ1bmN0aW9uIChAeyRpbnRlcmZhY2UtPmZ1bmN0aW9uc30pIHsKICAgICAgICAgICAgIG5leHQg
dW5sZXNzICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiRW5hYmxl
ZEF0UnVudGltZSJ9OwogICAgICAgICAgICAgbmV4dCBpZiAkZnVuY3Rpb24tPntvdmVybG9hZElu
ZGV4fSAmJiAkZnVuY3Rpb24tPntvdmVybG9hZEluZGV4fSA+IDE7CkBAIC0yMjM3LDIzICsyMjY2
LDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiI2VuZGlmXG4iKSBpZiAkY29uZGl0aW9uYWxTdHJpbmc7CiAgICAgICAgIH0KICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOwotICAgIH0gZWxzaWYgKCRjb2RlR2Vu
ZXJhdG9yLT5Jbmhlcml0c0ludGVyZmFjZSgkaW50ZXJmYWNlLCAiV29ya2VyR2xvYmFsU2NvcGUi
KSkgewotICAgICAgICBBZGRJbmNsdWRlc0ZvclR5cGVJbkltcGwoJGludGVyZmFjZU5hbWUpOwot
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiR7Y2xhc3NOYW1lfTo6JGNsYXNzTmFtZShWTSYg
dm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBSZWY8JGltcGxUeXBlPiYmIGltcGwpXG4iKTsKLSAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgOiAkcGFyZW50Q2xhc3NOYW1lKHZtLCBzdHJ1
Y3R1cmUsIFdURk1vdmUoaW1wbCkpXG4iKTsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7
XG4iKTsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOwotICAgIH0gZWxzaWYg
KCFOZWVkc0ltcGxlbWVudGF0aW9uQ2xhc3MoJGludGVyZmFjZSkpIHsKLSAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIke2NsYXNzTmFtZX06OiRjbGFzc05hbWUoU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpXG4iKTsKLSAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgOiAkcGFyZW50Q2xhc3NOYW1lKHN0cnVjdHVyZSwgZ2xvYmFsT2Jq
ZWN0KSB7IH1cblxuIik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIke2NsYXNzTmFtZX06OiRjbGFzc05hbWUoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xv
YmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFJlZjwkaW1wbFR5cGU+JiYgaW1wbClcbiIpOwotICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICA6ICRwYXJlbnRDbGFzc05hbWUoc3RydWN0dXJl
LCBnbG9iYWxPYmplY3QsIFdURk1vdmUoaW1wbCkpXG4iKTsKLSAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICJ7XG4iKTsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOwotICAg
IH0KLQotICAgIHVubGVzcyAoSXNET01HbG9iYWxPYmplY3QoJGludGVyZmFjZSkpIHsKICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICJKU09iamVjdCogJHtjbGFzc05hbWV9OjpjcmVhdGVQcm90
b3R5cGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KVxuIik7CiAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CiAgICAgICAgIGlmICgkaGFzUGFyZW50ICYmICRw
YXJlbnRDbGFzc05hbWUgbmUgIkpTQzo6RE9NTm9kZUZpbHRlciIpIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RH
bG9iYWxPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dP
YmplY3QvV2ViS2l0RE9NVGVzdEdsb2JhbE9iamVjdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNThkNDYzMmY3
ZGZjYWUzNjI4YTlkMjM5MGJjZWE1M2I0Njk1OTg3YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RHbG9i
YWxPYmplY3QuY3BwCkBAIC0wLDAgKzEsMjU3IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0
IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJl
ZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NVGVzdEdsb2Jh
bE9iamVjdC5oIgorCisjaW5jbHVkZSAiQ1NTSW1wb3J0UnVsZS5oIgorI2luY2x1ZGUgIkRPTU9i
amVjdENhY2hlLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25D
b2RlLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmgiCisjaW5jbHVkZSAi
SlNNYWluVGhyZWFkRXhlY1N0YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgor
I2luY2x1ZGUgIldlYktpdERPTVRlc3RHbG9iYWxPYmplY3RQcml2YXRlLmgiCisjaW5jbHVkZSAi
Z29iamVjdC9Db252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfR0xPQkFM
X09CSkVDVF9HRVRfUFJJVkFURShvYmopIEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShvYmos
IFdFQktJVF9ET01fVFlQRV9URVNUX0dMT0JBTF9PQkpFQ1QsIFdlYktpdERPTVRlc3RHbG9iYWxP
YmplY3RQcml2YXRlKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NVGVzdEdsb2JhbE9iamVj
dFByaXZhdGUgeworICAgIFJlZlB0cjxXZWJDb3JlOjpUZXN0R2xvYmFsT2JqZWN0PiBjb3JlT2Jq
ZWN0OworfSBXZWJLaXRET01UZXN0R2xvYmFsT2JqZWN0UHJpdmF0ZTsKKworbmFtZXNwYWNlIFdl
YktpdCB7CisKK1dlYktpdERPTVRlc3RHbG9iYWxPYmplY3QqIGtpdChXZWJDb3JlOjpUZXN0R2xv
YmFsT2JqZWN0KiBvYmopCit7CisgICAgaWYgKCFvYmopCisgICAgICAgIHJldHVybiAwOworCisg
ICAgaWYgKGdwb2ludGVyIHJldCA9IERPTU9iamVjdENhY2hlOjpnZXQob2JqKSkKKyAgICAgICAg
cmV0dXJuIFdFQktJVF9ET01fVEVTVF9HTE9CQUxfT0JKRUNUKHJldCk7CisKKyAgICByZXR1cm4g
d3JhcFRlc3RHbG9iYWxPYmplY3Qob2JqKTsKK30KKworV2ViQ29yZTo6VGVzdEdsb2JhbE9iamVj
dCogY29yZShXZWJLaXRET01UZXN0R2xvYmFsT2JqZWN0KiByZXF1ZXN0KQoreworICAgIHJldHVy
biByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGVzdEdsb2JhbE9iamVjdCo+KFdFQktJ
VF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTVRl
c3RHbG9iYWxPYmplY3QqIHdyYXBUZXN0R2xvYmFsT2JqZWN0KFdlYkNvcmU6OlRlc3RHbG9iYWxP
YmplY3QqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJldHVy
biBXRUJLSVRfRE9NX1RFU1RfR0xPQkFMX09CSkVDVChnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9U
WVBFX1RFU1RfR0xPQkFMX09CSkVDVCwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0
cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworR19ERUZJTkVfVFlQRShXZWJLaXRE
T01UZXN0R2xvYmFsT2JqZWN0LCB3ZWJraXRfZG9tX3Rlc3RfZ2xvYmFsX29iamVjdCwgV0VCS0lU
X0RPTV9UWVBFX09CSkVDVCkKKworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfUkVHVUxB
Ul9BVFRSSUJVVEUsCisgICAgUFJPUF9FTkFCTEVEX0FUX1JVTlRJTUVfQVRUUklCVVRFLAorfTsK
Kworc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X2dsb2JhbF9vYmplY3RfZmluYWxpemUoR09i
amVjdCogb2JqZWN0KQoreworICAgIFdlYktpdERPTVRlc3RHbG9iYWxPYmplY3RQcml2YXRlKiBw
cml2ID0gV0VCS0lUX0RPTV9URVNUX0dMT0JBTF9PQkpFQ1RfR0VUX1BSSVZBVEUob2JqZWN0KTsK
KworICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OmZvcmdldChwcml2LT5jb3JlT2JqZWN0Lmdl
dCgpKTsKKworICAgIHByaXYtPn5XZWJLaXRET01UZXN0R2xvYmFsT2JqZWN0UHJpdmF0ZSgpOwor
ICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9nbG9iYWxfb2JqZWN0X3BhcmVudF9j
bGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVz
dF9nbG9iYWxfb2JqZWN0X3NldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3Bl
cnR5SWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdl
YktpdERPTVRlc3RHbG9iYWxPYmplY3QqIHNlbGYgPSBXRUJLSVRfRE9NX1RFU1RfR0xPQkFMX09C
SkVDVChvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9Q
X1JFR1VMQVJfQVRUUklCVVRFOgorICAgICAgICB3ZWJraXRfZG9tX3Rlc3RfZ2xvYmFsX29iamVj
dF9zZXRfcmVndWxhcl9hdHRyaWJ1dGUoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9FTkFCTEVEX0FUX1JVTlRJTUVfQVRUUklC
VVRFOgorICAgICAgICB3ZWJraXRfZG9tX3Rlc3RfZ2xvYmFsX29iamVjdF9zZXRfZW5hYmxlZF9h
dF9ydW50aW1lX2F0dHJpYnV0ZShzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElE
X1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsK
KyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9nbG9iYWxfb2JqZWN0X2dl
dF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFs
dWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTVRlc3RHbG9iYWxPYmplY3Qq
IHNlbGYgPSBXRUJLSVRfRE9NX1RFU1RfR0xPQkFMX09CSkVDVChvYmplY3QpOworCisgICAgc3dp
dGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX1JFR1VMQVJfQVRUUklCVVRFOgorICAg
ICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX3Rlc3RfZ2xvYmFsX29i
amVjdF9nZXRfcmVndWxhcl9hdHRyaWJ1dGUoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBST1BfRU5BQkxFRF9BVF9SVU5USU1FX0FUVFJJQlVURToKKyAgICAgICAgZ192YWx1ZV90
YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV90ZXN0X2dsb2JhbF9vYmplY3RfZ2V0X2VuYWJs
ZWRfYXRfcnVudGltZV9hdHRyaWJ1dGUoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBkZWZh
dWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBw
cm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIEdP
YmplY3QqIHdlYmtpdF9kb21fdGVzdF9nbG9iYWxfb2JqZWN0X2NvbnN0cnVjdG9yKEdUeXBlIHR5
cGUsIGd1aW50IGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgR09iamVjdENvbnN0cnVjdFBhcmFt
KiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQoreworICAgIEdPYmplY3QqIG9iamVjdCA9IEdfT0JKRUNU
X0NMQVNTKHdlYmtpdF9kb21fdGVzdF9nbG9iYWxfb2JqZWN0X3BhcmVudF9jbGFzcyktPmNvbnN0
cnVjdG9yKHR5cGUsIGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgY29uc3RydWN0UHJvcGVydGll
cyk7CisKKyAgICBXZWJLaXRET01UZXN0R2xvYmFsT2JqZWN0UHJpdmF0ZSogcHJpdiA9IFdFQktJ
VF9ET01fVEVTVF9HTE9CQUxfT0JKRUNUX0dFVF9QUklWQVRFKG9iamVjdCk7CisgICAgcHJpdi0+
Y29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRlc3RHbG9iYWxPYmplY3QqPihXRUJL
SVRfRE9NX09CSkVDVChvYmplY3QpLT5jb3JlT2JqZWN0KTsKKyAgICBXZWJLaXQ6OkRPTU9iamVj
dENhY2hlOjpwdXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSwgb2JqZWN0KTsKKworICAgIHJldHVy
biBvYmplY3Q7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9nbG9iYWxfb2JqZWN0
X2NsYXNzX2luaXQoV2ViS2l0RE9NVGVzdEdsb2JhbE9iamVjdENsYXNzKiByZXF1ZXN0Q2xhc3Mp
Cit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1
ZXN0Q2xhc3MpOworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShnb2JqZWN0Q2xhc3MsIHNp
emVvZihXZWJLaXRET01UZXN0R2xvYmFsT2JqZWN0UHJpdmF0ZSkpOworICAgIGdvYmplY3RDbGFz
cy0+Y29uc3RydWN0b3IgPSB3ZWJraXRfZG9tX3Rlc3RfZ2xvYmFsX29iamVjdF9jb25zdHJ1Y3Rv
cjsKKyAgICBnb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0X2RvbV90ZXN0X2dsb2JhbF9v
YmplY3RfZmluYWxpemU7CisgICAgZ29iamVjdENsYXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJraXRf
ZG9tX3Rlc3RfZ2xvYmFsX29iamVjdF9zZXRfcHJvcGVydHk7CisgICAgZ29iamVjdENsYXNzLT5n
ZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX3Rlc3RfZ2xvYmFsX29iamVjdF9nZXRfcHJvcGVydHk7
CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0
Q2xhc3MsCisgICAgICAgIFBST1BfUkVHVUxBUl9BVFRSSUJVVEUsCisgICAgICAgIGdfcGFyYW1f
c3BlY19zdHJpbmcoCisgICAgICAgICAgICAicmVndWxhci1hdHRyaWJ1dGUiLAorICAgICAgICAg
ICAgIlRlc3RHbG9iYWxPYmplY3Q6cmVndWxhci1hdHRyaWJ1dGUiLAorICAgICAgICAgICAgInJl
YWQtd3JpdGUgZ2NoYXIqIFRlc3RHbG9iYWxPYmplY3Q6cmVndWxhci1hdHRyaWJ1dGUiLAorICAg
ICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAg
ICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3Ms
CisgICAgICAgIFBST1BfRU5BQkxFRF9BVF9SVU5USU1FX0FUVFJJQlVURSwKKyAgICAgICAgZ19w
YXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJlbmFibGVkLWF0LXJ1bnRpbWUtYXR0cmli
dXRlIiwKKyAgICAgICAgICAgICJUZXN0R2xvYmFsT2JqZWN0OmVuYWJsZWQtYXQtcnVudGltZS1h
dHRyaWJ1dGUiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIFRlc3RHbG9iYWxPYmpl
Y3Q6ZW5hYmxlZC1hdC1ydW50aW1lLWF0dHJpYnV0ZSIsCisgICAgICAgICAgICAiIiwKKyAgICAg
ICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworfQorCitzdGF0aWMgdm9pZCB3ZWJr
aXRfZG9tX3Rlc3RfZ2xvYmFsX29iamVjdF9pbml0KFdlYktpdERPTVRlc3RHbG9iYWxPYmplY3Qq
IHJlcXVlc3QpCit7CisgICAgV2ViS2l0RE9NVGVzdEdsb2JhbE9iamVjdFByaXZhdGUqIHByaXYg
PSBXRUJLSVRfRE9NX1RFU1RfR0xPQkFMX09CSkVDVF9HRVRfUFJJVkFURShyZXF1ZXN0KTsKKyAg
ICBuZXcgKHByaXYpIFdlYktpdERPTVRlc3RHbG9iYWxPYmplY3RQcml2YXRlKCk7Cit9CisKK3Zv
aWQgd2Via2l0X2RvbV90ZXN0X2dsb2JhbF9vYmplY3RfcmVndWxhcl9vcGVyYXRpb24oV2ViS2l0
RE9NVGVzdEdsb2JhbE9iamVjdCogc2VsZiwgY29uc3QgZ2NoYXIqIHRlc3RQYXJhbSkKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZf
ZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfR0xPQkFMX09CSkVDVChzZWxmKSk7CisgICAgZ19yZXR1
cm5faWZfZmFpbCh0ZXN0UGFyYW0pOworICAgIFdlYkNvcmU6OlRlc3RHbG9iYWxPYmplY3QqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVGVzdFBh
cmFtID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHRlc3RQYXJhbSk7CisgICAgaXRlbS0+cmVndWxh
ck9wZXJhdGlvbihjb252ZXJ0ZWRUZXN0UGFyYW0pOworfQorCit2b2lkIHdlYmtpdF9kb21fdGVz
dF9nbG9iYWxfb2JqZWN0X2VuYWJsZWRfYXRfcnVudGltZV9vcGVyYXRpb24oV2ViS2l0RE9NVGVz
dEdsb2JhbE9iamVjdCogc2VsZiwgY29uc3QgZ2NoYXIqIHRlc3RQYXJhbSkKK3sKKyNpZiBFTkFC
TEUoVEVTVF9GRUFUVVJFKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9HTE9CQUxfT0JKRUNU
KHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHRlc3RQYXJhbSk7CisgICAgV2ViQ29yZTo6
VGVzdEdsb2JhbE9iamVjdCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0
cmluZyBjb252ZXJ0ZWRUZXN0UGFyYW0gPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodGVzdFBhcmFt
KTsKKyAgICBpdGVtLT5lbmFibGVkQXRSdW50aW1lT3BlcmF0aW9uKGNvbnZlcnRlZFRlc3RQYXJh
bSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBVTlVTRURfUEFSQU0odGVz
dFBhcmFtKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJUZXN0IEZlYXR1
cmUiKQorI2VuZGlmIC8qIEVOQUJMRShURVNUX0ZFQVRVUkUpICovCit9CisKK3ZvaWQgd2Via2l0
X2RvbV90ZXN0X2dsb2JhbF9vYmplY3RfZW5hYmxlZF9hdF9ydW50aW1lX29wZXJhdGlvbihXZWJL
aXRET01UZXN0R2xvYmFsT2JqZWN0KiBzZWxmLCBnbG9uZyB0ZXN0UGFyYW0pCit7CisjaWYgRU5B
QkxFKFRFU1RfRkVBVFVSRSkKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfR0xPQkFMX09CSkVD
VChzZWxmKSk7CisgICAgV2ViQ29yZTo6VGVzdEdsb2JhbE9iamVjdCogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBpdGVtLT5lbmFibGVkQXRSdW50aW1lT3BlcmF0aW9uKHRlc3RQYXJh
bSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBVTlVTRURfUEFSQU0odGVz
dFBhcmFtKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJUZXN0IEZlYXR1
cmUiKQorI2VuZGlmIC8qIEVOQUJMRShURVNUX0ZFQVRVUkUpICovCit9CisKK2djaGFyKiB3ZWJr
aXRfZG9tX3Rlc3RfZ2xvYmFsX29iamVjdF9nZXRfcmVndWxhcl9hdHRyaWJ1dGUoV2ViS2l0RE9N
VGVzdEdsb2JhbE9iamVjdCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNU
X0dMT0JBTF9PQkpFQ1Qoc2VsZiksIDApOworICAgIFdlYkNvcmU6OlRlc3RHbG9iYWxPYmplY3Qq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRU
b1VURjhTdHJpbmcoaXRlbS0+cmVndWxhckF0dHJpYnV0ZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCit2b2lkIHdlYmtpdF9kb21fdGVzdF9nbG9iYWxfb2JqZWN0X3NldF9yZWd1bGFyX2F0
dHJpYnV0ZShXZWJLaXRET01UZXN0R2xvYmFsT2JqZWN0KiBzZWxmLCBjb25zdCBnY2hhciogdmFs
dWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdf
cmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX0dMT0JBTF9PQkpFQ1Qoc2VsZikpOwor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OlRlc3RHbG9iYWxPYmpl
Y3QqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVk
VmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldFJlZ3Vs
YXJBdHRyaWJ1dGUoY29udmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV90ZXN0
X2dsb2JhbF9vYmplY3RfZ2V0X2VuYWJsZWRfYXRfcnVudGltZV9hdHRyaWJ1dGUoV2ViS2l0RE9N
VGVzdEdsb2JhbE9iamVjdCogc2VsZikKK3sKKyNpZiBFTkFCTEUoVEVTVF9GRUFUVVJFKQorICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfR0xPQkFMX09CSkVDVChzZWxmKSwgMCk7CisgICAg
V2ViQ29yZTo6VGVzdEdsb2JhbE9iamVjdCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5lbmFibGVkQXRSdW50
aW1lQXR0cmlidXRlKCkpOworICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9Q
QVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJUZXN0IEZl
YXR1cmUiKQorICAgIHJldHVybiAwOworI2VuZGlmIC8qIEVOQUJMRShURVNUX0ZFQVRVUkUpICov
Cit9CisKK3ZvaWQgd2Via2l0X2RvbV90ZXN0X2dsb2JhbF9vYmplY3Rfc2V0X2VuYWJsZWRfYXRf
cnVudGltZV9hdHRyaWJ1dGUoV2ViS2l0RE9NVGVzdEdsb2JhbE9iamVjdCogc2VsZiwgY29uc3Qg
Z2NoYXIqIHZhbHVlKQoreworI2lmIEVOQUJMRShURVNUX0ZFQVRVUkUpCisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19URVNUX0dMT0JBTF9PQkpFQ1Qoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
dmFsdWUpOworICAgIFdlYkNvcmU6OlRlc3RHbG9iYWxPYmplY3QqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6
ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGUo
Y29udmVydGVkVmFsdWUpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgVU5V
U0VEX1BBUkFNKHZhbHVlKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJU
ZXN0IEZlYXR1cmUiKQorI2VuZGlmIC8qIEVOQUJMRShURVNUX0ZFQVRVUkUpICovCit9CisKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dl
YktpdERPTVRlc3RHbG9iYWxPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RHbG9iYWxPYmplY3QuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4y
MTZiOWFmNTNkODBlNjQxMTVmNWNkOTJkMWY4Y2M0YmJhZWUyNWE0Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9N
VGVzdEdsb2JhbE9iamVjdC5oCkBAIC0wLDAgKzEsMTI1IEBACisvKgorICogIFRoaXMgZmlsZSBp
cyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUg
aGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZ
IQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTVRlc3RHbG9iYWxPYmplY3RfaAorI2RlZmlu
ZSBXZWJLaXRET01UZXN0R2xvYmFsT2JqZWN0X2gKKworI2lmZGVmIFdFQktJVF9ET01fVVNFX1VO
U1RBQkxFX0FQSQorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRk
b20vV2ViS2l0RE9NT2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmlu
ZXMtdW5zdGFibGUuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQ
RV9URVNUX0dMT0JBTF9PQkpFQ1QgICAgICAgICAgICAod2Via2l0X2RvbV90ZXN0X2dsb2JhbF9v
YmplY3RfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9URVNUX0dMT0JBTF9PQkpFQ1Qo
b2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lU
X0RPTV9UWVBFX1RFU1RfR0xPQkFMX09CSkVDVCwgV2ViS2l0RE9NVGVzdEdsb2JhbE9iamVjdCkp
CisjZGVmaW5lIFdFQktJVF9ET01fVEVTVF9HTE9CQUxfT0JKRUNUX0NMQVNTKGtsYXNzKSAgICAo
R19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9URVNUX0dM
T0JBTF9PQkpFQ1QsIFdlYktpdERPTVRlc3RHbG9iYWxPYmplY3RDbGFzcykKKyNkZWZpbmUgV0VC
S0lUX0RPTV9JU19URVNUX0dMT0JBTF9PQkpFQ1Qob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tf
SU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1RFU1RfR0xPQkFMX09CSkVDVCkp
CisjZGVmaW5lIFdFQktJVF9ET01fSVNfVEVTVF9HTE9CQUxfT0JKRUNUX0NMQVNTKGtsYXNzKSAo
R19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9URVNUX0dM
T0JBTF9PQkpFQ1QpKQorI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfR0xPQkFMX09CSkVDVF9HRVRf
Q0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9N
X1RZUEVfVEVTVF9HTE9CQUxfT0JKRUNULCBXZWJLaXRET01UZXN0R2xvYmFsT2JqZWN0Q2xhc3Mp
KQorCitzdHJ1Y3QgX1dlYktpdERPTVRlc3RHbG9iYWxPYmplY3QgeworICAgIFdlYktpdERPTU9i
amVjdCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTVRlc3RHbG9iYWxP
YmplY3RDbGFzcyB7CisgICAgV2ViS2l0RE9NT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworfTsK
KworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV90ZXN0X2dsb2JhbF9vYmplY3RfZ2V0X3R5
cGUodm9pZCk7CisKKy8qKgorICogd2Via2l0X2RvbV90ZXN0X2dsb2JhbF9vYmplY3RfcmVndWxh
cl9vcGVyYXRpb246CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdEdsb2JhbE9iamVjdAorICog
QHRlc3RQYXJhbTogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dF
QktJVF9BUEkgdm9pZAord2Via2l0X2RvbV90ZXN0X2dsb2JhbF9vYmplY3RfcmVndWxhcl9vcGVy
YXRpb24oV2ViS2l0RE9NVGVzdEdsb2JhbE9iamVjdCogc2VsZiwgY29uc3QgZ2NoYXIqIHRlc3RQ
YXJhbSk7CisKKy8qKgorICogd2Via2l0X2RvbV90ZXN0X2dsb2JhbF9vYmplY3RfZW5hYmxlZF9h
dF9ydW50aW1lX29wZXJhdGlvbjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0R2xvYmFsT2Jq
ZWN0CisgKiBAdGVzdFBhcmFtOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUK
KyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX3Rlc3RfZ2xvYmFsX29iamVjdF9lbmFi
bGVkX2F0X3J1bnRpbWVfb3BlcmF0aW9uKFdlYktpdERPTVRlc3RHbG9iYWxPYmplY3QqIHNlbGYs
IGNvbnN0IGdjaGFyKiB0ZXN0UGFyYW0pOworCisvKioKKyAqIHdlYmtpdF9kb21fdGVzdF9nbG9i
YWxfb2JqZWN0X2VuYWJsZWRfYXRfcnVudGltZV9vcGVyYXRpb246CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NVGVzdEdsb2JhbE9iamVjdAorICogQHRlc3RQYXJhbTogQSAjZ2xvbmcKKyAqCisgKiBT
dGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV90ZXN0
X2dsb2JhbF9vYmplY3RfZW5hYmxlZF9hdF9ydW50aW1lX29wZXJhdGlvbihXZWJLaXRET01UZXN0
R2xvYmFsT2JqZWN0KiBzZWxmLCBnbG9uZyB0ZXN0UGFyYW0pOworCisvKioKKyAqIHdlYmtpdF9k
b21fdGVzdF9nbG9iYWxfb2JqZWN0X2dldF9yZWd1bGFyX2F0dHJpYnV0ZToKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01UZXN0R2xvYmFsT2JqZWN0CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAq
CisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRf
ZG9tX3Rlc3RfZ2xvYmFsX29iamVjdF9nZXRfcmVndWxhcl9hdHRyaWJ1dGUoV2ViS2l0RE9NVGVz
dEdsb2JhbE9iamVjdCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV90ZXN0X2dsb2JhbF9v
YmplY3Rfc2V0X3JlZ3VsYXJfYXR0cmlidXRlOgorICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RH
bG9iYWxPYmplY3QKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3Rh
YmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV90ZXN0X2dsb2JhbF9vYmplY3Rf
c2V0X3JlZ3VsYXJfYXR0cmlidXRlKFdlYktpdERPTVRlc3RHbG9iYWxPYmplY3QqIHNlbGYsIGNv
bnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV90ZXN0X2dsb2JhbF9vYmpl
Y3RfZ2V0X2VuYWJsZWRfYXRfcnVudGltZV9hdHRyaWJ1dGU6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NVGVzdEdsb2JhbE9iamVjdAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisgKgorICogU3Rh
YmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV90ZXN0
X2dsb2JhbF9vYmplY3RfZ2V0X2VuYWJsZWRfYXRfcnVudGltZV9hdHRyaWJ1dGUoV2ViS2l0RE9N
VGVzdEdsb2JhbE9iamVjdCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV90ZXN0X2dsb2Jh
bF9vYmplY3Rfc2V0X2VuYWJsZWRfYXRfcnVudGltZV9hdHRyaWJ1dGU6CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NVGVzdEdsb2JhbE9iamVjdAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyAqIFN0
YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX3Rlc3Rf
Z2xvYmFsX29iamVjdF9zZXRfZW5hYmxlZF9hdF9ydW50aW1lX2F0dHJpYnV0ZShXZWJLaXRET01U
ZXN0R2xvYmFsT2JqZWN0KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCitHX0VORF9ERUNM
UworCisjZW5kaWYgLyogV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJICovCisjZW5kaWYgLyog
V2ViS2l0RE9NVGVzdEdsb2JhbE9iamVjdF9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0R2xvYmFsT2JqZWN0
UHJpdmF0ZS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3Qv
V2ViS2l0RE9NVGVzdEdsb2JhbE9iamVjdFByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41N2MwMDI4ZThh
ZDc5ZTBjYjg5ODU3NjdkOGI3MTU4Nzk5ZTE3OWFlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEdsb2Jh
bE9iamVjdFByaXZhdGUuaApAQCAtMCwwICsxLDMzIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBw
YXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFz
IGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTVRlc3RHbG9iYWxPYmplY3RQcml2YXRlX2gKKyNk
ZWZpbmUgV2ViS2l0RE9NVGVzdEdsb2JhbE9iamVjdFByaXZhdGVfaAorCisjaW5jbHVkZSAiVGVz
dEdsb2JhbE9iamVjdC5oIgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01UZXN0R2xvYmFs
T2JqZWN0Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9NVGVzdEdsb2JhbE9iamVj
dCogd3JhcFRlc3RHbG9iYWxPYmplY3QoV2ViQ29yZTo6VGVzdEdsb2JhbE9iamVjdCopOworV2Vi
S2l0RE9NVGVzdEdsb2JhbE9iamVjdCoga2l0KFdlYkNvcmU6OlRlc3RHbG9iYWxPYmplY3QqKTsK
K1dlYkNvcmU6OlRlc3RHbG9iYWxPYmplY3QqIGNvcmUoV2ViS2l0RE9NVGVzdEdsb2JhbE9iamVj
dCopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBXZWJLaXRET01UZXN0R2xv
YmFsT2JqZWN0UHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHbG9iYWxPYmplY3QuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjczNzQ5YmZhN2I0ZGQ5NThiZGJkMzg5NDcyM2E4NjM4NDI3N2Q3YTcKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2xv
YmFsT2JqZWN0LmNwcApAQCAtMCwwICsxLDM4OSBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMgcGFy
dCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgICAgVGhpcyBmaWxlIGhhcyBi
ZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKwor
ICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAg
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNUZXN0R2xvYmFsT2JqZWN0LmgiCisK
KyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisj
aW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVh
dHVyZXMuaCIKKyNpbmNsdWRlICJVUkwuaCIKKyNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+Cisj
aW5jbHVkZSA8cnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5oPgorI2luY2x1ZGUgPHJ1bnRpbWUv
SlNTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBK
U0M7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gRnVuY3Rpb25zCisKK0pTQzo6RW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9u
UmVndWxhck9wZXJhdGlvbihKU0M6OkV4ZWNTdGF0ZSopOworI2lmIEVOQUJMRShURVNUX0ZFQVRV
UkUpCitKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0R2xvYmFsT2JqZWN0
SW5zdGFuY2VGdW5jdGlvbkVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRpb24oSlNDOjpFeGVjU3RhdGUq
KTsKKyNlbmRpZgorCisvLyBBdHRyaWJ1dGVzCisKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
R2xvYmFsT2JqZWN0UmVndWxhckF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0
UmVndWxhckF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpT
Qzo6RW5jb2RlZEpTVmFsdWUpOworI2lmIEVOQUJMRShURVNUX0ZFQVRVUkUpCitKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdEVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGUoSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citi
b29sIHNldEpTVGVzdEdsb2JhbE9iamVjdEVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGUoSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKKyNl
bmRpZgorSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RDb25zdHJ1Y3RvcihK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsK
K2Jvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKKwordHlwZWRlZiBKU0RP
TUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZTxKU1Rlc3RHbG9iYWxPYmplY3Q+IEpTVGVzdEds
b2JhbE9iamVjdENvbnN0cnVjdG9yOworCisvKiBIYXNoIHRhYmxlICovCisKK3N0YXRpYyBjb25z
dCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBKU1Rlc3RHbG9iYWxPYmplY3RUYWJsZUluZGV4Wzhd
ID0geworICAgIHsgLTEsIC0xIH0sCisgICAgeyAxLCAtMSB9LAorICAgIHsgLTEsIC0xIH0sCisg
ICAgeyAwLCAtMSB9LAorICAgIHsgLTEsIC0xIH0sCisgICAgeyAtMSwgLTEgfSwKKyAgICB7IC0x
LCAtMSB9LAorICAgIHsgLTEsIC0xIH0sCit9OworCisKK3N0YXRpYyBjb25zdCBIYXNoVGFibGVW
YWx1ZSBKU1Rlc3RHbG9iYWxPYmplY3RUYWJsZVZhbHVlc1tdID0KK3sKKyAgICB7ICJyZWd1bGFy
QXR0cmlidXRlIiwgQ3VzdG9tQWNjZXNzb3IsIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0
aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0R2xvYmFsT2JqZWN0UmVn
dWxhckF0dHJpYnV0ZSksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQ
dXRWYWx1ZUZ1bmM+KHNldEpTVGVzdEdsb2JhbE9iamVjdFJlZ3VsYXJBdHRyaWJ1dGUpIH0gfSwK
KyAgICB7ICJyZWd1bGFyT3BlcmF0aW9uIiwgSlNDOjpGdW5jdGlvbiwgTm9JbnRyaW5zaWMsIHsg
KGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RHbG9iYWxPYmplY3RJ
bnN0YW5jZUZ1bmN0aW9uUmVndWxhck9wZXJhdGlvbiksIChpbnRwdHJfdCkgKDEpIH0gfSwKK307
CisKK3N0YXRpYyBjb25zdCBIYXNoVGFibGUgSlNUZXN0R2xvYmFsT2JqZWN0VGFibGUgPSB7IDIs
IDcsIHRydWUsIEpTVGVzdEdsb2JhbE9iamVjdFRhYmxlVmFsdWVzLCBKU1Rlc3RHbG9iYWxPYmpl
Y3RUYWJsZUluZGV4IH07Cit0ZW1wbGF0ZTw+IEpTVmFsdWUgSlNUZXN0R2xvYmFsT2JqZWN0Q29u
c3RydWN0b3I6OnByb3RvdHlwZUZvclN0cnVjdHVyZShKU0M6OlZNJiB2bSwgY29uc3QgSlNET01H
bG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICBVTlVTRURfUEFSQU0odm0pOworICAg
IHJldHVybiBnbG9iYWxPYmplY3QuZnVuY3Rpb25Qcm90b3R5cGUoKTsKK30KKwordGVtcGxhdGU8
PiB2b2lkIEpTVGVzdEdsb2JhbE9iamVjdENvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGll
cyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7CisgICAgcHV0RGly
ZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIGdsb2JhbE9iamVjdC5nZXRQcm90
b3R5cGVEaXJlY3QoKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwgRG9udEVudW0pOworICAgIHB1
dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKCZ2
bSwgU3RyaW5nKEFTQ0lJTGl0ZXJhbCgiVGVzdEdsb2JhbE9iamVjdCIpKSksIFJlYWRPbmx5IHwg
RG9udEVudW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBq
c051bWJlcigwKSwgUmVhZE9ubHkgfCBEb250RW51bSk7Cit9CisKK3RlbXBsYXRlPD4gY29uc3Qg
Q2xhc3NJbmZvIEpTVGVzdEdsb2JhbE9iamVjdENvbnN0cnVjdG9yOjpzX2luZm8gPSB7ICJUZXN0
R2xvYmFsT2JqZWN0IiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rl
c3RHbG9iYWxPYmplY3RDb25zdHJ1Y3RvcikgfTsKKworLyogSGFzaCB0YWJsZSBmb3IgcHJvdG90
eXBlICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBKU1Rlc3RHbG9i
YWxPYmplY3RQcm90b3R5cGVUYWJsZUluZGV4WzJdID0geworICAgIHsgLTEsIC0xIH0sCisgICAg
eyAwLCAtMSB9LAorfTsKKworCitzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0R2xv
YmFsT2JqZWN0UHJvdG90eXBlVGFibGVWYWx1ZXNbXSA9Cit7CisgICAgeyAiY29uc3RydWN0b3Ii
LCBEb250RW51bSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5
U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RHbG9iYWxPYmplY3RDb25zdHJ1Y3RvciksIChpbnRw
dHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVz
dEdsb2JhbE9iamVjdENvbnN0cnVjdG9yKSB9IH0sCit9OworCitzdGF0aWMgY29uc3QgSGFzaFRh
YmxlIEpTVGVzdEdsb2JhbE9iamVjdFByb3RvdHlwZVRhYmxlID0geyAxLCAxLCB0cnVlLCBKU1Rl
c3RHbG9iYWxPYmplY3RQcm90b3R5cGVUYWJsZVZhbHVlcywgSlNUZXN0R2xvYmFsT2JqZWN0UHJv
dG90eXBlVGFibGVJbmRleCB9OworY29uc3QgQ2xhc3NJbmZvIEpTVGVzdEdsb2JhbE9iamVjdFBy
b3RvdHlwZTo6c19pbmZvID0geyAiVGVzdEdsb2JhbE9iamVjdFByb3RvdHlwZSIsICZCYXNlOjpz
X2luZm8sICZKU1Rlc3RHbG9iYWxPYmplY3RQcm90b3R5cGVUYWJsZSwgQ1JFQVRFX01FVEhPRF9U
QUJMRShKU1Rlc3RHbG9iYWxPYmplY3RQcm90b3R5cGUpIH07CisKK2Jvb2wgSlNUZXN0R2xvYmFs
T2JqZWN0UHJvdG90eXBlOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgRXhl
Y1N0YXRlKiBzdGF0ZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBz
bG90KQoreworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIFVOVVNFRF9QQVJBTSh2bSk7
CisgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3RHbG9iYWxPYmplY3RQcm90b3R5
cGUqPihvYmplY3QpOworICAgIHJldHVybiBnZXRTdGF0aWNQcm9wZXJ0eVNsb3Q8SlNUZXN0R2xv
YmFsT2JqZWN0UHJvdG90eXBlLCBKU09iamVjdD4oc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdFBy
b3RvdHlwZVRhYmxlLCB0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOworfQorCitjb25z
dCBDbGFzc0luZm8gSlNUZXN0R2xvYmFsT2JqZWN0OjpzX2luZm8gPSB7ICJUZXN0R2xvYmFsT2Jq
ZWN0IiwgJkJhc2U6OnNfaW5mbywgJkpTVGVzdEdsb2JhbE9iamVjdFRhYmxlLCBDUkVBVEVfTUVU
SE9EX1RBQkxFKEpTVGVzdEdsb2JhbE9iamVjdCkgfTsKKworSlNUZXN0R2xvYmFsT2JqZWN0OjpK
U1Rlc3RHbG9iYWxPYmplY3QoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0
JiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0R2xvYmFsT2JqZWN0PiYmIGltcGwpCisgICAgOiBKU0RP
TVdyYXBwZXI8VGVzdEdsb2JhbE9iamVjdD4oc3RydWN0dXJlLCBnbG9iYWxPYmplY3QsIFdURk1v
dmUoaW1wbCkpCit7Cit9CisKK3ZvaWQgSlNUZXN0R2xvYmFsT2JqZWN0OjpmaW5pc2hDcmVhdGlv
bihWTSYgdm0pCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworCisjaWYgRU5BQkxF
KFRFU1RfRkVBVFVSRSkKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVh
dHVyZXMoKS50ZXN0RmVhdHVyZUVuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjdXN0b21HZXR0
ZXJTZXR0ZXIgPSBDdXN0b21HZXR0ZXJTZXR0ZXI6OmNyZWF0ZSh2bSwganNUZXN0R2xvYmFsT2Jq
ZWN0RW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZSwgc2V0SlNUZXN0R2xvYmFsT2JqZWN0RW5hYmxl
ZEF0UnVudGltZUF0dHJpYnV0ZSk7CisgICAgICAgIHB1dERpcmVjdEN1c3RvbUFjY2Vzc29yKHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5lbmFibGVkQXRSdW50aW1lQXR0cmlidXRlLCBjdXN0b21HZXR0
ZXJTZXR0ZXIsIGF0dHJpYnV0ZXNGb3JTdHJ1Y3R1cmUoQ3VzdG9tQWNjZXNzb3IpKTsKKyAgICB9
CisjZW5kaWYKKyNpZiBFTkFCTEUoVEVTVF9GRUFUVVJFKQorICAgIGlmIChSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnRlc3RGZWF0dXJlRW5hYmxlZCgpKQorICAgICAg
ICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbih2bSwgdGhpcywgdm0ucHJvcGVydHlOYW1lcy0+ZW5h
YmxlZEF0UnVudGltZU9wZXJhdGlvbiwgMSwganNUZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5j
dGlvbkVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRpb24sIE5vSW50cmluc2ljLCBhdHRyaWJ1dGVzRm9y
U3RydWN0dXJlKEpTQzo6RnVuY3Rpb24pKTsKKyNlbmRpZgorfQorCit2b2lkIEpTVGVzdEdsb2Jh
bE9iamVjdDo6ZGVzdHJveShKU0M6OkpTQ2VsbCogY2VsbCkKK3sKKyAgICBKU1Rlc3RHbG9iYWxP
YmplY3QqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxKU1Rlc3RHbG9iYWxPYmplY3QqPihjZWxs
KTsKKyAgICB0aGlzT2JqZWN0LT5KU1Rlc3RHbG9iYWxPYmplY3Q6On5KU1Rlc3RHbG9iYWxPYmpl
Y3QoKTsKK30KKworYm9vbCBKU1Rlc3RHbG9iYWxPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdChK
U09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2Fz
dDxKU1Rlc3RHbG9iYWxPYmplY3QqPihvYmplY3QpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKKyAgICBpZiAoZ2V0U3RhdGljUHJvcGVydHlTbG90
PEpTVGVzdEdsb2JhbE9iamVjdCwgQmFzZT4oc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdFRhYmxl
LCB0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVj
dFJlZ3VsYXJBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVT
RURfUEFSQU0odGhpc1ZhbHVlKTsKKyAgICBKU1ZhbHVlIGRlY29kZWRUaGlzVmFsdWUgPSBKU1Zh
bHVlOjpkZWNvZGUodGhpc1ZhbHVlKTsKKyAgICBhdXRvKiBjYXN0ZWRUaGlzID0ganNEeW5hbWlj
Q2FzdDxKU1Rlc3RHbG9iYWxPYmplY3QqPihkZWNvZGVkVGhpc1ZhbHVlKTsKKyAgICBpZiAoVU5M
SUtFTFkoIWNhc3RlZFRoaXMpKSB7CisgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJv
cigqc3RhdGUsICJUZXN0R2xvYmFsT2JqZWN0IiwgInJlZ3VsYXJBdHRyaWJ1dGUiKTsKKyAgICB9
CisgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJl
c3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLnJlZ3VsYXJBdHRyaWJ1dGUoKSk7
CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworfQorCisKKyNpZiBFTkFCTEUo
VEVTVF9GRUFUVVJFKQorRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0RW5hYmxlZEF0
UnVudGltZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIFByb3BlcnR5TmFtZSkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNF
RF9QQVJBTSh0aGlzVmFsdWUpOworICAgIEpTVmFsdWUgZGVjb2RlZFRoaXNWYWx1ZSA9IEpTVmFs
dWU6OmRlY29kZSh0aGlzVmFsdWUpOworICAgIGF1dG8qIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWND
YXN0PEpTVGVzdEdsb2JhbE9iamVjdCo+KGRlY29kZWRUaGlzVmFsdWUpOworICAgIGlmIChVTkxJ
S0VMWSghY2FzdGVkVGhpcykpIHsKKyAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9y
KCpzdGF0ZSwgIlRlc3RHbG9iYWxPYmplY3QiLCAiZW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZSIp
OworICAgIH0KKyAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIEpT
VmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwuZW5hYmxlZEF0UnVu
dGltZUF0dHJpYnV0ZSgpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cit9
CisKKyNlbmRpZgorCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RDb25zdHJ1Y3Rv
cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFt
ZSkKK3sKKyAgICBKU1Rlc3RHbG9iYWxPYmplY3RQcm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHlu
YW1pY0Nhc3Q8SlNUZXN0R2xvYmFsT2JqZWN0UHJvdG90eXBlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRo
aXNWYWx1ZSkpOworICAgIGlmICghZG9tT2JqZWN0KQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5
cGVFcnJvcihzdGF0ZSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3RHbG9iYWxP
YmplY3Q6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBkb21PYmplY3QtPmdsb2JhbE9iamVj
dCgpKSk7Cit9CisKK2Jvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0Q29uc3RydWN0b3IoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUpCit7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
VmFsdWUpOworICAgIEpTVGVzdEdsb2JhbE9iamVjdFByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNE
eW5hbWljQ2FzdDxKU1Rlc3RHbG9iYWxPYmplY3RQcm90b3R5cGUqPihKU1ZhbHVlOjpkZWNvZGUo
dGhpc1ZhbHVlKSk7CisgICAgaWYgKFVOTElLRUxZKCFkb21PYmplY3QpKSB7CisgICAgICAgIHRo
cm93Vk1UeXBlRXJyb3Ioc3RhdGUpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAg
IC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yCisgICAgcmV0dXJuIGRvbU9iamVj
dC0+cHV0RGlyZWN0KHN0YXRlLT52bSgpLCBzdGF0ZS0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVj
dG9yLCB2YWx1ZSk7Cit9CisKK2Jvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0UmVndWxhckF0dHJp
YnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3sKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CisgICAgSlNU
ZXN0R2xvYmFsT2JqZWN0KiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RHbG9iYWxP
YmplY3QqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYgKFVOTElLRUxZKCFj
YXN0ZWRUaGlzKSkgeworICAgICAgICByZXR1cm4gdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRl
LCAiVGVzdEdsb2JhbE9iamVjdCIsICJyZWd1bGFyQXR0cmlidXRlIik7CisgICAgfQorICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgU3RyaW5nIG5hdGl2ZVZhbHVl
ID0gdmFsdWUudG9TdHJpbmcoc3RhdGUpLT52YWx1ZShzdGF0ZSk7CisgICAgaWYgKFVOTElLRUxZ
KHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpbXBs
LnNldFJlZ3VsYXJBdHRyaWJ1dGUobmF0aXZlVmFsdWUpOworICAgIHJldHVybiB0cnVlOworfQor
CisKKyNpZiBFTkFCTEUoVEVTVF9GRUFUVVJFKQorYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RF
bmFibGVkQXRSdW50aW1lQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQoreworICAgIEpTVmFsdWUg
dmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0o
dGhpc1ZhbHVlKTsKKyAgICBKU1Rlc3RHbG9iYWxPYmplY3QqIGNhc3RlZFRoaXMgPSBqc0R5bmFt
aWNDYXN0PEpTVGVzdEdsb2JhbE9iamVjdCo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsK
KyAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CisgICAgICAgIHJldHVybiB0aHJvd1Nl
dHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0R2xvYmFsT2JqZWN0IiwgImVuYWJsZWRBdFJ1bnRp
bWVBdHRyaWJ1dGUiKTsKKyAgICB9CisgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBw
ZWQoKTsKKyAgICBTdHJpbmcgbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1N0cmluZyhzdGF0ZSktPnZh
bHVlKHN0YXRlKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGltcGwuc2V0RW5hYmxlZEF0UnVudGltZUF0dHJpYnV0
ZShuYXRpdmVWYWx1ZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKKyNlbmRpZgorCitKU1ZhbHVl
IEpTVGVzdEdsb2JhbE9iamVjdDo6Z2V0Q29uc3RydWN0b3IoVk0mIHZtLCBjb25zdCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxK
U1Rlc3RHbG9iYWxPYmplY3RDb25zdHJ1Y3Rvcj4odm0sICpqc0Nhc3Q8Y29uc3QgSlNET01HbG9i
YWxPYmplY3QqPihnbG9iYWxPYmplY3QpKTsKK30KKworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uUmVndWxhck9wZXJhdGlvbihF
eGVjU3RhdGUqIHN0YXRlKQoreworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gc3RhdGUtPnRoaXNW
YWx1ZSgpOworICAgIGF1dG8gY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0R2xvYmFs
T2JqZWN0Kj4odGhpc1ZhbHVlKTsKKyAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQorICAg
ICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RHbG9iYWxPYmplY3Qi
LCAicmVndWxhck9wZXJhdGlvbiIpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2Fz
dGVkVGhpcywgSlNUZXN0R2xvYmFsT2JqZWN0OjppbmZvKCkpOworICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENv
dW50KCkgPCAxKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgY3JlYXRlTm90
RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKKyAgICBTdHJpbmcgdGVzdFBhcmFtID0gc3Rh
dGUtPmFyZ3VtZW50KDApLnRvU3RyaW5nKHN0YXRlKS0+dmFsdWUoc3RhdGUpOworICAgIGlmIChV
TkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIGltcGwucmVndWxhck9wZXJhdGlvbih0ZXN0UGFy
YW0pOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cit9CisKKyNp
ZiBFTkFCTEUoVEVTVF9GRUFUVVJFKQorc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uRW5hYmxlZEF0UnVudGltZU9wZXJhdGlvbjEo
RXhlY1N0YXRlKiBzdGF0ZSkKK3sKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IHN0YXRlLT50aGlz
VmFsdWUoKTsKKyAgICBhdXRvIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdEdsb2Jh
bE9iamVjdCo+KHRoaXNWYWx1ZSk7CisgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKKyAg
ICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqc3RhdGUsICJUZXN0R2xvYmFsT2JqZWN0
IiwgImVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRpb24iKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdEdsb2JhbE9iamVjdDo6aW5mbygpKTsKKyAgICBhdXRv
JiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+
YXJndW1lbnRDb3VudCgpIDwgMSkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUs
IGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CisgICAgU3RyaW5nIHRlc3RQ
YXJhbSA9IHN0YXRlLT5hcmd1bWVudCgwKS50b1N0cmluZyhzdGF0ZSktPnZhbHVlKHN0YXRlKTsK
KyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBpbXBsLmVuYWJsZWRBdFJ1bnRp
bWVPcGVyYXRpb24odGVzdFBhcmFtKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOworfQorCisjZW5kaWYKKworI2lmIEVOQUJMRShURVNUX0ZFQVRVUkUpCitzdGF0
aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rp
b25FbmFibGVkQXRSdW50aW1lT3BlcmF0aW9uMihFeGVjU3RhdGUqIHN0YXRlKQoreworICAgIEpT
VmFsdWUgdGhpc1ZhbHVlID0gc3RhdGUtPnRoaXNWYWx1ZSgpOworICAgIGF1dG8gY2FzdGVkVGhp
cyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0R2xvYmFsT2JqZWN0Kj4odGhpc1ZhbHVlKTsKKyAgICBp
ZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQorICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVy
cm9yKCpzdGF0ZSwgIlRlc3RHbG9iYWxPYmplY3QiLCAiZW5hYmxlZEF0UnVudGltZU9wZXJhdGlv
biIpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0R2xv
YmFsT2JqZWN0OjppbmZvKCkpOworICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKKyAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJy
b3Ioc3RhdGUpKTsKKyAgICBpbnQgdGVzdFBhcmFtID0gdG9JbnQzMihzdGF0ZSwgc3RhdGUtPmFy
Z3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhh
ZEV4Y2VwdGlvbigpKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKKyAgICBpbXBsLmVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRpb24odGVzdFBhcmFtKTsKKyAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworfQorCisjZW5kaWYKKwor
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1
bmN0aW9uRW5hYmxlZEF0UnVudGltZU9wZXJhdGlvbihFeGVjU3RhdGUqIHN0YXRlKQoreworICAg
IHNpemVfdCBhcmdzQ291bnQgPSBzdGQ6Om1pbjxzaXplX3Q+KDEsIHN0YXRlLT5hcmd1bWVudENv
dW50KCkpOworI2lmIEVOQUJMRShURVNUX0ZFQVRVUkUpCisgICAgaWYgKGFyZ3NDb3VudCA9PSAx
KQorICAgICAgICByZXR1cm4ganNUZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5jdGlvbkVuYWJs
ZWRBdFJ1bnRpbWVPcGVyYXRpb24xKHN0YXRlKTsKKyNlbmRpZgorCisjaWYgRU5BQkxFKFRFU1Rf
RkVBVFVSRSkKKyAgICBpZiAoYXJnc0NvdW50ID09IDEpCisgICAgICAgIHJldHVybiBqc1Rlc3RH
bG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uRW5hYmxlZEF0UnVudGltZU9wZXJhdGlvbjIoc3Rh
dGUpOworI2VuZGlmCisKKyAgICBpZiAoYXJnc0NvdW50IDwgMSkKKyAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihzdGF0ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsK
KyAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSk7Cit9CisKK2Jvb2wgSlNUZXN0R2xv
YmFsT2JqZWN0T3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpT
Qzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAg
VU5VU0VEX1BBUkFNKGhhbmRsZSk7CisgICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOworICAgIHJl
dHVybiBmYWxzZTsKK30KKwordm9pZCBKU1Rlc3RHbG9iYWxPYmplY3RPd25lcjo6ZmluYWxpemUo
SlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqIGNvbnRleHQpCit7CisgICAg
YXV0byoganNUZXN0R2xvYmFsT2JqZWN0ID0ganNDYXN0PEpTVGVzdEdsb2JhbE9iamVjdCo+KGhh
bmRsZS5zbG90KCktPmFzQ2VsbCgpKTsKKyAgICBhdXRvJiB3b3JsZCA9ICpzdGF0aWNfY2FzdDxE
T01XcmFwcGVyV29ybGQqPihjb250ZXh0KTsKKyAgICB1bmNhY2hlV3JhcHBlcih3b3JsZCwgJmpz
VGVzdEdsb2JhbE9iamVjdC0+d3JhcHBlZCgpLCBqc1Rlc3RHbG9iYWxPYmplY3QpOworfQorCisj
aWYgRU5BQkxFKEJJTkRJTkdfSU5URUdSSVRZKQorI2lmIFBMQVRGT1JNKFdJTikKKyNwcmFnbWEg
d2FybmluZyhkaXNhYmxlOiA0NDgzKQorZXh0ZXJuICJDIiB7IGV4dGVybiB2b2lkICgqY29uc3Qg
X19pZGVudGlmaWVyKCI/P183VGVzdEdsb2JhbE9iamVjdEBXZWJDb3JlQEA2QkAiKVtdKSgpOyB9
CisjZWxzZQorZXh0ZXJuICJDIiB7IGV4dGVybiB2b2lkKiBfWlRWTjdXZWJDb3JlMTZUZXN0R2xv
YmFsT2JqZWN0RVtdOyB9CisjZW5kaWYKKyNlbmRpZgorCitKU0M6OkpTVmFsdWUgdG9KU05ld2x5
Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IFRlc3RHbG9iYWxPYmplY3QqIGltcGwpCit7CisgICAgaWYgKCFpbXBsKQorICAgICAgICByZXR1
cm4ganNOdWxsKCk7CisgICAgcmV0dXJuIGNyZWF0ZU5ld1dyYXBwZXI8SlNUZXN0R2xvYmFsT2Jq
ZWN0PihnbG9iYWxPYmplY3QsIGltcGwpOworfQorCitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4
ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3RHbG9iYWxPYmpl
Y3QqIGltcGwpCit7CisgICAgaWYgKCFpbXBsKQorICAgICAgICByZXR1cm4ganNOdWxsKCk7Cisg
ICAgaWYgKEpTVmFsdWUgcmVzdWx0ID0gZ2V0RXhpc3RpbmdXcmFwcGVyPEpTVGVzdEdsb2JhbE9i
amVjdD4oZ2xvYmFsT2JqZWN0LCBpbXBsKSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworI2lm
IEVOQUJMRShCSU5ESU5HX0lOVEVHUklUWSkKKyAgICB2b2lkKiBhY3R1YWxWVGFibGVQb2ludGVy
ID0gKihyZWludGVycHJldF9jYXN0PHZvaWQqKj4oaW1wbCkpOworI2lmIFBMQVRGT1JNKFdJTikK
KyAgICB2b2lkKiBleHBlY3RlZFZUYWJsZVBvaW50ZXIgPSByZWludGVycHJldF9jYXN0PHZvaWQq
PihfX2lkZW50aWZpZXIoIj8/XzdUZXN0R2xvYmFsT2JqZWN0QFdlYkNvcmVAQDZCQCIpKTsKKyNl
bHNlCisgICAgdm9pZCogZXhwZWN0ZWRWVGFibGVQb2ludGVyID0gJl9aVFZON1dlYkNvcmUxNlRl
c3RHbG9iYWxPYmplY3RFWzJdOworI2lmIENPTVBJTEVSKENMQU5HKQorICAgIC8vIElmIHRoaXMg
ZmFpbHMgVGVzdEdsb2JhbE9iamVjdCBkb2VzIG5vdCBoYXZlIGEgdnRhYmxlLCBzbyB5b3UgbmVl
ZCB0byBhZGQgdGhlCisgICAgLy8gSW1wbGVtZW50YXRpb25MYWNrc1ZUYWJsZSBhdHRyaWJ1dGUg
dG8gdGhlIGludGVyZmFjZSBkZWZpbml0aW9uCisgICAgQ09NUElMRV9BU1NFUlQoX19pc19wb2x5
bW9ycGhpYyhUZXN0R2xvYmFsT2JqZWN0KSwgVGVzdEdsb2JhbE9iamVjdF9pc19ub3RfcG9seW1v
cnBoaWMpOworI2VuZGlmCisjZW5kaWYKKyAgICAvLyBJZiB5b3UgaGl0IHRoaXMgYXNzZXJ0aW9u
IHlvdSBlaXRoZXIgaGF2ZSBhIHVzZSBhZnRlciBmcmVlIGJ1Zywgb3IKKyAgICAvLyBUZXN0R2xv
YmFsT2JqZWN0IGhhcyBzdWJjbGFzc2VzLiBJZiBUZXN0R2xvYmFsT2JqZWN0IGhhcyBzdWJjbGFz
c2VzIHRoYXQgZ2V0IHBhc3NlZAorICAgIC8vIHRvIHRvSlMoKSB3ZSBjdXJyZW50bHkgcmVxdWly
ZSBUZXN0R2xvYmFsT2JqZWN0IHlvdSB0byBvcHQgb3V0IG9mIGJpbmRpbmcgaGFyZGVuaW5nCisg
ICAgLy8gYnkgYWRkaW5nIHRoZSBTa2lwVlRhYmxlVmFsaWRhdGlvbiBhdHRyaWJ1dGUgdG8gdGhl
IGludGVyZmFjZSBJREwgZGVmaW5pdGlvbgorICAgIFJFTEVBU0VfQVNTRVJUKGFjdHVhbFZUYWJs
ZVBvaW50ZXIgPT0gZXhwZWN0ZWRWVGFibGVQb2ludGVyKTsKKyNlbmRpZgorICAgIHJldHVybiBj
cmVhdGVOZXdXcmFwcGVyPEpTVGVzdEdsb2JhbE9iamVjdD4oZ2xvYmFsT2JqZWN0LCBpbXBsKTsK
K30KKworVGVzdEdsb2JhbE9iamVjdCogSlNUZXN0R2xvYmFsT2JqZWN0Ojp0b1dyYXBwZWQoSlND
OjpKU1ZhbHVlIHZhbHVlKQoreworICAgIGlmIChhdXRvKiB3cmFwcGVyID0ganNEeW5hbWljQ2Fz
dDxKU1Rlc3RHbG9iYWxPYmplY3QqPih2YWx1ZSkpCisgICAgICAgIHJldHVybiAmd3JhcHBlci0+
d3JhcHBlZCgpOworICAgIHJldHVybiBudWxscHRyOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2Jq
ZWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYTcwNWVlZDg0NmUzOTEwYThmMjJmYzdlYjVhNzc2Zjk0NDJiYTVm
ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RHbG9iYWxPYmplY3QuaApAQCAtMCwwICsxLDEyMyBAQAorLyoKKyAgICBUaGlz
IGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgICAgVGhp
cyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9U
IE1PRElGWSEKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAg
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAg
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisqLworCisjaWZuZGVmIEpTVGVzdEdsb2JhbE9iamVjdF9oCisjZGVmaW5lIEpTVGVz
dEdsb2JhbE9iamVjdF9oCisKKyNpbmNsdWRlICJKU0RPTVdyYXBwZXIuaCIKKyNpbmNsdWRlICJU
ZXN0R2xvYmFsT2JqZWN0LmgiCisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgVGVzdEdsb2JhbE9iamVjdDsKKworY2xhc3MgSlNU
ZXN0R2xvYmFsT2JqZWN0IDogcHVibGljIEpTRE9NV3JhcHBlcjxUZXN0R2xvYmFsT2JqZWN0PiB7
CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0RPTVdyYXBwZXI8VGVzdEdsb2JhbE9iamVjdD4gQmFz
ZTsKKyAgICBzdGF0aWMgSlNUZXN0R2xvYmFsT2JqZWN0KiBjcmVhdGUoSlNDOjpTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFRlc3RHbG9i
YWxPYmplY3Q+JiYgaW1wbCkKKyAgICB7CisgICAgICAgIEpTVGVzdEdsb2JhbE9iamVjdCogcHRy
ID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RHbG9iYWxPYmplY3Q+KGds
b2JhbE9iamVjdC0+dm0oKS5oZWFwKSkgSlNUZXN0R2xvYmFsT2JqZWN0KHN0cnVjdHVyZSwgKmds
b2JhbE9iamVjdCwgV1RGTW92ZShpbXBsKSk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24o
Z2xvYmFsT2JqZWN0LT52bSgpKTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBz
dGF0aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gZmFsc2U7CisKKyAgICBzdGF0aWMg
Y29uc3QgYm9vbCBoYXNTdGF0aWNQcm9wZXJ0eVRhYmxlID0gdHJ1ZTsKKworICAgIHN0YXRpYyBU
ZXN0R2xvYmFsT2JqZWN0KiB0b1dyYXBwZWQoSlNDOjpKU1ZhbHVlKTsKKyAgICBzdGF0aWMgYm9v
bCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIHZvaWQgZGVz
dHJveShKU0M6OkpTQ2VsbCopOworCisgICAgREVDTEFSRV9JTkZPOworCisgICAgc3RhdGljIEpT
Qzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3Rv
dHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Okdsb2JhbE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdz
KSwgaW5mbygpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVj
dG9yKEpTQzo6Vk0mLCBjb25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CitwdWJsaWM6CisgICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlNDOjpPdmVycmlkZXNHZXRP
d25Qcm9wZXJ0eVNsb3QgfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKK3Byb3RlY3RlZDoKKyAgICBK
U1Rlc3RHbG9iYWxPYmplY3QoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYsIFJl
ZjxUZXN0R2xvYmFsT2JqZWN0PiYmKTsKKworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpW
TSYgdm0pCisgICAgeworICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgICAg
IEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTsKKyAgICB9CisKKyAgICB2b2lkIGZpbmlzaENyZWF0
aW9uKEpTQzo6Vk0mKTsKK307CisKK2NsYXNzIEpTVGVzdEdsb2JhbE9iamVjdE93bmVyIDogcHVi
bGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIGJvb2wgaXNS
ZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCog
Y29udGV4dCwgSlNDOjpTbG90VmlzaXRvciYpOworICAgIHZpcnR1YWwgdm9pZCBmaW5hbGl6ZShK
U0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0KTsKK307CisKK2lubGluZSBK
U0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVyKERPTVdyYXBwZXJXb3JsZCYsIFRlc3RH
bG9iYWxPYmplY3QqKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxKU1Rlc3RHbG9iYWxP
YmplY3RPd25lcj4gb3duZXI7CisgICAgcmV0dXJuICZvd25lci5nZXQoKTsKK30KKworaW5saW5l
IHZvaWQqIHdyYXBwZXJLZXkoVGVzdEdsb2JhbE9iamVjdCogd3JhcHBhYmxlT2JqZWN0KQorewor
ICAgIHJldHVybiB3cmFwcGFibGVPYmplY3Q7Cit9CisKK0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6
RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0R2xvYmFsT2JqZWN0Kik7Citpbmxp
bmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0R2xvYmFsT2JqZWN0JiBpbXBsKSB7IHJldHVybiB0b0pT
KHN0YXRlLCBnbG9iYWxPYmplY3QsICZpbXBsKTsgfQorSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNy
ZWF0ZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3RHbG9iYWxPYmpl
Y3QqKTsKKworY2xhc3MgSlNUZXN0R2xvYmFsT2JqZWN0UHJvdG90eXBlIDogcHVibGljIEpTQzo6
SlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0M6OkpTTm9uRmluYWxP
YmplY3QgQmFzZTsKKyAgICBzdGF0aWMgSlNUZXN0R2xvYmFsT2JqZWN0UHJvdG90eXBlKiBjcmVh
dGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIEpTVGVzdEdsb2JhbE9iamVjdFBy
b3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RHbG9i
YWxPYmplY3RQcm90b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3RHbG9iYWxPYmplY3RQcm90b3R5cGUo
dm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlv
bih2bSk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZPOwor
ICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBK
U0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUp
CisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFs
T2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIEpTVGVzdEdsb2JhbE9i
amVjdFByb3RvdHlwZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KHZtLCBz
dHJ1Y3R1cmUpCisgICAgeworICAgIH0KKworICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5
U2xvdChKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwg
SlNDOjpQcm9wZXJ0eVNsb3QmKTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg
U3RydWN0dXJlRmxhZ3MgPSBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEJhc2U6
OlN0cnVjdHVyZUZsYWdzOworfTsKKworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMv
RE9NVGVzdEdsb2JhbE9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L09iakMvRE9NVGVzdEdsb2JhbE9iamVjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM4YjVjMGEzNjhiNDVl
NDNmY2JmYjg1ZmJkM2ZlMGJmNWNiN2NlY2QKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0R2xvYmFsT2JqZWN0LmgKQEAg
LTAsMCArMSwzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAw
NywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDYgU2FtdWVsIFdlaW5pZyA8c2FtLndlaW5pZ0BnbWFpbC5jb20+CisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0IDxXZWJDb3JlL0RP
TU9iamVjdC5oPgorCitAY2xhc3MgTlNTdHJpbmc7CisKK1dFQktJVF9DTEFTU19BVkFJTEFCTEVf
TUFDKDk4NzZfNSkKK1dFQkNPUkVfRVhQT1JUIEBpbnRlcmZhY2UgRE9NVGVzdEdsb2JhbE9iamVj
dCA6IERPTU9iamVjdAorQHByb3BlcnR5IChjb3B5KSBOU1N0cmluZyAqcmVndWxhckF0dHJpYnV0
ZTsKK0Bwcm9wZXJ0eSAoY29weSkgTlNTdHJpbmcgKmVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGU7
CisKKy0gKHZvaWQpcmVndWxhck9wZXJhdGlvbjooTlNTdHJpbmcgKil0ZXN0UGFyYW07CitAZW5k
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9E
T01UZXN0R2xvYmFsT2JqZWN0Lm1tIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L09iakMvRE9NVGVzdEdsb2JhbE9iamVjdC5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ZWM0YmUxZTk3MjMw
OGZiMjMwMDY5ODgxNTBiYjZiNmU5MDQyMzc3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdEdsb2JhbE9iamVjdC5tbQpA
QCAtMCwwICsxLDEyOCBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQg
b3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkg
Z2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIkRP
TUludGVybmFsLmgiCisKKyNpbXBvcnQgIkRPTVRlc3RHbG9iYWxPYmplY3QuaCIKKworI2ltcG9y
dCAiRE9NTm9kZUludGVybmFsLmgiCisjaW1wb3J0ICJET01UZXN0R2xvYmFsT2JqZWN0SW50ZXJu
YWwuaCIKKyNpbXBvcnQgIkV4Y2VwdGlvbkhhbmRsZXJzLmgiCisjaW1wb3J0ICJKU01haW5UaHJl
YWRFeGVjU3RhdGUuaCIKKyNpbXBvcnQgIlRlc3RHbG9iYWxPYmplY3QuaCIKKyNpbXBvcnQgIlRo
cmVhZENoZWNrLmgiCisjaW1wb3J0ICJVUkwuaCIKKyNpbXBvcnQgIldlYkNvcmVPYmpDRXh0cmFz
LmgiCisjaW1wb3J0ICJXZWJTY3JpcHRPYmplY3RQcml2YXRlLmgiCisjaW1wb3J0IDx3dGYvR2V0
UHRyLmg+CisKKyNkZWZpbmUgSU1QTCByZWludGVycHJldF9jYXN0PFdlYkNvcmU6OlRlc3RHbG9i
YWxPYmplY3QqPihfaW50ZXJuYWwpCisKK0BpbXBsZW1lbnRhdGlvbiBET01UZXN0R2xvYmFsT2Jq
ZWN0CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIGlmIChXZWJDb3JlT2JqQ1NjaGVkdWxlRGVh
bGxvY2F0ZU9uTWFpblRocmVhZChbRE9NVGVzdEdsb2JhbE9iamVjdCBjbGFzc10sIHNlbGYpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAoX2ludGVybmFsKQorICAgICAgICBJTVBMLT5kZXJl
ZigpOworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAoTlNTdHJpbmcgKilyZWd1bGFyQXR0
cmlidXRlCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IHJldHVybiBJTVBMLT5yZWd1bGFyQXR0cmlidXRlKCk7Cit9CisKKy0gKHZvaWQpc2V0UmVndWxh
ckF0dHJpYnV0ZTooTlNTdHJpbmcgKiluZXdSZWd1bGFyQXR0cmlidXRlCit7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIElNUEwtPnNldFJlZ3VsYXJBdHRy
aWJ1dGUobmV3UmVndWxhckF0dHJpYnV0ZSk7Cit9CisKKyNpZiBFTkFCTEUoVEVTVF9GRUFUVVJF
KQorLSAoTlNTdHJpbmcgKillbmFibGVkQXRSdW50aW1lQXR0cmlidXRlCit7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIHJldHVybiBJTVBMLT5lbmFibGVk
QXRSdW50aW1lQXR0cmlidXRlKCk7Cit9CisKKy0gKHZvaWQpc2V0RW5hYmxlZEF0UnVudGltZUF0
dHJpYnV0ZTooTlNTdHJpbmcgKiluZXdFbmFibGVkQXRSdW50aW1lQXR0cmlidXRlCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIElNUEwtPnNldEVuYWJs
ZWRBdFJ1bnRpbWVBdHRyaWJ1dGUobmV3RW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZSk7Cit9Cisj
ZW5kaWYKKworLSAodm9pZClyZWd1bGFyT3BlcmF0aW9uOihOU1N0cmluZyAqKXRlc3RQYXJhbQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBJTVBMLT5y
ZWd1bGFyT3BlcmF0aW9uKHRlc3RQYXJhbSk7Cit9CisKKworI2lmIEVOQUJMRShURVNUX0ZFQVRV
UkUpCistICh2b2lkKWVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRpb246KE5TU3RyaW5nICopdGVzdFBh
cmFtCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIElN
UEwtPmVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRpb24odGVzdFBhcmFtKTsKK30KKworI2VuZGlmCisK
KworI2lmIEVOQUJMRShURVNUX0ZFQVRVUkUpCistICh2b2lkKWVuYWJsZWRBdFJ1bnRpbWVPcGVy
YXRpb246KGludCl0ZXN0UGFyYW0KK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgSU1QTC0+ZW5hYmxlZEF0UnVudGltZU9wZXJhdGlvbih0ZXN0UGFyYW0p
OworfQorCisjZW5kaWYKKworQGVuZAorCitXZWJDb3JlOjpUZXN0R2xvYmFsT2JqZWN0KiBjb3Jl
KERPTVRlc3RHbG9iYWxPYmplY3QgKndyYXBwZXIpCit7CisgICAgcmV0dXJuIHdyYXBwZXIgPyBy
ZWludGVycHJldF9jYXN0PFdlYkNvcmU6OlRlc3RHbG9iYWxPYmplY3QqPih3cmFwcGVyLT5faW50
ZXJuYWwpIDogMDsKK30KKworRE9NVGVzdEdsb2JhbE9iamVjdCAqa2l0KFdlYkNvcmU6OlRlc3RH
bG9iYWxPYmplY3QqIHZhbHVlKQoreworICAgIFdlYkNvcmVUaHJlYWRWaW9sYXRpb25DaGVja1Jv
dW5kT25lKCk7CisgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBpZiAo
RE9NVGVzdEdsb2JhbE9iamVjdCAqd3JhcHBlciA9IGdldERPTVdyYXBwZXIodmFsdWUpKQorICAg
ICAgICByZXR1cm4gW1t3cmFwcGVyIHJldGFpbl0gYXV0b3JlbGVhc2VdOworICAgIERPTVRlc3RH
bG9iYWxPYmplY3QgKndyYXBwZXIgPSBbW0RPTVRlc3RHbG9iYWxPYmplY3QgYWxsb2NdIF9pbml0
XTsKKyAgICB3cmFwcGVyLT5faW50ZXJuYWwgPSByZWludGVycHJldF9jYXN0PERPTU9iamVjdElu
dGVybmFsKj4odmFsdWUpOworICAgIHZhbHVlLT5yZWYoKTsKKyAgICBhZGRET01XcmFwcGVyKHdy
YXBwZXIsIHZhbHVlKTsKKyAgICByZXR1cm4gW3dyYXBwZXIgYXV0b3JlbGVhc2VdOworfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVz
dEdsb2JhbE9iamVjdEludGVybmFsLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvT2JqQy9ET01UZXN0R2xvYmFsT2JqZWN0SW50ZXJuYWwuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41MzU5
MWVhN2E5YjNjMzFhMzI1ZGIzYzU3M2I0NzhkZTQxNzBmZmRjCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdEdsb2JhbE9i
amVjdEludGVybmFsLmgKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0
IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqIFRoaXMgZmlsZSBoYXMgYmVl
biBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0IDxXZWJDb3Jl
L0RPTVRlc3RHbG9iYWxPYmplY3QuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgVGVz
dEdsb2JhbE9iamVjdDsKK30KKworV0VCQ09SRV9FWFBPUlQgV2ViQ29yZTo6VGVzdEdsb2JhbE9i
amVjdCogY29yZShET01UZXN0R2xvYmFsT2JqZWN0ICopOworV0VCQ09SRV9FWFBPUlQgRE9NVGVz
dEdsb2JhbE9iamVjdCAqa2l0KFdlYkNvcmU6OlRlc3RHbG9iYWxPYmplY3QqKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0R2xvYmFsT2JqZWN0
LmlkbCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0R2xvYmFsT2Jq
ZWN0LmlkbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4wNzIwYTVjYWQwY2M0ZmFjODc4Y2M1MmUwOGM3NWFkMDQ0Zjg0
YzRkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Rlc3RHbG9iYWxPYmplY3QuaWRsCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBUaGlzIGludGVyZmFjZSBpcyByZWNv
Z25pemVkIGFzIGEgZ2xvYmFsIG9iamVjdCBieSB0aGUgYmluZGluZ3MgZ2VuZXJhdG9yLgoraW50
ZXJmYWNlIFRlc3RHbG9iYWxPYmplY3QgeworICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgcmVndWxh
ckF0dHJpYnV0ZTsKKyAgICBbQ29uZGl0aW9uYWw9VEVTVF9GRUFUVVJFLCBFbmFibGVkQXRSdW50
aW1lPVRlc3RGZWF0dXJlXSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGVuYWJsZWRBdFJ1bnRpbWVBdHRy
aWJ1dGU7CisgICAgdm9pZCByZWd1bGFyT3BlcmF0aW9uKERPTVN0cmluZyB0ZXN0UGFyYW0pOwor
ICAgIFtDb25kaXRpb25hbD1URVNUX0ZFQVRVUkUsIEVuYWJsZWRBdFJ1bnRpbWU9VGVzdEZlYXR1
cmVdIHZvaWQgZW5hYmxlZEF0UnVudGltZU9wZXJhdGlvbihET01TdHJpbmcgdGVzdFBhcmFtKTsK
KyAgICBbQ29uZGl0aW9uYWw9VEVTVF9GRUFUVVJFLCBFbmFibGVkQXRSdW50aW1lPVRlc3RGZWF0
dXJlXSB2b2lkIGVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRpb24obG9uZyB0ZXN0UGFyYW0pOworfTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>