<?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>163466</bug_id>
          
          <creation_ts>2016-10-14 16:02:07 -0700</creation_ts>
          <short_desc>Implement serializer = { attribute }</short_desc>
          <delta_ts>2016-10-17 11:28:48 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>
          
          
          <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>163473</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Simon Fraser (smfr)">simon.fraser</reporter>
          <assigned_to name="Simon Fraser (smfr)">simon.fraser</assigned_to>
          <cc>alex</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>dbates</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>kangil.han</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1240454</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2016-10-14 16:02:07 -0700</bug_when>
    <thetext>I&apos;m trying to use serializer = { attribute }; in bug 163464 but the object gets no serialization attributes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1240487</commentid>
    <comment_count>1</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2016-10-14 16:51:53 -0700</bug_when>
    <thetext>It also generates code that doesn&apos;t build: bug 163464.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1240523</commentid>
    <comment_count>2</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2016-10-14 18:29:18 -0700</bug_when>
    <thetext>Darin and I wrote some code for this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1240562</commentid>
    <comment_count>3</comment_count>
      <attachid>291707</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2016-10-14 22:28:31 -0700</bug_when>
    <thetext>Created attachment 291707
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1240564</commentid>
    <comment_count>4</comment_count>
      <attachid>291709</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2016-10-14 22:45:48 -0700</bug_when>
    <thetext>Created attachment 291709
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1240569</commentid>
    <comment_count>5</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2016-10-14 23:36:17 -0700</bug_when>
    <thetext>Thanks for implementing the new feature. I think you probably want to modify the parser to handle this case, and generate the list of serializable attributes, I&apos;m not sure actually what you get in the list of attributes in this case because the keyword is not supported, probably none. In the parseSerializationAttributes function add a new if for this case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1240573</commentid>
    <comment_count>6</comment_count>
      <attachid>291709</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2016-10-14 23:57:15 -0700</bug_when>
    <thetext>Comment on attachment 291709
Patch

I don&apos;t think this solution is correct, as I explained you need to modify the parser and check the list of serializable types from the list of all the attributes to generate the correct list of attributes, instead of trying to detect them in the generator: https://heycam.github.io/webidl/#dfn-serializable-type. In the applyMemberList function you can check the serializable after parsing the keyword correctly and just add the ones that comply with the serializable types.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1240619</commentid>
    <comment_count>7</comment_count>
      <attachid>291723</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2016-10-15 13:16:13 -0700</bug_when>
    <thetext>Created attachment 291723
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1240634</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-10-15 14:07:53 -0700</bug_when>
    <thetext>I don’t think the parser should implement the concept of &quot;serializable attributes&quot;; the parser doesn’t know enough about all the types to know which ones should be treated as serializable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1240635</commentid>
    <comment_count>9</comment_count>
      <attachid>291723</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-10-15 14:09:21 -0700</bug_when>
    <thetext>Comment on attachment 291723
Patch

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

&gt; Source/WebCore/bindings/scripts/IDLParser.pm:2340
&gt; +sub isSerializableAttribute
&gt; +{
&gt; +    my $attribute = shift;
&gt; +
&gt; +    # FIXME: Need to support more than primitive serializable types.
&gt; +    my $serializable_types = &apos;^(\(byte|octet|short|unsigned short|long|unsigned long|long long|unsigned long long|float|unrestricted float|double|unrestricted double|boolean|DOMString|ByteString|USVString)$&apos;;
&gt; +    return $attribute-&gt;signature-&gt;type =~ /$serializable_types/;
&gt; +}

I am not sure that the concept is whether an attribute is serializable belongs in the parser.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1240637</commentid>
    <comment_count>10</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-10-15 14:12:38 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; I&apos;m not sure actually what you get in the list of attributes in
&gt; this case because the keyword is not supported, probably none.

You get the attribute name &quot;attribute&quot;; we tested the original patch and it worked.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1240638</commentid>
    <comment_count>11</comment_count>
      <attachid>291723</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2016-10-15 14:13:35 -0700</bug_when>
    <thetext>Comment on attachment 291723
Patch

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

&gt;&gt; Source/WebCore/bindings/scripts/IDLParser.pm:2340
&gt;&gt; +}
&gt; 
&gt; I am not sure that the concept is whether an attribute is serializable belongs in the parser.

I&apos;ll adjust the FIXME accordingly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1240639</commentid>
    <comment_count>12</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2016-10-15 14:18:23 -0700</bug_when>
    <thetext>https://trac.webkit.org/r207378</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1240655</commentid>
    <comment_count>13</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-10-15 15:50:47 -0700</bug_when>
    <thetext>Is the serializer line allowed to be before the interface? If not, do we need to check for that case and report an error?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1240726</commentid>
    <comment_count>14</comment_count>
      <attachid>291723</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-10-16 07:35:15 -0700</bug_when>
    <thetext>Comment on attachment 291723
Patch

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

&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:3988
&gt; +            if ($attribute_name eq $attribute-&gt;signature-&gt;name) {

If serialiser uses an attribute not defined by the interface, we will silently skip it. Might be better to die I guess, except if WebIDL spec says so.
Maybe the parser should give a list of attributes and not a list of attribute names.

&gt; Source/WebCore/bindings/scripts/IDLParser.pm:1199
&gt; +        $domSerializable-&gt;hasGetter(1);

It might have been good to not die in the parser but die in the binding generator since it is a binding generator limitation.
Also this would allow writing
hasGetter(1) if...

&gt;&gt;&gt; Source/WebCore/bindings/scripts/IDLParser.pm:2340
&gt;&gt;&gt; +}
&gt;&gt; 
&gt;&gt; I am not sure that the concept is whether an attribute is serializable belongs in the parser.
&gt; 
&gt; I&apos;ll adjust the FIXME accordingly.

There is potentially the need to know all IDL types as an attribute mat return a value whose type is defined by an interface marked as serializable.
The parser might not have that knowledge.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1240727</commentid>
    <comment_count>15</comment_count>
      <attachid>291723</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-10-16 08:38:53 -0700</bug_when>
    <thetext>Comment on attachment 291723
Patch

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

&gt;&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:3988
&gt;&gt; +            if ($attribute_name eq $attribute-&gt;signature-&gt;name) {
&gt; 
&gt; If serialiser uses an attribute not defined by the interface, we will silently skip it. Might be better to die I guess, except if WebIDL spec says so.
&gt; Maybe the parser should give a list of attributes and not a list of attribute names.

Yes, this behavior is bad. I don’t think it’s important *where* the check is, but it’s valuable to check if the attribute name doesn’t match any attribute and cause an error.

&gt;&gt; Source/WebCore/bindings/scripts/IDLParser.pm:1199
&gt;&gt; +        $domSerializable-&gt;hasGetter(1);
&gt; 
&gt; It might have been good to not die in the parser but die in the binding generator since it is a binding generator limitation.
&gt; Also this would allow writing
&gt; hasGetter(1) if...

Sure, slightly better, but there is no practical difference -- either way the fix is to update the IDL file -- so I wouldn’t waste time worrying about where the check is.

&gt;&gt;&gt;&gt; Source/WebCore/bindings/scripts/IDLParser.pm:2340
&gt;&gt;&gt;&gt; +}
&gt;&gt;&gt; 
&gt;&gt;&gt; I am not sure that the concept is whether an attribute is serializable belongs in the parser.
&gt;&gt; 
&gt;&gt; I&apos;ll adjust the FIXME accordingly.
&gt; 
&gt; There is potentially the need to know all IDL types as an attribute mat return a value whose type is defined by an interface marked as serializable.
&gt; The parser might not have that knowledge.

Yes, that was what I meant. Anyway, no immediate crisis here, but that thinking was one reason I put the handling of &quot;attribute&quot; in the code generator in my first cut at this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1240754</commentid>
    <comment_count>16</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2016-10-16 12:02:38 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; Comment on attachment 291723 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=291723&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:3988
&gt; &gt;&gt; +            if ($attribute_name eq $attribute-&gt;signature-&gt;name) {
&gt; &gt; 
&gt; &gt; If serialiser uses an attribute not defined by the interface, we will silently skip it. Might be better to die I guess, except if WebIDL spec says so.
&gt; &gt; Maybe the parser should give a list of attributes and not a list of attribute names.
&gt; 
&gt; Yes, this behavior is bad. I don’t think it’s important *where* the check
&gt; is, but it’s valuable to check if the attribute name doesn’t match any
&gt; attribute and cause an error.

Fixed in https://trac.webkit.org/r207394</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1240817</commentid>
    <comment_count>17</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-10-16 17:10:28 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; Fixed in https://trac.webkit.org/r207394

That has the word &quot;serializate&quot; in it!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1240877</commentid>
    <comment_count>18</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2016-10-16 23:04:04 -0700</bug_when>
    <thetext>I agree with Darin, not sure about the proper place of the attributes serializable detection, my point was really about the parser support for the situation. Great patch, thanks for adding it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1240972</commentid>
    <comment_count>19</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-10-17 09:23:23 -0700</bug_when>
    <thetext>Another tiny improvement we could make would be to have some kind of error at compile time if there is a list with no attribute names in it. Currently, instead of failing to generate code, we will generate code that won’t compile in that case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1241051</commentid>
    <comment_count>20</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2016-10-17 11:28:48 -0700</bug_when>
    <thetext>I fixed the typo. I will leave other cleanup for bindings gurus :)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>291707</attachid>
            <date>2016-10-14 22:28:31 -0700</date>
            <delta_ts>2016-10-14 22:45:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-163466-20161014222502.patch</filename>
            <type>text/plain</type>
            <size>51482</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA3MzY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDNhZDczOWJhYjBiYzUx
YWNiNmE1NTA1MmEwYjAyMDc5ZmU5YTg3ZS4uZjBmM2I1Y2NjZGJlOWQ5NDk1Mzg4YjMzNTViMDI2
MGM1YTE5MzM2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5IEBACisyMDE2LTEwLTE0ICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCBz
ZXJpYWxpemVyID0geyBhdHRyaWJ1dGUgfQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTYzNDY2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgUGF0Y2ggYnkgRGFyaW4gQWRsZXIuCisgICAgICAgIAorICAgICAg
ICBGaXggdGhlIGNvZGUgZ2VuZXJhdG9yIHRvIGdlbmVyYXRlIGNvZGUgZm9yIHNlcmlhbGl6ZXIg
PSB7IGF0dHJpYnV0ZSB9LgorICAgICAgICBDdXJyZW50bHkgZ2VuZXJhdGVzIGNvZGUgZm9yIGFs
bCBhdHRyaWJ1dGVzLCBub3QganVzdCB0aG9zZSB0aGF0IGFyZSBzZXJpYWxpemFibGUuCisgICAg
ICAgIAorICAgICAgICBSZW1vdmVkIGN1c3RvbSBzZXJpYWxpemF0aW9uIGZvciBDbGllbnRSZWN0
IGFuZCBQZXJmb3JtYW5jZVRpbWluZy4KKyAgICAgICAgCisgICAgICAgIE90aGVyIG1pbm9yIGNs
ZWFudXAgdG8gYWx3YXlzIGdldCAkaW50ZXJmYWNlTmFtZSBmcm9tICRpbnRlcmZhY2UtPm5hbWUs
IGFuZCB0byBmaXgKKyAgICAgICAgT2JqZWN0Q29uc3RydWN0b3IuaCB0byBiZSBpbmNsdWRlZCBh
cyA8cnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5oPi4KKworICAgICAgICAqIFdlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0NsaWVudFJl
Y3RDdXN0b20uY3BwOiBSZW1vdmVkLgorICAgICAgICAoV2ViQ29yZTo6SlNDbGllbnRSZWN0Ojp0
b0pTT04pOiBEZWxldGVkLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTUGVyZm9ybWFuY2VUaW1p
bmdDdXN0b20uY3BwOiBSZW1vdmVkLgorICAgICAgICAoV2ViQ29yZTo6SlNQZXJmb3JtYW5jZVRp
bWluZzo6dG9KU09OKTogRGVsZXRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JKUy5wbToKKyAgICAgICAgKEdlbmVyYXRlSW1wbGVtZW50YXRpb24pOgorICAgICAg
ICAoSXNTZXJpYWxpemFibGUpOgorICAgICAgICAoR2VuZXJhdGVTZXJpYWxpemVyRnVuY3Rpb24p
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmNwcDoKKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVG9KU09OQ2FsbGVyKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbi5jcHA6IEFk
ZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0
aW9uLmg6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0T2JqLmlk
bDogQ2hhbmdlIHRoZSBzZXJpYWxpemF0aW9uIG9yZGVyIHRvIG5vdCBtYXRjaCB0aGUKKyAgICAg
ICAgYXR0cmlidXRlIG9yZGVyLCB0byB0ZXN0IG9yZGVyaW5nIGluIHRoZSBnZW5lcmF0ZWQgY29k
ZS4KKyAgICAgICAgKiBkb20vQ2xpZW50UmVjdC5pZGw6CisgICAgICAgICogcGFnZS9QZXJmb3Jt
YW5jZVRpbWluZy5pZGw6CisKIDIwMTYtMTAtMTQgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxl
LmNvbT4KIAogICAgICAgICBTZXR0aW5nIEhUTUxNZWRpYUVsZW1lbnQubXV0ZWQgdG8gdGhlIHNh
bWUgdmFsdWUgc2hvdWxkIG5vdCBmaXJlIGEgdm9sdW1lIGNoYW5nZSBldmVudApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGM4MDNl
ODVhNDAzZDRiMTJjOTlmNWRmYWNmNWFjYzE5ZmY3OTY1ZDkuLmFkODMzYjdmZjgxYTExNjhkMzg4
OGNlM2EzNGJkNjVkMDdmNDdhNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEzNzksNyArMTM3OSw2IEBACiAJCTMxQzBGRjNF
MEU0Q0VGQUMwMDdENkZFNSAvKiBKU1dlYktpdEFuaW1hdGlvbkV2ZW50LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMUMwRkYzQTBFNENFRkFDMDA3RDZG
RTUgLyogSlNXZWJLaXRBbmltYXRpb25FdmVudC5oICovOyB9OwogCQkzMUMwRkYzRjBFNENFRkFD
MDA3RDZGRTUgLyogSlNXZWJLaXRUcmFuc2l0aW9uRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzFDMEZGM0IwRTRDRUZBQzAwN0Q2RkU1IC8q
IEpTV2ViS2l0VHJhbnNpdGlvbkV2ZW50LmNwcCAqLzsgfTsKIAkJMzFDMEZGNDAwRTRDRUZBQzAw
N0Q2RkU1IC8qIEpTV2ViS2l0VHJhbnNpdGlvbkV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMUMwRkYzQzBFNENFRkFDMDA3RDZGRTUgLyogSlNX
ZWJLaXRUcmFuc2l0aW9uRXZlbnQuaCAqLzsgfTsKLQkJMzFDNDIyNDYxRDc0RUI5QTAwRjEyMzQy
IC8qIEpTUGVyZm9ybWFuY2VUaW1pbmdDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzFDNDIyNDUxRDc0RUI5QTAwRjEyMzQyIC8qIEpTUGVy
Zm9ybWFuY2VUaW1pbmdDdXN0b20uY3BwICovOyB9OwogCQkzMUQ1OTFCMzE2Njk3QTZDMDBFNkJG
MDIgLyogUGx1Z0luQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAzMUQ1OTFCMTE2Njk3QTZDMDBFNkJGMDIgLyogUGx1Z0luQ2xpZW50LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMzFEQ0QyOUQx
QUI0RkJERTAwNzJFODE3IC8qIEFuaW1hdGlvblRyaWdnZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxRENEMjlDMUFCNEZCREUwMDcyRTgxNyAvKiBB
bmltYXRpb25UcmlnZ2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMzFEQ0RGNDMxREExQzQ1NDAwRUE1QjkzIC8qIEV4dGVuZGVkQ29sb3IuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzFEQ0RGNDEx
REExQzQ1NDAwRUE1QjkzIC8qIEV4dGVuZGVkQ29sb3IuY3BwICovOyB9OwpAQCAtMTczOSw3ICsx
NzM4LDYgQEAKIAkJNDY3MUUwNjYxRDY3QTU5NjAwQzZCNDk3IC8qIENhbnZhc1BhdGguaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ2NzFFMDY0MUQ2N0E1
N0IwMEM2QjQ5NyAvKiBDYW52YXNQYXRoLmggKi87IH07CiAJCTQ2NzMwMjAyMUM0RUZFNzgwMEJD
QjM1NyAvKiBJZ25vcmVPcGVuc0R1cmluZ1VubG9hZENvdW50SW5jcmVtZW50ZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ2NzMwMjAxMUM0RUZFNjYw
MEJDQjM1NyAvKiBJZ25vcmVPcGVuc0R1cmluZ1VubG9hZENvdW50SW5jcmVtZW50ZXIuaCAqLzsg
fTsKIAkJNDY4OUYxQUYxMjY3QkFFMTAwRThEMzgwIC8qIEZpbGVNZXRhZGF0YS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDY4OUYxQUUxMjY3QkFFMTAw
RThEMzgwIC8qIEZpbGVNZXRhZGF0YS5oICovOyB9OwotCQk0NkE1OEFDNTFENDZCM0ZBMDA0MzIw
MzYgLyogSlNDbGllbnRSZWN0Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDQ2QTU4QUM0MUQ0NkIzRkEwMDQzMjAzNiAvKiBKU0NsaWVudFJl
Y3RDdXN0b20uY3BwICovOyB9OwogCQk0NkI2M0Y2QzFDNkU4RDE5MDAyRTkxNEIgLyogSlNFdmVu
dFRhcmdldEN1c3RvbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNDZCNjNGNkIxQzZFOENERjAwMkU5MTRCIC8qIEpTRXZlbnRUYXJnZXRDdXN0b20uaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0NkM4M0VG
RDFBOUJCRTI5MDBBNzlBNDEgLyogR2VvTm90aWZpZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDZDODNFRkIxQTlCQkUyOTAwQTc5QTQxIC8qIEdl
b05vdGlmaWVyLmNwcCAqLzsgfTsKIAkJNDZDODNFRkUxQTlCQkUyOTAwQTc5QTQxIC8qIEdlb05v
dGlmaWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0
NkM4M0VGQzFBOUJCRTI5MDBBNzlBNDEgLyogR2VvTm90aWZpZXIuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtODM0Nyw3ICs4MzQ1LDYgQEAKIAkJ
MzFDMEZGM0EwRTRDRUZBQzAwN0Q2RkU1IC8qIEpTV2ViS2l0QW5pbWF0aW9uRXZlbnQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNXZWJLaXRBbmltYXRpb25FdmVudC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMUMwRkYzQjBFNENFRkFDMDA3RDZGRTUgLyog
SlNXZWJLaXRUcmFuc2l0aW9uRXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSlNXZWJLaXRUcmFuc2l0aW9uRXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkzMUMwRkYzQzBFNENFRkFDMDA3RDZGRTUgLyogSlNXZWJLaXRUcmFuc2l0aW9u
RXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNXZWJLaXRUcmFuc2l0
aW9uRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMzFDNDIyNDUxRDc0RUI5
QTAwRjEyMzQyIC8qIEpTUGVyZm9ybWFuY2VUaW1pbmdDdXN0b20uY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNQZXJmb3JtYW5jZVRpbWluZ0N1c3RvbS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxRDU5MUIxMTY2OTdBNkMwMEU2QkYwMiAvKiBQ
bHVnSW5DbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGx1Z0luQ2xp
ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxRENEMjlDMUFCNEZCREUwMDcy
RTgxNyAvKiBBbmltYXRpb25UcmlnZ2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEFuaW1hdGlvblRyaWdnZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzFE
Q0RGNDExREExQzQ1NDAwRUE1QjkzIC8qIEV4dGVuZGVkQ29sb3IuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXh0ZW5kZWRDb2xvci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC04NzU1LDcgKzg3NTIsNiBAQAogCQk0NjcxRTA2NDFENjdBNTdCMDBD
NkI0OTcgLyogQ2FudmFzUGF0aC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBD
YW52YXNQYXRoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ2NzMwMjAxMUM0RUZF
NjYwMEJDQjM1NyAvKiBJZ25vcmVPcGVuc0R1cmluZ1VubG9hZENvdW50SW5jcmVtZW50ZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSWdub3JlT3BlbnNEdXJpbmdVbmxvYWRD
b3VudEluY3JlbWVudGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ2ODlGMUFF
MTI2N0JBRTEwMEU4RDM4MCAvKiBGaWxlTWV0YWRhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRmlsZU1ldGFkYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTQ2QTU4QUM0MUQ0NkIzRkEwMDQzMjAzNiAvKiBKU0NsaWVudFJlY3RDdXN0b20uY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNDbGllbnRSZWN0Q3VzdG9tLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDZCNjNGNkIxQzZFOENERjAwMkU5MTRCIC8q
IEpTRXZlbnRUYXJnZXRDdXN0b20uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNFdmVudFRhcmdldEN1c3RvbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NkM4
M0VGQjFBOUJCRTI5MDBBNzlBNDEgLyogR2VvTm90aWZpZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gR2VvTm90aWZpZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk0NkM4M0VGQzFBOUJCRTI5MDBBNzlBNDEgLyogR2VvTm90aWZpZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR2VvTm90aWZpZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTIxMjAxLDcgKzIxMTk3LDYgQEAKIAkJCQlCRTZERjcxMDE3MUNB
MkRBMDBERDUyQjggLyogSlNBdWRpb1RyYWNrTGlzdEN1c3RvbS5jcHAgKi8sCiAJCQkJODkzMURF
NUExNEM0NEM0NDAwMERDOUQyIC8qIEpTQmxvYkN1c3RvbS5jcHAgKi8sCiAJCQkJNDlFRUQxNEIx
MDUxOTcxOTAwMDk5RkFCIC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcCAq
LywKLQkJCQk0NkE1OEFDNDFENDZCM0ZBMDA0MzIwMzYgLyogSlNDbGllbnRSZWN0Q3VzdG9tLmNw
cCAqLywKIAkJCQlBNTg0RkUzNzE4NjREQUMxMDA4NDNCMTAgLyogSlNDb21tYW5kTGluZUFQSUhv
c3RDdXN0b20uY3BwICovLAogCQkJCTdDRUYyNjE4MUQ2QTkyRTMwMEJFOTA1RCAvKiBKU0NyeXB0
b0N1c3RvbS5jcHAgKi8sCiAJCQkJRTE1N0E4RTYxODE4NEM2NzAwOUY4MjFEIC8qIEpTQ3J5cHRv
S2V5Q3VzdG9tLmNwcCAqLywKQEAgLTIxMjgyLDcgKzIxMjc3LDYgQEAKIAkJCQk4M0YxMjA2QTFC
OEMxMDM2MDBENzVGNjMgLyogSlNOb2RlRmlsdGVyQ3VzdG9tLmNwcCAqLywKIAkJCQkxQTc1MERE
MzBBOTBFNzI5MDAwRkYyMTUgLyogSlNOb2RlSXRlcmF0b3JDdXN0b20uY3BwICovLAogCQkJCUJD
RDlDMjYxMEMxN0FBNjcwMDVDOTBBMiAvKiBKU05vZGVMaXN0Q3VzdG9tLmNwcCAqLywKLQkJCQkz
MUM0MjI0NTFENzRFQjlBMDBGMTIzNDIgLyogSlNQZXJmb3JtYW5jZVRpbWluZ0N1c3RvbS5jcHAg
Ki8sCiAJCQkJQUQyMEIxOEMxOEU5RDIxNjAwNUE4MDgzIC8qIEpTTm9kZUxpc3RDdXN0b20uaCAq
LywKIAkJCQlBODVGMjIwODE0MzAzNzdEMDA3Q0M4ODQgLyogSlNQb3BTdGF0ZUV2ZW50Q3VzdG9t
LmNwcCAqLywKIAkJCQk0MThDMzk1RDFDOEYwQUFCMDA1MUM4QTMgLyogSlNSZWFkYWJsZVN0cmVh
bVNvdXJjZUN1c3RvbS5jcHAgKi8sCkBAIC0yNzcyOSw3ICsyNzcyMyw2IEBACiAJCQkJRkQzMTYw
QkMxMkIwMjcyQTAwQzFBMzU5IC8qIEF1ZGlvRGVzdGluYXRpb25NYWMuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJRkQzMTYwMDcxMkIwMjY3NjAwQzFBMzU5IC8qIEF1ZGlvRGVzdGluYXRpb25Ob2Rl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZEMzE2MDgxMTJCMDI2RjcwMEMxQTM1OSAvKiBBdWRp
b0RTUEtlcm5lbFByb2Nlc3Nvci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkzMUM0MjI0NjFENzRF
QjlBMDBGMTIzNDIgLyogSlNQZXJmb3JtYW5jZVRpbWluZ0N1c3RvbS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlDRDU1OTY5MTE0NzVCNjc4MDAxRDBCRDAgLyogQXVkaW9GaWxlUmVhZGVySU9TLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUZEMzE2MEJFMTJCMDI3MkEwMEMxQTM1OSAvKiBBdWRpb0Zp
bGVSZWFkZXJNYWMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0QyRjRBMjMxOEQ4OUY3MDAwNjM3
NDZEIC8qIEF1ZGlvSGFyZHdhcmVMaXN0ZW5lci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI4NzE3
LDcgKzI4NzEwLDYgQEAKIAkJCQlGREExNUVBMzEyQjAzRUUxMDAzQTU4M0EgLyogSlNDaGFubmVs
U3BsaXR0ZXJOb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTY1REYzMUYzMDlEMUNDNjAwMDBC
RTMyNSAvKiBKU0NoYXJhY3RlckRhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNDMDY1ODcw
RjNDRTJBNzAwQ0QyRDg3IC8qIEpTQ2xpZW50UmVjdC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk0
NkE1OEFDNTFENDZCM0ZBMDA0MzIwMzYgLyogSlNDbGllbnRSZWN0Q3VzdG9tLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUJDQzA2NTg5MEYzQ0UyQTcwMENEMkQ4NyAvKiBKU0NsaWVudFJlY3RMaXN0
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUzMTUwRUE2MURBNzIxOTAwMDE5NDAxMiAvKiBKU05v
ZGVET01KSVQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFGQjU1MDUxMTNFM0U5MTAwODIxMTc2
IC8qIEpTQ2xvc2VFdmVudC5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2xpZW50UmVjdEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0NsaWVudFJlY3RDdXN0b20uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBkM2M1N2I2ZmQ5ZWM5Njc3NjAxMzRmOGY1NjgzYWFlZWRlOWM2YWZlLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTQ2xpZW50UmVjdEN1c3RvbS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1
OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkpT
Q2xpZW50UmVjdC5oIgotCi0jaW5jbHVkZSAiQ2xpZW50UmVjdC5oIgotI2luY2x1ZGUgPGJ5dGVj
b2RlL0NvZGVCbG9jay5oPgotI2luY2x1ZGUgPGhlYXAvSGVhcElubGluZXMuaD4KLSNpbmNsdWRl
IDxydW50aW1lL0F1eGlsaWFyeUJhcnJpZXJJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9J
ZGVudGlmaWVySW5saW5lcy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNPYmplY3QuaD4KLSNpbmNs
dWRlIDxydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotdXNpbmcgbmFtZXNwYWNlIEpTQzsKLQotSlNDOjpKU1ZhbHVlIEpTQ2xpZW50UmVjdDo6dG9K
U09OKEV4ZWNTdGF0ZSYgc3RhdGUpCi17Ci0gICAgQ2xpZW50UmVjdCYgcmVjdCA9IHdyYXBwZWQo
KTsKLSAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOwotCi0gICAgSlNWYWx1ZSBvYmplY3QgPSBjb25z
dHJ1Y3RFbXB0eU9iamVjdCgmc3RhdGUpOwotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gc3Rh
dGUuY29kZUJsb2NrKCk7Ci0gICAgUHV0UHJvcGVydHlTbG90IHNsb3Qob2JqZWN0LCBjb2RlQmxv
Y2sgPyBjb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpIDogZmFsc2UpOwotICAgIG9iamVjdC5wdXQo
JnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgQVNDSUlMaXRlcmFsKCJ0b3AiKSks
IGpzTnVtYmVyKHJlY3QudG9wKCkpLCBzbG90KTsKLSAgICBvYmplY3QucHV0KCZzdGF0ZSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIEFTQ0lJTGl0ZXJhbCgicmlnaHQiKSksIGpzTnVtYmVy
KHJlY3QucmlnaHQoKSksIHNsb3QpOwotICAgIG9iamVjdC5wdXQoJnN0YXRlLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKCZ2bSwgQVNDSUlMaXRlcmFsKCJib3R0b20iKSksIGpzTnVtYmVyKHJlY3Qu
Ym90dG9tKCkpLCBzbG90KTsKLSAgICBvYmplY3QucHV0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZygmdm0sIEFTQ0lJTGl0ZXJhbCgibGVmdCIpKSwganNOdW1iZXIocmVjdC5sZWZ0KCkp
LCBzbG90KTsKLSAgICBvYmplY3QucHV0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygm
dm0sIEFTQ0lJTGl0ZXJhbCgid2lkdGgiKSksIGpzTnVtYmVyKHJlY3Qud2lkdGgoKSksIHNsb3Qp
OwotICAgIG9iamVjdC5wdXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgQVND
SUlMaXRlcmFsKCJoZWlnaHQiKSksIGpzTnVtYmVyKHJlY3QuaGVpZ2h0KCkpLCBzbG90KTsKLQot
ICAgIHJldHVybiBvYmplY3Q7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTUGVyZm9ybWFuY2VUaW1pbmdDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNQZXJmb3JtYW5jZVRpbWluZ0N1c3RvbS5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDlhMjJhMGQxZWE3MmI1YmJmZjQyMWZhZDdhOGQ0OTc4YzUzZTM2ODYu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNQZXJmb3JtYW5jZVRpbWluZ0N1c3RvbS5jcHAKKysrIC9kZXYv
bnVsbApAQCAtMSw3NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIkpTUGVyZm9ybWFuY2VUaW1pbmcuaCIKLQotI2lmIEVOQUJMRShXRUJfVElNSU5H
KQotCi0jaW5jbHVkZSAiRE9NV3JhcHBlcldvcmxkLmgiCi0jaW5jbHVkZSA8aGVhcC9IZWFwSW5s
aW5lcy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvQXV4aWxpYXJ5QmFycmllcklubGluZXMuaD4KLSNp
bmNsdWRlIDxydW50aW1lL0lkZW50aWZpZXJJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9K
U09iamVjdC5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuaD4KLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi11c2luZyBuYW1lc3BhY2UgSlNDOwotCi1KU0M6OkpTVmFsdWUg
SlNQZXJmb3JtYW5jZVRpbWluZzo6dG9KU09OKEV4ZWNTdGF0ZSYgc3RhdGUpCi17Ci0gICAgUGVy
Zm9ybWFuY2VUaW1pbmcmIHRpbWluZyA9IHdyYXBwZWQoKTsKLSAgICBWTSYgdm0gPSBzdGF0ZS52
bSgpOwotCi0gICAgYXV0byBvYmplY3QgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdCgmc3RhdGUpOwot
Ci0gICAgb2JqZWN0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBB
U0NJSUxpdGVyYWwoIm5hdmlnYXRpb25TdGFydCIpKSwganNOdW1iZXIodGltaW5nLm5hdmlnYXRp
b25TdGFydCgpKSk7Ci0gICAgb2JqZWN0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21T
dHJpbmcoJnZtLCBBU0NJSUxpdGVyYWwoInVubG9hZEV2ZW50U3RhcnQiKSksIGpzTnVtYmVyKHRp
bWluZy51bmxvYWRFdmVudFN0YXJ0KCkpKTsKLSAgICBvYmplY3QtPnB1dERpcmVjdCh2bSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIEFTQ0lJTGl0ZXJhbCgidW5sb2FkRXZlbnRFbmQiKSks
IGpzTnVtYmVyKHRpbWluZy51bmxvYWRFdmVudEVuZCgpKSk7Ci0gICAgb2JqZWN0LT5wdXREaXJl
Y3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBBU0NJSUxpdGVyYWwoInJlZGlyZWN0
U3RhcnQiKSksIGpzTnVtYmVyKHRpbWluZy5yZWRpcmVjdFN0YXJ0KCkpKTsKLSAgICBvYmplY3Qt
PnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIEFTQ0lJTGl0ZXJhbCgi
cmVkaXJlY3RFbmQiKSksIGpzTnVtYmVyKHRpbWluZy5yZWRpcmVjdEVuZCgpKSk7Ci0gICAgb2Jq
ZWN0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBBU0NJSUxpdGVy
YWwoImZldGNoU3RhcnQiKSksIGpzTnVtYmVyKHRpbWluZy5mZXRjaFN0YXJ0KCkpKTsKLSAgICBv
YmplY3QtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIEFTQ0lJTGl0
ZXJhbCgiZG9tYWluTG9va3VwU3RhcnQiKSksIGpzTnVtYmVyKHRpbWluZy5kb21haW5Mb29rdXBT
dGFydCgpKSk7Ci0gICAgb2JqZWN0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJp
bmcoJnZtLCBBU0NJSUxpdGVyYWwoImRvbWFpbkxvb2t1cEVuZCIpKSwganNOdW1iZXIodGltaW5n
LmRvbWFpbkxvb2t1cEVuZCgpKSk7Ci0gICAgb2JqZWN0LT5wdXREaXJlY3Qodm0sIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcoJnZtLCBBU0NJSUxpdGVyYWwoImNvbm5lY3RTdGFydCIpKSwganNOdW1i
ZXIodGltaW5nLmNvbm5lY3RTdGFydCgpKSk7Ci0gICAgb2JqZWN0LT5wdXREaXJlY3Qodm0sIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBBU0NJSUxpdGVyYWwoImNvbm5lY3RFbmQiKSksIGpz
TnVtYmVyKHRpbWluZy5jb25uZWN0RW5kKCkpKTsKLSAgICBvYmplY3QtPnB1dERpcmVjdCh2bSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIEFTQ0lJTGl0ZXJhbCgic2VjdXJlQ29ubmVjdGlv
blN0YXJ0IikpLCBqc051bWJlcih0aW1pbmcuc2VjdXJlQ29ubmVjdGlvblN0YXJ0KCkpKTsKLSAg
ICBvYmplY3QtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIEFTQ0lJ
TGl0ZXJhbCgicmVxdWVzdFN0YXJ0IikpLCBqc051bWJlcih0aW1pbmcucmVxdWVzdFN0YXJ0KCkp
KTsKLSAgICBvYmplY3QtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0s
IEFTQ0lJTGl0ZXJhbCgicmVzcG9uc2VTdGFydCIpKSwganNOdW1iZXIodGltaW5nLnJlc3BvbnNl
U3RhcnQoKSkpOwotICAgIG9iamVjdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZ2bSwgQVNDSUlMaXRlcmFsKCJyZXNwb25zZUVuZCIpKSwganNOdW1iZXIodGltaW5nLnJl
c3BvbnNlRW5kKCkpKTsKLSAgICBvYmplY3QtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZygmdm0sIEFTQ0lJTGl0ZXJhbCgiZG9tTG9hZGluZyIpKSwganNOdW1iZXIodGltaW5n
LmRvbUxvYWRpbmcoKSkpOwotICAgIG9iamVjdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKCZ2bSwgQVNDSUlMaXRlcmFsKCJkb21JbnRlcmFjdGl2ZSIpKSwganNOdW1iZXIo
dGltaW5nLmRvbUludGVyYWN0aXZlKCkpKTsKLSAgICBvYmplY3QtPnB1dERpcmVjdCh2bSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIEFTQ0lJTGl0ZXJhbCgiZG9tQ29udGVudExvYWRlZEV2
ZW50U3RhcnQiKSksIGpzTnVtYmVyKHRpbWluZy5kb21Db250ZW50TG9hZGVkRXZlbnRTdGFydCgp
KSk7Ci0gICAgb2JqZWN0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZt
LCBBU0NJSUxpdGVyYWwoImRvbUNvbnRlbnRMb2FkZWRFdmVudEVuZCIpKSwganNOdW1iZXIodGlt
aW5nLmRvbUNvbnRlbnRMb2FkZWRFdmVudEVuZCgpKSk7Ci0gICAgb2JqZWN0LT5wdXREaXJlY3Qo
dm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBBU0NJSUxpdGVyYWwoImRvbUNvbXBsZXRl
IikpLCBqc051bWJlcih0aW1pbmcuZG9tQ29tcGxldGUoKSkpOwotICAgIG9iamVjdC0+cHV0RGly
ZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgQVNDSUlMaXRlcmFsKCJsb2FkRXZl
bnRTdGFydCIpKSwganNOdW1iZXIodGltaW5nLmxvYWRFdmVudFN0YXJ0KCkpKTsKLSAgICBvYmpl
Y3QtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIEFTQ0lJTGl0ZXJh
bCgibG9hZEV2ZW50RW5kIikpLCBqc051bWJlcih0aW1pbmcubG9hZEV2ZW50RW5kKCkpKTsKLQot
ICAgIHJldHVybiBvYmplY3Q7Ci19Ci0KLX0KLQotI2VuZGlmIC8vIEVOQUJMRShXRUJfVElNSU5H
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJh
dG9ySlMucG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JK
Uy5wbQppbmRleCA0OTlkOTViYjFmNDYxYWNlNWUwNjUwZjBkZmQ5ZDM0NjRmYWY5ZTEyLi41ZGZh
ZTg4MDhiY2UxNTE5NGMzOWY1NmU0YzA1Y2Y1ZWUxNzBlNWIwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQpAQCAtMzc0NSw3ICsz
NzQ1LDcgQEAgRU5ECiAKIAogICAgIEdlbmVyYXRlSW1wbGVtZW50YXRpb25JdGVyYWJsZUZ1bmN0
aW9ucygkaW50ZXJmYWNlKSBpZiAkaW50ZXJmYWNlLT5pdGVyYWJsZTsKLSAgICBHZW5lcmF0ZVNl
cmlhbGl6ZXJGdW5jdGlvbigkaW50ZXJmYWNlLCAkaW50ZXJmYWNlTmFtZSwgJGNsYXNzTmFtZSkg
aWYgJGludGVyZmFjZS0+c2VyaWFsaXphYmxlOworICAgIEdlbmVyYXRlU2VyaWFsaXplckZ1bmN0
aW9uKCRpbnRlcmZhY2UsICRjbGFzc05hbWUpIGlmICRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZTsK
IAogICAgIGlmICgkbmVlZHNWaXNpdENoaWxkcmVuKSB7CiAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAidm9pZCAke2NsYXNzTmFtZX06OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90
VmlzaXRvciYgdmlzaXRvcilcbiIpOwpAQCAtMzk2NiwyNyArMzk2Niw1NCBAQCBFTkQKICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIlxuI2VuZGlmIC8vICR7Y29uZGl0aW9uYWxTdHJpbmd9XG4iKSBp
ZiAkY29uZGl0aW9uYWxTdHJpbmc7CiB9CiAKK3N1YiBJc1NlcmlhbGl6YWJsZQoreworICAgIG15
ICgkaW50ZXJmYWNlLCAkYXR0cmlidXRlKSA9IEBfOworCisgICAgIyBGSVhNRTogSXQgaXMgY2hh
bGxlbmdpbmcgdG8gZmlndXJlIG91dCB3aGV0aGVyIGFuIGF0dHJpYnV0ZSBpcyBzZXJpYWxpemFi
bGUgb3Igbm90LgorICAgICMgRm9yIG5vdywganVzdCBwcmV0ZW5kIHRoZXkgYWxsIGFyZS4KKyAg
ICByZXR1cm4gMTsKK30KKwogc3ViIEdlbmVyYXRlU2VyaWFsaXplckZ1bmN0aW9uCiB7Ci0gICAg
bXkgKCRpbnRlcmZhY2UsICRpbnRlcmZhY2VOYW1lLCAkY2xhc3NOYW1lKSA9IEBfOworICAgIG15
ICgkaW50ZXJmYWNlLCAkY2xhc3NOYW1lKSA9IEBfOworCisgICAgbXkgJGludGVyZmFjZU5hbWUg
PSAkaW50ZXJmYWNlLT5uYW1lOworCiAgICAgbXkgJHNlcmlhbGl6ZXJGdW5jdGlvbk5hbWUgPSAi
dG9KU09OIjsKICAgICBteSAkc2VyaWFsaXplck5hdGl2ZUZ1bmN0aW9uTmFtZSA9ICRjb2RlR2Vu
ZXJhdG9yLT5XS19sY2ZpcnN0KCRjbGFzc05hbWUpIC4gIlByb3RvdHlwZUZ1bmN0aW9uIiAuICRj
b2RlR2VuZXJhdG9yLT5XS191Y2ZpcnN0KCRzZXJpYWxpemVyRnVuY3Rpb25OYW1lKTsKIAotICAg
IEFkZFRvSW1wbEluY2x1ZGVzKCJPYmplY3RDb25zdHJ1Y3Rvci5oIik7CisgICAgbXkgQHNlcmlh
bGl6ZWRBdHRyaWJ1dGVzID0gKCk7CisgICAgaWYgKGdyZXAgJF8gZXEgImF0dHJpYnV0ZSIsIEB7
JGludGVyZmFjZS0+c2VyaWFsaXphYmxlLT5hdHRyaWJ1dGVzfSkgeworICAgICAgICBmb3JlYWNo
IG15ICRhdHRyaWJ1dGUgKEB7JGludGVyZmFjZS0+YXR0cmlidXRlc30pIHsKKyAgICAgICAgICAg
IHB1c2ggQHNlcmlhbGl6ZWRBdHRyaWJ1dGVzLCAkYXR0cmlidXRlIGlmIElzU2VyaWFsaXphYmxl
KCRpbnRlcmZhY2UsICRhdHRyaWJ1dGUpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgZm9yZWFjaCBteSAkbmFtZSAoQHskaW50ZXJmYWNlLT5zZXJpYWxpemFibGUtPmF0dHJpYnV0
ZXN9KSB7CisgICAgICAgICAgICBmb3JlYWNoIG15ICRhdHRyaWJ1dGUgKEB7JGludGVyZmFjZS0+
YXR0cmlidXRlc30pIHsKKyAgICAgICAgICAgICAgICBpZiAoJG5hbWUgZXEgJGF0dHJpYnV0ZS0+
c2lnbmF0dXJlLT5uYW1lKSB7CisgICAgICAgICAgICAgICAgICAgIHB1c2ggQHNlcmlhbGl6ZWRB
dHRyaWJ1dGVzLCAkYXR0cmlidXRlOworICAgICAgICAgICAgICAgICAgICBsYXN0OworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICMgRklYTUU6IFdvdWxkIGJl
IG5pY2UgdG8gcmVwb3J0IGFuIGVycm9yIGZvciBhdHRyaWJ1dGUgbmFtZXMgdGhhdCBkb24ndCBt
YXRjaC4KKyAgICAgICAgfQorICAgIH0KKworICAgIEFkZFRvSW1wbEluY2x1ZGVzKCI8cnVudGlt
ZS9PYmplY3RDb25zdHJ1Y3Rvci5oPiIpOwogICAgIHB1c2goQGltcGxDb250ZW50LCAic3RhdGlj
IGlubGluZSBFbmNvZGVkSlNWYWx1ZSAke3NlcmlhbGl6ZXJOYXRpdmVGdW5jdGlvbk5hbWV9Q2Fs
bGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTJGludGVyZmFjZU5hbWUqIHRoaXNPYmplY3QsIEpTQzo6
VGhyb3dTY29wZSYgdGhyb3dTY29wZSlcbiIpOwogICAgIHB1c2goQGltcGxDb250ZW50LCAie1xu
Iik7CiAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byYgdm0gPSBzdGF0ZS0+dm0oKTtc
biIpOwogICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8qIHJlc3VsdCA9IGNvbnN0cnVj
dEVtcHR5T2JqZWN0KHN0YXRlKTtcbiIpOwogICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4iKTsK
LSAgICBmb3JlYWNoIG15ICRhdHRyaWJ1dGUgKEB7JGludGVyZmFjZS0+YXR0cmlidXRlc30pIHsK
KyAgICBmb3JlYWNoIG15ICRhdHRyaWJ1dGUgKEBzZXJpYWxpemVkQXR0cmlidXRlcykgewogICAg
ICAgICBteSAkbmFtZSA9ICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+bmFtZTsKLSAgICAgICAgaWYg
KGdyZXAgJF8gZXEgJG5hbWUsIEB7JGludGVyZmFjZS0+c2VyaWFsaXphYmxlLT5hdHRyaWJ1dGVz
fSkgewotICAgICAgICAgICAgbXkgJGdldEZ1bmN0aW9uTmFtZSA9IEdldEF0dHJpYnV0ZUdldHRl
ck5hbWUoJGludGVyZmFjZSwgJGNsYXNzTmFtZSwgJGF0dHJpYnV0ZSk7Ci0gICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvICR7bmFtZX1WYWx1ZSA9ICR7Z2V0RnVuY3Rpb25O
YW1lfUdldHRlcigqc3RhdGUsICp0aGlzT2JqZWN0LCB0aHJvd1Njb3BlKTtcbiIpOwotICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgQVNTRVJUKCF0aHJvd1Njb3BlLmV4Y2VwdGlv
bigpKTtcbiIpOwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmVzdWx0LT5w
dXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBcIiR7bmFtZX1cIiksICR7
bmFtZX1WYWx1ZSk7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4iKTsK
LSAgICAgICAgfQorICAgICAgICBteSAkZ2V0RnVuY3Rpb25OYW1lID0gR2V0QXR0cmlidXRlR2V0
dGVyTmFtZSgkaW50ZXJmYWNlLCAkY2xhc3NOYW1lLCAkYXR0cmlidXRlKTsKKyAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgYXV0byAke25hbWV9VmFsdWUgPSAke2dldEZ1bmN0aW9uTmFt
ZX1HZXR0ZXIoKnN0YXRlLCAqdGhpc09iamVjdCwgdGhyb3dTY29wZSk7XG4iKTsKKyAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgQVNTRVJUKCF0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKTtc
biIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXN1bHQtPnB1dERpcmVjdCh2
bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIFwiJHtuYW1lfVwiKSwgJHtuYW1lfVZhbHVl
KTtcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuIik7CiAgICAgfQogICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTtcbiIp
OwogICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuIik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHAKaW5kZXggOTVlOTYw
NzNkMzk4OGY3NWViZTY4Mzk5YjEzYzYwYzU0MzkxM2Q4My4uMjdlY2U4NjM3NjZkZGFhYTZhNmM2
ODkxNzg5YThhZTAyZjZkYzYzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmNwcApAQCAtMjYsMTEgKzI2LDExIEBACiAj
aW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkpTRE9NSXRlcmF0b3IuaCIK
ICNpbmNsdWRlICJKU0RPTVByb21pc2UuaCIKLSNpbmNsdWRlICJPYmplY3RDb25zdHJ1Y3Rvci5o
IgogI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJVUkwuaCIK
ICNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU1N0cmluZy5o
PgorI2luY2x1ZGUgPHJ1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuaD4KICNpbmNsdWRlIDx3dGYv
R2V0UHRyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCmluZGV4IGU5ZTEzOGRm
MDc2OWM2OWMyZjQ4NDUxMTYzY2JhMTcwNzE5NWZhZmEuLmNkZjdjYmM3OWNhODhjZDAzMTk5OWVk
ODI4MTI2YzBhY2UxNDAzZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCkBAIC01Myw3ICs1Myw2IEBACiAjaW5jbHVk
ZSAiSlNUZXN0U3RhbmRhbG9uZURpY3Rpb25hcnkuaCIKICNpbmNsdWRlICJKU1Rlc3RTdWJPYmou
aCIKICNpbmNsdWRlICJKU1hQYXRoTlNSZXNvbHZlci5oIgotI2luY2x1ZGUgIk9iamVjdENvbnN0
cnVjdG9yLmgiCiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUg
IlNWR0RvY3VtZW50LmgiCiAjaW5jbHVkZSAiU1ZHUG9pbnQuaCIKQEAgLTc3NDAsNiArNzczOSwx
MCBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uVG9KU09OQ2FsbGVyKEV4ZWNTdGF0ZSogcwogICAgIGF1dG8mIHZtID0gc3RhdGUtPnZtKCk7
CiAgICAgYXV0byogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3Qoc3RhdGUpOwogCisgICAg
YXV0byBjcmVhdGVWYWx1ZSA9IGpzVGVzdE9iakNyZWF0ZUdldHRlcigqc3RhdGUsICp0aGlzT2Jq
ZWN0LCB0aHJvd1Njb3BlKTsKKyAgICBBU1NFUlQoIXRocm93U2NvcGUuZXhjZXB0aW9uKCkpOwor
ICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImNy
ZWF0ZSIpLCBjcmVhdGVWYWx1ZSk7CisKICAgICBhdXRvIHJlYWRPbmx5U3RyaW5nQXR0clZhbHVl
ID0ganNUZXN0T2JqUmVhZE9ubHlTdHJpbmdBdHRyR2V0dGVyKCpzdGF0ZSwgKnRoaXNPYmplY3Qs
IHRocm93U2NvcGUpOwogICAgIEFTU0VSVCghdGhyb3dTY29wZS5leGNlcHRpb24oKSk7CiAgICAg
cmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAicmVhZE9u
bHlTdHJpbmdBdHRyIiksIHJlYWRPbmx5U3RyaW5nQXR0clZhbHVlKTsKQEAgLTc3NTIsMTAgKzc3
NTUsNiBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uVG9KU09OQ2FsbGVyKEV4ZWNTdGF0ZSogcwogICAgIEFTU0VSVCghdGhyb3dTY29wZS5l
eGNlcHRpb24oKSk7CiAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21T
dHJpbmcoJnZtLCAibG9uZ0F0dHIiKSwgbG9uZ0F0dHJWYWx1ZSk7CiAKLSAgICBhdXRvIGNyZWF0
ZVZhbHVlID0ganNUZXN0T2JqQ3JlYXRlR2V0dGVyKCpzdGF0ZSwgKnRoaXNPYmplY3QsIHRocm93
U2NvcGUpOwotICAgIEFTU0VSVCghdGhyb3dTY29wZS5leGNlcHRpb24oKSk7Ci0gICAgcmVzdWx0
LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiY3JlYXRlIiksIGNy
ZWF0ZVZhbHVlKTsKLQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dFNlcmlhbGl6YXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdFNlcmlhbGl6YXRpb24uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFlNTAxODliZDgyZDc0ZDkx
NWZhNjM1MzNkM2M0MzUxMTM2OGQ4YTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbi5jcHAKQEAgLTAs
MCArMSw0MDYgQEAKKy8qCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVu
IHNvdXJjZSBwcm9qZWN0LgorICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2Vu
ZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisKKyAgICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAg
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisK
KyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkpTVGVzdFNlcmlhbGl6YXRpb24uaCIKKworI2luY2x1ZGUgIkpTRE9NQmlu
ZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJKU0RPTUNv
bnZlcnQuaCIKKyNpbmNsdWRlICJVUkwuaCIKKyNpbmNsdWRlIDxydW50aW1lL0Z1bmN0aW9uUHJv
dG90eXBlLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU1N0cmluZy5oPgorI2luY2x1ZGUgPHJ1bnRp
bWUvT2JqZWN0Q29uc3RydWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisKK3VzaW5n
IG5hbWVzcGFjZSBKU0M7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gRnVuY3Rpb25zCisK
K0pTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RTZXJpYWxpemF0aW9uUHJv
dG90eXBlRnVuY3Rpb25Ub0pTT04oSlNDOjpFeGVjU3RhdGUqKTsKKworLy8gQXR0cmlidXRlcwor
CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25GaXJzdFN0cmluZ0F0dHJp
YnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlO
YW1lKTsKK2Jvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkZpcnN0U3RyaW5nQXR0cmlidXRlKEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7
CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25TZWNvbmRMb25nQXR0cmli
dXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5h
bWUpOworYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uU2Vjb25kTG9uZ0F0dHJpYnV0ZShKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwor
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uVGhpcmRVbnJlc3RyaWN0ZWRE
b3VibGVBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6
OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25UaGlyZFVucmVzdHJp
Y3RlZERvdWJsZUF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUs
IEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxp
emF0aW9uRm91cnRoTG9uZ0F0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpT
VmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkZv
dXJ0aExvbmdBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBK
U0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXph
dGlvbkNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlND
OjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uQ29uc3RydWN0b3Io
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVl
KTsKKworY2xhc3MgSlNUZXN0U2VyaWFsaXphdGlvblByb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpT
Tm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHVzaW5nIEJhc2UgPSBKU0M6OkpTTm9uRmlu
YWxPYmplY3Q7CisgICAgc3RhdGljIEpTVGVzdFNlcmlhbGl6YXRpb25Qcm90b3R5cGUqIGNyZWF0
ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0
cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAgSlNUZXN0U2VyaWFsaXphdGlvblBy
b3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RTZXJp
YWxpemF0aW9uUHJvdG90eXBlPih2bS5oZWFwKSkgSlNUZXN0U2VyaWFsaXphdGlvblByb3RvdHlw
ZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0
aW9uKHZtKTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBERUNMQVJFX0lORk87
CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0s
IEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlw
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9i
YWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVj
dHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgSlNUZXN0U2VyaWFs
aXphdGlvblByb3RvdHlwZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KHZt
LCBzdHJ1Y3R1cmUpCisgICAgeworICAgIH0KKworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlND
OjpWTSYpOworfTsKKwordXNpbmcgSlNUZXN0U2VyaWFsaXphdGlvbkNvbnN0cnVjdG9yID0gSlNE
T01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGU8SlNUZXN0U2VyaWFsaXphdGlvbj47CisKK3Rl
bXBsYXRlPD4gSlNWYWx1ZSBKU1Rlc3RTZXJpYWxpemF0aW9uQ29uc3RydWN0b3I6OnByb3RvdHlw
ZUZvclN0cnVjdHVyZShKU0M6OlZNJiB2bSwgY29uc3QgSlNET01HbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdCkKK3sKKyAgICBVTlVTRURfUEFSQU0odm0pOworICAgIHJldHVybiBnbG9iYWxPYmpl
Y3QuZnVuY3Rpb25Qcm90b3R5cGUoKTsKK30KKwordGVtcGxhdGU8PiB2b2lkIEpTVGVzdFNlcmlh
bGl6YXRpb25Db25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBKU0RPTUds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RTZXJpYWxpemF0aW9uOjpwcm90b3R5cGUodm0sICZn
bG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBEb250RW51bSk7CisgICAgcHV0
RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcoJnZt
LCBTdHJpbmcoQVNDSUlMaXRlcmFsKCJUZXN0U2VyaWFsaXphdGlvbiIpKSksIFJlYWRPbmx5IHwg
RG9udEVudW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBq
c051bWJlcigwKSwgUmVhZE9ubHkgfCBEb250RW51bSk7Cit9CisKK3RlbXBsYXRlPD4gY29uc3Qg
Q2xhc3NJbmZvIEpTVGVzdFNlcmlhbGl6YXRpb25Db25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiVGVz
dFNlcmlhbGl6YXRpb24iLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpT
VGVzdFNlcmlhbGl6YXRpb25Db25zdHJ1Y3RvcikgfTsKKworLyogSGFzaCB0YWJsZSBmb3IgcHJv
dG90eXBlICovCisKK3N0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RTZXJpYWxpemF0
aW9uUHJvdG90eXBlVGFibGVWYWx1ZXNbXSA9Cit7CisgICAgeyAiY29uc3RydWN0b3IiLCBEb250
RW51bSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6
R2V0VmFsdWVGdW5jPihqc1Rlc3RTZXJpYWxpemF0aW9uQ29uc3RydWN0b3IpLCAoaW50cHRyX3Qp
IHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3RTZXJp
YWxpemF0aW9uQ29uc3RydWN0b3IpIH0gfSwKKyAgICB7ICJmaXJzdFN0cmluZ0F0dHJpYnV0ZSIs
IEN1c3RvbUFjY2Vzc29yLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJv
cGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdFNlcmlhbGl6YXRpb25GaXJzdFN0cmluZ0F0
dHJpYnV0ZSksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1
ZUZ1bmM+KHNldEpTVGVzdFNlcmlhbGl6YXRpb25GaXJzdFN0cmluZ0F0dHJpYnV0ZSkgfSB9LAor
ICAgIHsgInNlY29uZExvbmdBdHRyaWJ1dGUiLCBDdXN0b21BY2Nlc3NvciwgTm9JbnRyaW5zaWMs
IHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rl
c3RTZXJpYWxpemF0aW9uU2Vjb25kTG9uZ0F0dHJpYnV0ZSksIChpbnRwdHJfdCkgc3RhdGljX2Nh
c3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdFNlcmlhbGl6YXRpb25T
ZWNvbmRMb25nQXR0cmlidXRlKSB9IH0sCisgICAgeyAidGhpcmRVbnJlc3RyaWN0ZWREb3VibGVB
dHRyaWJ1dGUiLCBDdXN0b21BY2Nlc3NvciwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRp
Y19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RTZXJpYWxpemF0aW9uVGhp
cmRVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGUpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1
dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3RTZXJpYWxpemF0aW9uVGhpcmRV
bnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGUpIH0gfSwKKyAgICB7ICJmb3VydGhMb25nQXR0cmli
dXRlIiwgQ3VzdG9tQWNjZXNzb3IsIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2Fz
dDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0U2VyaWFsaXphdGlvbkZvdXJ0aExv
bmdBdHRyaWJ1dGUpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0
VmFsdWVGdW5jPihzZXRKU1Rlc3RTZXJpYWxpemF0aW9uRm91cnRoTG9uZ0F0dHJpYnV0ZSkgfSB9
LAorICAgIHsgInRvSlNPTiIsIEpTQzo6RnVuY3Rpb24sIE5vSW50cmluc2ljLCB7IChpbnRwdHJf
dClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0U2VyaWFsaXphdGlvblByb3RvdHlw
ZUZ1bmN0aW9uVG9KU09OKSwgKGludHB0cl90KSAoMCkgfSB9LAorfTsKKworY29uc3QgQ2xhc3NJ
bmZvIEpTVGVzdFNlcmlhbGl6YXRpb25Qcm90b3R5cGU6OnNfaW5mbyA9IHsgIlRlc3RTZXJpYWxp
emF0aW9uUHJvdG90eXBlIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShK
U1Rlc3RTZXJpYWxpemF0aW9uUHJvdG90eXBlKSB9OworCit2b2lkIEpTVGVzdFNlcmlhbGl6YXRp
b25Qcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKK3sKKyAgICBCYXNlOjpmaW5pc2hD
cmVhdGlvbih2bSk7CisgICAgcmVpZnlTdGF0aWNQcm9wZXJ0aWVzKHZtLCBKU1Rlc3RTZXJpYWxp
emF0aW9uUHJvdG90eXBlVGFibGVWYWx1ZXMsICp0aGlzKTsKK30KKworY29uc3QgQ2xhc3NJbmZv
IEpTVGVzdFNlcmlhbGl6YXRpb246OnNfaW5mbyA9IHsgIlRlc3RTZXJpYWxpemF0aW9uIiwgJkJh
c2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RTZXJpYWxpemF0aW9uKSB9
OworCitKU1Rlc3RTZXJpYWxpemF0aW9uOjpKU1Rlc3RTZXJpYWxpemF0aW9uKFN0cnVjdHVyZSog
c3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBSZWY8VGVzdFNlcmlh
bGl6YXRpb24+JiYgaW1wbCkKKyAgICA6IEpTRE9NV3JhcHBlcjxUZXN0U2VyaWFsaXphdGlvbj4o
c3RydWN0dXJlLCBnbG9iYWxPYmplY3QsIFdURk1vdmUoaW1wbCkpCit7Cit9CisKK0pTT2JqZWN0
KiBKU1Rlc3RTZXJpYWxpemF0aW9uOjpjcmVhdGVQcm90b3R5cGUoVk0mIHZtLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBKU1Rlc3RTZXJpYWxpemF0aW9uUHJv
dG90eXBlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgSlNUZXN0U2VyaWFsaXphdGlvblByb3Rv
dHlwZTo6Y3JlYXRlU3RydWN0dXJlKHZtLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+b2Jq
ZWN0UHJvdG90eXBlKCkpKTsKK30KKworSlNPYmplY3QqIEpTVGVzdFNlcmlhbGl6YXRpb246OnBy
b3RvdHlwZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0
dXJuIGdldERPTVByb3RvdHlwZTxKU1Rlc3RTZXJpYWxpemF0aW9uPih2bSwgZ2xvYmFsT2JqZWN0
KTsKK30KKwordm9pZCBKU1Rlc3RTZXJpYWxpemF0aW9uOjpkZXN0cm95KEpTQzo6SlNDZWxsKiBj
ZWxsKQoreworICAgIEpTVGVzdFNlcmlhbGl6YXRpb24qIHRoaXNPYmplY3QgPSBzdGF0aWNfY2Fz
dDxKU1Rlc3RTZXJpYWxpemF0aW9uKj4oY2VsbCk7CisgICAgdGhpc09iamVjdC0+SlNUZXN0U2Vy
aWFsaXphdGlvbjo6fkpTVGVzdFNlcmlhbGl6YXRpb24oKTsKK30KKwordGVtcGxhdGU8PiBpbmxp
bmUgSlNUZXN0U2VyaWFsaXphdGlvbiogQmluZGluZ0NhbGxlcjxKU1Rlc3RTZXJpYWxpemF0aW9u
Pjo6Y2FzdEZvckF0dHJpYnV0ZShFeGVjU3RhdGUmLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUp
Cit7CisgICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8SlNUZXN0U2VyaWFsaXphdGlvbio+KEpTVmFs
dWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKK30KKwordGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0U2Vy
aWFsaXphdGlvbiogQmluZGluZ0NhbGxlcjxKU1Rlc3RTZXJpYWxpemF0aW9uPjo6Y2FzdEZvck9w
ZXJhdGlvbihFeGVjU3RhdGUmIHN0YXRlKQoreworICAgIHJldHVybiBqc0R5bmFtaWNDYXN0PEpT
VGVzdFNlcmlhbGl6YXRpb24qPihzdGF0ZS50aGlzVmFsdWUoKSk7Cit9CisKK3N0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uRmlyc3RTdHJpbmdBdHRyaWJ1dGVHZXR0ZXIo
RXhlY1N0YXRlJiwgSlNUZXN0U2VyaWFsaXphdGlvbiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
OworCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uRmlyc3RTdHJpbmdBdHRyaWJ1
dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5h
bWUpCit7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0U2VyaWFsaXphdGlvbj46OmF0
dHJpYnV0ZTxqc1Rlc3RTZXJpYWxpemF0aW9uRmlyc3RTdHJpbmdBdHRyaWJ1dGVHZXR0ZXI+KHN0
YXRlLCB0aGlzVmFsdWUsICJmaXJzdFN0cmluZ0F0dHJpYnV0ZSIpOworfQorCitzdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkZpcnN0U3RyaW5nQXR0cmlidXRlR2V0dGVy
KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdFNlcmlhbGl6YXRpb24mIHRoaXNPYmplY3QsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBl
ZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCBpbXBs
LmZpcnN0U3RyaW5nQXR0cmlidXRlKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uU2Vjb25kTG9uZ0F0dHJpYnV0ZUdl
dHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RTZXJpYWxpemF0aW9uJiwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSk7CisKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25TZWNvbmRMb25nQXR0
cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lKQoreworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdFNlcmlhbGl6YXRpb24+
OjphdHRyaWJ1dGU8anNUZXN0U2VyaWFsaXphdGlvblNlY29uZExvbmdBdHRyaWJ1dGVHZXR0ZXI+
KHN0YXRlLCB0aGlzVmFsdWUsICJzZWNvbmRMb25nQXR0cmlidXRlIik7Cit9CisKK3N0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uU2Vjb25kTG9uZ0F0dHJpYnV0ZUdldHRl
cihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RTZXJpYWxpemF0aW9uJiB0aGlzT2JqZWN0LCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBw
ZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwuc2Vjb25kTG9uZ0F0dHJp
YnV0ZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0U2VyaWFsaXphdGlvblRoaXJkVW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRlR2V0dGVy
KEV4ZWNTdGF0ZSYsIEpTVGVzdFNlcmlhbGl6YXRpb24mLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KTsKKworRW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvblRoaXJkVW5yZXN0cmljdGVk
RG91YmxlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lKQoreworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdFNlcmlh
bGl6YXRpb24+OjphdHRyaWJ1dGU8anNUZXN0U2VyaWFsaXphdGlvblRoaXJkVW5yZXN0cmljdGVk
RG91YmxlQXR0cmlidXRlR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAidGhpcmRVbnJlc3RyaWN0
ZWREb3VibGVBdHRyaWJ1dGUiKTsKK30KKworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNl
cmlhbGl6YXRpb25UaGlyZFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZUdldHRlcihFeGVjU3Rh
dGUmIHN0YXRlLCBKU1Rlc3RTZXJpYWxpemF0aW9uJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQoreworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAg
ICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwudGhpcmRVbnJlc3RyaWN0ZWREb3VibGVB
dHRyaWJ1dGUoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdFNlcmlhbGl6YXRpb25Gb3VydGhMb25nQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0
ZSYsIEpTVGVzdFNlcmlhbGl6YXRpb24mLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKKworRW5j
b2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkZvdXJ0aExvbmdBdHRyaWJ1dGUoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7Cisg
ICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0U2VyaWFsaXphdGlvbj46OmF0dHJpYnV0ZTxq
c1Rlc3RTZXJpYWxpemF0aW9uRm91cnRoTG9uZ0F0dHJpYnV0ZUdldHRlcj4oc3RhdGUsIHRoaXNW
YWx1ZSwgImZvdXJ0aExvbmdBdHRyaWJ1dGUiKTsKK30KKworc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdFNlcmlhbGl6YXRpb25Gb3VydGhMb25nQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSYg
c3RhdGUsIEpTVGVzdFNlcmlhbGl6YXRpb24mIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIEpT
VmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5mb3VydGhMb25nQXR0cmlidXRlKCkpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25D
b25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSkKK3sKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBKU1Rlc3RTZXJpYWxpemF0aW9u
UHJvdG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdFNlcmlhbGl6YXRpb25Q
cm90b3R5cGUqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYgKFVOTElLRUxZ
KCFkb21PYmplY3QpKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhy
b3dTY29wZSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3RTZXJpYWxpemF0aW9u
OjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgZG9tT2JqZWN0LT5nbG9iYWxPYmplY3QoKSkp
OworfQorCitib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25Db25zdHJ1Y3RvcihFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgSlNUZXN0U2VyaWFsaXphdGlvblByb3RvdHlwZSog
ZG9tT2JqZWN0ID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RTZXJpYWxpemF0aW9uUHJvdG90eXBlKj4o
SlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlmIChVTkxJS0VMWSghZG9tT2JqZWN0
KSkgeworICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25z
dHJ1Y3RvcgorICAgIHJldHVybiBkb21PYmplY3QtPnB1dERpcmVjdChzdGF0ZS0+dm0oKSwgc3Rh
dGUtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3RvciwgdmFsdWUpOworfQorCitzdGF0aWMgaW5s
aW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkZpcnN0U3RyaW5nQXR0cmlidXRlRnVuY3Rp
b24oRXhlY1N0YXRlJiwgSlNUZXN0U2VyaWFsaXphdGlvbiYsIEpTVmFsdWUsIFRocm93U2NvcGUm
KTsKKworYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uRmlyc3RTdHJpbmdBdHRyaWJ1dGUoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkVmFsdWUpCit7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0U2VyaWFsaXph
dGlvbj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RTZXJpYWxpemF0aW9uRmlyc3RTdHJpbmdBdHRy
aWJ1dGVGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiZmlyc3RTdHJp
bmdBdHRyaWJ1dGUiKTsKK30KKworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6
YXRpb25GaXJzdFN0cmluZ0F0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVz
dFNlcmlhbGl6YXRpb24mIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAg
IGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZygmc3RhdGUpOworICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOworICAgIGltcGwuc2V0Rmlyc3RTdHJp
bmdBdHRyaWJ1dGUoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOworICAgIHJldHVybiB0cnVlOworfQor
CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uU2Vjb25kTG9uZ0F0
dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdFNlcmlhbGl6YXRpb24mLCBKU1ZhbHVl
LCBUaHJvd1Njb3BlJik7CisKK2Jvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvblNlY29uZExvbmdB
dHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNU
ZXN0U2VyaWFsaXphdGlvbj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RTZXJpYWxpemF0aW9uU2Vj
b25kTG9uZ0F0dHJpYnV0ZUZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUs
ICJzZWNvbmRMb25nQXR0cmlidXRlIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rl
c3RTZXJpYWxpemF0aW9uU2Vjb25kTG9uZ0F0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTVGVzdFNlcmlhbGl6YXRpb24mIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBl
ZCgpOworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETExvbmc+KHN0YXRlLCB2YWx1
ZSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCBmYWxzZSk7CisgICAgaW1wbC5zZXRTZWNvbmRMb25nQXR0cmlidXRlKFdURk1vdmUobmF0aXZl
VmFsdWUpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0U2VyaWFsaXphdGlvblRoaXJkVW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRlRnVuY3Rp
b24oRXhlY1N0YXRlJiwgSlNUZXN0U2VyaWFsaXphdGlvbiYsIEpTVmFsdWUsIFRocm93U2NvcGUm
KTsKKworYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uVGhpcmRVbnJlc3RyaWN0ZWREb3VibGVB
dHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNU
ZXN0U2VyaWFsaXphdGlvbj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RTZXJpYWxpemF0aW9uVGhp
cmRVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGVGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwg
ZW5jb2RlZFZhbHVlLCAidGhpcmRVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGUiKTsKK30KKwor
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25UaGlyZFVucmVzdHJpY3Rl
ZERvdWJsZUF0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdFNlcmlhbGl6
YXRpb24mIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
Cit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIGF1dG8gbmF0
aXZlVmFsdWUgPSBjb252ZXJ0PElETFVucmVzdHJpY3RlZERvdWJsZT4oc3RhdGUsIHZhbHVlKTsK
KyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKKyAgICBpbXBsLnNl
dFRoaXJkVW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRlKFdURk1vdmUobmF0aXZlVmFsdWUpKTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2Vy
aWFsaXphdGlvbkZvdXJ0aExvbmdBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RT
ZXJpYWxpemF0aW9uJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOworCitib29sIHNldEpTVGVzdFNl
cmlhbGl6YXRpb25Gb3VydGhMb25nQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQoreworICAgIHJl
dHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdFNlcmlhbGl6YXRpb24+OjpzZXRBdHRyaWJ1dGU8c2V0
SlNUZXN0U2VyaWFsaXphdGlvbkZvdXJ0aExvbmdBdHRyaWJ1dGVGdW5jdGlvbj4oc3RhdGUsIHRo
aXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiZm91cnRoTG9uZ0F0dHJpYnV0ZSIpOworfQorCitzdGF0
aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkZvdXJ0aExvbmdBdHRyaWJ1dGVG
dW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RTZXJpYWxpemF0aW9uJiB0aGlzT2JqZWN0
LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIGF1dG8mIGlt
cGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVy
dDxJRExMb25nPihzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOworICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOworICAgIGltcGwuc2V0Rm91cnRoTG9uZ0F0
dHJpYnV0ZShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKKwor
SlNWYWx1ZSBKU1Rlc3RTZXJpYWxpemF0aW9uOjpnZXRDb25zdHJ1Y3RvcihWTSYgdm0sIGNvbnN0
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIGdldERPTUNvbnN0
cnVjdG9yPEpTVGVzdFNlcmlhbGl6YXRpb25Db25zdHJ1Y3Rvcj4odm0sICpqc0Nhc3Q8Y29uc3Qg
SlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpKTsKK30KKworc3RhdGljIGlubGluZSBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uUHJvdG90eXBlRnVuY3Rpb25Ub0pTT05D
YWxsZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0U2VyaWFsaXphdGlvbiogdGhpc09iamVjdCwg
SlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAgIGF1dG8mIHZtID0gc3RhdGUtPnZt
KCk7CisgICAgYXV0byogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3Qoc3RhdGUpOworCisg
ICAgYXV0byBmaXJzdFN0cmluZ0F0dHJpYnV0ZVZhbHVlID0ganNUZXN0U2VyaWFsaXphdGlvbkZp
cnN0U3RyaW5nQXR0cmlidXRlR2V0dGVyKCpzdGF0ZSwgKnRoaXNPYmplY3QsIHRocm93U2NvcGUp
OworICAgIEFTU0VSVCghdGhyb3dTY29wZS5leGNlcHRpb24oKSk7CisgICAgcmVzdWx0LT5wdXRE
aXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiZmlyc3RTdHJpbmdBdHRyaWJ1
dGUiKSwgZmlyc3RTdHJpbmdBdHRyaWJ1dGVWYWx1ZSk7CisKKyAgICBhdXRvIHNlY29uZExvbmdB
dHRyaWJ1dGVWYWx1ZSA9IGpzVGVzdFNlcmlhbGl6YXRpb25TZWNvbmRMb25nQXR0cmlidXRlR2V0
dGVyKCpzdGF0ZSwgKnRoaXNPYmplY3QsIHRocm93U2NvcGUpOworICAgIEFTU0VSVCghdGhyb3dT
Y29wZS5leGNlcHRpb24oKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnZtLCAic2Vjb25kTG9uZ0F0dHJpYnV0ZSIpLCBzZWNvbmRMb25nQXR0cmli
dXRlVmFsdWUpOworCisgICAgYXV0byB0aGlyZFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZVZh
bHVlID0ganNUZXN0U2VyaWFsaXphdGlvblRoaXJkVW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRl
R2V0dGVyKCpzdGF0ZSwgKnRoaXNPYmplY3QsIHRocm93U2NvcGUpOworICAgIEFTU0VSVCghdGhy
b3dTY29wZS5leGNlcHRpb24oKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcoJnZtLCAidGhpcmRVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGUiKSwg
dGhpcmRVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGVWYWx1ZSk7CisKKyAgICBhdXRvIGZvdXJ0
aExvbmdBdHRyaWJ1dGVWYWx1ZSA9IGpzVGVzdFNlcmlhbGl6YXRpb25Gb3VydGhMb25nQXR0cmli
dXRlR2V0dGVyKCpzdGF0ZSwgKnRoaXNPYmplY3QsIHRocm93U2NvcGUpOworICAgIEFTU0VSVCgh
dGhyb3dTY29wZS5leGNlcHRpb24oKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiZm91cnRoTG9uZ0F0dHJpYnV0ZSIpLCBmb3VydGhMb25n
QXR0cmlidXRlVmFsdWUpOworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwor
fQorCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFNlcmlhbGl6YXRpb25Qcm90
b3R5cGVGdW5jdGlvblRvSlNPTihFeGVjU3RhdGUqIHN0YXRlKQoreworICAgIHJldHVybiBCaW5k
aW5nQ2FsbGVyPEpTVGVzdFNlcmlhbGl6YXRpb24+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdFNlcmlh
bGl6YXRpb25Qcm90b3R5cGVGdW5jdGlvblRvSlNPTkNhbGxlcj4oc3RhdGUsICJ0b0pTT04iKTsK
K30KKworYm9vbCBKU1Rlc3RTZXJpYWxpemF0aW9uT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1
ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit7CisgICAgVU5VU0VEX1BBUkFNKGhhbmRsZSk7CisgICAgVU5VU0VEX1BB
UkFNKHZpc2l0b3IpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBKU1Rlc3RTZXJpYWxp
emF0aW9uT3duZXI6OmZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2
b2lkKiBjb250ZXh0KQoreworICAgIGF1dG8qIGpzVGVzdFNlcmlhbGl6YXRpb24gPSBqc0Nhc3Q8
SlNUZXN0U2VyaWFsaXphdGlvbio+KGhhbmRsZS5zbG90KCktPmFzQ2VsbCgpKTsKKyAgICBhdXRv
JiB3b3JsZCA9ICpzdGF0aWNfY2FzdDxET01XcmFwcGVyV29ybGQqPihjb250ZXh0KTsKKyAgICB1
bmNhY2hlV3JhcHBlcih3b3JsZCwgJmpzVGVzdFNlcmlhbGl6YXRpb24tPndyYXBwZWQoKSwganNU
ZXN0U2VyaWFsaXphdGlvbik7Cit9CisKKyNpZiBFTkFCTEUoQklORElOR19JTlRFR1JJVFkpCisj
aWYgUExBVEZPUk0oV0lOKQorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ0ODMpCitleHRlcm4g
IkMiIHsgZXh0ZXJuIHZvaWQgKCpjb25zdCBfX2lkZW50aWZpZXIoIj8/XzdUZXN0U2VyaWFsaXph
dGlvbkBXZWJDb3JlQEA2QkAiKVtdKSgpOyB9CisjZWxzZQorZXh0ZXJuICJDIiB7IGV4dGVybiB2
b2lkKiBfWlRWTjdXZWJDb3JlMTdUZXN0U2VyaWFsaXphdGlvbkVbXTsgfQorI2VuZGlmCisjZW5k
aWYKKworSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0RP
TUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8VGVzdFNlcmlhbGl6YXRpb24+JiYgaW1w
bCkKK3sKKworI2lmIEVOQUJMRShCSU5ESU5HX0lOVEVHUklUWSkKKyAgICB2b2lkKiBhY3R1YWxW
VGFibGVQb2ludGVyID0gKihyZWludGVycHJldF9jYXN0PHZvaWQqKj4oaW1wbC5wdHIoKSkpOwor
I2lmIFBMQVRGT1JNKFdJTikKKyAgICB2b2lkKiBleHBlY3RlZFZUYWJsZVBvaW50ZXIgPSByZWlu
dGVycHJldF9jYXN0PHZvaWQqPihfX2lkZW50aWZpZXIoIj8/XzdUZXN0U2VyaWFsaXphdGlvbkBX
ZWJDb3JlQEA2QkAiKSk7CisjZWxzZQorICAgIHZvaWQqIGV4cGVjdGVkVlRhYmxlUG9pbnRlciA9
ICZfWlRWTjdXZWJDb3JlMTdUZXN0U2VyaWFsaXphdGlvbkVbMl07CisjaWYgQ09NUElMRVIoQ0xB
TkcpCisgICAgLy8gSWYgdGhpcyBmYWlscyBUZXN0U2VyaWFsaXphdGlvbiBkb2VzIG5vdCBoYXZl
IGEgdnRhYmxlLCBzbyB5b3UgbmVlZCB0byBhZGQgdGhlCisgICAgLy8gSW1wbGVtZW50YXRpb25M
YWNrc1ZUYWJsZSBhdHRyaWJ1dGUgdG8gdGhlIGludGVyZmFjZSBkZWZpbml0aW9uCisgICAgc3Rh
dGljX2Fzc2VydChfX2lzX3BvbHltb3JwaGljKFRlc3RTZXJpYWxpemF0aW9uKSwgIlRlc3RTZXJp
YWxpemF0aW9uIGlzIG5vdCBwb2x5bW9ycGhpYyIpOworI2VuZGlmCisjZW5kaWYKKyAgICAvLyBJ
ZiB5b3UgaGl0IHRoaXMgYXNzZXJ0aW9uIHlvdSBlaXRoZXIgaGF2ZSBhIHVzZSBhZnRlciBmcmVl
IGJ1Zywgb3IKKyAgICAvLyBUZXN0U2VyaWFsaXphdGlvbiBoYXMgc3ViY2xhc3Nlcy4gSWYgVGVz
dFNlcmlhbGl6YXRpb24gaGFzIHN1YmNsYXNzZXMgdGhhdCBnZXQgcGFzc2VkCisgICAgLy8gdG8g
dG9KUygpIHdlIGN1cnJlbnRseSByZXF1aXJlIFRlc3RTZXJpYWxpemF0aW9uIHlvdSB0byBvcHQg
b3V0IG9mIGJpbmRpbmcgaGFyZGVuaW5nCisgICAgLy8gYnkgYWRkaW5nIHRoZSBTa2lwVlRhYmxl
VmFsaWRhdGlvbiBhdHRyaWJ1dGUgdG8gdGhlIGludGVyZmFjZSBJREwgZGVmaW5pdGlvbgorICAg
IFJFTEVBU0VfQVNTRVJUKGFjdHVhbFZUYWJsZVBvaW50ZXIgPT0gZXhwZWN0ZWRWVGFibGVQb2lu
dGVyKTsKKyNlbmRpZgorICAgIHJldHVybiBjcmVhdGVXcmFwcGVyPFRlc3RTZXJpYWxpemF0aW9u
PihnbG9iYWxPYmplY3QsIFdURk1vdmUoaW1wbCkpOworfQorCitKU0M6OkpTVmFsdWUgdG9KUyhK
U0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRl
c3RTZXJpYWxpemF0aW9uJiBpbXBsKQoreworICAgIHJldHVybiB3cmFwKHN0YXRlLCBnbG9iYWxP
YmplY3QsIGltcGwpOworfQorCitUZXN0U2VyaWFsaXphdGlvbiogSlNUZXN0U2VyaWFsaXphdGlv
bjo6dG9XcmFwcGVkKEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBpZiAoYXV0byogd3JhcHBl
ciA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0U2VyaWFsaXphdGlvbio+KHZhbHVlKSkKKyAgICAgICAg
cmV0dXJuICZ3cmFwcGVyLT53cmFwcGVkKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK30K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RTZXJpYWxpemF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0U2VyaWFsaXphdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE5ZmRhNDcyZjg3ZWU5YTk2ZThl
M2YzZDYwNzVmNzNiZTMyM2M1MGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbi5oCkBAIC0wLDAgKzEs
ODkgQEAKKy8qCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJj
ZSBwcm9qZWN0LgorICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUt
YmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
ICJKU0RPTVdyYXBwZXIuaCIKKyNpbmNsdWRlICJUZXN0U2VyaWFsaXphdGlvbi5oIgorI2luY2x1
ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IEpTVGVzdFNlcmlhbGl6YXRpb24gOiBwdWJsaWMgSlNET01XcmFwcGVyPFRlc3RTZXJpYWxpemF0
aW9uPiB7CitwdWJsaWM6CisgICAgdXNpbmcgQmFzZSA9IEpTRE9NV3JhcHBlcjxUZXN0U2VyaWFs
aXphdGlvbj47CisgICAgc3RhdGljIEpTVGVzdFNlcmlhbGl6YXRpb24qIGNyZWF0ZShKU0M6OlN0
cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8
VGVzdFNlcmlhbGl6YXRpb24+JiYgaW1wbCkKKyAgICB7CisgICAgICAgIEpTVGVzdFNlcmlhbGl6
YXRpb24qIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0U2VyaWFs
aXphdGlvbj4oZ2xvYmFsT2JqZWN0LT52bSgpLmhlYXApKSBKU1Rlc3RTZXJpYWxpemF0aW9uKHN0
cnVjdHVyZSwgKmdsb2JhbE9iamVjdCwgV1RGTW92ZShpbXBsKSk7CisgICAgICAgIHB0ci0+Zmlu
aXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0LT52bSgpKTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAg
ICB9CisKKyAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogY3JlYXRlUHJvdG90eXBlKEpTQzo6Vk0m
LCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CisgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHByb3Rv
dHlwZShKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOworICAgIHN0YXRpYyBUZXN0U2Vy
aWFsaXphdGlvbiogdG9XcmFwcGVkKEpTQzo6SlNWYWx1ZSk7CisgICAgc3RhdGljIHZvaWQgZGVz
dHJveShKU0M6OkpTQ2VsbCopOworCisgICAgREVDTEFSRV9JTkZPOworCisgICAgc3RhdGljIEpT
Qzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3Rv
dHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5m
bygpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVjdG9yKEpT
Qzo6Vk0mLCBjb25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Citwcm90ZWN0ZWQ6CisgICAgSlNU
ZXN0U2VyaWFsaXphdGlvbihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVm
PFRlc3RTZXJpYWxpemF0aW9uPiYmKTsKKworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpW
TSYgdm0pCisgICAgeworICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgICAg
IEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTsKKyAgICB9CisKK307CisKK2NsYXNzIEpTVGVzdFNl
cmlhbGl6YXRpb25Pd25lciA6IHB1YmxpYyBKU0M6OldlYWtIYW5kbGVPd25lciB7CitwdWJsaWM6
CisgICAgdmlydHVhbCBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxl
PEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICB2
aXJ0dWFsIHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29u
dGV4dCk7Cit9OworCitpbmxpbmUgSlNDOjpXZWFrSGFuZGxlT3duZXIqIHdyYXBwZXJPd25lcihE
T01XcmFwcGVyV29ybGQmLCBUZXN0U2VyaWFsaXphdGlvbiopCit7CisgICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPEpTVGVzdFNlcmlhbGl6YXRpb25Pd25lcj4gb3duZXI7CisgICAgcmV0dXJuICZv
d25lci5nZXQoKTsKK30KKworaW5saW5lIHZvaWQqIHdyYXBwZXJLZXkoVGVzdFNlcmlhbGl6YXRp
b24qIHdyYXBwYWJsZU9iamVjdCkKK3sKKyAgICByZXR1cm4gd3JhcHBhYmxlT2JqZWN0OworfQor
CitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0Kiwg
VGVzdFNlcmlhbGl6YXRpb24mKTsKK2lubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNT
dGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3RTZXJpYWxp
emF0aW9uKiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCAq
aW1wbCkgOiBKU0M6OmpzTnVsbCgpOyB9CitKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChK
U0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgUmVmPFRlc3RTZXJpYWxpemF0aW9u
PiYmKTsKK2lubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0
ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZlB0cjxUZXN0U2Vy
aWFsaXphdGlvbj4mJiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KU05ld2x5Q3JlYXRlZChzdGF0
ZSwgZ2xvYmFsT2JqZWN0LCBpbXBsLnJlbGVhc2VOb25OdWxsKCkpIDogSlNDOjpqc051bGwoKTsg
fQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VGVzdFNl
cmlhbGl6YXRpb24+IHsKKyAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU1Rlc3RTZXJpYWxpemF0
aW9uOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsCmluZGV4IDEwMDg5ODUxYzk5YTQyZTVm
YWFjYmUwZTljOGNlZTdhMmI0NTVhZGMuLjhjNGY0ZmFhZWJhMzc3MTAzY2Y0ZGFjZTAyZDYxNmYw
ZjJlMmExMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9UZXN0T2JqLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
VGVzdE9iai5pZGwKQEAgLTQxNCw4ICs0MTQsNyBAQCBlbnVtIFRlc3RDb25maWRlbmNlIHsgImhp
Z2giLCAia2luZGEtbG93IiB9OwogCiAgICAgc3RyaW5naWZpZXIgYXR0cmlidXRlIFVTVlN0cmlu
ZyBzdHJpbmdpZmllckF0dHJpYnV0ZTsKIAotCi0gICAgc2VyaWFsaXplciA9IHtyZWFkT25seVN0
cmluZ0F0dHIsIGNyZWF0ZSwgZW51bUF0dHIsIGxvbmdBdHRyfTsKKyAgICBzZXJpYWxpemVyID0g
e2NyZWF0ZSwgcmVhZE9ubHlTdHJpbmdBdHRyLCBlbnVtQXR0ciwgbG9uZ0F0dHJ9OwogfTsKIAog
Ly8gVGhlIGZvbGxvd2luZyBjb21tZW50IHNob3VsZCBub3QgZ2VuZXJhdGUgYW55IGNvZGUuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdFNlcmlh
bGl6YXRpb24uaWRsIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RT
ZXJpYWxpemF0aW9uLmlkbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ODYwZjNmNTA3NzQxNWMxODg0OGEwOTBhNWNl
MmViODU0MjFlY2YxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L1Rlc3RTZXJpYWxpemF0aW9uLmlkbApAQCAtMCwwICsxLDMzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKK2ludGVyZmFjZSBUZXN0
U2VyaWFsaXphdGlvbiB7CisgICAgYXR0cmlidXRlIERPTVN0cmluZyAgICAgICAgICAgICBmaXJz
dFN0cmluZ0F0dHJpYnV0ZTsKKyAgICBhdHRyaWJ1dGUgbG9uZyAgICAgICAgICAgICAgICAgIHNl
Y29uZExvbmdBdHRyaWJ1dGU7CisgICAgYXR0cmlidXRlIHVucmVzdHJpY3RlZCBkb3VibGUgICB0
aGlyZFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZTsKKyAgICBhdHRyaWJ1dGUgbG9uZyAgICAg
ICAgICAgICAgICAgIGZvdXJ0aExvbmdBdHRyaWJ1dGU7IC8vIG5vbi1hbHBoYWJldGljYWwgbmFt
ZQorCisgICAgc2VyaWFsaXplciA9IHsgYXR0cmlidXRlIH07Cit9OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZG9tL0NsaWVudFJlY3QuaWRsIGIvU291cmNlL1dlYkNvcmUvZG9tL0NsaWVu
dFJlY3QuaWRsCmluZGV4IGFiNjIwMmVhYmY4NGM4ZmJlMDhiYWY4ZDJlNjc2ZjhlN2IyMjE4YmIu
LmNkOTk0MGE5ZGYxZDEwYWYyOGI1M2RhYTY4ZmM3NzMzYTUzNTI3YWEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9DbGllbnRSZWN0LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
Q2xpZW50UmVjdC5pZGwKQEAgLTM1LDcgKzM1LDUgQEAKICAgICByZWFkb25seSBhdHRyaWJ1dGUg
dW5yZXN0cmljdGVkIGZsb2F0IHdpZHRoOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnJlc3Ry
aWN0ZWQgZmxvYXQgaGVpZ2h0OwogCi0gICAgLy8gRklYTUU6IHNob3VsZCBiZSBzZXJpYWxpemVy
ID0geyBhdHRyaWJ1dGUgfTsKLSAgICBbQ3VzdG9tXSBPYmplY3QgdG9KU09OKCk7CisgICAgc2Vy
aWFsaXplciA9IHsgYXR0cmlidXRlIH07CiB9OwotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL1BlcmZvcm1hbmNlVGltaW5nLmlkbCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGVyZm9y
bWFuY2VUaW1pbmcuaWRsCmluZGV4IDY1MzQ4ZjJjNGNkOWNjNjhmYTk3YWZhODA5MjQ5NDZlNWY2
NDM2NTIuLjkxZWNlNWQ4MmRlODYxYjFhODY4MGNjMDkyMmNmM2ZkYjIzYjlkNjQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFuY2VUaW1pbmcuaWRsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFuY2VUaW1pbmcuaWRsCkBAIC01NCw3ICs1NCw1IEBACiAg
ICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgbG9uZyBsb2FkRXZlbnRTdGFydDsK
ICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBsb25nIGxvYWRFdmVudEVuZDsK
IAotICAgIC8vIEZJWE1FOiBTaG91bGQgYmUgc2VyaWFsaXplciA9IHsgYXR0cmlidXRlIH07Ci0g
ICAgW0N1c3RvbV0gT2JqZWN0IHRvSlNPTigpOworICAgIHNlcmlhbGl6ZXIgPSB7IGF0dHJpYnV0
ZSB9OwogfTsKLQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>291709</attachid>
            <date>2016-10-14 22:45:48 -0700</date>
            <delta_ts>2016-10-15 13:16:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-163466-20161014224219.patch</filename>
            <type>text/plain</type>
            <size>52466</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA3MzY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDNhZDczOWJhYjBiYzUx
YWNiNmE1NTA1MmEwYjAyMDc5ZmU5YTg3ZS4uMTFlMTA0YzNhMTRhNjAwZTI3OGJjODAxZWEwZmJk
YWRmODI5ZGZhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDE2LTEwLTE0ICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCBz
ZXJpYWxpemVyID0geyBhdHRyaWJ1dGUgfQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTYzNDY2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgUGF0Y2ggYnkgRGFyaW4gQWRsZXIuCisgICAgICAgIAorICAgICAg
ICBGaXggdGhlIGNvZGUgZ2VuZXJhdG9yIHRvIGdlbmVyYXRlIGNvZGUgZm9yIHNlcmlhbGl6ZXIg
PSB7IGF0dHJpYnV0ZSB9LgorICAgICAgICBDdXJyZW50bHkgZ2VuZXJhdGVzIGNvZGUgZm9yIGFs
bCBhdHRyaWJ1dGVzLCBub3QganVzdCB0aG9zZSB0aGF0IGFyZSBzZXJpYWxpemFibGUuCisgICAg
ICAgIAorICAgICAgICBSZW1vdmVkIGN1c3RvbSBzZXJpYWxpemF0aW9uIGZvciBDbGllbnRSZWN0
IGFuZCBQZXJmb3JtYW5jZVRpbWluZy4KKyAgICAgICAgCisgICAgICAgIE90aGVyIG1pbm9yIGNs
ZWFudXAgdG8gYWx3YXlzIGdldCAkaW50ZXJmYWNlTmFtZSBmcm9tICRpbnRlcmZhY2UtPm5hbWUs
IGFuZCB0byBmaXgKKyAgICAgICAgT2JqZWN0Q29uc3RydWN0b3IuaCB0byBiZSBpbmNsdWRlZCBh
cyA8cnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5oPi4KKworICAgICAgICAqIENNYWtlTGlzdHMu
dHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0NsaWVudFJlY3RDdXN0b20uY3BwOiBSZW1vdmVkLgorICAgICAg
ICAoV2ViQ29yZTo6SlNDbGllbnRSZWN0Ojp0b0pTT04pOiBEZWxldGVkLgorICAgICAgICAqIGJp
bmRpbmdzL2pzL0pTUGVyZm9ybWFuY2VUaW1pbmdDdXN0b20uY3BwOiBSZW1vdmVkLgorICAgICAg
ICAoV2ViQ29yZTo6SlNQZXJmb3JtYW5jZVRpbWluZzo6dG9KU09OKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbToKKyAgICAgICAgKEdlbmVy
YXRlSW1wbGVtZW50YXRpb24pOgorICAgICAgICAoSXNTZXJpYWxpemFibGUpOgorICAgICAgICAo
R2VuZXJhdGVTZXJpYWxpemVyRnVuY3Rpb24pOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3ROb2RlLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0T2JqLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uVG9KU09OQ2FsbGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0U2VyaWFsaXphdGlvbi5jcHA6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uLmg6IEFkZGVkLgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9UZXN0T2JqLmlkbDogQ2hhbmdlIHRoZSBzZXJpYWxpemF0aW9uIG9y
ZGVyIHRvIG5vdCBtYXRjaCB0aGUKKyAgICAgICAgYXR0cmlidXRlIG9yZGVyLCB0byB0ZXN0IG9y
ZGVyaW5nIGluIHRoZSBnZW5lcmF0ZWQgY29kZS4KKyAgICAgICAgKiBkb20vQ2xpZW50UmVjdC5p
ZGw6CisgICAgICAgICogcGFnZS9QZXJmb3JtYW5jZVRpbWluZy5pZGw6CisKIDIwMTYtMTAtMTQg
IENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBTZXR0aW5nIEhUTUxN
ZWRpYUVsZW1lbnQubXV0ZWQgdG8gdGhlIHNhbWUgdmFsdWUgc2hvdWxkIG5vdCBmaXJlIGEgdm9s
dW1lIGNoYW5nZSBldmVudApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50
eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCBiMmYwNzBlYTE3NTkyZjFi
OTg3NTBiNTM5NWY5MGYyODlkZDI1ZGM0Li44M2FhZjU2Nzc2ZTMyNTFiN2VkYWJkNTU4ZmRlOWM1
Y2QwZWI2MDJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMTA3NSw3ICsxMDc1LDYgQEAgc2V0
KFdlYkNvcmVfU09VUkNFUwogICAgIGJpbmRpbmdzL2pzL0pTQ1NTVmFsdWVDdXN0b20uY3BwCiAg
ICAgYmluZGluZ3MvanMvSlNDYWxsYmFja0RhdGEuY3BwCiAgICAgYmluZGluZ3MvanMvSlNDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCi0gICAgYmluZGluZ3MvanMvSlNDbGllbnRS
ZWN0Q3VzdG9tLmNwcAogICAgIGJpbmRpbmdzL2pzL0pTQ29tbWFuZExpbmVBUElIb3N0Q3VzdG9t
LmNwcAogICAgIGJpbmRpbmdzL2pzL0pTQ3J5cHRvQWxnb3JpdGhtQnVpbGRlci5jcHAKICAgICBi
aW5kaW5ncy9qcy9KU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnkuY3BwCkBAIC0xMTY1LDcgKzEx
NjQsNiBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgYmluZGluZ3MvanMvSlNOb2RlSXRlcmF0
b3JDdXN0b20uY3BwCiAgICAgYmluZGluZ3MvanMvSlNOb2RlTGlzdEN1c3RvbS5jcHAKICAgICBi
aW5kaW5ncy9qcy9KU1BlcmZvcm1hbmNlRW50cnlDdXN0b20uY3BwCi0gICAgYmluZGluZ3MvanMv
SlNQZXJmb3JtYW5jZVRpbWluZ0N1c3RvbS5jcHAKICAgICBiaW5kaW5ncy9qcy9KU1BsdWdpbkVs
ZW1lbnRGdW5jdGlvbnMuY3BwCiAgICAgYmluZGluZ3MvanMvSlNQb3BTdGF0ZUV2ZW50Q3VzdG9t
LmNwcAogICAgIGJpbmRpbmdzL2pzL0pTUmVhZGFibGVTdHJlYW1Qcml2YXRlQ29uc3RydWN0b3Jz
LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCmluZGV4IGM4MDNlODVhNDAzZDRiMTJjOTlmNWRmYWNmNWFjYzE5ZmY3OTY1ZDkuLmFkODMz
YjdmZjgxYTExNjhkMzg4OGNlM2EzNGJkNjVkMDdmNDdhNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEzNzksNyArMTM3OSw2
IEBACiAJCTMxQzBGRjNFMEU0Q0VGQUMwMDdENkZFNSAvKiBKU1dlYktpdEFuaW1hdGlvbkV2ZW50
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMUMwRkYz
QTBFNENFRkFDMDA3RDZGRTUgLyogSlNXZWJLaXRBbmltYXRpb25FdmVudC5oICovOyB9OwogCQkz
MUMwRkYzRjBFNENFRkFDMDA3RDZGRTUgLyogSlNXZWJLaXRUcmFuc2l0aW9uRXZlbnQuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzFDMEZGM0IwRTRD
RUZBQzAwN0Q2RkU1IC8qIEpTV2ViS2l0VHJhbnNpdGlvbkV2ZW50LmNwcCAqLzsgfTsKIAkJMzFD
MEZGNDAwRTRDRUZBQzAwN0Q2RkU1IC8qIEpTV2ViS2l0VHJhbnNpdGlvbkV2ZW50LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMUMwRkYzQzBFNENFRkFD
MDA3RDZGRTUgLyogSlNXZWJLaXRUcmFuc2l0aW9uRXZlbnQuaCAqLzsgfTsKLQkJMzFDNDIyNDYx
RDc0RUI5QTAwRjEyMzQyIC8qIEpTUGVyZm9ybWFuY2VUaW1pbmdDdXN0b20uY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzFDNDIyNDUxRDc0RUI5QTAw
RjEyMzQyIC8qIEpTUGVyZm9ybWFuY2VUaW1pbmdDdXN0b20uY3BwICovOyB9OwogCQkzMUQ1OTFC
MzE2Njk3QTZDMDBFNkJGMDIgLyogUGx1Z0luQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMUQ1OTFCMTE2Njk3QTZDMDBFNkJGMDIgLyogUGx1
Z0luQ2xpZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMzFEQ0QyOUQxQUI0RkJERTAwNzJFODE3IC8qIEFuaW1hdGlvblRyaWdnZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxRENEMjlDMUFCNEZC
REUwMDcyRTgxNyAvKiBBbmltYXRpb25UcmlnZ2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMzFEQ0RGNDMxREExQzQ1NDAwRUE1QjkzIC8qIEV4
dGVuZGVkQ29sb3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMzFEQ0RGNDExREExQzQ1NDAwRUE1QjkzIC8qIEV4dGVuZGVkQ29sb3IuY3BwICovOyB9
OwpAQCAtMTczOSw3ICsxNzM4LDYgQEAKIAkJNDY3MUUwNjYxRDY3QTU5NjAwQzZCNDk3IC8qIENh
bnZhc1BhdGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDQ2NzFFMDY0MUQ2N0E1N0IwMEM2QjQ5NyAvKiBDYW52YXNQYXRoLmggKi87IH07CiAJCTQ2NzMw
MjAyMUM0RUZFNzgwMEJDQjM1NyAvKiBJZ25vcmVPcGVuc0R1cmluZ1VubG9hZENvdW50SW5jcmVt
ZW50ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ2
NzMwMjAxMUM0RUZFNjYwMEJDQjM1NyAvKiBJZ25vcmVPcGVuc0R1cmluZ1VubG9hZENvdW50SW5j
cmVtZW50ZXIuaCAqLzsgfTsKIAkJNDY4OUYxQUYxMjY3QkFFMTAwRThEMzgwIC8qIEZpbGVNZXRh
ZGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDY4
OUYxQUUxMjY3QkFFMTAwRThEMzgwIC8qIEZpbGVNZXRhZGF0YS5oICovOyB9OwotCQk0NkE1OEFD
NTFENDZCM0ZBMDA0MzIwMzYgLyogSlNDbGllbnRSZWN0Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ2QTU4QUM0MUQ0NkIzRkEwMDQzMjAz
NiAvKiBKU0NsaWVudFJlY3RDdXN0b20uY3BwICovOyB9OwogCQk0NkI2M0Y2QzFDNkU4RDE5MDAy
RTkxNEIgLyogSlNFdmVudFRhcmdldEN1c3RvbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNDZCNjNGNkIxQzZFOENERjAwMkU5MTRCIC8qIEpTRXZlbnRU
YXJnZXRDdXN0b20uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk0NkM4M0VGRDFBOUJCRTI5MDBBNzlBNDEgLyogR2VvTm90aWZpZXIuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDZDODNFRkIxQTlCQkUy
OTAwQTc5QTQxIC8qIEdlb05vdGlmaWVyLmNwcCAqLzsgfTsKIAkJNDZDODNFRkUxQTlCQkUyOTAw
QTc5QTQxIC8qIEdlb05vdGlmaWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0NkM4M0VGQzFBOUJCRTI5MDBBNzlBNDEgLyogR2VvTm90aWZpZXIuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtODM0Nyw3
ICs4MzQ1LDYgQEAKIAkJMzFDMEZGM0EwRTRDRUZBQzAwN0Q2RkU1IC8qIEpTV2ViS2l0QW5pbWF0
aW9uRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNXZWJLaXRBbmlt
YXRpb25FdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMUMwRkYzQjBFNENF
RkFDMDA3RDZGRTUgLyogSlNXZWJLaXRUcmFuc2l0aW9uRXZlbnQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNXZWJLaXRUcmFuc2l0aW9uRXZlbnQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMUMwRkYzQzBFNENFRkFDMDA3RDZGRTUgLyogSlNX
ZWJLaXRUcmFuc2l0aW9uRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNXZWJLaXRUcmFuc2l0aW9uRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
MzFDNDIyNDUxRDc0RUI5QTAwRjEyMzQyIC8qIEpTUGVyZm9ybWFuY2VUaW1pbmdDdXN0b20uY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNQZXJmb3JtYW5jZVRpbWlu
Z0N1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxRDU5MUIxMTY2OTdB
NkMwMEU2QkYwMiAvKiBQbHVnSW5DbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gUGx1Z0luQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxRENE
MjlDMUFCNEZCREUwMDcyRTgxNyAvKiBBbmltYXRpb25UcmlnZ2VyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEFuaW1hdGlvblRyaWdnZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMzFEQ0RGNDExREExQzQ1NDAwRUE1QjkzIC8qIEV4dGVuZGVkQ29sb3IuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXh0ZW5kZWRDb2xvci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04NzU1LDcgKzg3NTIsNiBAQAogCQk0Njcx
RTA2NDFENjdBNTdCMDBDNkI0OTcgLyogQ2FudmFzUGF0aC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBDYW52YXNQYXRoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTQ2NzMwMjAxMUM0RUZFNjYwMEJDQjM1NyAvKiBJZ25vcmVPcGVuc0R1cmluZ1VubG9hZENvdW50
SW5jcmVtZW50ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSWdub3JlT3Bl
bnNEdXJpbmdVbmxvYWRDb3VudEluY3JlbWVudGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTQ2ODlGMUFFMTI2N0JBRTEwMEU4RDM4MCAvKiBGaWxlTWV0YWRhdGEuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsZU1ldGFkYXRhLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTQ2QTU4QUM0MUQ0NkIzRkEwMDQzMjAzNiAvKiBKU0NsaWVudFJlY3RD
dXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNDbGllbnRS
ZWN0Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDZCNjNGNkIxQzZF
OENERjAwMkU5MTRCIC8qIEpTRXZlbnRUYXJnZXRDdXN0b20uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNFdmVudFRhcmdldEN1c3RvbS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk0NkM4M0VGQjFBOUJCRTI5MDBBNzlBNDEgLyogR2VvTm90aWZpZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR2VvTm90aWZpZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NkM4M0VGQzFBOUJCRTI5MDBBNzlBNDEgLyogR2Vv
Tm90aWZpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR2VvTm90aWZpZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIxMjAxLDcgKzIxMTk3LDYgQEAKIAkJ
CQlCRTZERjcxMDE3MUNBMkRBMDBERDUyQjggLyogSlNBdWRpb1RyYWNrTGlzdEN1c3RvbS5jcHAg
Ki8sCiAJCQkJODkzMURFNUExNEM0NEM0NDAwMERDOUQyIC8qIEpTQmxvYkN1c3RvbS5jcHAgKi8s
CiAJCQkJNDlFRUQxNEIxMDUxOTcxOTAwMDk5RkFCIC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQ3VzdG9tLmNwcCAqLywKLQkJCQk0NkE1OEFDNDFENDZCM0ZBMDA0MzIwMzYgLyogSlNDbGll
bnRSZWN0Q3VzdG9tLmNwcCAqLywKIAkJCQlBNTg0RkUzNzE4NjREQUMxMDA4NDNCMTAgLyogSlND
b21tYW5kTGluZUFQSUhvc3RDdXN0b20uY3BwICovLAogCQkJCTdDRUYyNjE4MUQ2QTkyRTMwMEJF
OTA1RCAvKiBKU0NyeXB0b0N1c3RvbS5jcHAgKi8sCiAJCQkJRTE1N0E4RTYxODE4NEM2NzAwOUY4
MjFEIC8qIEpTQ3J5cHRvS2V5Q3VzdG9tLmNwcCAqLywKQEAgLTIxMjgyLDcgKzIxMjc3LDYgQEAK
IAkJCQk4M0YxMjA2QTFCOEMxMDM2MDBENzVGNjMgLyogSlNOb2RlRmlsdGVyQ3VzdG9tLmNwcCAq
LywKIAkJCQkxQTc1MEREMzBBOTBFNzI5MDAwRkYyMTUgLyogSlNOb2RlSXRlcmF0b3JDdXN0b20u
Y3BwICovLAogCQkJCUJDRDlDMjYxMEMxN0FBNjcwMDVDOTBBMiAvKiBKU05vZGVMaXN0Q3VzdG9t
LmNwcCAqLywKLQkJCQkzMUM0MjI0NTFENzRFQjlBMDBGMTIzNDIgLyogSlNQZXJmb3JtYW5jZVRp
bWluZ0N1c3RvbS5jcHAgKi8sCiAJCQkJQUQyMEIxOEMxOEU5RDIxNjAwNUE4MDgzIC8qIEpTTm9k
ZUxpc3RDdXN0b20uaCAqLywKIAkJCQlBODVGMjIwODE0MzAzNzdEMDA3Q0M4ODQgLyogSlNQb3BT
dGF0ZUV2ZW50Q3VzdG9tLmNwcCAqLywKIAkJCQk0MThDMzk1RDFDOEYwQUFCMDA1MUM4QTMgLyog
SlNSZWFkYWJsZVN0cmVhbVNvdXJjZUN1c3RvbS5jcHAgKi8sCkBAIC0yNzcyOSw3ICsyNzcyMyw2
IEBACiAJCQkJRkQzMTYwQkMxMkIwMjcyQTAwQzFBMzU5IC8qIEF1ZGlvRGVzdGluYXRpb25NYWMu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkQzMTYwMDcxMkIwMjY3NjAwQzFBMzU5IC8qIEF1ZGlv
RGVzdGluYXRpb25Ob2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZEMzE2MDgxMTJCMDI2Rjcw
MEMxQTM1OSAvKiBBdWRpb0RTUEtlcm5lbFByb2Nlc3Nvci5jcHAgaW4gU291cmNlcyAqLywKLQkJ
CQkzMUM0MjI0NjFENzRFQjlBMDBGMTIzNDIgLyogSlNQZXJmb3JtYW5jZVRpbWluZ0N1c3RvbS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlDRDU1OTY5MTE0NzVCNjc4MDAxRDBCRDAgLyogQXVkaW9G
aWxlUmVhZGVySU9TLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZEMzE2MEJFMTJCMDI3MkEwMEMx
QTM1OSAvKiBBdWRpb0ZpbGVSZWFkZXJNYWMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0QyRjRB
MjMxOEQ4OUY3MDAwNjM3NDZEIC8qIEF1ZGlvSGFyZHdhcmVMaXN0ZW5lci5jcHAgaW4gU291cmNl
cyAqLywKQEAgLTI4NzE3LDcgKzI4NzEwLDYgQEAKIAkJCQlGREExNUVBMzEyQjAzRUUxMDAzQTU4
M0EgLyogSlNDaGFubmVsU3BsaXR0ZXJOb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTY1REYz
MUYzMDlEMUNDNjAwMDBCRTMyNSAvKiBKU0NoYXJhY3RlckRhdGEuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQkNDMDY1ODcwRjNDRTJBNzAwQ0QyRDg3IC8qIEpTQ2xpZW50UmVjdC5jcHAgaW4gU291
cmNlcyAqLywKLQkJCQk0NkE1OEFDNTFENDZCM0ZBMDA0MzIwMzYgLyogSlNDbGllbnRSZWN0Q3Vz
dG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDQzA2NTg5MEYzQ0UyQTcwMENEMkQ4NyAvKiBK
U0NsaWVudFJlY3RMaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUzMTUwRUE2MURBNzIxOTAw
MDE5NDAxMiAvKiBKU05vZGVET01KSVQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFGQjU1MDUx
MTNFM0U5MTAwODIxMTc2IC8qIEpTQ2xvc2VFdmVudC5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2xpZW50UmVjdEN1c3RvbS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NsaWVudFJlY3RDdXN0b20uY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkM2M1N2I2ZmQ5ZWM5Njc3NjAxMzRmOGY1NjgzYWFl
ZWRlOWM2YWZlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2xpZW50UmVjdEN1c3RvbS5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIkpTQ2xpZW50UmVjdC5oIgotCi0jaW5jbHVkZSAiQ2xpZW50UmVjdC5oIgot
I2luY2x1ZGUgPGJ5dGVjb2RlL0NvZGVCbG9jay5oPgotI2luY2x1ZGUgPGhlYXAvSGVhcElubGlu
ZXMuaD4KLSNpbmNsdWRlIDxydW50aW1lL0F1eGlsaWFyeUJhcnJpZXJJbmxpbmVzLmg+Ci0jaW5j
bHVkZSA8cnVudGltZS9JZGVudGlmaWVySW5saW5lcy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNP
YmplY3QuaD4KLSNpbmNsdWRlIDxydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmg+Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotdXNpbmcgbmFtZXNwYWNlIEpTQzsKLQotSlNDOjpKU1ZhbHVlIEpT
Q2xpZW50UmVjdDo6dG9KU09OKEV4ZWNTdGF0ZSYgc3RhdGUpCi17Ci0gICAgQ2xpZW50UmVjdCYg
cmVjdCA9IHdyYXBwZWQoKTsKLSAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOwotCi0gICAgSlNWYWx1
ZSBvYmplY3QgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdCgmc3RhdGUpOwotICAgIENvZGVCbG9jayog
Y29kZUJsb2NrID0gc3RhdGUuY29kZUJsb2NrKCk7Ci0gICAgUHV0UHJvcGVydHlTbG90IHNsb3Qo
b2JqZWN0LCBjb2RlQmxvY2sgPyBjb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpIDogZmFsc2UpOwot
ICAgIG9iamVjdC5wdXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgQVNDSUlM
aXRlcmFsKCJ0b3AiKSksIGpzTnVtYmVyKHJlY3QudG9wKCkpLCBzbG90KTsKLSAgICBvYmplY3Qu
cHV0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIEFTQ0lJTGl0ZXJhbCgicmln
aHQiKSksIGpzTnVtYmVyKHJlY3QucmlnaHQoKSksIHNsb3QpOwotICAgIG9iamVjdC5wdXQoJnN0
YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgQVNDSUlMaXRlcmFsKCJib3R0b20iKSks
IGpzTnVtYmVyKHJlY3QuYm90dG9tKCkpLCBzbG90KTsKLSAgICBvYmplY3QucHV0KCZzdGF0ZSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIEFTQ0lJTGl0ZXJhbCgibGVmdCIpKSwganNOdW1i
ZXIocmVjdC5sZWZ0KCkpLCBzbG90KTsKLSAgICBvYmplY3QucHV0KCZzdGF0ZSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZygmdm0sIEFTQ0lJTGl0ZXJhbCgid2lkdGgiKSksIGpzTnVtYmVyKHJlY3Qu
d2lkdGgoKSksIHNsb3QpOwotICAgIG9iamVjdC5wdXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZ2bSwgQVNDSUlMaXRlcmFsKCJoZWlnaHQiKSksIGpzTnVtYmVyKHJlY3QuaGVpZ2h0
KCkpLCBzbG90KTsKLQotICAgIHJldHVybiBvYmplY3Q7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGVyZm9ybWFuY2VUaW1pbmdDdXN0b20uY3BwIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQZXJmb3JtYW5jZVRpbWluZ0N1c3RvbS5jcHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhMjJhMGQxZWE3MmI1YmJmZjQyMWZhZDdh
OGQ0OTc4YzUzZTM2ODYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQZXJmb3JtYW5jZVRpbWluZ0N1c3Rv
bS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw3NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkpTUGVyZm9ybWFuY2VUaW1pbmcuaCIKLQotI2lmIEVO
QUJMRShXRUJfVElNSU5HKQotCi0jaW5jbHVkZSAiRE9NV3JhcHBlcldvcmxkLmgiCi0jaW5jbHVk
ZSA8aGVhcC9IZWFwSW5saW5lcy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvQXV4aWxpYXJ5QmFycmll
cklubGluZXMuaD4KLSNpbmNsdWRlIDxydW50aW1lL0lkZW50aWZpZXJJbmxpbmVzLmg+Ci0jaW5j
bHVkZSA8cnVudGltZS9KU09iamVjdC5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvT2JqZWN0Q29uc3Ry
dWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi11c2luZyBuYW1lc3BhY2UgSlNDOwot
Ci1KU0M6OkpTVmFsdWUgSlNQZXJmb3JtYW5jZVRpbWluZzo6dG9KU09OKEV4ZWNTdGF0ZSYgc3Rh
dGUpCi17Ci0gICAgUGVyZm9ybWFuY2VUaW1pbmcmIHRpbWluZyA9IHdyYXBwZWQoKTsKLSAgICBW
TSYgdm0gPSBzdGF0ZS52bSgpOwotCi0gICAgYXV0byBvYmplY3QgPSBjb25zdHJ1Y3RFbXB0eU9i
amVjdCgmc3RhdGUpOwotCi0gICAgb2JqZWN0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZy
b21TdHJpbmcoJnZtLCBBU0NJSUxpdGVyYWwoIm5hdmlnYXRpb25TdGFydCIpKSwganNOdW1iZXIo
dGltaW5nLm5hdmlnYXRpb25TdGFydCgpKSk7Ci0gICAgb2JqZWN0LT5wdXREaXJlY3Qodm0sIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBBU0NJSUxpdGVyYWwoInVubG9hZEV2ZW50U3RhcnQi
KSksIGpzTnVtYmVyKHRpbWluZy51bmxvYWRFdmVudFN0YXJ0KCkpKTsKLSAgICBvYmplY3QtPnB1
dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIEFTQ0lJTGl0ZXJhbCgidW5s
b2FkRXZlbnRFbmQiKSksIGpzTnVtYmVyKHRpbWluZy51bmxvYWRFdmVudEVuZCgpKSk7Ci0gICAg
b2JqZWN0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBBU0NJSUxp
dGVyYWwoInJlZGlyZWN0U3RhcnQiKSksIGpzTnVtYmVyKHRpbWluZy5yZWRpcmVjdFN0YXJ0KCkp
KTsKLSAgICBvYmplY3QtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0s
IEFTQ0lJTGl0ZXJhbCgicmVkaXJlY3RFbmQiKSksIGpzTnVtYmVyKHRpbWluZy5yZWRpcmVjdEVu
ZCgpKSk7Ci0gICAgb2JqZWN0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmco
JnZtLCBBU0NJSUxpdGVyYWwoImZldGNoU3RhcnQiKSksIGpzTnVtYmVyKHRpbWluZy5mZXRjaFN0
YXJ0KCkpKTsKLSAgICBvYmplY3QtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zygmdm0sIEFTQ0lJTGl0ZXJhbCgiZG9tYWluTG9va3VwU3RhcnQiKSksIGpzTnVtYmVyKHRpbWlu
Zy5kb21haW5Mb29rdXBTdGFydCgpKSk7Ci0gICAgb2JqZWN0LT5wdXREaXJlY3Qodm0sIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBBU0NJSUxpdGVyYWwoImRvbWFpbkxvb2t1cEVuZCIpKSwg
anNOdW1iZXIodGltaW5nLmRvbWFpbkxvb2t1cEVuZCgpKSk7Ci0gICAgb2JqZWN0LT5wdXREaXJl
Y3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBBU0NJSUxpdGVyYWwoImNvbm5lY3RT
dGFydCIpKSwganNOdW1iZXIodGltaW5nLmNvbm5lY3RTdGFydCgpKSk7Ci0gICAgb2JqZWN0LT5w
dXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBBU0NJSUxpdGVyYWwoImNv
bm5lY3RFbmQiKSksIGpzTnVtYmVyKHRpbWluZy5jb25uZWN0RW5kKCkpKTsKLSAgICBvYmplY3Qt
PnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIEFTQ0lJTGl0ZXJhbCgi
c2VjdXJlQ29ubmVjdGlvblN0YXJ0IikpLCBqc051bWJlcih0aW1pbmcuc2VjdXJlQ29ubmVjdGlv
blN0YXJ0KCkpKTsKLSAgICBvYmplY3QtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZygmdm0sIEFTQ0lJTGl0ZXJhbCgicmVxdWVzdFN0YXJ0IikpLCBqc051bWJlcih0aW1pbmcu
cmVxdWVzdFN0YXJ0KCkpKTsKLSAgICBvYmplY3QtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmdm0sIEFTQ0lJTGl0ZXJhbCgicmVzcG9uc2VTdGFydCIpKSwganNOdW1iZXIo
dGltaW5nLnJlc3BvbnNlU3RhcnQoKSkpOwotICAgIG9iamVjdC0+cHV0RGlyZWN0KHZtLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgQVNDSUlMaXRlcmFsKCJyZXNwb25zZUVuZCIpKSwganNO
dW1iZXIodGltaW5nLnJlc3BvbnNlRW5kKCkpKTsKLSAgICBvYmplY3QtPnB1dERpcmVjdCh2bSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIEFTQ0lJTGl0ZXJhbCgiZG9tTG9hZGluZyIpKSwg
anNOdW1iZXIodGltaW5nLmRvbUxvYWRpbmcoKSkpOwotICAgIG9iamVjdC0+cHV0RGlyZWN0KHZt
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgQVNDSUlMaXRlcmFsKCJkb21JbnRlcmFjdGl2
ZSIpKSwganNOdW1iZXIodGltaW5nLmRvbUludGVyYWN0aXZlKCkpKTsKLSAgICBvYmplY3QtPnB1
dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIEFTQ0lJTGl0ZXJhbCgiZG9t
Q29udGVudExvYWRlZEV2ZW50U3RhcnQiKSksIGpzTnVtYmVyKHRpbWluZy5kb21Db250ZW50TG9h
ZGVkRXZlbnRTdGFydCgpKSk7Ci0gICAgb2JqZWN0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnZtLCBBU0NJSUxpdGVyYWwoImRvbUNvbnRlbnRMb2FkZWRFdmVudEVuZCIp
KSwganNOdW1iZXIodGltaW5nLmRvbUNvbnRlbnRMb2FkZWRFdmVudEVuZCgpKSk7Ci0gICAgb2Jq
ZWN0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBBU0NJSUxpdGVy
YWwoImRvbUNvbXBsZXRlIikpLCBqc051bWJlcih0aW1pbmcuZG9tQ29tcGxldGUoKSkpOwotICAg
IG9iamVjdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgQVNDSUlM
aXRlcmFsKCJsb2FkRXZlbnRTdGFydCIpKSwganNOdW1iZXIodGltaW5nLmxvYWRFdmVudFN0YXJ0
KCkpKTsKLSAgICBvYmplY3QtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygm
dm0sIEFTQ0lJTGl0ZXJhbCgibG9hZEV2ZW50RW5kIikpLCBqc051bWJlcih0aW1pbmcubG9hZEV2
ZW50RW5kKCkpKTsKLQotICAgIHJldHVybiBvYmplY3Q7Ci19Ci0KLX0KLQotI2VuZGlmIC8vIEVO
QUJMRShXRUJfVElNSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy9Db2RlR2VuZXJhdG9ySlMucG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L0NvZGVHZW5lcmF0b3JKUy5wbQppbmRleCA0OTlkOTViYjFmNDYxYWNlNWUwNjUwZjBkZmQ5ZDM0
NjRmYWY5ZTEyLi41ZGZhZTg4MDhiY2UxNTE5NGMzOWY1NmU0YzA1Y2Y1ZWUxNzBlNWIwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5w
bQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5w
bQpAQCAtMzc0NSw3ICszNzQ1LDcgQEAgRU5ECiAKIAogICAgIEdlbmVyYXRlSW1wbGVtZW50YXRp
b25JdGVyYWJsZUZ1bmN0aW9ucygkaW50ZXJmYWNlKSBpZiAkaW50ZXJmYWNlLT5pdGVyYWJsZTsK
LSAgICBHZW5lcmF0ZVNlcmlhbGl6ZXJGdW5jdGlvbigkaW50ZXJmYWNlLCAkaW50ZXJmYWNlTmFt
ZSwgJGNsYXNzTmFtZSkgaWYgJGludGVyZmFjZS0+c2VyaWFsaXphYmxlOworICAgIEdlbmVyYXRl
U2VyaWFsaXplckZ1bmN0aW9uKCRpbnRlcmZhY2UsICRjbGFzc05hbWUpIGlmICRpbnRlcmZhY2Ut
PnNlcmlhbGl6YWJsZTsKIAogICAgIGlmICgkbmVlZHNWaXNpdENoaWxkcmVuKSB7CiAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAidm9pZCAke2NsYXNzTmFtZX06OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcilcbiIpOwpAQCAtMzk2NiwyNyArMzk2Niw1
NCBAQCBFTkQKICAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuI2VuZGlmIC8vICR7Y29uZGl0aW9u
YWxTdHJpbmd9XG4iKSBpZiAkY29uZGl0aW9uYWxTdHJpbmc7CiB9CiAKK3N1YiBJc1NlcmlhbGl6
YWJsZQoreworICAgIG15ICgkaW50ZXJmYWNlLCAkYXR0cmlidXRlKSA9IEBfOworCisgICAgIyBG
SVhNRTogSXQgaXMgY2hhbGxlbmdpbmcgdG8gZmlndXJlIG91dCB3aGV0aGVyIGFuIGF0dHJpYnV0
ZSBpcyBzZXJpYWxpemFibGUgb3Igbm90LgorICAgICMgRm9yIG5vdywganVzdCBwcmV0ZW5kIHRo
ZXkgYWxsIGFyZS4KKyAgICByZXR1cm4gMTsKK30KKwogc3ViIEdlbmVyYXRlU2VyaWFsaXplckZ1
bmN0aW9uCiB7Ci0gICAgbXkgKCRpbnRlcmZhY2UsICRpbnRlcmZhY2VOYW1lLCAkY2xhc3NOYW1l
KSA9IEBfOworICAgIG15ICgkaW50ZXJmYWNlLCAkY2xhc3NOYW1lKSA9IEBfOworCisgICAgbXkg
JGludGVyZmFjZU5hbWUgPSAkaW50ZXJmYWNlLT5uYW1lOworCiAgICAgbXkgJHNlcmlhbGl6ZXJG
dW5jdGlvbk5hbWUgPSAidG9KU09OIjsKICAgICBteSAkc2VyaWFsaXplck5hdGl2ZUZ1bmN0aW9u
TmFtZSA9ICRjb2RlR2VuZXJhdG9yLT5XS19sY2ZpcnN0KCRjbGFzc05hbWUpIC4gIlByb3RvdHlw
ZUZ1bmN0aW9uIiAuICRjb2RlR2VuZXJhdG9yLT5XS191Y2ZpcnN0KCRzZXJpYWxpemVyRnVuY3Rp
b25OYW1lKTsKIAotICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJPYmplY3RDb25zdHJ1Y3Rvci5oIik7
CisgICAgbXkgQHNlcmlhbGl6ZWRBdHRyaWJ1dGVzID0gKCk7CisgICAgaWYgKGdyZXAgJF8gZXEg
ImF0dHJpYnV0ZSIsIEB7JGludGVyZmFjZS0+c2VyaWFsaXphYmxlLT5hdHRyaWJ1dGVzfSkgewor
ICAgICAgICBmb3JlYWNoIG15ICRhdHRyaWJ1dGUgKEB7JGludGVyZmFjZS0+YXR0cmlidXRlc30p
IHsKKyAgICAgICAgICAgIHB1c2ggQHNlcmlhbGl6ZWRBdHRyaWJ1dGVzLCAkYXR0cmlidXRlIGlm
IElzU2VyaWFsaXphYmxlKCRpbnRlcmZhY2UsICRhdHRyaWJ1dGUpOworICAgICAgICB9CisgICAg
fSBlbHNlIHsKKyAgICAgICAgZm9yZWFjaCBteSAkbmFtZSAoQHskaW50ZXJmYWNlLT5zZXJpYWxp
emFibGUtPmF0dHJpYnV0ZXN9KSB7CisgICAgICAgICAgICBmb3JlYWNoIG15ICRhdHRyaWJ1dGUg
KEB7JGludGVyZmFjZS0+YXR0cmlidXRlc30pIHsKKyAgICAgICAgICAgICAgICBpZiAoJG5hbWUg
ZXEgJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5uYW1lKSB7CisgICAgICAgICAgICAgICAgICAgIHB1
c2ggQHNlcmlhbGl6ZWRBdHRyaWJ1dGVzLCAkYXR0cmlidXRlOworICAgICAgICAgICAgICAgICAg
ICBsYXN0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICMg
RklYTUU6IFdvdWxkIGJlIG5pY2UgdG8gcmVwb3J0IGFuIGVycm9yIGZvciBhdHRyaWJ1dGUgbmFt
ZXMgdGhhdCBkb24ndCBtYXRjaC4KKyAgICAgICAgfQorICAgIH0KKworICAgIEFkZFRvSW1wbElu
Y2x1ZGVzKCI8cnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5oPiIpOwogICAgIHB1c2goQGltcGxD
b250ZW50LCAic3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSAke3NlcmlhbGl6ZXJOYXRpdmVG
dW5jdGlvbk5hbWV9Q2FsbGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTJGludGVyZmFjZU5hbWUqIHRo
aXNPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSlcbiIpOwogICAgIHB1c2goQGlt
cGxDb250ZW50LCAie1xuIik7CiAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byYgdm0g
PSBzdGF0ZS0+dm0oKTtcbiIpOwogICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8qIHJl
c3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KHN0YXRlKTtcbiIpOwogICAgIHB1c2goQGltcGxD
b250ZW50LCAiXG4iKTsKLSAgICBmb3JlYWNoIG15ICRhdHRyaWJ1dGUgKEB7JGludGVyZmFjZS0+
YXR0cmlidXRlc30pIHsKKyAgICBmb3JlYWNoIG15ICRhdHRyaWJ1dGUgKEBzZXJpYWxpemVkQXR0
cmlidXRlcykgewogICAgICAgICBteSAkbmFtZSA9ICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+bmFt
ZTsKLSAgICAgICAgaWYgKGdyZXAgJF8gZXEgJG5hbWUsIEB7JGludGVyZmFjZS0+c2VyaWFsaXph
YmxlLT5hdHRyaWJ1dGVzfSkgewotICAgICAgICAgICAgbXkgJGdldEZ1bmN0aW9uTmFtZSA9IEdl
dEF0dHJpYnV0ZUdldHRlck5hbWUoJGludGVyZmFjZSwgJGNsYXNzTmFtZSwgJGF0dHJpYnV0ZSk7
Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvICR7bmFtZX1WYWx1ZSA9
ICR7Z2V0RnVuY3Rpb25OYW1lfUdldHRlcigqc3RhdGUsICp0aGlzT2JqZWN0LCB0aHJvd1Njb3Bl
KTtcbiIpOwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgQVNTRVJUKCF0aHJv
d1Njb3BlLmV4Y2VwdGlvbigpKTtcbiIpOwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBc
IiR7bmFtZX1cIiksICR7bmFtZX1WYWx1ZSk7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiXG4iKTsKLSAgICAgICAgfQorICAgICAgICBteSAkZ2V0RnVuY3Rpb25OYW1lID0g
R2V0QXR0cmlidXRlR2V0dGVyTmFtZSgkaW50ZXJmYWNlLCAkY2xhc3NOYW1lLCAkYXR0cmlidXRl
KTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byAke25hbWV9VmFsdWUgPSAk
e2dldEZ1bmN0aW9uTmFtZX1HZXR0ZXIoKnN0YXRlLCAqdGhpc09iamVjdCwgdGhyb3dTY29wZSk7
XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgQVNTRVJUKCF0aHJvd1Njb3Bl
LmV4Y2VwdGlvbigpKTtcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXN1
bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIFwiJHtuYW1lfVwi
KSwgJHtuYW1lfVZhbHVlKTtcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuIik7
CiAgICAgfQogICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUocmVzdWx0KTtcbiIpOwogICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuIik7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5j
cHAKaW5kZXggOTVlOTYwNzNkMzk4OGY3NWViZTY4Mzk5YjEzYzYwYzU0MzkxM2Q4My4uMjdlY2U4
NjM3NjZkZGFhYTZhNmM2ODkxNzg5YThhZTAyZjZkYzYzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmNwcApAQCAtMjYs
MTEgKzI2LDExIEBACiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkpT
RE9NSXRlcmF0b3IuaCIKICNpbmNsdWRlICJKU0RPTVByb21pc2UuaCIKLSNpbmNsdWRlICJPYmpl
Y3RDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNp
bmNsdWRlICJVUkwuaCIKICNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CiAjaW5jbHVkZSA8cnVu
dGltZS9KU1N0cmluZy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuaD4K
ICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3Bw
CmluZGV4IGU5ZTEzOGRmMDc2OWM2OWMyZjQ4NDUxMTYzY2JhMTcwNzE5NWZhZmEuLmNkZjdjYmM3
OWNhODhjZDAzMTk5OWVkODI4MTI2YzBhY2UxNDAzZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCkBAIC01Myw3ICs1
Myw2IEBACiAjaW5jbHVkZSAiSlNUZXN0U3RhbmRhbG9uZURpY3Rpb25hcnkuaCIKICNpbmNsdWRl
ICJKU1Rlc3RTdWJPYmouaCIKICNpbmNsdWRlICJKU1hQYXRoTlNSZXNvbHZlci5oIgotI2luY2x1
ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJl
cy5oIgogI2luY2x1ZGUgIlNWR0RvY3VtZW50LmgiCiAjaW5jbHVkZSAiU1ZHUG9pbnQuaCIKQEAg
LTc3NDAsNiArNzczOSwxMCBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uVG9KU09OQ2FsbGVyKEV4ZWNTdGF0ZSogcwogICAgIGF1dG8mIHZt
ID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3Qo
c3RhdGUpOwogCisgICAgYXV0byBjcmVhdGVWYWx1ZSA9IGpzVGVzdE9iakNyZWF0ZUdldHRlcigq
c3RhdGUsICp0aGlzT2JqZWN0LCB0aHJvd1Njb3BlKTsKKyAgICBBU1NFUlQoIXRocm93U2NvcGUu
ZXhjZXB0aW9uKCkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZ2bSwgImNyZWF0ZSIpLCBjcmVhdGVWYWx1ZSk7CisKICAgICBhdXRvIHJlYWRPbmx5
U3RyaW5nQXR0clZhbHVlID0ganNUZXN0T2JqUmVhZE9ubHlTdHJpbmdBdHRyR2V0dGVyKCpzdGF0
ZSwgKnRoaXNPYmplY3QsIHRocm93U2NvcGUpOwogICAgIEFTU0VSVCghdGhyb3dTY29wZS5leGNl
cHRpb24oKSk7CiAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJp
bmcoJnZtLCAicmVhZE9ubHlTdHJpbmdBdHRyIiksIHJlYWRPbmx5U3RyaW5nQXR0clZhbHVlKTsK
QEAgLTc3NTIsMTAgKzc3NTUsNiBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uVG9KU09OQ2FsbGVyKEV4ZWNTdGF0ZSogcwogICAgIEFTU0VS
VCghdGhyb3dTY29wZS5leGNlcHRpb24oKSk7CiAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAibG9uZ0F0dHIiKSwgbG9uZ0F0dHJWYWx1ZSk7CiAK
LSAgICBhdXRvIGNyZWF0ZVZhbHVlID0ganNUZXN0T2JqQ3JlYXRlR2V0dGVyKCpzdGF0ZSwgKnRo
aXNPYmplY3QsIHRocm93U2NvcGUpOwotICAgIEFTU0VSVCghdGhyb3dTY29wZS5leGNlcHRpb24o
KSk7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZt
LCAiY3JlYXRlIiksIGNyZWF0ZVZhbHVlKTsKLQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
cmVzdWx0KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb24uY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFl
NTAxODliZDgyZDc0ZDkxNWZhNjM1MzNkM2M0MzUxMTM2OGQ4YTcKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXph
dGlvbi5jcHAKQEAgLTAsMCArMSw0MDYgQEAKKy8qCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBn
ZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisKKyAgICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAg
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTVGVzdFNlcmlhbGl6YXRpb24uaCIKKworI2lu
Y2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3IuaCIKKyNp
bmNsdWRlICJKU0RPTUNvbnZlcnQuaCIKKyNpbmNsdWRlICJVUkwuaCIKKyNpbmNsdWRlIDxydW50
aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU1N0cmluZy5oPgor
I2luY2x1ZGUgPHJ1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvR2V0
UHRyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Ly8gRnVuY3Rpb25zCisKK0pTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RT
ZXJpYWxpemF0aW9uUHJvdG90eXBlRnVuY3Rpb25Ub0pTT04oSlNDOjpFeGVjU3RhdGUqKTsKKwor
Ly8gQXR0cmlidXRlcworCitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25G
aXJzdFN0cmluZ0F0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUs
IEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkZpcnN0U3Ry
aW5nQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25T
ZWNvbmRMb25nQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwg
SlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uU2Vjb25kTG9u
Z0F0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5j
b2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uVGhp
cmRVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdFNlcmlhbGl6YXRp
b25UaGlyZFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RTZXJpYWxpemF0aW9uRm91cnRoTG9uZ0F0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0
U2VyaWFsaXphdGlvbkZvdXJ0aExvbmdBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0U2VyaWFsaXphdGlvbkNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0
aW9uQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6
OkVuY29kZWRKU1ZhbHVlKTsKKworY2xhc3MgSlNUZXN0U2VyaWFsaXphdGlvblByb3RvdHlwZSA6
IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHVzaW5nIEJhc2Ug
PSBKU0M6OkpTTm9uRmluYWxPYmplY3Q7CisgICAgc3RhdGljIEpTVGVzdFNlcmlhbGl6YXRpb25Q
cm90b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAgSlNUZXN0
U2VyaWFsaXphdGlvblByb3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRl
Q2VsbDxKU1Rlc3RTZXJpYWxpemF0aW9uUHJvdG90eXBlPih2bS5oZWFwKSkgSlNUZXN0U2VyaWFs
aXphdGlvblByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOworICAgICAgICBw
dHItPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAg
ICBERUNMQVJFX0lORk87CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1
cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpK
U1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6
Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9i
amVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgSlNUZXN0U2VyaWFsaXphdGlvblByb3RvdHlwZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2Jh
bE9iamVjdCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIDogSlNDOjpKU05v
bkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpCisgICAgeworICAgIH0KKworICAgIHZvaWQgZmlu
aXNoQ3JlYXRpb24oSlNDOjpWTSYpOworfTsKKwordXNpbmcgSlNUZXN0U2VyaWFsaXphdGlvbkNv
bnN0cnVjdG9yID0gSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGU8SlNUZXN0U2VyaWFs
aXphdGlvbj47CisKK3RlbXBsYXRlPD4gSlNWYWx1ZSBKU1Rlc3RTZXJpYWxpemF0aW9uQ29uc3Ry
dWN0b3I6OnByb3RvdHlwZUZvclN0cnVjdHVyZShKU0M6OlZNJiB2bSwgY29uc3QgSlNET01HbG9i
YWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICBVTlVTRURfUEFSQU0odm0pOworICAgIHJl
dHVybiBnbG9iYWxPYmplY3QuZnVuY3Rpb25Qcm90b3R5cGUoKTsKK30KKwordGVtcGxhdGU8PiB2
b2lkIEpTVGVzdFNlcmlhbGl6YXRpb25Db25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMo
Vk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAgIHB1dERpcmVj
dCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RTZXJpYWxpemF0aW9uOjpw
cm90b3R5cGUodm0sICZnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBEb250
RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRy
aXZpYWxTdHJpbmcoJnZtLCBTdHJpbmcoQVNDSUlMaXRlcmFsKCJUZXN0U2VyaWFsaXphdGlvbiIp
KSksIFJlYWRPbmx5IHwgRG9udEVudW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlO
YW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgUmVhZE9ubHkgfCBEb250RW51bSk7Cit9CisKK3Rl
bXBsYXRlPD4gY29uc3QgQ2xhc3NJbmZvIEpTVGVzdFNlcmlhbGl6YXRpb25Db25zdHJ1Y3Rvcjo6
c19pbmZvID0geyAiVGVzdFNlcmlhbGl6YXRpb24iLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVf
TUVUSE9EX1RBQkxFKEpTVGVzdFNlcmlhbGl6YXRpb25Db25zdHJ1Y3RvcikgfTsKKworLyogSGFz
aCB0YWJsZSBmb3IgcHJvdG90eXBlICovCisKK3N0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBK
U1Rlc3RTZXJpYWxpemF0aW9uUHJvdG90eXBlVGFibGVWYWx1ZXNbXSA9Cit7CisgICAgeyAiY29u
c3RydWN0b3IiLCBEb250RW51bSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0
PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RTZXJpYWxpemF0aW9uQ29uc3RydWN0
b3IpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5j
PihzZXRKU1Rlc3RTZXJpYWxpemF0aW9uQ29uc3RydWN0b3IpIH0gfSwKKyAgICB7ICJmaXJzdFN0
cmluZ0F0dHJpYnV0ZSIsIEN1c3RvbUFjY2Vzc29yLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qp
c3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdFNlcmlhbGl6YXRp
b25GaXJzdFN0cmluZ0F0dHJpYnV0ZSksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVy
dHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdFNlcmlhbGl6YXRpb25GaXJzdFN0cmluZ0F0
dHJpYnV0ZSkgfSB9LAorICAgIHsgInNlY29uZExvbmdBdHRyaWJ1dGUiLCBDdXN0b21BY2Nlc3Nv
ciwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0
VmFsdWVGdW5jPihqc1Rlc3RTZXJpYWxpemF0aW9uU2Vjb25kTG9uZ0F0dHJpYnV0ZSksIChpbnRw
dHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVz
dFNlcmlhbGl6YXRpb25TZWNvbmRMb25nQXR0cmlidXRlKSB9IH0sCisgICAgeyAidGhpcmRVbnJl
c3RyaWN0ZWREb3VibGVBdHRyaWJ1dGUiLCBDdXN0b21BY2Nlc3NvciwgTm9JbnRyaW5zaWMsIHsg
KGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RT
ZXJpYWxpemF0aW9uVGhpcmRVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGUpLCAoaW50cHRyX3Qp
IHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3RTZXJp
YWxpemF0aW9uVGhpcmRVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGUpIH0gfSwKKyAgICB7ICJm
b3VydGhMb25nQXR0cmlidXRlIiwgQ3VzdG9tQWNjZXNzb3IsIE5vSW50cmluc2ljLCB7IChpbnRw
dHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0U2VyaWFs
aXphdGlvbkZvdXJ0aExvbmdBdHRyaWJ1dGUpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFBy
b3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3RTZXJpYWxpemF0aW9uRm91cnRoTG9u
Z0F0dHJpYnV0ZSkgfSB9LAorICAgIHsgInRvSlNPTiIsIEpTQzo6RnVuY3Rpb24sIE5vSW50cmlu
c2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0U2VyaWFs
aXphdGlvblByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKSwgKGludHB0cl90KSAoMCkgfSB9LAorfTsK
KworY29uc3QgQ2xhc3NJbmZvIEpTVGVzdFNlcmlhbGl6YXRpb25Qcm90b3R5cGU6OnNfaW5mbyA9
IHsgIlRlc3RTZXJpYWxpemF0aW9uUHJvdG90eXBlIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRF
X01FVEhPRF9UQUJMRShKU1Rlc3RTZXJpYWxpemF0aW9uUHJvdG90eXBlKSB9OworCit2b2lkIEpT
VGVzdFNlcmlhbGl6YXRpb25Qcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKK3sKKyAg
ICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmVpZnlTdGF0aWNQcm9wZXJ0aWVzKHZt
LCBKU1Rlc3RTZXJpYWxpemF0aW9uUHJvdG90eXBlVGFibGVWYWx1ZXMsICp0aGlzKTsKK30KKwor
Y29uc3QgQ2xhc3NJbmZvIEpTVGVzdFNlcmlhbGl6YXRpb246OnNfaW5mbyA9IHsgIlRlc3RTZXJp
YWxpemF0aW9uIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RT
ZXJpYWxpemF0aW9uKSB9OworCitKU1Rlc3RTZXJpYWxpemF0aW9uOjpKU1Rlc3RTZXJpYWxpemF0
aW9uKFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0
LCBSZWY8VGVzdFNlcmlhbGl6YXRpb24+JiYgaW1wbCkKKyAgICA6IEpTRE9NV3JhcHBlcjxUZXN0
U2VyaWFsaXphdGlvbj4oc3RydWN0dXJlLCBnbG9iYWxPYmplY3QsIFdURk1vdmUoaW1wbCkpCit7
Cit9CisKK0pTT2JqZWN0KiBKU1Rlc3RTZXJpYWxpemF0aW9uOjpjcmVhdGVQcm90b3R5cGUoVk0m
IHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBKU1Rlc3RT
ZXJpYWxpemF0aW9uUHJvdG90eXBlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgSlNUZXN0U2Vy
aWFsaXphdGlvblByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKHZtLCBnbG9iYWxPYmplY3QsIGds
b2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBlKCkpKTsKK30KKworSlNPYmplY3QqIEpTVGVzdFNl
cmlhbGl6YXRpb246OnByb3RvdHlwZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QpCit7CisgICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxKU1Rlc3RTZXJpYWxpemF0aW9uPih2
bSwgZ2xvYmFsT2JqZWN0KTsKK30KKwordm9pZCBKU1Rlc3RTZXJpYWxpemF0aW9uOjpkZXN0cm95
KEpTQzo6SlNDZWxsKiBjZWxsKQoreworICAgIEpTVGVzdFNlcmlhbGl6YXRpb24qIHRoaXNPYmpl
Y3QgPSBzdGF0aWNfY2FzdDxKU1Rlc3RTZXJpYWxpemF0aW9uKj4oY2VsbCk7CisgICAgdGhpc09i
amVjdC0+SlNUZXN0U2VyaWFsaXphdGlvbjo6fkpTVGVzdFNlcmlhbGl6YXRpb24oKTsKK30KKwor
dGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0U2VyaWFsaXphdGlvbiogQmluZGluZ0NhbGxlcjxKU1Rl
c3RTZXJpYWxpemF0aW9uPjo6Y2FzdEZvckF0dHJpYnV0ZShFeGVjU3RhdGUmLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUpCit7CisgICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8SlNUZXN0U2VyaWFs
aXphdGlvbio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKK30KKwordGVtcGxhdGU8PiBp
bmxpbmUgSlNUZXN0U2VyaWFsaXphdGlvbiogQmluZGluZ0NhbGxlcjxKU1Rlc3RTZXJpYWxpemF0
aW9uPjo6Y2FzdEZvck9wZXJhdGlvbihFeGVjU3RhdGUmIHN0YXRlKQoreworICAgIHJldHVybiBq
c0R5bmFtaWNDYXN0PEpTVGVzdFNlcmlhbGl6YXRpb24qPihzdGF0ZS50aGlzVmFsdWUoKSk7Cit9
CisKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uRmlyc3RTdHJpbmdB
dHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0U2VyaWFsaXphdGlvbiYsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpOworCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uRmly
c3RTdHJpbmdBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0U2Vy
aWFsaXphdGlvbj46OmF0dHJpYnV0ZTxqc1Rlc3RTZXJpYWxpemF0aW9uRmlyc3RTdHJpbmdBdHRy
aWJ1dGVHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJmaXJzdFN0cmluZ0F0dHJpYnV0ZSIpOwor
fQorCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkZpcnN0U3RyaW5n
QXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdFNlcmlhbGl6YXRpb24mIHRo
aXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgYXV0byYgaW1wbCA9IHRo
aXNPYmplY3Qud3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2Fj
aGUoJnN0YXRlLCBpbXBsLmZpcnN0U3RyaW5nQXR0cmlidXRlKCkpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uU2Vjb25k
TG9uZ0F0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RTZXJpYWxpemF0aW9uJiwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSk7CisKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRp
b25TZWNvbmRMb25nQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgUHJvcGVydHlOYW1lKQoreworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVz
dFNlcmlhbGl6YXRpb24+OjphdHRyaWJ1dGU8anNUZXN0U2VyaWFsaXphdGlvblNlY29uZExvbmdB
dHRyaWJ1dGVHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJzZWNvbmRMb25nQXR0cmlidXRlIik7
Cit9CisKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uU2Vjb25kTG9u
Z0F0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RTZXJpYWxpemF0aW9uJiB0
aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIGF1dG8mIGltcGwgPSB0
aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwu
c2Vjb25kTG9uZ0F0dHJpYnV0ZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvblRoaXJkVW5yZXN0cmljdGVkRG91Ymxl
QXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdFNlcmlhbGl6YXRpb24mLCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKTsKKworRW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvblRo
aXJkVW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQoreworICAgIHJldHVybiBCaW5kaW5nQ2Fs
bGVyPEpTVGVzdFNlcmlhbGl6YXRpb24+OjphdHRyaWJ1dGU8anNUZXN0U2VyaWFsaXphdGlvblRo
aXJkVW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRlR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAi
dGhpcmRVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGUiKTsKK30KKworc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25UaGlyZFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0
ZUdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RTZXJpYWxpemF0aW9uJiB0aGlzT2JqZWN0
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwudGhpcmRVbnJl
c3RyaWN0ZWREb3VibGVBdHRyaWJ1dGUoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3Rh
dGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25Gb3VydGhMb25nQXR0cmlidXRl
R2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdFNlcmlhbGl6YXRpb24mLCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKTsKKworRW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkZvdXJ0aExvbmdB
dHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9w
ZXJ0eU5hbWUpCit7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0U2VyaWFsaXphdGlv
bj46OmF0dHJpYnV0ZTxqc1Rlc3RTZXJpYWxpemF0aW9uRm91cnRoTG9uZ0F0dHJpYnV0ZUdldHRl
cj4oc3RhdGUsIHRoaXNWYWx1ZSwgImZvdXJ0aExvbmdBdHRyaWJ1dGUiKTsKK30KKworc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25Gb3VydGhMb25nQXR0cmlidXRlR2V0
dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdFNlcmlhbGl6YXRpb24mIHRoaXNPYmplY3QsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwor
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3Jh
cHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5mb3VydGhMb25nQXR0
cmlidXRlKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0VuY29kZWRKU1ZhbHVlIGpzVGVz
dFNlcmlhbGl6YXRpb25Db25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK3sKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsK
KyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBKU1Rl
c3RTZXJpYWxpemF0aW9uUHJvdG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNDYXN0PEpTVGVz
dFNlcmlhbGl6YXRpb25Qcm90b3R5cGUqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Cisg
ICAgaWYgKFVOTElLRUxZKCFkb21PYmplY3QpKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVF
cnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rl
c3RTZXJpYWxpemF0aW9uOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgZG9tT2JqZWN0LT5n
bG9iYWxPYmplY3QoKSkpOworfQorCitib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25Db25zdHJ1
Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBKU1ZhbHVlIHZh
bHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgSlNUZXN0U2VyaWFsaXph
dGlvblByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RTZXJpYWxpemF0
aW9uUHJvdG90eXBlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlmIChVTkxJ
S0VMWSghZG9tT2JqZWN0KSkgeworICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJv
d1Njb3BlKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAvLyBTaGFkb3dpbmcg
YSBidWlsdC1pbiBjb25zdHJ1Y3RvcgorICAgIHJldHVybiBkb21PYmplY3QtPnB1dERpcmVjdChz
dGF0ZS0+dm0oKSwgc3RhdGUtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3RvciwgdmFsdWUpOwor
fQorCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkZpcnN0U3RyaW5n
QXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0U2VyaWFsaXphdGlvbiYsIEpTVmFs
dWUsIFRocm93U2NvcGUmKTsKKworYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uRmlyc3RTdHJp
bmdBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8
SlNUZXN0U2VyaWFsaXphdGlvbj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RTZXJpYWxpemF0aW9u
Rmlyc3RTdHJpbmdBdHRyaWJ1dGVGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZh
bHVlLCAiZmlyc3RTdHJpbmdBdHRyaWJ1dGUiKTsKK30KKworc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdFNlcmlhbGl6YXRpb25GaXJzdFN0cmluZ0F0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0
ZSYgc3RhdGUsIEpTVGVzdFNlcmlhbGl6YXRpb24mIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUs
IFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpOworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZygmc3Rh
dGUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOworICAgIGlt
cGwuc2V0Rmlyc3RTdHJpbmdBdHRyaWJ1dGUoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOworICAgIHJl
dHVybiB0cnVlOworfQorCisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0
aW9uU2Vjb25kTG9uZ0F0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdFNlcmlhbGl6
YXRpb24mLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CisKK2Jvb2wgc2V0SlNUZXN0U2VyaWFsaXph
dGlvblNlY29uZExvbmdBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit7CisgICAgcmV0dXJuIEJp
bmRpbmdDYWxsZXI8SlNUZXN0U2VyaWFsaXphdGlvbj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RT
ZXJpYWxpemF0aW9uU2Vjb25kTG9uZ0F0dHJpYnV0ZUZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVl
LCBlbmNvZGVkVmFsdWUsICJzZWNvbmRMb25nQXR0cmlidXRlIik7Cit9CisKK3N0YXRpYyBpbmxp
bmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uU2Vjb25kTG9uZ0F0dHJpYnV0ZUZ1bmN0aW9u
KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdFNlcmlhbGl6YXRpb24mIHRoaXNPYmplY3QsIEpTVmFs
dWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgYXV0byYgaW1wbCA9IHRo
aXNPYmplY3Qud3JhcHBlZCgpOworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETExv
bmc+KHN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CisgICAgaW1wbC5zZXRTZWNvbmRMb25nQXR0cmlidXRl
KFdURk1vdmUobmF0aXZlVmFsdWUpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworCitzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvblRoaXJkVW5yZXN0cmljdGVkRG91Ymxl
QXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0U2VyaWFsaXphdGlvbiYsIEpTVmFs
dWUsIFRocm93U2NvcGUmKTsKKworYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uVGhpcmRVbnJl
c3RyaWN0ZWREb3VibGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit7CisgICAgcmV0dXJuIEJp
bmRpbmdDYWxsZXI8SlNUZXN0U2VyaWFsaXphdGlvbj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RT
ZXJpYWxpemF0aW9uVGhpcmRVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGVGdW5jdGlvbj4oc3Rh
dGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAidGhpcmRVbnJlc3RyaWN0ZWREb3VibGVBdHRy
aWJ1dGUiKTsKK30KKworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25U
aGlyZFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUs
IEpTVGVzdFNlcmlhbGl6YXRpb24mIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgp
OworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETFVucmVzdHJpY3RlZERvdWJsZT4o
c3RhdGUsIHZhbHVlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNl
KTsKKyAgICBpbXBsLnNldFRoaXJkVW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRlKFdURk1vdmUo
bmF0aXZlVmFsdWUpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworCitzdGF0aWMgaW5saW5lIGJv
b2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkZvdXJ0aExvbmdBdHRyaWJ1dGVGdW5jdGlvbihFeGVj
U3RhdGUmLCBKU1Rlc3RTZXJpYWxpemF0aW9uJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOworCiti
b29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25Gb3VydGhMb25nQXR0cmlidXRlKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlKQoreworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdFNlcmlhbGl6YXRpb24+Ojpz
ZXRBdHRyaWJ1dGU8c2V0SlNUZXN0U2VyaWFsaXphdGlvbkZvdXJ0aExvbmdBdHRyaWJ1dGVGdW5j
dGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiZm91cnRoTG9uZ0F0dHJpYnV0
ZSIpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkZvdXJ0
aExvbmdBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RTZXJpYWxpemF0
aW9uJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQor
eworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBhdXRvIG5hdGl2
ZVZhbHVlID0gY29udmVydDxJRExMb25nPihzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24p
OworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOworICAgIGltcGwu
c2V0Rm91cnRoTG9uZ0F0dHJpYnV0ZShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKKworSlNWYWx1ZSBKU1Rlc3RTZXJpYWxpemF0aW9uOjpnZXRDb25zdHJ1Y3Rv
cihWTSYgdm0sIGNvbnN0IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0
dXJuIGdldERPTUNvbnN0cnVjdG9yPEpTVGVzdFNlcmlhbGl6YXRpb25Db25zdHJ1Y3Rvcj4odm0s
ICpqc0Nhc3Q8Y29uc3QgSlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpKTsKK30KKwor
c3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uUHJvdG90eXBl
RnVuY3Rpb25Ub0pTT05DYWxsZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0U2VyaWFsaXphdGlv
biogdGhpc09iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAgIGF1dG8m
IHZtID0gc3RhdGUtPnZtKCk7CisgICAgYXV0byogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmpl
Y3Qoc3RhdGUpOworCisgICAgYXV0byBmaXJzdFN0cmluZ0F0dHJpYnV0ZVZhbHVlID0ganNUZXN0
U2VyaWFsaXphdGlvbkZpcnN0U3RyaW5nQXR0cmlidXRlR2V0dGVyKCpzdGF0ZSwgKnRoaXNPYmpl
Y3QsIHRocm93U2NvcGUpOworICAgIEFTU0VSVCghdGhyb3dTY29wZS5leGNlcHRpb24oKSk7Cisg
ICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiZmly
c3RTdHJpbmdBdHRyaWJ1dGUiKSwgZmlyc3RTdHJpbmdBdHRyaWJ1dGVWYWx1ZSk7CisKKyAgICBh
dXRvIHNlY29uZExvbmdBdHRyaWJ1dGVWYWx1ZSA9IGpzVGVzdFNlcmlhbGl6YXRpb25TZWNvbmRM
b25nQXR0cmlidXRlR2V0dGVyKCpzdGF0ZSwgKnRoaXNPYmplY3QsIHRocm93U2NvcGUpOworICAg
IEFTU0VSVCghdGhyb3dTY29wZS5leGNlcHRpb24oKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qo
dm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAic2Vjb25kTG9uZ0F0dHJpYnV0ZSIpLCBz
ZWNvbmRMb25nQXR0cmlidXRlVmFsdWUpOworCisgICAgYXV0byB0aGlyZFVucmVzdHJpY3RlZERv
dWJsZUF0dHJpYnV0ZVZhbHVlID0ganNUZXN0U2VyaWFsaXphdGlvblRoaXJkVW5yZXN0cmljdGVk
RG91YmxlQXR0cmlidXRlR2V0dGVyKCpzdGF0ZSwgKnRoaXNPYmplY3QsIHRocm93U2NvcGUpOwor
ICAgIEFTU0VSVCghdGhyb3dTY29wZS5leGNlcHRpb24oKSk7CisgICAgcmVzdWx0LT5wdXREaXJl
Y3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAidGhpcmRVbnJlc3RyaWN0ZWREb3Vi
bGVBdHRyaWJ1dGUiKSwgdGhpcmRVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGVWYWx1ZSk7CisK
KyAgICBhdXRvIGZvdXJ0aExvbmdBdHRyaWJ1dGVWYWx1ZSA9IGpzVGVzdFNlcmlhbGl6YXRpb25G
b3VydGhMb25nQXR0cmlidXRlR2V0dGVyKCpzdGF0ZSwgKnRoaXNPYmplY3QsIHRocm93U2NvcGUp
OworICAgIEFTU0VSVCghdGhyb3dTY29wZS5leGNlcHRpb24oKSk7CisgICAgcmVzdWx0LT5wdXRE
aXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiZm91cnRoTG9uZ0F0dHJpYnV0
ZSIpLCBmb3VydGhMb25nQXR0cmlidXRlVmFsdWUpOworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShyZXN1bHQpOworfQorCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFNl
cmlhbGl6YXRpb25Qcm90b3R5cGVGdW5jdGlvblRvSlNPTihFeGVjU3RhdGUqIHN0YXRlKQorewor
ICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdFNlcmlhbGl6YXRpb24+OjpjYWxsT3BlcmF0
aW9uPGpzVGVzdFNlcmlhbGl6YXRpb25Qcm90b3R5cGVGdW5jdGlvblRvSlNPTkNhbGxlcj4oc3Rh
dGUsICJ0b0pTT04iKTsKK30KKworYm9vbCBKU1Rlc3RTZXJpYWxpemF0aW9uT3duZXI6OmlzUmVh
Y2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2
b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgVU5VU0VEX1BBUkFNKGhhbmRsZSk7
CisgICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9p
ZCBKU1Rlc3RTZXJpYWxpemF0aW9uT3duZXI6OmZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5r
bm93bj4gaGFuZGxlLCB2b2lkKiBjb250ZXh0KQoreworICAgIGF1dG8qIGpzVGVzdFNlcmlhbGl6
YXRpb24gPSBqc0Nhc3Q8SlNUZXN0U2VyaWFsaXphdGlvbio+KGhhbmRsZS5zbG90KCktPmFzQ2Vs
bCgpKTsKKyAgICBhdXRvJiB3b3JsZCA9ICpzdGF0aWNfY2FzdDxET01XcmFwcGVyV29ybGQqPihj
b250ZXh0KTsKKyAgICB1bmNhY2hlV3JhcHBlcih3b3JsZCwgJmpzVGVzdFNlcmlhbGl6YXRpb24t
PndyYXBwZWQoKSwganNUZXN0U2VyaWFsaXphdGlvbik7Cit9CisKKyNpZiBFTkFCTEUoQklORElO
R19JTlRFR1JJVFkpCisjaWYgUExBVEZPUk0oV0lOKQorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6
IDQ0ODMpCitleHRlcm4gIkMiIHsgZXh0ZXJuIHZvaWQgKCpjb25zdCBfX2lkZW50aWZpZXIoIj8/
XzdUZXN0U2VyaWFsaXphdGlvbkBXZWJDb3JlQEA2QkAiKVtdKSgpOyB9CisjZWxzZQorZXh0ZXJu
ICJDIiB7IGV4dGVybiB2b2lkKiBfWlRWTjdXZWJDb3JlMTdUZXN0U2VyaWFsaXphdGlvbkVbXTsg
fQorI2VuZGlmCisjZW5kaWYKKworSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpF
eGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8VGVzdFNlcmlh
bGl6YXRpb24+JiYgaW1wbCkKK3sKKworI2lmIEVOQUJMRShCSU5ESU5HX0lOVEVHUklUWSkKKyAg
ICB2b2lkKiBhY3R1YWxWVGFibGVQb2ludGVyID0gKihyZWludGVycHJldF9jYXN0PHZvaWQqKj4o
aW1wbC5wdHIoKSkpOworI2lmIFBMQVRGT1JNKFdJTikKKyAgICB2b2lkKiBleHBlY3RlZFZUYWJs
ZVBvaW50ZXIgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihfX2lkZW50aWZpZXIoIj8/XzdUZXN0
U2VyaWFsaXphdGlvbkBXZWJDb3JlQEA2QkAiKSk7CisjZWxzZQorICAgIHZvaWQqIGV4cGVjdGVk
VlRhYmxlUG9pbnRlciA9ICZfWlRWTjdXZWJDb3JlMTdUZXN0U2VyaWFsaXphdGlvbkVbMl07Cisj
aWYgQ09NUElMRVIoQ0xBTkcpCisgICAgLy8gSWYgdGhpcyBmYWlscyBUZXN0U2VyaWFsaXphdGlv
biBkb2VzIG5vdCBoYXZlIGEgdnRhYmxlLCBzbyB5b3UgbmVlZCB0byBhZGQgdGhlCisgICAgLy8g
SW1wbGVtZW50YXRpb25MYWNrc1ZUYWJsZSBhdHRyaWJ1dGUgdG8gdGhlIGludGVyZmFjZSBkZWZp
bml0aW9uCisgICAgc3RhdGljX2Fzc2VydChfX2lzX3BvbHltb3JwaGljKFRlc3RTZXJpYWxpemF0
aW9uKSwgIlRlc3RTZXJpYWxpemF0aW9uIGlzIG5vdCBwb2x5bW9ycGhpYyIpOworI2VuZGlmCisj
ZW5kaWYKKyAgICAvLyBJZiB5b3UgaGl0IHRoaXMgYXNzZXJ0aW9uIHlvdSBlaXRoZXIgaGF2ZSBh
IHVzZSBhZnRlciBmcmVlIGJ1Zywgb3IKKyAgICAvLyBUZXN0U2VyaWFsaXphdGlvbiBoYXMgc3Vi
Y2xhc3Nlcy4gSWYgVGVzdFNlcmlhbGl6YXRpb24gaGFzIHN1YmNsYXNzZXMgdGhhdCBnZXQgcGFz
c2VkCisgICAgLy8gdG8gdG9KUygpIHdlIGN1cnJlbnRseSByZXF1aXJlIFRlc3RTZXJpYWxpemF0
aW9uIHlvdSB0byBvcHQgb3V0IG9mIGJpbmRpbmcgaGFyZGVuaW5nCisgICAgLy8gYnkgYWRkaW5n
IHRoZSBTa2lwVlRhYmxlVmFsaWRhdGlvbiBhdHRyaWJ1dGUgdG8gdGhlIGludGVyZmFjZSBJREwg
ZGVmaW5pdGlvbgorICAgIFJFTEVBU0VfQVNTRVJUKGFjdHVhbFZUYWJsZVBvaW50ZXIgPT0gZXhw
ZWN0ZWRWVGFibGVQb2ludGVyKTsKKyNlbmRpZgorICAgIHJldHVybiBjcmVhdGVXcmFwcGVyPFRl
c3RTZXJpYWxpemF0aW9uPihnbG9iYWxPYmplY3QsIFdURk1vdmUoaW1wbCkpOworfQorCitKU0M6
OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIFRlc3RTZXJpYWxpemF0aW9uJiBpbXBsKQoreworICAgIHJldHVybiB3cmFw
KHN0YXRlLCBnbG9iYWxPYmplY3QsIGltcGwpOworfQorCitUZXN0U2VyaWFsaXphdGlvbiogSlNU
ZXN0U2VyaWFsaXphdGlvbjo6dG9XcmFwcGVkKEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBp
ZiAoYXV0byogd3JhcHBlciA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0U2VyaWFsaXphdGlvbio+KHZh
bHVlKSkKKyAgICAgICAgcmV0dXJuICZ3cmFwcGVyLT53cmFwcGVkKCk7CisgICAgcmV0dXJuIG51
bGxwdHI7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE5ZmRh
NDcyZjg3ZWU5YTk2ZThlM2YzZDYwNzVmNzNiZTMyM2M1MGMKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlv
bi5oCkBAIC0wLDAgKzEsODkgQEAKKy8qCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdl
YktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0
ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisKKyAgICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
ICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAg
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlICJKU0RPTVdyYXBwZXIuaCIKKyNpbmNsdWRlICJUZXN0U2VyaWFsaXph
dGlvbi5oIgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIEpTVGVzdFNlcmlhbGl6YXRpb24gOiBwdWJsaWMgSlNET01XcmFwcGVy
PFRlc3RTZXJpYWxpemF0aW9uPiB7CitwdWJsaWM6CisgICAgdXNpbmcgQmFzZSA9IEpTRE9NV3Jh
cHBlcjxUZXN0U2VyaWFsaXphdGlvbj47CisgICAgc3RhdGljIEpTVGVzdFNlcmlhbGl6YXRpb24q
IGNyZWF0ZShKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBSZWY8VGVzdFNlcmlhbGl6YXRpb24+JiYgaW1wbCkKKyAgICB7CisgICAgICAg
IEpTVGVzdFNlcmlhbGl6YXRpb24qIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNl
bGw8SlNUZXN0U2VyaWFsaXphdGlvbj4oZ2xvYmFsT2JqZWN0LT52bSgpLmhlYXApKSBKU1Rlc3RT
ZXJpYWxpemF0aW9uKHN0cnVjdHVyZSwgKmdsb2JhbE9iamVjdCwgV1RGTW92ZShpbXBsKSk7Cisg
ICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0LT52bSgpKTsKKyAgICAgICAg
cmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogY3JlYXRlUHJv
dG90eXBlKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CisgICAgc3RhdGljIEpTQzo6
SlNPYmplY3QqIHByb3RvdHlwZShKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOworICAg
IHN0YXRpYyBUZXN0U2VyaWFsaXphdGlvbiogdG9XcmFwcGVkKEpTQzo6SlNWYWx1ZSk7CisgICAg
c3RhdGljIHZvaWQgZGVzdHJveShKU0M6OkpTQ2VsbCopOworCisgICAgREVDTEFSRV9JTkZPOwor
CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0s
IEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlw
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9i
YWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVj
dHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdl
dENvbnN0cnVjdG9yKEpTQzo6Vk0mLCBjb25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Citwcm90
ZWN0ZWQ6CisgICAgSlNUZXN0U2VyaWFsaXphdGlvbihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xv
YmFsT2JqZWN0JiwgUmVmPFRlc3RTZXJpYWxpemF0aW9uPiYmKTsKKworICAgIHZvaWQgZmluaXNo
Q3JlYXRpb24oSlNDOjpWTSYgdm0pCisgICAgeworICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlv
bih2bSk7CisgICAgICAgIEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTsKKyAgICB9CisKK307CisK
K2NsYXNzIEpTVGVzdFNlcmlhbGl6YXRpb25Pd25lciA6IHB1YmxpYyBKU0M6OldlYWtIYW5kbGVP
d25lciB7CitwdWJsaWM6CisgICAgdmlydHVhbCBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJv
b3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZp
c2l0b3ImKTsKKyAgICB2aXJ0dWFsIHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtu
b3duPiwgdm9pZCogY29udGV4dCk7Cit9OworCitpbmxpbmUgSlNDOjpXZWFrSGFuZGxlT3duZXIq
IHdyYXBwZXJPd25lcihET01XcmFwcGVyV29ybGQmLCBUZXN0U2VyaWFsaXphdGlvbiopCit7Cisg
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEpTVGVzdFNlcmlhbGl6YXRpb25Pd25lcj4gb3duZXI7
CisgICAgcmV0dXJuICZvd25lci5nZXQoKTsKK30KKworaW5saW5lIHZvaWQqIHdyYXBwZXJLZXko
VGVzdFNlcmlhbGl6YXRpb24qIHdyYXBwYWJsZU9iamVjdCkKK3sKKyAgICByZXR1cm4gd3JhcHBh
YmxlT2JqZWN0OworfQorCitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9N
R2xvYmFsT2JqZWN0KiwgVGVzdFNlcmlhbGl6YXRpb24mKTsKK2lubGluZSBKU0M6OkpTVmFsdWUg
dG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIFRlc3RTZXJpYWxpemF0aW9uKiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KUyhzdGF0ZSwg
Z2xvYmFsT2JqZWN0LCAqaW1wbCkgOiBKU0M6OmpzTnVsbCgpOyB9CitKU0M6OkpTVmFsdWUgdG9K
U05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgUmVmPFRl
c3RTZXJpYWxpemF0aW9uPiYmKTsKK2lubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRl
ZChKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IFJlZlB0cjxUZXN0U2VyaWFsaXphdGlvbj4mJiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KU05l
d2x5Q3JlYXRlZChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBpbXBsLnJlbGVhc2VOb25OdWxsKCkpIDog
SlNDOjpqc051bGwoKTsgfQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0
ZXJUcmFpdHM8VGVzdFNlcmlhbGl6YXRpb24+IHsKKyAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBK
U1Rlc3RTZXJpYWxpemF0aW9uOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsCmluZGV4IDEw
MDg5ODUxYzk5YTQyZTVmYWFjYmUwZTljOGNlZTdhMmI0NTVhZGMuLjhjNGY0ZmFhZWJhMzc3MTAz
Y2Y0ZGFjZTAyZDYxNmYwZjJlMmExMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9UZXN0T2JqLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwKQEAgLTQxNCw4ICs0MTQsNyBAQCBlbnVtIFRlc3RD
b25maWRlbmNlIHsgImhpZ2giLCAia2luZGEtbG93IiB9OwogCiAgICAgc3RyaW5naWZpZXIgYXR0
cmlidXRlIFVTVlN0cmluZyBzdHJpbmdpZmllckF0dHJpYnV0ZTsKIAotCi0gICAgc2VyaWFsaXpl
ciA9IHtyZWFkT25seVN0cmluZ0F0dHIsIGNyZWF0ZSwgZW51bUF0dHIsIGxvbmdBdHRyfTsKKyAg
ICBzZXJpYWxpemVyID0ge2NyZWF0ZSwgcmVhZE9ubHlTdHJpbmdBdHRyLCBlbnVtQXR0ciwgbG9u
Z0F0dHJ9OwogfTsKIAogLy8gVGhlIGZvbGxvd2luZyBjb21tZW50IHNob3VsZCBub3QgZ2VuZXJh
dGUgYW55IGNvZGUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvVGVzdFNlcmlhbGl6YXRpb24uaWRsIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Rlc3RTZXJpYWxpemF0aW9uLmlkbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ODYwZjNmNTA3NzQx
NWMxODg0OGEwOTBhNWNlMmViODU0MjFlY2YxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RTZXJpYWxpemF0aW9uLmlkbApAQCAtMCww
ICsxLDMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
K2ludGVyZmFjZSBUZXN0U2VyaWFsaXphdGlvbiB7CisgICAgYXR0cmlidXRlIERPTVN0cmluZyAg
ICAgICAgICAgICBmaXJzdFN0cmluZ0F0dHJpYnV0ZTsKKyAgICBhdHRyaWJ1dGUgbG9uZyAgICAg
ICAgICAgICAgICAgIHNlY29uZExvbmdBdHRyaWJ1dGU7CisgICAgYXR0cmlidXRlIHVucmVzdHJp
Y3RlZCBkb3VibGUgICB0aGlyZFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZTsKKyAgICBhdHRy
aWJ1dGUgbG9uZyAgICAgICAgICAgICAgICAgIGZvdXJ0aExvbmdBdHRyaWJ1dGU7IC8vIG5vbi1h
bHBoYWJldGljYWwgbmFtZQorCisgICAgc2VyaWFsaXplciA9IHsgYXR0cmlidXRlIH07Cit9Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0NsaWVudFJlY3QuaWRsIGIvU291cmNlL1dl
YkNvcmUvZG9tL0NsaWVudFJlY3QuaWRsCmluZGV4IGFiNjIwMmVhYmY4NGM4ZmJlMDhiYWY4ZDJl
Njc2ZjhlN2IyMjE4YmIuLmNkOTk0MGE5ZGYxZDEwYWYyOGI1M2RhYTY4ZmM3NzMzYTUzNTI3YWEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DbGllbnRSZWN0LmlkbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vQ2xpZW50UmVjdC5pZGwKQEAgLTM1LDcgKzM1LDUgQEAKICAgICByZWFk
b25seSBhdHRyaWJ1dGUgdW5yZXN0cmljdGVkIGZsb2F0IHdpZHRoOwogICAgIHJlYWRvbmx5IGF0
dHJpYnV0ZSB1bnJlc3RyaWN0ZWQgZmxvYXQgaGVpZ2h0OwogCi0gICAgLy8gRklYTUU6IHNob3Vs
ZCBiZSBzZXJpYWxpemVyID0geyBhdHRyaWJ1dGUgfTsKLSAgICBbQ3VzdG9tXSBPYmplY3QgdG9K
U09OKCk7CisgICAgc2VyaWFsaXplciA9IHsgYXR0cmlidXRlIH07CiB9OwotCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlVGltaW5nLmlkbCBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvUGVyZm9ybWFuY2VUaW1pbmcuaWRsCmluZGV4IDY1MzQ4ZjJjNGNkOWNjNjhmYTk3
YWZhODA5MjQ5NDZlNWY2NDM2NTIuLjkxZWNlNWQ4MmRlODYxYjFhODY4MGNjMDkyMmNmM2ZkYjIz
YjlkNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFuY2VUaW1pbmcu
aWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFuY2VUaW1pbmcuaWRsCkBAIC01
NCw3ICs1NCw1IEBACiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgbG9uZyBs
b2FkRXZlbnRTdGFydDsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBsb25n
IGxvYWRFdmVudEVuZDsKIAotICAgIC8vIEZJWE1FOiBTaG91bGQgYmUgc2VyaWFsaXplciA9IHsg
YXR0cmlidXRlIH07Ci0gICAgW0N1c3RvbV0gT2JqZWN0IHRvSlNPTigpOworICAgIHNlcmlhbGl6
ZXIgPSB7IGF0dHJpYnV0ZSB9OwogfTsKLQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>291723</attachid>
            <date>2016-10-15 13:16:13 -0700</date>
            <delta_ts>2016-10-15 14:09:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-163466-20161015131243.patch</filename>
            <type>text/plain</type>
            <size>59967</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA3MzY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDNhZDczOWJhYjBiYzUx
YWNiNmE1NTA1MmEwYjAyMDc5ZmU5YTg3ZS4uNGUyODIzMDQwNmRiNTIzY2NlNTlkODFjNTVlYTkw
YWE0NDVlMGM1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4IEBACisyMDE2LTEwLTE1ICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCBz
ZXJpYWxpemVyID0geyBhdHRyaWJ1dGUgfQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTYzNDY2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgRml4IHRoZSBjb2RlIGdlbmVyYXRvciB0byBnZW5lcmF0ZSBjb2Rl
IGZvciBzZXJpYWxpemVyID0geyBhdHRyaWJ1dGUgfS4KKyAgICAgICAgSW4gSURMUGFyc2VyLCBl
eHRlbmQgZG9tU2VyaWFsaXphYmxlIHdpdGggZmxhZ3MgZm9yIHRoZSAnaW5oZXJpdCcsICdnZXR0
ZXInIGFuZAorICAgICAgICAnYXR0cmlidXRlJyB2YWx1ZXMgKHRoZSBmaXJzdCB0d28gYXJlIHN0
aWxsIHVuc3VwcG9ydGVkKS4gRml4IHBhcnNlU2VyaWFsaXphdGlvblBhdHRlcm4oKQorICAgICAg
ICB0byBkZXRlY3QgdGhlc2U7IGl0IG5lZWRzIHRvIGNyZWF0ZSB0aGUgZG9tU2VyaWFsaXphYmxl
KCkgbm93LiBCYXNpYyBzdXBwb3J0CisgICAgICAgIGZvciBpc1NlcmlhbGl6YWJsZUF0dHJpYnV0
ZSgpIGlzIGFkZGVkIChwcmltaXRpdmUgdHlwZXMgb25seSkuCisgICAgICAgIAorICAgICAgICBH
ZW5lcmF0ZVNlcmlhbGl6ZXJGdW5jdGlvbiBpcyBmaXhlZCB0byBvdXRwdXQgY29kZSBmb3IgdGhl
IHNlcmlhbGl6YWJsZSBhdHRyaWJ1dGVzCisgICAgICAgIGluIHRoZSBvcmRlciBzcGVjaWZpZWQg
aW4gInNlcmlhbGl6ZXIgPSB7fSIsIGFzIHNwZWNpZmllZCBpbiBXZWJJREwuCisgICAgICAgIAor
ICAgICAgICBSZW1vdmVkIGN1c3RvbSBzZXJpYWxpemF0aW9uIGZvciBDbGllbnRSZWN0IGFuZCBQ
ZXJmb3JtYW5jZVRpbWluZy4KKyAgICAgICAgCisgICAgICAgIE90aGVyIG1pbm9yIGNsZWFudXAg
dG8gYWx3YXlzIGdldCAkaW50ZXJmYWNlTmFtZSBmcm9tICRpbnRlcmZhY2UtPm5hbWUsIGFuZCB0
byBmaXgKKyAgICAgICAgT2JqZWN0Q29uc3RydWN0b3IuaCB0byBiZSBpbmNsdWRlZCBhcyA8cnVu
dGltZS9PYmplY3RDb25zdHJ1Y3Rvci5oPi4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0Ogor
ICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU0JpbmRpbmdzQWxsSW5PbmUuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTQ2xpZW50UmVjdEN1c3RvbS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogYmluZGluZ3MvanMv
SlNQZXJmb3JtYW5jZVRpbWluZ0N1c3RvbS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAgICAgIChHZW5lcmF0ZUltcGxlbWVu
dGF0aW9uKToKKyAgICAgICAgKEdlbmVyYXRlU2VyaWFsaXplckZ1bmN0aW9uKToKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL0lETFBhcnNlci5wbToKKyAgICAgICAgKHBhcnNlU2VyaWFsaXpl
clJlc3QpOgorICAgICAgICAocGFyc2VTZXJpYWxpemF0aW9uUGF0dGVybik6CisgICAgICAgIChw
YXJzZVNlcmlhbGl6YXRpb25BdHRyaWJ1dGVzKToKKyAgICAgICAgKGlzU2VyaWFsaXphYmxlQXR0
cmlidXRlKToKKyAgICAgICAgKGFwcGx5TWVtYmVyTGlzdCk6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25Ub0pTT05DYWxsZXIpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uLmNwcDogQWRkZWQuCisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb24uaDogQWRkZWQuCisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsOgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9UZXN0U2VyaWFsaXphdGlvbi5pZGw6IENvcGllZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL2RvbS9DbGllbnRSZWN0LmlkbC4KKyAgICAgICAgKiBkb20vQ2xpZW50UmVjdC5pZGw6
CisgICAgICAgICogcGFnZS9QZXJmb3JtYW5jZVRpbWluZy5pZGw6CisKIDIwMTYtMTAtMTQgIENo
cmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBTZXR0aW5nIEhUTUxNZWRp
YUVsZW1lbnQubXV0ZWQgdG8gdGhlIHNhbWUgdmFsdWUgc2hvdWxkIG5vdCBmaXJlIGEgdm9sdW1l
IGNoYW5nZSBldmVudApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQg
Yi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCBiMmYwNzBlYTE3NTkyZjFiOTg3
NTBiNTM5NWY5MGYyODlkZDI1ZGM0Li44M2FhZjU2Nzc2ZTMyNTFiN2VkYWJkNTU4ZmRlOWM1Y2Qw
ZWI2MDJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9T
b3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMTA3NSw3ICsxMDc1LDYgQEAgc2V0KFdl
YkNvcmVfU09VUkNFUwogICAgIGJpbmRpbmdzL2pzL0pTQ1NTVmFsdWVDdXN0b20uY3BwCiAgICAg
YmluZGluZ3MvanMvSlNDYWxsYmFja0RhdGEuY3BwCiAgICAgYmluZGluZ3MvanMvSlNDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCi0gICAgYmluZGluZ3MvanMvSlNDbGllbnRSZWN0
Q3VzdG9tLmNwcAogICAgIGJpbmRpbmdzL2pzL0pTQ29tbWFuZExpbmVBUElIb3N0Q3VzdG9tLmNw
cAogICAgIGJpbmRpbmdzL2pzL0pTQ3J5cHRvQWxnb3JpdGhtQnVpbGRlci5jcHAKICAgICBiaW5k
aW5ncy9qcy9KU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnkuY3BwCkBAIC0xMTY1LDcgKzExNjQs
NiBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgYmluZGluZ3MvanMvSlNOb2RlSXRlcmF0b3JD
dXN0b20uY3BwCiAgICAgYmluZGluZ3MvanMvSlNOb2RlTGlzdEN1c3RvbS5jcHAKICAgICBiaW5k
aW5ncy9qcy9KU1BlcmZvcm1hbmNlRW50cnlDdXN0b20uY3BwCi0gICAgYmluZGluZ3MvanMvSlNQ
ZXJmb3JtYW5jZVRpbWluZ0N1c3RvbS5jcHAKICAgICBiaW5kaW5ncy9qcy9KU1BsdWdpbkVsZW1l
bnRGdW5jdGlvbnMuY3BwCiAgICAgYmluZGluZ3MvanMvSlNQb3BTdGF0ZUV2ZW50Q3VzdG9tLmNw
cAogICAgIGJpbmRpbmdzL2pzL0pTUmVhZGFibGVTdHJlYW1Qcml2YXRlQ29uc3RydWN0b3JzLmNw
cApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CmluZGV4IGM4MDNlODVhNDAzZDRiMTJjOTlmNWRmYWNmNWFjYzE5ZmY3OTY1ZDkuLmFkODMzYjdm
ZjgxYTExNjhkMzg4OGNlM2EzNGJkNjVkMDdmNDdhNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEzNzksNyArMTM3OSw2IEBA
CiAJCTMxQzBGRjNFMEU0Q0VGQUMwMDdENkZFNSAvKiBKU1dlYktpdEFuaW1hdGlvbkV2ZW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMUMwRkYzQTBF
NENFRkFDMDA3RDZGRTUgLyogSlNXZWJLaXRBbmltYXRpb25FdmVudC5oICovOyB9OwogCQkzMUMw
RkYzRjBFNENFRkFDMDA3RDZGRTUgLyogSlNXZWJLaXRUcmFuc2l0aW9uRXZlbnQuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzFDMEZGM0IwRTRDRUZB
QzAwN0Q2RkU1IC8qIEpTV2ViS2l0VHJhbnNpdGlvbkV2ZW50LmNwcCAqLzsgfTsKIAkJMzFDMEZG
NDAwRTRDRUZBQzAwN0Q2RkU1IC8qIEpTV2ViS2l0VHJhbnNpdGlvbkV2ZW50LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMUMwRkYzQzBFNENFRkFDMDA3
RDZGRTUgLyogSlNXZWJLaXRUcmFuc2l0aW9uRXZlbnQuaCAqLzsgfTsKLQkJMzFDNDIyNDYxRDc0
RUI5QTAwRjEyMzQyIC8qIEpTUGVyZm9ybWFuY2VUaW1pbmdDdXN0b20uY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzFDNDIyNDUxRDc0RUI5QTAwRjEy
MzQyIC8qIEpTUGVyZm9ybWFuY2VUaW1pbmdDdXN0b20uY3BwICovOyB9OwogCQkzMUQ1OTFCMzE2
Njk3QTZDMDBFNkJGMDIgLyogUGx1Z0luQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMUQ1OTFCMTE2Njk3QTZDMDBFNkJGMDIgLyogUGx1Z0lu
Q2xpZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMzFEQ0QyOUQxQUI0RkJERTAwNzJFODE3IC8qIEFuaW1hdGlvblRyaWdnZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxRENEMjlDMUFCNEZCREUw
MDcyRTgxNyAvKiBBbmltYXRpb25UcmlnZ2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMzFEQ0RGNDMxREExQzQ1NDAwRUE1QjkzIC8qIEV4dGVu
ZGVkQ29sb3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMzFEQ0RGNDExREExQzQ1NDAwRUE1QjkzIC8qIEV4dGVuZGVkQ29sb3IuY3BwICovOyB9OwpA
QCAtMTczOSw3ICsxNzM4LDYgQEAKIAkJNDY3MUUwNjYxRDY3QTU5NjAwQzZCNDk3IC8qIENhbnZh
c1BhdGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ2
NzFFMDY0MUQ2N0E1N0IwMEM2QjQ5NyAvKiBDYW52YXNQYXRoLmggKi87IH07CiAJCTQ2NzMwMjAy
MUM0RUZFNzgwMEJDQjM1NyAvKiBJZ25vcmVPcGVuc0R1cmluZ1VubG9hZENvdW50SW5jcmVtZW50
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ2NzMw
MjAxMUM0RUZFNjYwMEJDQjM1NyAvKiBJZ25vcmVPcGVuc0R1cmluZ1VubG9hZENvdW50SW5jcmVt
ZW50ZXIuaCAqLzsgfTsKIAkJNDY4OUYxQUYxMjY3QkFFMTAwRThEMzgwIC8qIEZpbGVNZXRhZGF0
YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDY4OUYx
QUUxMjY3QkFFMTAwRThEMzgwIC8qIEZpbGVNZXRhZGF0YS5oICovOyB9OwotCQk0NkE1OEFDNTFE
NDZCM0ZBMDA0MzIwMzYgLyogSlNDbGllbnRSZWN0Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ2QTU4QUM0MUQ0NkIzRkEwMDQzMjAzNiAv
KiBKU0NsaWVudFJlY3RDdXN0b20uY3BwICovOyB9OwogCQk0NkI2M0Y2QzFDNkU4RDE5MDAyRTkx
NEIgLyogSlNFdmVudFRhcmdldEN1c3RvbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNDZCNjNGNkIxQzZFOENERjAwMkU5MTRCIC8qIEpTRXZlbnRUYXJn
ZXRDdXN0b20uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk0NkM4M0VGRDFBOUJCRTI5MDBBNzlBNDEgLyogR2VvTm90aWZpZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDZDODNFRkIxQTlCQkUyOTAw
QTc5QTQxIC8qIEdlb05vdGlmaWVyLmNwcCAqLzsgfTsKIAkJNDZDODNFRkUxQTlCQkUyOTAwQTc5
QTQxIC8qIEdlb05vdGlmaWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0NkM4M0VGQzFBOUJCRTI5MDBBNzlBNDEgLyogR2VvTm90aWZpZXIuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtODM0Nyw3ICs4
MzQ1LDYgQEAKIAkJMzFDMEZGM0EwRTRDRUZBQzAwN0Q2RkU1IC8qIEpTV2ViS2l0QW5pbWF0aW9u
RXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNXZWJLaXRBbmltYXRp
b25FdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMUMwRkYzQjBFNENFRkFD
MDA3RDZGRTUgLyogSlNXZWJLaXRUcmFuc2l0aW9uRXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSlNXZWJLaXRUcmFuc2l0aW9uRXZlbnQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkzMUMwRkYzQzBFNENFRkFDMDA3RDZGRTUgLyogSlNXZWJL
aXRUcmFuc2l0aW9uRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNX
ZWJLaXRUcmFuc2l0aW9uRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMzFD
NDIyNDUxRDc0RUI5QTAwRjEyMzQyIC8qIEpTUGVyZm9ybWFuY2VUaW1pbmdDdXN0b20uY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNQZXJmb3JtYW5jZVRpbWluZ0N1
c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxRDU5MUIxMTY2OTdBNkMw
MEU2QkYwMiAvKiBQbHVnSW5DbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUGx1Z0luQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxRENEMjlD
MUFCNEZCREUwMDcyRTgxNyAvKiBBbmltYXRpb25UcmlnZ2VyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEFuaW1hdGlvblRyaWdnZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMzFEQ0RGNDExREExQzQ1NDAwRUE1QjkzIC8qIEV4dGVuZGVkQ29sb3IuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXh0ZW5kZWRDb2xvci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04NzU1LDcgKzg3NTIsNiBAQAogCQk0NjcxRTA2
NDFENjdBNTdCMDBDNkI0OTcgLyogQ2FudmFzUGF0aC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBDYW52YXNQYXRoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ2
NzMwMjAxMUM0RUZFNjYwMEJDQjM1NyAvKiBJZ25vcmVPcGVuc0R1cmluZ1VubG9hZENvdW50SW5j
cmVtZW50ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSWdub3JlT3BlbnNE
dXJpbmdVbmxvYWRDb3VudEluY3JlbWVudGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTQ2ODlGMUFFMTI2N0JBRTEwMEU4RDM4MCAvKiBGaWxlTWV0YWRhdGEuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsZU1ldGFkYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTQ2QTU4QUM0MUQ0NkIzRkEwMDQzMjAzNiAvKiBKU0NsaWVudFJlY3RDdXN0
b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNDbGllbnRSZWN0
Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDZCNjNGNkIxQzZFOENE
RjAwMkU5MTRCIC8qIEpTRXZlbnRUYXJnZXRDdXN0b20uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNFdmVudFRhcmdldEN1c3RvbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk0NkM4M0VGQjFBOUJCRTI5MDBBNzlBNDEgLyogR2VvTm90aWZpZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR2VvTm90aWZpZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk0NkM4M0VGQzFBOUJCRTI5MDBBNzlBNDEgLyogR2VvTm90
aWZpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR2VvTm90aWZpZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIxMjAxLDcgKzIxMTk3LDYgQEAKIAkJCQlC
RTZERjcxMDE3MUNBMkRBMDBERDUyQjggLyogSlNBdWRpb1RyYWNrTGlzdEN1c3RvbS5jcHAgKi8s
CiAJCQkJODkzMURFNUExNEM0NEM0NDAwMERDOUQyIC8qIEpTQmxvYkN1c3RvbS5jcHAgKi8sCiAJ
CQkJNDlFRUQxNEIxMDUxOTcxOTAwMDk5RkFCIC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
Q3VzdG9tLmNwcCAqLywKLQkJCQk0NkE1OEFDNDFENDZCM0ZBMDA0MzIwMzYgLyogSlNDbGllbnRS
ZWN0Q3VzdG9tLmNwcCAqLywKIAkJCQlBNTg0RkUzNzE4NjREQUMxMDA4NDNCMTAgLyogSlNDb21t
YW5kTGluZUFQSUhvc3RDdXN0b20uY3BwICovLAogCQkJCTdDRUYyNjE4MUQ2QTkyRTMwMEJFOTA1
RCAvKiBKU0NyeXB0b0N1c3RvbS5jcHAgKi8sCiAJCQkJRTE1N0E4RTYxODE4NEM2NzAwOUY4MjFE
IC8qIEpTQ3J5cHRvS2V5Q3VzdG9tLmNwcCAqLywKQEAgLTIxMjgyLDcgKzIxMjc3LDYgQEAKIAkJ
CQk4M0YxMjA2QTFCOEMxMDM2MDBENzVGNjMgLyogSlNOb2RlRmlsdGVyQ3VzdG9tLmNwcCAqLywK
IAkJCQkxQTc1MEREMzBBOTBFNzI5MDAwRkYyMTUgLyogSlNOb2RlSXRlcmF0b3JDdXN0b20uY3Bw
ICovLAogCQkJCUJDRDlDMjYxMEMxN0FBNjcwMDVDOTBBMiAvKiBKU05vZGVMaXN0Q3VzdG9tLmNw
cCAqLywKLQkJCQkzMUM0MjI0NTFENzRFQjlBMDBGMTIzNDIgLyogSlNQZXJmb3JtYW5jZVRpbWlu
Z0N1c3RvbS5jcHAgKi8sCiAJCQkJQUQyMEIxOEMxOEU5RDIxNjAwNUE4MDgzIC8qIEpTTm9kZUxp
c3RDdXN0b20uaCAqLywKIAkJCQlBODVGMjIwODE0MzAzNzdEMDA3Q0M4ODQgLyogSlNQb3BTdGF0
ZUV2ZW50Q3VzdG9tLmNwcCAqLywKIAkJCQk0MThDMzk1RDFDOEYwQUFCMDA1MUM4QTMgLyogSlNS
ZWFkYWJsZVN0cmVhbVNvdXJjZUN1c3RvbS5jcHAgKi8sCkBAIC0yNzcyOSw3ICsyNzcyMyw2IEBA
CiAJCQkJRkQzMTYwQkMxMkIwMjcyQTAwQzFBMzU5IC8qIEF1ZGlvRGVzdGluYXRpb25NYWMuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJRkQzMTYwMDcxMkIwMjY3NjAwQzFBMzU5IC8qIEF1ZGlvRGVz
dGluYXRpb25Ob2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZEMzE2MDgxMTJCMDI2RjcwMEMx
QTM1OSAvKiBBdWRpb0RTUEtlcm5lbFByb2Nlc3Nvci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkz
MUM0MjI0NjFENzRFQjlBMDBGMTIzNDIgLyogSlNQZXJmb3JtYW5jZVRpbWluZ0N1c3RvbS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlDRDU1OTY5MTE0NzVCNjc4MDAxRDBCRDAgLyogQXVkaW9GaWxl
UmVhZGVySU9TLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZEMzE2MEJFMTJCMDI3MkEwMEMxQTM1
OSAvKiBBdWRpb0ZpbGVSZWFkZXJNYWMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0QyRjRBMjMx
OEQ4OUY3MDAwNjM3NDZEIC8qIEF1ZGlvSGFyZHdhcmVMaXN0ZW5lci5jcHAgaW4gU291cmNlcyAq
LywKQEAgLTI4NzE3LDcgKzI4NzEwLDYgQEAKIAkJCQlGREExNUVBMzEyQjAzRUUxMDAzQTU4M0Eg
LyogSlNDaGFubmVsU3BsaXR0ZXJOb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTY1REYzMUYz
MDlEMUNDNjAwMDBCRTMyNSAvKiBKU0NoYXJhY3RlckRhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQkNDMDY1ODcwRjNDRTJBNzAwQ0QyRDg3IC8qIEpTQ2xpZW50UmVjdC5jcHAgaW4gU291cmNl
cyAqLywKLQkJCQk0NkE1OEFDNTFENDZCM0ZBMDA0MzIwMzYgLyogSlNDbGllbnRSZWN0Q3VzdG9t
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDQzA2NTg5MEYzQ0UyQTcwMENEMkQ4NyAvKiBKU0Ns
aWVudFJlY3RMaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUzMTUwRUE2MURBNzIxOTAwMDE5
NDAxMiAvKiBKU05vZGVET01KSVQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFGQjU1MDUxMTNF
M0U5MTAwODIxMTc2IC8qIEpTQ2xvc2VFdmVudC5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQmluZGluZ3NBbGxJbk9uZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0JpbmRpbmdzQWxsSW5PbmUuY3BwCmluZGV4IGYz
YWRjMDViOWE5YzdlNDk3Y2M0NTBlYjRiY2MxYWMwNzVkNmNlODEuLjgyMWFkMjcwNjhmOWRiOTE5
ZWM3YjA1ZDJmZmEwY2YwMzc3MDcyZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTQmluZGluZ3NBbGxJbk9uZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNCaW5kaW5nc0FsbEluT25lLmNwcApAQCAtNDEsNyArNDEsNiBAQAogI2luY2x1ZGUg
IkpTQ1NTVmFsdWVDdXN0b20uY3BwIgogI2luY2x1ZGUgIkpTQ2FsbGJhY2tEYXRhLmNwcCIKICNp
bmNsdWRlICJKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAiCi0jaW5jbHVkZSAi
SlNDbGllbnRSZWN0Q3VzdG9tLmNwcCIKICNpbmNsdWRlICJKU0NvbW1hbmRMaW5lQVBJSG9zdEN1
c3RvbS5jcHAiCiAjaW5jbHVkZSAiSlNDcnlwdG9DdXN0b20uY3BwIgogI2luY2x1ZGUgIkpTQ3Vz
dG9tRXZlbnRDdXN0b20uY3BwIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNDbGllbnRSZWN0Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Q2xpZW50UmVjdEN1c3RvbS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzYzU3
YjZmZDllYzk2Nzc2MDEzNGY4ZjU2ODNhYWVlZGU5YzZhZmUuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlND
bGllbnRSZWN0Q3VzdG9tLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSlNDbGllbnRSZWN0LmgiCi0K
LSNpbmNsdWRlICJDbGllbnRSZWN0LmgiCi0jaW5jbHVkZSA8Ynl0ZWNvZGUvQ29kZUJsb2NrLmg+
Ci0jaW5jbHVkZSA8aGVhcC9IZWFwSW5saW5lcy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvQXV4aWxp
YXJ5QmFycmllcklubGluZXMuaD4KLSNpbmNsdWRlIDxydW50aW1lL0lkZW50aWZpZXJJbmxpbmVz
Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU09iamVjdC5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvT2Jq
ZWN0Q29uc3RydWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi11c2luZyBuYW1lc3Bh
Y2UgSlNDOwotCi1KU0M6OkpTVmFsdWUgSlNDbGllbnRSZWN0Ojp0b0pTT04oRXhlY1N0YXRlJiBz
dGF0ZSkKLXsKLSAgICBDbGllbnRSZWN0JiByZWN0ID0gd3JhcHBlZCgpOwotICAgIFZNJiB2bSA9
IHN0YXRlLnZtKCk7Ci0KLSAgICBKU1ZhbHVlIG9iamVjdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0
KCZzdGF0ZSk7Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBzdGF0ZS5jb2RlQmxvY2soKTsK
LSAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChvYmplY3QsIGNvZGVCbG9jayA/IGNvZGVCbG9jay0+
aXNTdHJpY3RNb2RlKCkgOiBmYWxzZSk7Ci0gICAgb2JqZWN0LnB1dCgmc3RhdGUsIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcoJnZtLCBBU0NJSUxpdGVyYWwoInRvcCIpKSwganNOdW1iZXIocmVjdC50
b3AoKSksIHNsb3QpOwotICAgIG9iamVjdC5wdXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZ2bSwgQVNDSUlMaXRlcmFsKCJyaWdodCIpKSwganNOdW1iZXIocmVjdC5yaWdodCgpKSwg
c2xvdCk7Ci0gICAgb2JqZWN0LnB1dCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZt
LCBBU0NJSUxpdGVyYWwoImJvdHRvbSIpKSwganNOdW1iZXIocmVjdC5ib3R0b20oKSksIHNsb3Qp
OwotICAgIG9iamVjdC5wdXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgQVND
SUlMaXRlcmFsKCJsZWZ0IikpLCBqc051bWJlcihyZWN0LmxlZnQoKSksIHNsb3QpOwotICAgIG9i
amVjdC5wdXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgQVNDSUlMaXRlcmFs
KCJ3aWR0aCIpKSwganNOdW1iZXIocmVjdC53aWR0aCgpKSwgc2xvdCk7Ci0gICAgb2JqZWN0LnB1
dCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBBU0NJSUxpdGVyYWwoImhlaWdo
dCIpKSwganNOdW1iZXIocmVjdC5oZWlnaHQoKSksIHNsb3QpOwotCi0gICAgcmV0dXJuIG9iamVj
dDsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQZXJm
b3JtYW5jZVRpbWluZ0N1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Bl
cmZvcm1hbmNlVGltaW5nQ3VzdG9tLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
OWEyMmEwZDFlYTcyYjViYmZmNDIxZmFkN2E4ZDQ5NzhjNTNlMzY4Ni4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1BlcmZvcm1hbmNlVGltaW5nQ3VzdG9tLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDc2ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSlNQZXJm
b3JtYW5jZVRpbWluZy5oIgotCi0jaWYgRU5BQkxFKFdFQl9USU1JTkcpCi0KLSNpbmNsdWRlICJE
T01XcmFwcGVyV29ybGQuaCIKLSNpbmNsdWRlIDxoZWFwL0hlYXBJbmxpbmVzLmg+Ci0jaW5jbHVk
ZSA8cnVudGltZS9BdXhpbGlhcnlCYXJyaWVySW5saW5lcy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUv
SWRlbnRpZmllcklubGluZXMuaD4KLSNpbmNsdWRlIDxydW50aW1lL0pTT2JqZWN0Lmg+Ci0jaW5j
bHVkZSA8cnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLXVzaW5nIG5hbWVzcGFjZSBKU0M7Ci0KLUpTQzo6SlNWYWx1ZSBKU1BlcmZvcm1hbmNlVGlt
aW5nOjp0b0pTT04oRXhlY1N0YXRlJiBzdGF0ZSkKLXsKLSAgICBQZXJmb3JtYW5jZVRpbWluZyYg
dGltaW5nID0gd3JhcHBlZCgpOwotICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0KLSAgICBhdXRv
IG9iamVjdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KCZzdGF0ZSk7Ci0KLSAgICBvYmplY3QtPnB1
dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIEFTQ0lJTGl0ZXJhbCgibmF2
aWdhdGlvblN0YXJ0IikpLCBqc051bWJlcih0aW1pbmcubmF2aWdhdGlvblN0YXJ0KCkpKTsKLSAg
ICBvYmplY3QtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIEFTQ0lJ
TGl0ZXJhbCgidW5sb2FkRXZlbnRTdGFydCIpKSwganNOdW1iZXIodGltaW5nLnVubG9hZEV2ZW50
U3RhcnQoKSkpOwotICAgIG9iamVjdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZ2bSwgQVNDSUlMaXRlcmFsKCJ1bmxvYWRFdmVudEVuZCIpKSwganNOdW1iZXIodGltaW5n
LnVubG9hZEV2ZW50RW5kKCkpKTsKLSAgICBvYmplY3QtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZygmdm0sIEFTQ0lJTGl0ZXJhbCgicmVkaXJlY3RTdGFydCIpKSwganNOdW1i
ZXIodGltaW5nLnJlZGlyZWN0U3RhcnQoKSkpOwotICAgIG9iamVjdC0+cHV0RGlyZWN0KHZtLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgQVNDSUlMaXRlcmFsKCJyZWRpcmVjdEVuZCIpKSwg
anNOdW1iZXIodGltaW5nLnJlZGlyZWN0RW5kKCkpKTsKLSAgICBvYmplY3QtPnB1dERpcmVjdCh2
bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIEFTQ0lJTGl0ZXJhbCgiZmV0Y2hTdGFydCIp
KSwganNOdW1iZXIodGltaW5nLmZldGNoU3RhcnQoKSkpOwotICAgIG9iamVjdC0+cHV0RGlyZWN0
KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgQVNDSUlMaXRlcmFsKCJkb21haW5Mb29r
dXBTdGFydCIpKSwganNOdW1iZXIodGltaW5nLmRvbWFpbkxvb2t1cFN0YXJ0KCkpKTsKLSAgICBv
YmplY3QtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIEFTQ0lJTGl0
ZXJhbCgiZG9tYWluTG9va3VwRW5kIikpLCBqc051bWJlcih0aW1pbmcuZG9tYWluTG9va3VwRW5k
KCkpKTsKLSAgICBvYmplY3QtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygm
dm0sIEFTQ0lJTGl0ZXJhbCgiY29ubmVjdFN0YXJ0IikpLCBqc051bWJlcih0aW1pbmcuY29ubmVj
dFN0YXJ0KCkpKTsKLSAgICBvYmplY3QtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZygmdm0sIEFTQ0lJTGl0ZXJhbCgiY29ubmVjdEVuZCIpKSwganNOdW1iZXIodGltaW5nLmNv
bm5lY3RFbmQoKSkpOwotICAgIG9iamVjdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZ2bSwgQVNDSUlMaXRlcmFsKCJzZWN1cmVDb25uZWN0aW9uU3RhcnQiKSksIGpzTnVt
YmVyKHRpbWluZy5zZWN1cmVDb25uZWN0aW9uU3RhcnQoKSkpOwotICAgIG9iamVjdC0+cHV0RGly
ZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgQVNDSUlMaXRlcmFsKCJyZXF1ZXN0
U3RhcnQiKSksIGpzTnVtYmVyKHRpbWluZy5yZXF1ZXN0U3RhcnQoKSkpOwotICAgIG9iamVjdC0+
cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgQVNDSUlMaXRlcmFsKCJy
ZXNwb25zZVN0YXJ0IikpLCBqc051bWJlcih0aW1pbmcucmVzcG9uc2VTdGFydCgpKSk7Ci0gICAg
b2JqZWN0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBBU0NJSUxp
dGVyYWwoInJlc3BvbnNlRW5kIikpLCBqc051bWJlcih0aW1pbmcucmVzcG9uc2VFbmQoKSkpOwot
ICAgIG9iamVjdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgQVND
SUlMaXRlcmFsKCJkb21Mb2FkaW5nIikpLCBqc051bWJlcih0aW1pbmcuZG9tTG9hZGluZygpKSk7
Ci0gICAgb2JqZWN0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBB
U0NJSUxpdGVyYWwoImRvbUludGVyYWN0aXZlIikpLCBqc051bWJlcih0aW1pbmcuZG9tSW50ZXJh
Y3RpdmUoKSkpOwotICAgIG9iamVjdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZ2bSwgQVNDSUlMaXRlcmFsKCJkb21Db250ZW50TG9hZGVkRXZlbnRTdGFydCIpKSwganNO
dW1iZXIodGltaW5nLmRvbUNvbnRlbnRMb2FkZWRFdmVudFN0YXJ0KCkpKTsKLSAgICBvYmplY3Qt
PnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIEFTQ0lJTGl0ZXJhbCgi
ZG9tQ29udGVudExvYWRlZEV2ZW50RW5kIikpLCBqc051bWJlcih0aW1pbmcuZG9tQ29udGVudExv
YWRlZEV2ZW50RW5kKCkpKTsKLSAgICBvYmplY3QtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmdm0sIEFTQ0lJTGl0ZXJhbCgiZG9tQ29tcGxldGUiKSksIGpzTnVtYmVyKHRp
bWluZy5kb21Db21wbGV0ZSgpKSk7Ci0gICAgb2JqZWN0LT5wdXREaXJlY3Qodm0sIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcoJnZtLCBBU0NJSUxpdGVyYWwoImxvYWRFdmVudFN0YXJ0IikpLCBqc051
bWJlcih0aW1pbmcubG9hZEV2ZW50U3RhcnQoKSkpOwotICAgIG9iamVjdC0+cHV0RGlyZWN0KHZt
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgQVNDSUlMaXRlcmFsKCJsb2FkRXZlbnRFbmQi
KSksIGpzTnVtYmVyKHRpbWluZy5sb2FkRXZlbnRFbmQoKSkpOwotCi0gICAgcmV0dXJuIG9iamVj
dDsKLX0KLQotfQotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQl9USU1JTkcpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbSBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCmluZGV4IDQ5OWQ5
NWJiMWY0NjFhY2U1ZTA2NTBmMGRmZDlkMzQ2NGZhZjllMTIuLjA5ZmE3MGFhZDVlMDk3OTBlY2Mz
ZGUwMzk3OWI4MmM2YjBjNzFkMzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCkBAIC0zNzQ1LDcgKzM3NDUsNyBAQCBFTkQKIAog
CiAgICAgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbkl0ZXJhYmxlRnVuY3Rpb25zKCRpbnRlcmZhY2Up
IGlmICRpbnRlcmZhY2UtPml0ZXJhYmxlOwotICAgIEdlbmVyYXRlU2VyaWFsaXplckZ1bmN0aW9u
KCRpbnRlcmZhY2UsICRpbnRlcmZhY2VOYW1lLCAkY2xhc3NOYW1lKSBpZiAkaW50ZXJmYWNlLT5z
ZXJpYWxpemFibGU7CisgICAgR2VuZXJhdGVTZXJpYWxpemVyRnVuY3Rpb24oJGludGVyZmFjZSwg
JGNsYXNzTmFtZSkgaWYgJGludGVyZmFjZS0+c2VyaWFsaXphYmxlOwogCiAgICAgaWYgKCRuZWVk
c1Zpc2l0Q2hpbGRyZW4pIHsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ2b2lkICR7Y2xh
c3NOYW1lfTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9y
KVxuIik7CkBAIC0zOTY4LDI2ICszOTY4LDQwIEBAIEVORAogCiBzdWIgR2VuZXJhdGVTZXJpYWxp
emVyRnVuY3Rpb24KIHsKLSAgICBteSAoJGludGVyZmFjZSwgJGludGVyZmFjZU5hbWUsICRjbGFz
c05hbWUpID0gQF87CisgICAgbXkgKCRpbnRlcmZhY2UsICRjbGFzc05hbWUpID0gQF87CisKKyAg
ICBteSAkaW50ZXJmYWNlTmFtZSA9ICRpbnRlcmZhY2UtPm5hbWU7CisKICAgICBteSAkc2VyaWFs
aXplckZ1bmN0aW9uTmFtZSA9ICJ0b0pTT04iOwogICAgIG15ICRzZXJpYWxpemVyTmF0aXZlRnVu
Y3Rpb25OYW1lID0gJGNvZGVHZW5lcmF0b3ItPldLX2xjZmlyc3QoJGNsYXNzTmFtZSkgLiAiUHJv
dG90eXBlRnVuY3Rpb24iIC4gJGNvZGVHZW5lcmF0b3ItPldLX3VjZmlyc3QoJHNlcmlhbGl6ZXJG
dW5jdGlvbk5hbWUpOwogCi0gICAgQWRkVG9JbXBsSW5jbHVkZXMoIk9iamVjdENvbnN0cnVjdG9y
LmgiKTsKKyAgICBBZGRUb0ltcGxJbmNsdWRlcygiPHJ1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3Iu
aD4iKTsKICAgICBwdXNoKEBpbXBsQ29udGVudCwgInN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFs
dWUgJHtzZXJpYWxpemVyTmF0aXZlRnVuY3Rpb25OYW1lfUNhbGxlcihFeGVjU3RhdGUqIHN0YXRl
LCBKUyRpbnRlcmZhY2VOYW1lKiB0aGlzT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2Nv
cGUpXG4iKTsKICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwogICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIGF1dG8mIHZtID0gc3RhdGUtPnZtKCk7XG4iKTsKICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICBhdXRvKiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChzdGF0ZSk7
XG4iKTsKICAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuIik7Ci0gICAgZm9yZWFjaCBteSAkYXR0
cmlidXRlIChAeyRpbnRlcmZhY2UtPmF0dHJpYnV0ZXN9KSB7Ci0gICAgICAgIG15ICRuYW1lID0g
JGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5uYW1lOwotICAgICAgICBpZiAoZ3JlcCAkXyBlcSAkbmFt
ZSwgQHskaW50ZXJmYWNlLT5zZXJpYWxpemFibGUtPmF0dHJpYnV0ZXN9KSB7Ci0gICAgICAgICAg
ICBteSAkZ2V0RnVuY3Rpb25OYW1lID0gR2V0QXR0cmlidXRlR2V0dGVyTmFtZSgkaW50ZXJmYWNl
LCAkY2xhc3NOYW1lLCAkYXR0cmlidXRlKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIGF1dG8gJHtuYW1lfVZhbHVlID0gJHtnZXRGdW5jdGlvbk5hbWV9R2V0dGVyKCpzdGF0
ZSwgKnRoaXNPYmplY3QsIHRocm93U2NvcGUpO1xuIik7Ci0gICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICBBU1NFUlQoIXRocm93U2NvcGUuZXhjZXB0aW9uKCkpO1xuIik7Ci0gICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIFwiJHtuYW1lfVwiKSwgJHtuYW1lfVZhbHVlKTtcbiIp
OwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJcbiIpOworCisgICAgbXkgQHNlcmlh
bGl6ZWRBdHRyaWJ1dGVzID0gKCk7CisgICAgZm9yZWFjaCBteSAkYXR0cmlidXRlX25hbWUgKEB7
JGludGVyZmFjZS0+c2VyaWFsaXphYmxlLT5hdHRyaWJ1dGVzfSkgeworICAgICAgICBmb3JlYWNo
IG15ICRhdHRyaWJ1dGUgKEB7JGludGVyZmFjZS0+YXR0cmlidXRlc30pIHsKKyAgICAgICAgICAg
IGlmICgkYXR0cmlidXRlX25hbWUgZXEgJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5uYW1lKSB7Cisg
ICAgICAgICAgICAgICAgcHVzaCBAc2VyaWFsaXplZEF0dHJpYnV0ZXMsICRhdHRyaWJ1dGU7Cisg
ICAgICAgICAgICAgICAgbGFzdDsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KKwor
ICAgIGZvcmVhY2ggbXkgJGF0dHJpYnV0ZSAoQHNlcmlhbGl6ZWRBdHRyaWJ1dGVzKSB7CisgICAg
ICAgIG15ICRuYW1lID0gJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5uYW1lOworCisgICAgICAgIG15
ICRnZXRGdW5jdGlvbk5hbWUgPSBHZXRBdHRyaWJ1dGVHZXR0ZXJOYW1lKCRpbnRlcmZhY2UsICRj
bGFzc05hbWUsICRhdHRyaWJ1dGUpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBh
dXRvICR7bmFtZX1WYWx1ZSA9ICR7Z2V0RnVuY3Rpb25OYW1lfUdldHRlcigqc3RhdGUsICp0aGlz
T2JqZWN0LCB0aHJvd1Njb3BlKTtcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICBBU1NFUlQoIXRocm93U2NvcGUuZXhjZXB0aW9uKCkpO1xuIik7CisgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZ2bSwgXCIke25hbWV9XCIpLCAke25hbWV9VmFsdWUpO1xuIik7CisgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiXG4iKTsKKyAgICB9CisKICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7XG4iKTsKICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIn1cbiIpOwogICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4iKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvSURMUGFyc2VyLnBtIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExQYXJzZXIucG0KaW5kZXggYWFiZThiY2VjYTE0Yzg4
ZWMzYzQwMmZjMWQ3OWEyMGRiOTMxNmM0MC4uZTQ0NjhlODJkNDMyYWU1NGRkNWU3OWQ0ZTUwN2Y4
YTY0ODA5YTg0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9J
RExQYXJzZXIucG0KKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExQYXJz
ZXIucG0KQEAgLTExMiw2ICsxMTIsOSBAQCBzdHJ1Y3QoIGRvbUl0ZXJhYmxlID0+IHsKICMgVXNl
ZCB0byByZXByZXNlbnQgc2VyaWFsaXphYmxlIGludGVyZmFjZQogc3RydWN0KCBkb21TZXJpYWxp
emFibGUgPT4gewogICAgIGF0dHJpYnV0ZXMgPT4gJ0AnLCAjIExpc3Qgb2YgYXR0cmlidXRlcyB0
byBzZXJpYWxpemUKKyAgICBoYXNBdHRyaWJ1dGUgPT4gJyQnLCAjIHNlcmlhbGl6ZXIgPSB7IGF0
dHJpYnV0ZSB9CisgICAgaGFzSW5oZXJpdCA9PiAnJCcsICMgc2VyaWFsaXplciA9IHsgaW5oZXJp
dCB9CisgICAgaGFzR2V0dGVyID0+ICckJywgIyBzZXJpYWxpemVyID0geyBnZXR0ZXIgfQogICAg
IGZ1bmN0aW9ucyA9PiAnQCcsICMgdG9KU09OIGZ1bmN0aW9uCiB9KTsKIApAQCAtMTE0OCwxMiAr
MTE1MSw5IEBAIHN1YiBwYXJzZVNlcmlhbGl6ZXJSZXN0CiAgICAgbXkgJG5leHQgPSAkc2VsZi0+
bmV4dFRva2VuKCk7CiAgICAgaWYgKCRuZXh0LT52YWx1ZSgpIGVxICI9IikgewogICAgICAgICAk
c2VsZi0+YXNzZXJ0VG9rZW5WYWx1ZSgkc2VsZi0+Z2V0VG9rZW4oKSwgIj0iLCBfX0xJTkVfXyk7
Ci0gICAgICAgIG15ICRhdHRyaWJ1dGVzID0gJHNlbGYtPnBhcnNlU2VyaWFsaXphdGlvblBhdHRl
cm4oKTsKIAotICAgICAgICBteSAkbmV3RGF0YU5vZGUgPSBkb21TZXJpYWxpemFibGUtPm5ldygp
OwotICAgICAgICAkbmV3RGF0YU5vZGUtPmF0dHJpYnV0ZXMoJGF0dHJpYnV0ZXMpOworICAgICAg
ICByZXR1cm4gJHNlbGYtPnBhcnNlU2VyaWFsaXphdGlvblBhdHRlcm4oKTsKIAotICAgICAgICBy
ZXR1cm4gJG5ld0RhdGFOb2RlOwogICAgIH0KICAgICBpZiAoJG5leHQtPnR5cGUoKSA9PSBJZGVu
dGlmaWVyVG9rZW4gfHwgJG5leHQtPnZhbHVlKCkgZXEgIigiKSB7CiAgICAgICAgIHJldHVybiAk
c2VsZi0+cGFyc2VPcGVyYXRpb25SZXN0KCRleHRlbmRlZEF0dHJpYnV0ZUxpc3QpOwpAQCAtMTE2
Nyw5ICsxMTY3LDEwIEBAIHN1YiBwYXJzZVNlcmlhbGl6YXRpb25QYXR0ZXJuCiAgICAgbXkgJG5l
eHQgPSAkc2VsZi0+bmV4dFRva2VuKCk7CiAgICAgaWYgKCRuZXh0LT52YWx1ZSgpIGVxICJ7Iikg
ewogICAgICAgICAkc2VsZi0+YXNzZXJ0VG9rZW5WYWx1ZSgkc2VsZi0+Z2V0VG9rZW4oKSwgInsi
LCBfX0xJTkVfXyk7Ci0gICAgICAgIG15ICRhdHRyaWJ1dGVzID0gJHNlbGYtPnBhcnNlU2VyaWFs
aXphdGlvbkF0dHJpYnV0ZXMoKTsKKyAgICAgICAgbXkgJG5ld0RhdGFOb2RlID0gZG9tU2VyaWFs
aXphYmxlLT5uZXcoKTsKKyAgICAgICAgJHNlbGYtPnBhcnNlU2VyaWFsaXphdGlvbkF0dHJpYnV0
ZXMoJG5ld0RhdGFOb2RlKTsKICAgICAgICAgJHNlbGYtPmFzc2VydFRva2VuVmFsdWUoJHNlbGYt
PmdldFRva2VuKCksICJ9IiwgX19MSU5FX18pOwotICAgICAgICByZXR1cm4gXEB7JGF0dHJpYnV0
ZXN9OworICAgICAgICByZXR1cm4gJG5ld0RhdGFOb2RlOwogICAgIH0KICAgICBpZiAoJG5leHQt
PnZhbHVlKCkgZXEgIlsiKSB7CiAgICAgICAgIGRpZSAiU2VyaWFsaXphdGlvbiBvZiBsaXN0cyBw
YXR0ZXJuIGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkLiI7CkBAIC0xMTc5LDcgKzExODAsMTEg
QEAgc3ViIHBhcnNlU2VyaWFsaXphdGlvblBhdHRlcm4KICAgICAgICAgbXkgJHRva2VuID0gJHNl
bGYtPmdldFRva2VuKCk7CiAgICAgICAgICRzZWxmLT5hc3NlcnRUb2tlblR5cGUoJHRva2VuLCBJ
ZGVudGlmaWVyVG9rZW4pOwogICAgICAgICBwdXNoKEBhdHRyaWJ1dGVzLCAkdG9rZW4tPnZhbHVl
KCkpOwotICAgICAgICByZXR1cm4gXEBhdHRyaWJ1dGVzOworCisgICAgICAgIG15ICRuZXdEYXRh
Tm9kZSA9IGRvbVNlcmlhbGl6YWJsZS0+bmV3KCk7CisgICAgICAgICRuZXdEYXRhTm9kZS0+YXR0
cmlidXRlcyhcQGF0dHJpYnV0ZXMpOworCisgICAgICAgIHJldHVybiAkbmV3RGF0YU5vZGU7CiAg
ICAgfQogICAgICRzZWxmLT5hc3NlcnRVbmV4cGVjdGVkVG9rZW4oJG5leHQtPnZhbHVlKCksIF9f
TElORV9fKTsKIH0KQEAgLTExODcsMjEgKzExOTIsMzAgQEAgc3ViIHBhcnNlU2VyaWFsaXphdGlv
blBhdHRlcm4KIHN1YiBwYXJzZVNlcmlhbGl6YXRpb25BdHRyaWJ1dGVzCiB7CiAgICAgbXkgJHNl
bGYgPSBzaGlmdDsKKyAgICBteSAkZG9tU2VyaWFsaXphYmxlID0gc2hpZnQ7CiAgICAgbXkgJHRv
a2VuID0gJHNlbGYtPmdldFRva2VuKCk7CiAKICAgICBpZiAoJHRva2VuLT52YWx1ZSgpIGVxICJn
ZXR0ZXIiKSB7CisgICAgICAgICRkb21TZXJpYWxpemFibGUtPmhhc0dldHRlcigxKTsKICAgICAg
ICAgZGllICJTZXJpYWxpemVyIGdldHRlciBrZXl3b3JkIGlzIG5vdCBjdXJyZW50bHkgc3VwcG9y
dGVkLiI7CiAKICAgICB9CiAgICAgaWYgKCR0b2tlbi0+dmFsdWUoKSBlcSAiaW5oZXJpdCIpIHsK
KyAgICAgICAgJGRvbVNlcmlhbGl6YWJsZS0+aGFzSW5oZXJpdCgxKTsKICAgICAgICAgZGllICJT
ZXJpYWxpemVyIGluaGVyaXQga2V5d29yZCBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZC4iOwog
ICAgIH0KIAorICAgIGlmICgkdG9rZW4tPnZhbHVlKCkgZXEgImF0dHJpYnV0ZSIpIHsKKyAgICAg
ICAgJGRvbVNlcmlhbGl6YWJsZS0+aGFzQXR0cmlidXRlKDEpOworICAgICAgICAjIEF0dHJpYnV0
ZXMgd2lsbCBiZSBmaWxsZWQgaW4gdmlhIGFwcGx5TWVtYmVyTGlzdCgpCisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKICAgICBteSBAYXR0cmlidXRlcyA9ICgpOwogICAgICRzZWxmLT5hc3NlcnRU
b2tlblR5cGUoJHRva2VuLCBJZGVudGlmaWVyVG9rZW4pOwogICAgIHB1c2goQGF0dHJpYnV0ZXMs
ICR0b2tlbi0+dmFsdWUoKSk7CiAgICAgcHVzaChAYXR0cmlidXRlcywgQHskc2VsZi0+cGFyc2VJ
ZGVudGlmaWVycygpfSk7Ci0gICAgcmV0dXJuIFxAYXR0cmlidXRlczsKKyAgICAkZG9tU2VyaWFs
aXphYmxlLT5hdHRyaWJ1dGVzKFxAYXR0cmlidXRlcyk7CiB9CiAKIHN1YiBwYXJzZUlkZW50aWZp
ZXJMaXN0CkBAIC0yMzE2LDYgKzIzMzAsMTQgQEAgc3ViIHBhcnNlTmFtZQogICAgICRzZWxmLT5h
c3NlcnRVbmV4cGVjdGVkVG9rZW4oJG5leHQtPnZhbHVlKCkpOwogfQogCitzdWIgaXNTZXJpYWxp
emFibGVBdHRyaWJ1dGUKK3sKKyAgICBteSAkYXR0cmlidXRlID0gc2hpZnQ7CisKKyAgICAjIEZJ
WE1FOiBOZWVkIHRvIHN1cHBvcnQgbW9yZSB0aGFuIHByaW1pdGl2ZSBzZXJpYWxpemFibGUgdHlw
ZXMuCisgICAgbXkgJHNlcmlhbGl6YWJsZV90eXBlcyA9ICdeKFwoYnl0ZXxvY3RldHxzaG9ydHx1
bnNpZ25lZCBzaG9ydHxsb25nfHVuc2lnbmVkIGxvbmd8bG9uZyBsb25nfHVuc2lnbmVkIGxvbmcg
bG9uZ3xmbG9hdHx1bnJlc3RyaWN0ZWQgZmxvYXR8ZG91YmxlfHVucmVzdHJpY3RlZCBkb3VibGV8
Ym9vbGVhbnxET01TdHJpbmd8Qnl0ZVN0cmluZ3xVU1ZTdHJpbmcpJCc7CisgICAgcmV0dXJuICRh
dHRyaWJ1dGUtPnNpZ25hdHVyZS0+dHlwZSA9fiAvJHNlcmlhbGl6YWJsZV90eXBlcy87Cit9CiAK
IHN1YiBhcHBseU1lbWJlckxpc3QKIHsKQEAgLTIzNTEsNyArMjM3MywxMyBAQCBzdWIgYXBwbHlN
ZW1iZXJMaXN0CiAKICAgICBpZiAoJGludGVyZmFjZS0+c2VyaWFsaXphYmxlKSB7CiAgICAgICAg
IG15ICRudW1TZXJpYWxpemVyQXR0cmlidXRlcyA9IEB7JGludGVyZmFjZS0+c2VyaWFsaXphYmxl
LT5hdHRyaWJ1dGVzfTsKLSAgICAgICAgaWYgKCRudW1TZXJpYWxpemVyQXR0cmlidXRlcyA9PSAw
KSB7CisgICAgICAgIGlmICgkaW50ZXJmYWNlLT5zZXJpYWxpemFibGUtPmhhc0F0dHJpYnV0ZSkg
eworICAgICAgICAgICAgZm9yZWFjaCBteSAkYXR0cmlidXRlIChAeyRpbnRlcmZhY2UtPmF0dHJp
YnV0ZXN9KSB7CisgICAgICAgICAgICAgICAgaWYgKGlzU2VyaWFsaXphYmxlQXR0cmlidXRlKCRh
dHRyaWJ1dGUpKSB7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQHskaW50ZXJmYWNlLT5zZXJp
YWxpemFibGUtPmF0dHJpYnV0ZXN9LCAkYXR0cmlidXRlLT5zaWduYXR1cmUtPm5hbWUpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNpZiAoJG51bVNlcmlh
bGl6ZXJBdHRyaWJ1dGVzID09IDApIHsKICAgICAgICAgICAgIGZvcmVhY2ggbXkgJGF0dHJpYnV0
ZSAoQHskaW50ZXJmYWNlLT5hdHRyaWJ1dGVzfSkgewogICAgICAgICAgICAgICAgIHB1c2goQHsk
aW50ZXJmYWNlLT5zZXJpYWxpemFibGUtPmF0dHJpYnV0ZXN9LCAkYXR0cmlidXRlLT5zaWduYXR1
cmUtPm5hbWUpOwogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuY3BwCmluZGV4IDk1ZTk2MDczZDM5ODhm
NzVlYmU2ODM5OWIxM2M2MGM1NDM5MTNkODMuLjI3ZWNlODYzNzY2ZGRhYWE2YTZjNjg5MTc4OWE4
YWUwMmY2ZGM2M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3ROb2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHAKQEAgLTI2LDExICsyNiwxMSBAQAogI2luY2x1ZGUg
IkpTRE9NQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJKU0RPTUl0ZXJhdG9yLmgiCiAjaW5jbHVk
ZSAiSlNET01Qcm9taXNlLmgiCi0jaW5jbHVkZSAiT2JqZWN0Q29uc3RydWN0b3IuaCIKICNpbmNs
dWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiVVJMLmgiCiAjaW5jbHVk
ZSA8cnVudGltZS9FcnJvci5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNTdHJpbmcuaD4KKyNpbmNs
dWRlIDxydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL0dldFB0ci5o
PgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAppbmRleCBlOWUxMzhkZjA3NjljNjlj
MmY0ODQ1MTE2M2NiYTE3MDcxOTVmYWZhLi5jZGY3Y2JjNzljYTg4Y2QwMzE5OTllZDgyODEyNmMw
YWNlMTQwM2Q3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0T2JqLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0T2JqLmNwcApAQCAtNTMsNyArNTMsNiBAQAogI2luY2x1ZGUgIkpTVGVz
dFN0YW5kYWxvbmVEaWN0aW9uYXJ5LmgiCiAjaW5jbHVkZSAiSlNUZXN0U3ViT2JqLmgiCiAjaW5j
bHVkZSAiSlNYUGF0aE5TUmVzb2x2ZXIuaCIKLSNpbmNsdWRlICJPYmplY3RDb25zdHJ1Y3Rvci5o
IgogI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJTVkdEb2N1
bWVudC5oIgogI2luY2x1ZGUgIlNWR1BvaW50LmgiCkBAIC03NzQwLDYgKzc3MzksMTAgQEAgc3Rh
dGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRvSlNP
TkNhbGxlcihFeGVjU3RhdGUqIHMKICAgICBhdXRvJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1
dG8qIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KHN0YXRlKTsKIAorICAgIGF1dG8gY3Jl
YXRlVmFsdWUgPSBqc1Rlc3RPYmpDcmVhdGVHZXR0ZXIoKnN0YXRlLCAqdGhpc09iamVjdCwgdGhy
b3dTY29wZSk7CisgICAgQVNTRVJUKCF0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKTsKKyAgICByZXN1
bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJjcmVhdGUiKSwg
Y3JlYXRlVmFsdWUpOworCiAgICAgYXV0byByZWFkT25seVN0cmluZ0F0dHJWYWx1ZSA9IGpzVGVz
dE9ialJlYWRPbmx5U3RyaW5nQXR0ckdldHRlcigqc3RhdGUsICp0aGlzT2JqZWN0LCB0aHJvd1Nj
b3BlKTsKICAgICBBU1NFUlQoIXRocm93U2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIHJlc3VsdC0+
cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgInJlYWRPbmx5U3RyaW5n
QXR0ciIpLCByZWFkT25seVN0cmluZ0F0dHJWYWx1ZSk7CkBAIC03NzUyLDEwICs3NzU1LDYgQEAg
c3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRv
SlNPTkNhbGxlcihFeGVjU3RhdGUqIHMKICAgICBBU1NFUlQoIXRocm93U2NvcGUuZXhjZXB0aW9u
KCkpOwogICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2
bSwgImxvbmdBdHRyIiksIGxvbmdBdHRyVmFsdWUpOwogCi0gICAgYXV0byBjcmVhdGVWYWx1ZSA9
IGpzVGVzdE9iakNyZWF0ZUdldHRlcigqc3RhdGUsICp0aGlzT2JqZWN0LCB0aHJvd1Njb3BlKTsK
LSAgICBBU1NFUlQoIXRocm93U2NvcGUuZXhjZXB0aW9uKCkpOwotICAgIHJlc3VsdC0+cHV0RGly
ZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImNyZWF0ZSIpLCBjcmVhdGVWYWx1
ZSk7Ci0KICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxp
emF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RTZXJpYWxpemF0aW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kZGY3M2MwYTkzNmEwNWNhY2Y1ZGFiYjg1
MzdiMjMwMjQ3ZjJhNGU0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb24uY3BwCkBAIC0wLDAgKzEsNDQ4
IEBACisvKgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2Ug
cHJvamVjdC4KKyAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJp
bmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
ICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJKU1Rlc3RTZXJpYWxpemF0aW9uLmgiCisKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIK
KyNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0Lmgi
CisjaW5jbHVkZSAiSlNUZXN0Tm9kZS5oIgorI2luY2x1ZGUgIlVSTC5oIgorI2luY2x1ZGUgPHJ1
bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTU3RyaW5nLmg+
CisjaW5jbHVkZSA8cnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9H
ZXRQdHIuaD4KKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CisvLyBGdW5jdGlvbnMKKworSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dFNlcmlhbGl6YXRpb25Qcm90b3R5cGVGdW5jdGlvblRvSlNPTihKU0M6OkV4ZWNTdGF0ZSopOwor
CisvLyBBdHRyaWJ1dGVzCisKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlv
bkZpcnN0U3RyaW5nQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uRmlyc3RT
dHJpbmdBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6
OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlv
blNlY29uZExvbmdBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVl
LCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25TZWNvbmRM
b25nQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25U
aGlyZFVuc2VyaWFsaXphYmxlQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9u
VGhpcmRVbnNlcmlhbGl6YWJsZUF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RTZXJpYWxpemF0aW9uRm91cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRlKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBz
ZXRKU1Rlc3RTZXJpYWxpemF0aW9uRm91cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRlKEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7
CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25GaWZ0aExvbmdBdHRyaWJ1
dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFt
ZSk7Citib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25GaWZ0aExvbmdBdHRyaWJ1dGUoSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkNvbnN0cnVjdG9yKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBz
ZXRKU1Rlc3RTZXJpYWxpemF0aW9uQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKKworY2xhc3MgSlNUZXN0U2VyaWFs
aXphdGlvblByb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgeworcHVibGlj
OgorICAgIHVzaW5nIEJhc2UgPSBKU0M6OkpTTm9uRmluYWxPYmplY3Q7CisgICAgc3RhdGljIEpT
VGVzdFNlcmlhbGl6YXRpb25Qcm90b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAg
IHsKKyAgICAgICAgSlNUZXN0U2VyaWFsaXphdGlvblByb3RvdHlwZSogcHRyID0gbmV3IChOb3RO
dWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RTZXJpYWxpemF0aW9uUHJvdG90eXBlPih2bS5o
ZWFwKSkgSlNUZXN0U2VyaWFsaXphdGlvblByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1
Y3R1cmUpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgcmV0dXJu
IHB0cjsKKyAgICB9CisKKyAgICBERUNMQVJFX0lORk87CisgICAgc3RhdGljIEpTQzo6U3RydWN0
dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlND
OjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgSlNUZXN0U2VyaWFsaXphdGlvblByb3RvdHlwZShKU0M6OlZN
JiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisg
ICAgICAgIDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpCisgICAgeworICAg
IH0KKworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOworfTsKKwordXNpbmcgSlNU
ZXN0U2VyaWFsaXphdGlvbkNvbnN0cnVjdG9yID0gSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVj
dGFibGU8SlNUZXN0U2VyaWFsaXphdGlvbj47CisKK3RlbXBsYXRlPD4gSlNWYWx1ZSBKU1Rlc3RT
ZXJpYWxpemF0aW9uQ29uc3RydWN0b3I6OnByb3RvdHlwZUZvclN0cnVjdHVyZShKU0M6OlZNJiB2
bSwgY29uc3QgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICBVTlVTRURf
UEFSQU0odm0pOworICAgIHJldHVybiBnbG9iYWxPYmplY3QuZnVuY3Rpb25Qcm90b3R5cGUoKTsK
K30KKwordGVtcGxhdGU8PiB2b2lkIEpTVGVzdFNlcmlhbGl6YXRpb25Db25zdHJ1Y3Rvcjo6aW5p
dGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0
KQoreworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rl
c3RTZXJpYWxpemF0aW9uOjpwcm90b3R5cGUodm0sICZnbG9iYWxPYmplY3QpLCBEb250RGVsZXRl
IHwgUmVhZE9ubHkgfCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5h
bWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcoJnZtLCBTdHJpbmcoQVNDSUlMaXRlcmFsKCJU
ZXN0U2VyaWFsaXphdGlvbiIpKSksIFJlYWRPbmx5IHwgRG9udEVudW0pOworICAgIHB1dERpcmVj
dCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgUmVhZE9ubHkgfCBE
b250RW51bSk7Cit9CisKK3RlbXBsYXRlPD4gY29uc3QgQ2xhc3NJbmZvIEpTVGVzdFNlcmlhbGl6
YXRpb25Db25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiVGVzdFNlcmlhbGl6YXRpb24iLCAmQmFzZTo6
c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdFNlcmlhbGl6YXRpb25Db25zdHJ1
Y3RvcikgfTsKKworLyogSGFzaCB0YWJsZSBmb3IgcHJvdG90eXBlICovCisKK3N0YXRpYyBjb25z
dCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RTZXJpYWxpemF0aW9uUHJvdG90eXBlVGFibGVWYWx1ZXNb
XSA9Cit7CisgICAgeyAiY29uc3RydWN0b3IiLCBEb250RW51bSwgTm9JbnRyaW5zaWMsIHsgKGlu
dHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RTZXJp
YWxpemF0aW9uQ29uc3RydWN0b3IpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5
U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3RTZXJpYWxpemF0aW9uQ29uc3RydWN0b3IpIH0g
fSwKKyAgICB7ICJmaXJzdFN0cmluZ0F0dHJpYnV0ZSIsIEN1c3RvbUFjY2Vzc29yLCBOb0ludHJp
bnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+
KGpzVGVzdFNlcmlhbGl6YXRpb25GaXJzdFN0cmluZ0F0dHJpYnV0ZSksIChpbnRwdHJfdCkgc3Rh
dGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdFNlcmlhbGl6
YXRpb25GaXJzdFN0cmluZ0F0dHJpYnV0ZSkgfSB9LAorICAgIHsgInNlY29uZExvbmdBdHRyaWJ1
dGUiLCBDdXN0b21BY2Nlc3NvciwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0
PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RTZXJpYWxpemF0aW9uU2Vjb25kTG9u
Z0F0dHJpYnV0ZSksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRW
YWx1ZUZ1bmM+KHNldEpTVGVzdFNlcmlhbGl6YXRpb25TZWNvbmRMb25nQXR0cmlidXRlKSB9IH0s
CisgICAgeyAidGhpcmRVbnNlcmlhbGl6YWJsZUF0dHJpYnV0ZSIsIEN1c3RvbUFjY2Vzc29yLCBO
b0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1
ZUZ1bmM+KGpzVGVzdFNlcmlhbGl6YXRpb25UaGlyZFVuc2VyaWFsaXphYmxlQXR0cmlidXRlKSwg
KGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0
SlNUZXN0U2VyaWFsaXphdGlvblRoaXJkVW5zZXJpYWxpemFibGVBdHRyaWJ1dGUpIH0gfSwKKyAg
ICB7ICJmb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGUiLCBDdXN0b21BY2Nlc3Nvciwg
Tm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFs
dWVGdW5jPihqc1Rlc3RTZXJpYWxpemF0aW9uRm91cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0cmli
dXRlKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVu
Yz4oc2V0SlNUZXN0U2VyaWFsaXphdGlvbkZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0
ZSkgfSB9LAorICAgIHsgImZpZnRoTG9uZ0F0dHJpYnV0ZSIsIEN1c3RvbUFjY2Vzc29yLCBOb0lu
dHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1
bmM+KGpzVGVzdFNlcmlhbGl6YXRpb25GaWZ0aExvbmdBdHRyaWJ1dGUpLCAoaW50cHRyX3QpIHN0
YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3RTZXJpYWxp
emF0aW9uRmlmdGhMb25nQXR0cmlidXRlKSB9IH0sCisgICAgeyAidG9KU09OIiwgSlNDOjpGdW5j
dGlvbiwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9u
Pihqc1Rlc3RTZXJpYWxpemF0aW9uUHJvdG90eXBlRnVuY3Rpb25Ub0pTT04pLCAoaW50cHRyX3Qp
ICgwKSB9IH0sCit9OworCitjb25zdCBDbGFzc0luZm8gSlNUZXN0U2VyaWFsaXphdGlvblByb3Rv
dHlwZTo6c19pbmZvID0geyAiVGVzdFNlcmlhbGl6YXRpb25Qcm90b3R5cGUiLCAmQmFzZTo6c19p
bmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdFNlcmlhbGl6YXRpb25Qcm90b3R5cGUp
IH07CisKK3ZvaWQgSlNUZXN0U2VyaWFsaXphdGlvblByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24o
Vk0mIHZtKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZWlmeVN0YXRp
Y1Byb3BlcnRpZXModm0sIEpTVGVzdFNlcmlhbGl6YXRpb25Qcm90b3R5cGVUYWJsZVZhbHVlcywg
KnRoaXMpOworfQorCitjb25zdCBDbGFzc0luZm8gSlNUZXN0U2VyaWFsaXphdGlvbjo6c19pbmZv
ID0geyAiVGVzdFNlcmlhbGl6YXRpb24iLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9E
X1RBQkxFKEpTVGVzdFNlcmlhbGl6YXRpb24pIH07CisKK0pTVGVzdFNlcmlhbGl6YXRpb246OkpT
VGVzdFNlcmlhbGl6YXRpb24oU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0
JiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0U2VyaWFsaXphdGlvbj4mJiBpbXBsKQorICAgIDogSlNE
T01XcmFwcGVyPFRlc3RTZXJpYWxpemF0aW9uPihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCwgV1RG
TW92ZShpbXBsKSkKK3sKK30KKworSlNPYmplY3QqIEpTVGVzdFNlcmlhbGl6YXRpb246OmNyZWF0
ZVByb3RvdHlwZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAg
cmV0dXJuIEpTVGVzdFNlcmlhbGl6YXRpb25Qcm90b3R5cGU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCBKU1Rlc3RTZXJpYWxpemF0aW9uUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIGds
b2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSkpOworfQorCitKU09i
amVjdCogSlNUZXN0U2VyaWFsaXphdGlvbjo6cHJvdG90eXBlKFZNJiB2bSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVzdFNl
cmlhbGl6YXRpb24+KHZtLCBnbG9iYWxPYmplY3QpOworfQorCit2b2lkIEpTVGVzdFNlcmlhbGl6
YXRpb246OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNlbGwpCit7CisgICAgSlNUZXN0U2VyaWFsaXph
dGlvbiogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpTVGVzdFNlcmlhbGl6YXRpb24qPihjZWxs
KTsKKyAgICB0aGlzT2JqZWN0LT5KU1Rlc3RTZXJpYWxpemF0aW9uOjp+SlNUZXN0U2VyaWFsaXph
dGlvbigpOworfQorCit0ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3RTZXJpYWxpemF0aW9uKiBCaW5k
aW5nQ2FsbGVyPEpTVGVzdFNlcmlhbGl6YXRpb24+OjpjYXN0Rm9yQXR0cmlidXRlKEV4ZWNTdGF0
ZSYsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSkKK3sKKyAgICByZXR1cm4ganNEeW5hbWljQ2Fz
dDxKU1Rlc3RTZXJpYWxpemF0aW9uKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworfQor
Cit0ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3RTZXJpYWxpemF0aW9uKiBCaW5kaW5nQ2FsbGVyPEpT
VGVzdFNlcmlhbGl6YXRpb24+OjpjYXN0Rm9yT3BlcmF0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUpCit7
CisgICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8SlNUZXN0U2VyaWFsaXphdGlvbio+KHN0YXRlLnRo
aXNWYWx1ZSgpKTsKK30KKworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRp
b25GaXJzdFN0cmluZ0F0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RTZXJpYWxpemF0
aW9uJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CisKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdFNl
cmlhbGl6YXRpb25GaXJzdFN0cmluZ0F0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK3sKKyAgICByZXR1cm4gQmluZGluZ0Nh
bGxlcjxKU1Rlc3RTZXJpYWxpemF0aW9uPjo6YXR0cmlidXRlPGpzVGVzdFNlcmlhbGl6YXRpb25G
aXJzdFN0cmluZ0F0dHJpYnV0ZUdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgImZpcnN0U3RyaW5n
QXR0cmlidXRlIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0
aW9uRmlyc3RTdHJpbmdBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0U2Vy
aWFsaXphdGlvbiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3sKKyAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBh
dXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBq
c1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIGltcGwuZmlyc3RTdHJpbmdBdHRyaWJ1dGUoKSk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlh
bGl6YXRpb25TZWNvbmRMb25nQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdFNlcmlh
bGl6YXRpb24mLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKKworRW5jb2RlZEpTVmFsdWUganNU
ZXN0U2VyaWFsaXphdGlvblNlY29uZExvbmdBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJuIEJpbmRp
bmdDYWxsZXI8SlNUZXN0U2VyaWFsaXphdGlvbj46OmF0dHJpYnV0ZTxqc1Rlc3RTZXJpYWxpemF0
aW9uU2Vjb25kTG9uZ0F0dHJpYnV0ZUdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgInNlY29uZExv
bmdBdHRyaWJ1dGUiKTsKK30KKworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6
YXRpb25TZWNvbmRMb25nQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdFNl
cmlhbGl6YXRpb24mIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAg
YXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0g
anNOdW1iZXIoaW1wbC5zZWNvbmRMb25nQXR0cmlidXRlKCkpOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uVGhpcmRVbnNl
cmlhbGl6YWJsZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RTZXJpYWxpemF0aW9u
JiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CisKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlh
bGl6YXRpb25UaGlyZFVuc2VyaWFsaXphYmxlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQoreworICAgIHJldHVybiBCaW5k
aW5nQ2FsbGVyPEpTVGVzdFNlcmlhbGl6YXRpb24+OjphdHRyaWJ1dGU8anNUZXN0U2VyaWFsaXph
dGlvblRoaXJkVW5zZXJpYWxpemFibGVBdHRyaWJ1dGVHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUs
ICJ0aGlyZFVuc2VyaWFsaXphYmxlQXR0cmlidXRlIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uVGhpcmRVbnNlcmlhbGl6YWJsZUF0dHJpYnV0ZUdldHRl
cihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RTZXJpYWxpemF0aW9uJiB0aGlzT2JqZWN0LCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBw
ZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoJnN0YXRlLCB0aGlzT2JqZWN0Lmdsb2Jh
bE9iamVjdCgpLCBpbXBsLnRoaXJkVW5zZXJpYWxpemFibGVBdHRyaWJ1dGUoKSk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRp
b25Gb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiwgSlNU
ZXN0U2VyaWFsaXphdGlvbiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOworCitFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uRm91cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRl
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KQoreworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdFNlcmlhbGl6YXRpb24+OjphdHRy
aWJ1dGU8anNUZXN0U2VyaWFsaXphdGlvbkZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0
ZUdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgImZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJp
YnV0ZSIpOworfQorCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkZv
dXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBK
U1Rlc3RTZXJpYWxpemF0aW9uJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQor
eworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJl
c3VsdCA9IGpzTnVtYmVyKGltcGwuZm91cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRlKCkp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RT
ZXJpYWxpemF0aW9uRmlmdGhMb25nQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdFNl
cmlhbGl6YXRpb24mLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKKworRW5jb2RlZEpTVmFsdWUg
anNUZXN0U2VyaWFsaXphdGlvbkZpZnRoTG9uZ0F0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK3sKKyAgICByZXR1cm4gQmlu
ZGluZ0NhbGxlcjxKU1Rlc3RTZXJpYWxpemF0aW9uPjo6YXR0cmlidXRlPGpzVGVzdFNlcmlhbGl6
YXRpb25GaWZ0aExvbmdBdHRyaWJ1dGVHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJmaWZ0aExv
bmdBdHRyaWJ1dGUiKTsKK30KKworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6
YXRpb25GaWZ0aExvbmdBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0U2Vy
aWFsaXphdGlvbiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3sKKyAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBh
dXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBq
c051bWJlcihpbXBsLmZpZnRoTG9uZ0F0dHJpYnV0ZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uQ29uc3RydWN0b3IoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7Cisg
ICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisgICAgSlNUZXN0U2VyaWFsaXphdGlvblByb3RvdHlwZSogZG9tT2Jq
ZWN0ID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RTZXJpYWxpemF0aW9uUHJvdG90eXBlKj4oSlNWYWx1
ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlmIChVTkxJS0VMWSghZG9tT2JqZWN0KSkKKyAg
ICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOworICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0U2VyaWFsaXphdGlvbjo6Z2V0Q29uc3RydWN0b3Io
c3RhdGUtPnZtKCksIGRvbU9iamVjdC0+Z2xvYmFsT2JqZWN0KCkpKTsKK30KKworYm9vbCBzZXRK
U1Rlc3RTZXJpYWxpemF0aW9uQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit7CisgICAgVk0m
IHZtID0gc3RhdGUtPnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFs
dWUpOworICAgIEpTVGVzdFNlcmlhbGl6YXRpb25Qcm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHlu
YW1pY0Nhc3Q8SlNUZXN0U2VyaWFsaXphdGlvblByb3RvdHlwZSo+KEpTVmFsdWU6OmRlY29kZSh0
aGlzVmFsdWUpKTsKKyAgICBpZiAoVU5MSUtFTFkoIWRvbU9iamVjdCkpIHsKKyAgICAgICAgdGhy
b3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IKKyAgICByZXR1
cm4gZG9tT2JqZWN0LT5wdXREaXJlY3Qoc3RhdGUtPnZtKCksIHN0YXRlLT5wcm9wZXJ0eU5hbWVz
KCkuY29uc3RydWN0b3IsIHZhbHVlKTsKK30KKworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVz
dFNlcmlhbGl6YXRpb25GaXJzdFN0cmluZ0F0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpT
VGVzdFNlcmlhbGl6YXRpb24mLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CisKK2Jvb2wgc2V0SlNU
ZXN0U2VyaWFsaXphdGlvbkZpcnN0U3RyaW5nQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorewor
ICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdFNlcmlhbGl6YXRpb24+OjpzZXRBdHRyaWJ1
dGU8c2V0SlNUZXN0U2VyaWFsaXphdGlvbkZpcnN0U3RyaW5nQXR0cmlidXRlRnVuY3Rpb24+KHN0
YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImZpcnN0U3RyaW5nQXR0cmlidXRlIik7Cit9
CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uRmlyc3RTdHJpbmdB
dHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RTZXJpYWxpemF0aW9uJiB0
aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAg
IGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVl
ID0gdmFsdWUudG9XVEZTdHJpbmcoJnN0YXRlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIGZhbHNlKTsKKyAgICBpbXBsLnNldEZpcnN0U3RyaW5nQXR0cmlidXRlKFdURk1v
dmUobmF0aXZlVmFsdWUpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworCitzdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvblNlY29uZExvbmdBdHRyaWJ1dGVGdW5jdGlvbihF
eGVjU3RhdGUmLCBKU1Rlc3RTZXJpYWxpemF0aW9uJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwor
Citib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25TZWNvbmRMb25nQXR0cmlidXRlKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlKQoreworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdFNlcmlhbGl6YXRpb24+
OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0U2VyaWFsaXphdGlvblNlY29uZExvbmdBdHRyaWJ1dGVG
dW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAic2Vjb25kTG9uZ0F0dHJp
YnV0ZSIpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvblNl
Y29uZExvbmdBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RTZXJpYWxp
emF0aW9uJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBhdXRvIG5h
dGl2ZVZhbHVlID0gY29udmVydDxJRExMb25nPihzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNp
b24pOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOworICAgIGlt
cGwuc2V0U2Vjb25kTG9uZ0F0dHJpYnV0ZShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKKworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRp
b25UaGlyZFVuc2VyaWFsaXphYmxlQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0
U2VyaWFsaXphdGlvbiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKKworYm9vbCBzZXRKU1Rlc3RT
ZXJpYWxpemF0aW9uVGhpcmRVbnNlcmlhbGl6YWJsZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkK
K3sKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RTZXJpYWxpemF0aW9uPjo6c2V0QXR0
cmlidXRlPHNldEpTVGVzdFNlcmlhbGl6YXRpb25UaGlyZFVuc2VyaWFsaXphYmxlQXR0cmlidXRl
RnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInRoaXJkVW5zZXJpYWxp
emFibGVBdHRyaWJ1dGUiKTsKK30KKworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlh
bGl6YXRpb25UaGlyZFVuc2VyaWFsaXphYmxlQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlJiBz
dGF0ZSwgSlNUZXN0U2VyaWFsaXphdGlvbiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFw
cGVkKCk7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IEpTVGVzdE5vZGU6OnRvV3JhcHBlZCh2YWx1
ZSk7CisgICAgaWYgKFVOTElLRUxZKCFuYXRpdmVWYWx1ZSkpIHsKKyAgICAgICAgdGhyb3dBdHRy
aWJ1dGVUeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsICJUZXN0U2VyaWFsaXphdGlvbiIsICJ0
aGlyZFVuc2VyaWFsaXphYmxlQXR0cmlidXRlIiwgIlRlc3ROb2RlIik7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisgICAgaW1wbC5zZXRUaGlyZFVuc2VyaWFsaXphYmxlQXR0cmlidXRl
KCpuYXRpdmVWYWx1ZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKKworc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25Gb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1
dGVGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RTZXJpYWxpemF0aW9uJiwgSlNWYWx1ZSwgVGhy
b3dTY29wZSYpOworCitib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25Gb3VydGhVbnJlc3RyaWN0
ZWREb3VibGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit7CisgICAgcmV0dXJuIEJpbmRpbmdD
YWxsZXI8SlNUZXN0U2VyaWFsaXphdGlvbj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RTZXJpYWxp
emF0aW9uRm91cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRlRnVuY3Rpb24+KHN0YXRlLCB0
aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0
ZSIpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkZvdXJ0
aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpT
VGVzdFNlcmlhbGl6YXRpb24mIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwor
ICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETFVucmVzdHJpY3RlZERvdWJsZT4oc3Rh
dGUsIHZhbHVlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsK
KyAgICBpbXBsLnNldEZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZShXVEZNb3ZlKG5h
dGl2ZVZhbHVlKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKKworc3RhdGljIGlubGluZSBib29s
IHNldEpTVGVzdFNlcmlhbGl6YXRpb25GaWZ0aExvbmdBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3Rh
dGUmLCBKU1Rlc3RTZXJpYWxpemF0aW9uJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOworCitib29s
IHNldEpTVGVzdFNlcmlhbGl6YXRpb25GaWZ0aExvbmdBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUp
Cit7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0U2VyaWFsaXphdGlvbj46OnNldEF0
dHJpYnV0ZTxzZXRKU1Rlc3RTZXJpYWxpemF0aW9uRmlmdGhMb25nQXR0cmlidXRlRnVuY3Rpb24+
KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImZpZnRoTG9uZ0F0dHJpYnV0ZSIpOwor
fQorCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkZpZnRoTG9uZ0F0
dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdFNlcmlhbGl6YXRpb24mIHRo
aXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAg
VU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAg
YXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIGF1dG8gbmF0aXZlVmFsdWUg
PSBjb252ZXJ0PElETExvbmc+KHN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CisgICAgaW1wbC5zZXRGaWZ0
aExvbmdBdHRyaWJ1dGUoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOworICAgIHJldHVybiB0cnVlOwor
fQorCisKK0pTVmFsdWUgSlNUZXN0U2VyaWFsaXphdGlvbjo6Z2V0Q29uc3RydWN0b3IoVk0mIHZt
LCBjb25zdCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBnZXRE
T01Db25zdHJ1Y3RvcjxKU1Rlc3RTZXJpYWxpemF0aW9uQ29uc3RydWN0b3I+KHZtLCAqanNDYXN0
PGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7Cit9CisKK3N0YXRpYyBp
bmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvblByb3RvdHlwZUZ1bmN0aW9u
VG9KU09OQ2FsbGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdFNlcmlhbGl6YXRpb24qIHRoaXNP
YmplY3QsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3sKKyAgICBhdXRvJiB2bSA9IHN0
YXRlLT52bSgpOworICAgIGF1dG8qIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KHN0YXRl
KTsKKworICAgIGF1dG8gZmlyc3RTdHJpbmdBdHRyaWJ1dGVWYWx1ZSA9IGpzVGVzdFNlcmlhbGl6
YXRpb25GaXJzdFN0cmluZ0F0dHJpYnV0ZUdldHRlcigqc3RhdGUsICp0aGlzT2JqZWN0LCB0aHJv
d1Njb3BlKTsKKyAgICBBU1NFUlQoIXRocm93U2NvcGUuZXhjZXB0aW9uKCkpOworICAgIHJlc3Vs
dC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImZpcnN0U3RyaW5n
QXR0cmlidXRlIiksIGZpcnN0U3RyaW5nQXR0cmlidXRlVmFsdWUpOworCisgICAgYXV0byBzZWNv
bmRMb25nQXR0cmlidXRlVmFsdWUgPSBqc1Rlc3RTZXJpYWxpemF0aW9uU2Vjb25kTG9uZ0F0dHJp
YnV0ZUdldHRlcigqc3RhdGUsICp0aGlzT2JqZWN0LCB0aHJvd1Njb3BlKTsKKyAgICBBU1NFUlQo
IXRocm93U2NvcGUuZXhjZXB0aW9uKCkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgInNlY29uZExvbmdBdHRyaWJ1dGUiKSwgc2Vjb25kTG9u
Z0F0dHJpYnV0ZVZhbHVlKTsKKworICAgIGF1dG8gZm91cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0
cmlidXRlVmFsdWUgPSBqc1Rlc3RTZXJpYWxpemF0aW9uRm91cnRoVW5yZXN0cmljdGVkRG91Ymxl
QXR0cmlidXRlR2V0dGVyKCpzdGF0ZSwgKnRoaXNPYmplY3QsIHRocm93U2NvcGUpOworICAgIEFT
U0VSVCghdGhyb3dTY29wZS5leGNlcHRpb24oKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0s
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiZm91cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0
cmlidXRlIiksIGZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZVZhbHVlKTsKKworICAg
IGF1dG8gZmlmdGhMb25nQXR0cmlidXRlVmFsdWUgPSBqc1Rlc3RTZXJpYWxpemF0aW9uRmlmdGhM
b25nQXR0cmlidXRlR2V0dGVyKCpzdGF0ZSwgKnRoaXNPYmplY3QsIHRocm93U2NvcGUpOworICAg
IEFTU0VSVCghdGhyb3dTY29wZS5leGNlcHRpb24oKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qo
dm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiZmlmdGhMb25nQXR0cmlidXRlIiksIGZp
ZnRoTG9uZ0F0dHJpYnV0ZVZhbHVlKTsKKworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVz
dWx0KTsKK30KKworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RTZXJpYWxpemF0
aW9uUHJvdG90eXBlRnVuY3Rpb25Ub0pTT04oRXhlY1N0YXRlKiBzdGF0ZSkKK3sKKyAgICByZXR1
cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RTZXJpYWxpemF0aW9uPjo6Y2FsbE9wZXJhdGlvbjxqc1Rl
c3RTZXJpYWxpemF0aW9uUHJvdG90eXBlRnVuY3Rpb25Ub0pTT05DYWxsZXI+KHN0YXRlLCAidG9K
U09OIik7Cit9CisKK2Jvb2wgSlNUZXN0U2VyaWFsaXphdGlvbk93bmVyOjppc1JlYWNoYWJsZUZy
b21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIFVOVVNFRF9QQVJBTShoYW5kbGUpOworICAgIFVO
VVNFRF9QQVJBTSh2aXNpdG9yKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgSlNUZXN0
U2VyaWFsaXphdGlvbk93bmVyOjpmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhh
bmRsZSwgdm9pZCogY29udGV4dCkKK3sKKyAgICBhdXRvKiBqc1Rlc3RTZXJpYWxpemF0aW9uID0g
anNDYXN0PEpTVGVzdFNlcmlhbGl6YXRpb24qPihoYW5kbGUuc2xvdCgpLT5hc0NlbGwoKSk7Cisg
ICAgYXV0byYgd29ybGQgPSAqc3RhdGljX2Nhc3Q8RE9NV3JhcHBlcldvcmxkKj4oY29udGV4dCk7
CisgICAgdW5jYWNoZVdyYXBwZXIod29ybGQsICZqc1Rlc3RTZXJpYWxpemF0aW9uLT53cmFwcGVk
KCksIGpzVGVzdFNlcmlhbGl6YXRpb24pOworfQorCisjaWYgRU5BQkxFKEJJTkRJTkdfSU5URUdS
SVRZKQorI2lmIFBMQVRGT1JNKFdJTikKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0NDgzKQor
ZXh0ZXJuICJDIiB7IGV4dGVybiB2b2lkICgqY29uc3QgX19pZGVudGlmaWVyKCI/P183VGVzdFNl
cmlhbGl6YXRpb25AV2ViQ29yZUBANkJAIilbXSkoKTsgfQorI2Vsc2UKK2V4dGVybiAiQyIgeyBl
eHRlcm4gdm9pZCogX1pUVk43V2ViQ29yZTE3VGVzdFNlcmlhbGl6YXRpb25FW107IH0KKyNlbmRp
ZgorI2VuZGlmCisKK0pTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRl
KiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFRlc3RTZXJpYWxpemF0aW9u
PiYmIGltcGwpCit7CisKKyNpZiBFTkFCTEUoQklORElOR19JTlRFR1JJVFkpCisgICAgdm9pZCog
YWN0dWFsVlRhYmxlUG9pbnRlciA9ICoocmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KGltcGwucHRy
KCkpKTsKKyNpZiBQTEFURk9STShXSU4pCisgICAgdm9pZCogZXhwZWN0ZWRWVGFibGVQb2ludGVy
ID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oX19pZGVudGlmaWVyKCI/P183VGVzdFNlcmlhbGl6
YXRpb25AV2ViQ29yZUBANkJAIikpOworI2Vsc2UKKyAgICB2b2lkKiBleHBlY3RlZFZUYWJsZVBv
aW50ZXIgPSAmX1pUVk43V2ViQ29yZTE3VGVzdFNlcmlhbGl6YXRpb25FWzJdOworI2lmIENPTVBJ
TEVSKENMQU5HKQorICAgIC8vIElmIHRoaXMgZmFpbHMgVGVzdFNlcmlhbGl6YXRpb24gZG9lcyBu
b3QgaGF2ZSBhIHZ0YWJsZSwgc28geW91IG5lZWQgdG8gYWRkIHRoZQorICAgIC8vIEltcGxlbWVu
dGF0aW9uTGFja3NWVGFibGUgYXR0cmlidXRlIHRvIHRoZSBpbnRlcmZhY2UgZGVmaW5pdGlvbgor
ICAgIHN0YXRpY19hc3NlcnQoX19pc19wb2x5bW9ycGhpYyhUZXN0U2VyaWFsaXphdGlvbiksICJU
ZXN0U2VyaWFsaXphdGlvbiBpcyBub3QgcG9seW1vcnBoaWMiKTsKKyNlbmRpZgorI2VuZGlmCisg
ICAgLy8gSWYgeW91IGhpdCB0aGlzIGFzc2VydGlvbiB5b3UgZWl0aGVyIGhhdmUgYSB1c2UgYWZ0
ZXIgZnJlZSBidWcsIG9yCisgICAgLy8gVGVzdFNlcmlhbGl6YXRpb24gaGFzIHN1YmNsYXNzZXMu
IElmIFRlc3RTZXJpYWxpemF0aW9uIGhhcyBzdWJjbGFzc2VzIHRoYXQgZ2V0IHBhc3NlZAorICAg
IC8vIHRvIHRvSlMoKSB3ZSBjdXJyZW50bHkgcmVxdWlyZSBUZXN0U2VyaWFsaXphdGlvbiB5b3Ug
dG8gb3B0IG91dCBvZiBiaW5kaW5nIGhhcmRlbmluZworICAgIC8vIGJ5IGFkZGluZyB0aGUgU2tp
cFZUYWJsZVZhbGlkYXRpb24gYXR0cmlidXRlIHRvIHRoZSBpbnRlcmZhY2UgSURMIGRlZmluaXRp
b24KKyAgICBSRUxFQVNFX0FTU0VSVChhY3R1YWxWVGFibGVQb2ludGVyID09IGV4cGVjdGVkVlRh
YmxlUG9pbnRlcik7CisjZW5kaWYKKyAgICByZXR1cm4gY3JlYXRlV3JhcHBlcjxUZXN0U2VyaWFs
aXphdGlvbj4oZ2xvYmFsT2JqZWN0LCBXVEZNb3ZlKGltcGwpKTsKK30KKworSlNDOjpKU1ZhbHVl
IHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBUZXN0U2VyaWFsaXphdGlvbiYgaW1wbCkKK3sKKyAgICByZXR1cm4gd3JhcChzdGF0ZSwg
Z2xvYmFsT2JqZWN0LCBpbXBsKTsKK30KKworVGVzdFNlcmlhbGl6YXRpb24qIEpTVGVzdFNlcmlh
bGl6YXRpb246OnRvV3JhcHBlZChKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgaWYgKGF1dG8q
IHdyYXBwZXIgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdFNlcmlhbGl6YXRpb24qPih2YWx1ZSkpCisg
ICAgICAgIHJldHVybiAmd3JhcHBlci0+d3JhcHBlZCgpOworICAgIHJldHVybiBudWxscHRyOwor
fQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0U2VyaWFsaXphdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xOWZkYTQ3MmY4N2Vl
OWE5NmU4ZTNmM2Q2MDc1ZjczYmUzMjNjNTBjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb24uaApAQCAt
MCwwICsxLDg5IEBACisvKgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3Bl
biBzb3VyY2UgcHJvamVjdC4KKyAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdl
bmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorCisgICAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
ICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
CisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSAiSlNET01XcmFwcGVyLmgiCisjaW5jbHVkZSAiVGVzdFNlcmlhbGl6YXRpb24uaCIK
KyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBKU1Rlc3RTZXJpYWxpemF0aW9uIDogcHVibGljIEpTRE9NV3JhcHBlcjxUZXN0U2Vy
aWFsaXphdGlvbj4geworcHVibGljOgorICAgIHVzaW5nIEJhc2UgPSBKU0RPTVdyYXBwZXI8VGVz
dFNlcmlhbGl6YXRpb24+OworICAgIHN0YXRpYyBKU1Rlc3RTZXJpYWxpemF0aW9uKiBjcmVhdGUo
SlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgUmVmPFRlc3RTZXJpYWxpemF0aW9uPiYmIGltcGwpCisgICAgeworICAgICAgICBKU1Rlc3RT
ZXJpYWxpemF0aW9uKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVz
dFNlcmlhbGl6YXRpb24+KGdsb2JhbE9iamVjdC0+dm0oKS5oZWFwKSkgSlNUZXN0U2VyaWFsaXph
dGlvbihzdHJ1Y3R1cmUsICpnbG9iYWxPYmplY3QsIFdURk1vdmUoaW1wbCkpOworICAgICAgICBw
dHItPmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdC0+dm0oKSk7CisgICAgICAgIHJldHVybiBw
dHI7CisgICAgfQorCisgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGNyZWF0ZVByb3RvdHlwZShK
U0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOworICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0
KiBwcm90b3R5cGUoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKKyAgICBzdGF0aWMg
VGVzdFNlcmlhbGl6YXRpb24qIHRvV3JhcHBlZChKU0M6OkpTVmFsdWUpOworICAgIHN0YXRpYyB2
b2lkIGRlc3Ryb3koSlNDOjpKU0NlbGwqKTsKKworICAgIERFQ0xBUkVfSU5GTzsKKworICAgIHN0
YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAg
eworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFn
cyksIGluZm8oKSk7CisgICAgfQorCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1
Y3RvcihKU0M6OlZNJiwgY29uc3QgSlNDOjpKU0dsb2JhbE9iamVjdCopOworcHJvdGVjdGVkOgor
ICAgIEpTVGVzdFNlcmlhbGl6YXRpb24oSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVj
dCYsIFJlZjxUZXN0U2VyaWFsaXphdGlvbj4mJik7CisKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9u
KEpTQzo6Vk0mIHZtKQorICAgIHsKKyAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwor
ICAgICAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7CisgICAgfQorCit9OworCitjbGFzcyBK
U1Rlc3RTZXJpYWxpemF0aW9uT3duZXIgOiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxlT3duZXIgewor
cHVibGljOgorICAgIHZpcnR1YWwgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6
OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OlNsb3RWaXNpdG9yJik7
CisgICAgdmlydHVhbCB2b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZv
aWQqIGNvbnRleHQpOworfTsKKworaW5saW5lIEpTQzo6V2Vha0hhbmRsZU93bmVyKiB3cmFwcGVy
T3duZXIoRE9NV3JhcHBlcldvcmxkJiwgVGVzdFNlcmlhbGl6YXRpb24qKQoreworICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxKU1Rlc3RTZXJpYWxpemF0aW9uT3duZXI+IG93bmVyOworICAgIHJl
dHVybiAmb3duZXIuZ2V0KCk7Cit9CisKK2lubGluZSB2b2lkKiB3cmFwcGVyS2V5KFRlc3RTZXJp
YWxpemF0aW9uKiB3cmFwcGFibGVPYmplY3QpCit7CisgICAgcmV0dXJuIHdyYXBwYWJsZU9iamVj
dDsKK30KKworSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9i
amVjdCosIFRlc3RTZXJpYWxpemF0aW9uJik7CitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlND
OjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0
U2VyaWFsaXphdGlvbiogaW1wbCkgeyByZXR1cm4gaW1wbCA/IHRvSlMoc3RhdGUsIGdsb2JhbE9i
amVjdCwgKmltcGwpIDogSlNDOjpqc051bGwoKTsgfQorSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNy
ZWF0ZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFJlZjxUZXN0U2VyaWFs
aXphdGlvbj4mJik7CitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpF
eGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWZQdHI8
VGVzdFNlcmlhbGl6YXRpb24+JiYgaW1wbCkgeyByZXR1cm4gaW1wbCA/IHRvSlNOZXdseUNyZWF0
ZWQoc3RhdGUsIGdsb2JhbE9iamVjdCwgaW1wbC5yZWxlYXNlTm9uTnVsbCgpKSA6IEpTQzo6anNO
dWxsKCk7IH0KKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRz
PFRlc3RTZXJpYWxpemF0aW9uPiB7CisgICAgdXNpbmcgV3JhcHBlckNsYXNzID0gSlNUZXN0U2Vy
aWFsaXphdGlvbjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0T2JqLmlkbCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0T2JqLmlkbAppbmRleCAxMDA4OTg1MWM5
OWE0MmU1ZmFhY2JlMGU5YzhjZWU3YTJiNDU1YWRjLi44YzRmNGZhYWViYTM3NzEwM2NmNGRhY2Uw
MmQ2MTZmMGYyZTJhMTI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVGVzdE9iai5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Rlc3RPYmouaWRsCkBAIC00MTQsOCArNDE0LDcgQEAgZW51bSBUZXN0Q29uZmlkZW5j
ZSB7ICJoaWdoIiwgImtpbmRhLWxvdyIgfTsKIAogICAgIHN0cmluZ2lmaWVyIGF0dHJpYnV0ZSBV
U1ZTdHJpbmcgc3RyaW5naWZpZXJBdHRyaWJ1dGU7CiAKLQotICAgIHNlcmlhbGl6ZXIgPSB7cmVh
ZE9ubHlTdHJpbmdBdHRyLCBjcmVhdGUsIGVudW1BdHRyLCBsb25nQXR0cn07CisgICAgc2VyaWFs
aXplciA9IHtjcmVhdGUsIHJlYWRPbmx5U3RyaW5nQXR0ciwgZW51bUF0dHIsIGxvbmdBdHRyfTsK
IH07CiAKIC8vIFRoZSBmb2xsb3dpbmcgY29tbWVudCBzaG91bGQgbm90IGdlbmVyYXRlIGFueSBj
b2RlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rl
c3RTZXJpYWxpemF0aW9uLmlkbCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9UZXN0U2VyaWFsaXphdGlvbi5pZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTUxYWQ0NGFjY2QxODlmOWZmNzU5
MDQyNThiODlhYzI5MmM0MGU2MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0U2VyaWFsaXphdGlvbi5pZGwKQEAgLTAsMCArMSwzNCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCitpbnRlcmZh
Y2UgVGVzdFNlcmlhbGl6YXRpb24geworICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgICAgICAgICAg
ICAgZmlyc3RTdHJpbmdBdHRyaWJ1dGU7CisgICAgYXR0cmlidXRlIGxvbmcgICAgICAgICAgICAg
ICAgICBzZWNvbmRMb25nQXR0cmlidXRlOworICAgIGF0dHJpYnV0ZSBUZXN0Tm9kZSAgICAgICAg
ICAgICAgdGhpcmRVbnNlcmlhbGl6YWJsZUF0dHJpYnV0ZTsKKyAgICBhdHRyaWJ1dGUgdW5yZXN0
cmljdGVkIGRvdWJsZSAgIGZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZTsKKyAgICBh
dHRyaWJ1dGUgbG9uZyAgICAgICAgICAgICAgICAgIGZpZnRoTG9uZ0F0dHJpYnV0ZTsKKworICAg
IHNlcmlhbGl6ZXIgPSB7IGF0dHJpYnV0ZSB9OworfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9DbGllbnRSZWN0LmlkbCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DbGllbnRSZWN0Lmlk
bAppbmRleCBhYjYyMDJlYWJmODRjOGZiZTA4YmFmOGQyZTY3NmY4ZTdiMjIxOGJiLi5jZDk5NDBh
OWRmMWQxMGFmMjhiNTNkYWE2OGZjNzczM2E1MzUyN2FhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vQ2xpZW50UmVjdC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0NsaWVudFJl
Y3QuaWRsCkBAIC0zNSw3ICszNSw1IEBACiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIHVucmVzdHJp
Y3RlZCBmbG9hdCB3aWR0aDsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5yZXN0cmljdGVkIGZs
b2F0IGhlaWdodDsKIAotICAgIC8vIEZJWE1FOiBzaG91bGQgYmUgc2VyaWFsaXplciA9IHsgYXR0
cmlidXRlIH07Ci0gICAgW0N1c3RvbV0gT2JqZWN0IHRvSlNPTigpOworICAgIHNlcmlhbGl6ZXIg
PSB7IGF0dHJpYnV0ZSB9OwogfTsKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9Q
ZXJmb3JtYW5jZVRpbWluZy5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlVGlt
aW5nLmlkbAppbmRleCA2NTM0OGYyYzRjZDljYzY4ZmE5N2FmYTgwOTI0OTQ2ZTVmNjQzNjUyLi45
MWVjZTVkODJkZTg2MWIxYTg2ODBjYzA5MjJjZjNmZGIyM2I5ZDY0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlVGltaW5nLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL1BlcmZvcm1hbmNlVGltaW5nLmlkbApAQCAtNTQsNyArNTQsNSBAQAogICAgIHJlYWRv
bmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGxvbmcgbG9hZEV2ZW50U3RhcnQ7CiAgICAgcmVh
ZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgbG9uZyBsb2FkRXZlbnRFbmQ7CiAKLSAgICAv
LyBGSVhNRTogU2hvdWxkIGJlIHNlcmlhbGl6ZXIgPSB7IGF0dHJpYnV0ZSB9OwotICAgIFtDdXN0
b21dIE9iamVjdCB0b0pTT04oKTsKKyAgICBzZXJpYWxpemVyID0geyBhdHRyaWJ1dGUgfTsKIH07
Ci0K
</data>
<flag name="review"
          id="314828"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>