<?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>200921</bug_id>
          
          <creation_ts>2019-08-20 08:38:20 -0700</creation_ts>
          <short_desc>Variadic StringBuilder::append does not handle upconverting from 8-bit to 16-bit correctly</short_desc>
          <delta_ts>2019-08-23 11:00:19 -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>Web Template Framework</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P1</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>200862</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1563064</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2019-08-20 08:38:20 -0700</bug_when>
    <thetext>Variadic StringBuilder::append does not handle upconverting from 8-bit to 16-bit correctly</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1563068</commentid>
    <comment_count>1</comment_count>
      <attachid>376771</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2019-08-20 08:45:49 -0700</bug_when>
    <thetext>Created attachment 376771
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1563083</commentid>
    <comment_count>2</comment_count>
      <attachid>376771</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-08-20 09:11:11 -0700</bug_when>
    <thetext>Comment on attachment 376771
Patch

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

&gt; Tools/TestWebKitAPI/Tests/WTF/StringBuilder.cpp:170
&gt; +        builder.append(String(&quot;A&quot;), &quot;B&quot;, bullseye, &quot;&quot;);

Do we want to expect !is8Bit() after here? (Same with other tests.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1563084</commentid>
    <comment_count>3</comment_count>
      <attachid>376771</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-08-20 09:19:14 -0700</bug_when>
    <thetext>Comment on attachment 376771
Patch

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

r=me with a couple comments

&gt; Source/WTF/wtf/text/StringBuilder.cpp:275
&gt; +UChar* StringBuilder::appendUninitialized16(CheckedInt32 requiredLength)

I’m not a fan of these functions names since they don’t actually append.

What does the “uninitialized” refer to here?

Maybe we should have a prefix like “bufferFor...”?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1563089</commentid>
    <comment_count>4</comment_count>
      <attachid>376771</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2019-08-20 09:26:11 -0700</bug_when>
    <thetext>Comment on attachment 376771
Patch

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

Thanks for the review and the comments. I’m going to land as-is but might follow up later on the comments.

&gt;&gt; Source/WTF/wtf/text/StringBuilder.cpp:275
&gt;&gt; +UChar* StringBuilder::appendUninitialized16(CheckedInt32 requiredLength)
&gt; 
&gt; I’m not a fan of these functions names since they don’t actually append.
&gt; 
&gt; What does the “uninitialized” refer to here?
&gt; 
&gt; Maybe we should have a prefix like “bufferFor...”?

The concept of this family of 5 private functions is that they append runs of &quot;uninitialized characters&quot;, multiple LChar/UChar that need to be written to. The caller gets a pointer to the newly appended characters and must initialize them. The analogy is to the String::createUninitialized and StringImpl::createUninitialized functions. I am open to renaming the family of functions; note that this patch only touches 2 of the 5.

I don’t think these should be named &quot;append buffer for uninitialized&quot;, but I do think we could come up with a name that’s an improvement.

&gt;&gt; Tools/TestWebKitAPI/Tests/WTF/StringBuilder.cpp:170
&gt;&gt; +        builder.append(String(&quot;A&quot;), &quot;B&quot;, bullseye, &quot;&quot;);
&gt; 
&gt; Do we want to expect !is8Bit() after here? (Same with other tests.)

I don’t think that is all that helpful. The final check below will check that the string has the correct contents, and that not be possible if it was still 8-bit. The checks that I did add are necessary to make sure that the test is actually testing what it purports to test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1563106</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2019-08-20 09:58:24 -0700</bug_when>
    <thetext>May be a good name is “extend buffer for appending“?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1563115</commentid>
    <comment_count>6</comment_count>
      <attachid>376771</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-08-20 10:14:43 -0700</bug_when>
    <thetext>Comment on attachment 376771
Patch

Clearing flags on attachment: 376771

Committed r248903: &lt;https://trac.webkit.org/changeset/248903&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1563116</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-08-20 10:14:45 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1563117</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-08-20 10:15:20 -0700</bug_when>
    <thetext>&lt;rdar://problem/54516677&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1563127</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2019-08-20 10:26:36 -0700</bug_when>
    <thetext>Oops looks like that JSC failure is real and this needs to be rolled out. Sorry!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1563129</commentid>
    <comment_count>10</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2019-08-20 10:31:24 -0700</bug_when>
    <thetext>Unless someone (Sam, Saam) knows how to fix it and we can roll forward instead. Sadly I can’t work on it during the day today.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1563182</commentid>
    <comment_count>11</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-08-20 12:23:24 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #10)
&gt; Unless someone (Sam, Saam) knows how to fix it and we can roll forward
&gt; instead. Sadly I can’t work on it during the day today.

I can take a look. Going to kick off a build now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1563185</commentid>
    <comment_count>12</comment_count>
      <attachid>376771</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-08-20 12:32:42 -0700</bug_when>
    <thetext>Comment on attachment 376771
Patch

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

&gt; Source/WTF/wtf/text/StringBuilder.cpp:-304
&gt; -    if (!length || hasOverflowed())

maybe this was not ok to remove?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1563189</commentid>
    <comment_count>13</comment_count>
      <attachid>376771</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-08-20 12:38:06 -0700</bug_when>
    <thetext>Comment on attachment 376771
Patch

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

&gt;&gt;&gt; Tools/TestWebKitAPI/Tests/WTF/StringBuilder.cpp:170
&gt;&gt;&gt; +        builder.append(String(&quot;A&quot;), &quot;B&quot;, bullseye, &quot;&quot;);
&gt;&gt; 
&gt;&gt; Do we want to expect !is8Bit() after here? (Same with other tests.)
&gt; 
&gt; I don’t think that is all that helpful. The final check below will check that the string has the correct contents, and that not be possible if it was still 8-bit. The checks that I did add are necessary to make sure that the test is actually testing what it purports to test.

I don&apos;t think it&apos;s critical, but I think it&apos;s nice when reading testing code like this that all the expectations are explicitly checked, even if they may be redundant. I like to read testing code which asserts that all the invariants are held explicitly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1563192</commentid>
    <comment_count>14</comment_count>
      <attachid>376771</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-08-20 12:42:19 -0700</bug_when>
    <thetext>Comment on attachment 376771
Patch

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

&gt;&gt; Source/WTF/wtf/text/StringBuilder.cpp:-304
&gt;&gt; -    if (!length || hasOverflowed())
&gt; 
&gt; maybe this was not ok to remove?

Yeah, these two &quot;hasOverflowed()&quot; checks were not valid to remove. I haven&apos;t dug into why, but I&apos;ll revert their removal.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1563199</commentid>
    <comment_count>15</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-08-20 12:46:04 -0700</bug_when>
    <thetext>landed JSC tests fix in:
https://trac.webkit.org/changeset/248913/webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1563200</commentid>
    <comment_count>16</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-08-20 12:46:16 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #5)
&gt; May be a good name is “extend buffer for appending“?

I like this name more.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1563519</commentid>
    <comment_count>17</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2019-08-21 09:33:51 -0700</bug_when>
    <thetext>Thanks for your help, Saam. I&apos;ll follow up on the naming changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1564509</commentid>
    <comment_count>18</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2019-08-23 11:00:19 -0700</bug_when>
    <thetext>(In reply to Saam Barati from comment #13)
&gt; I don&apos;t think it&apos;s critical, but I think it&apos;s nice when reading testing code
&gt; like this that all the expectations are explicitly checked, even if they may
&gt; be redundant. I like to read testing code which asserts that all the
&gt; invariants are held explicitly.

I’ll consider that, but I’m not convinced it would make the tests better. It would make them brittle to changes that are observable that are not important, and there are many invariants we could assert on the string builder before and after each operation.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>376771</attachid>
            <date>2019-08-20 08:45:49 -0700</date>
            <delta_ts>2019-08-20 10:14:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-200921-20190820084545.patch</filename>
            <type>text/plain</type>
            <size>26163</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ4ODk5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDM1NDA0NTQ1ZGQ2ZGIyM2IxZTEzM2Ey
NDRlNWU5MWQ0N2E5Yjk2YTYuLjkxM2Y2ZTBjMzI4NWIzMmQ5YzliN2QzMjhkMTVhNWQ3OGM0ZTZj
MTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjkgQEAKKzIwMTktMDgtMjAgIERhcmluIEFkbGVyICA8ZGFyaW5A
YXBwbGUuY29tPgorCisgICAgICAgIFZhcmlhZGljIFN0cmluZ0J1aWxkZXI6OmFwcGVuZCBkb2Vz
IG5vdCBoYW5kbGUgdXBjb252ZXJ0aW5nIGZyb20gOC1iaXQgdG8gMTYtYml0IGNvcnJlY3RseQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAwOTIxCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3dGYvdGV4
dC9TdHJpbmdCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6YXBwZW5k
VW5pbml0aWFsaXplZDgpOiBSZW5hbWVkIGZyb20KKyAgICAgICAgYXBwZW5kVW5pbml0aWFsaXpl
ZFdpdGhvdXRPdmVyZmxvd0NoZWNrRm9yTENoYXIgYW5kIG1vdmVkIHRoZSBsZW5ndGggb3ZlcmZs
b3cKKyAgICAgICAgY2hlY2sgaW4gaGVyZSB0byBjdXQgZG93biBvbiB1bm5lY2Vzc2FyeSBpbmxp
bmluZyBhbmQgY29kZSBzaXplLgorICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjphcHBlbmRV
bmluaXRpYWxpemVkMTYpOiBSZW5hbWVkIGZyb20KKyAgICAgICAgYXBwZW5kVW5pbml0aWFsaXpl
ZFdpdGhvdXRPdmVyZmxvd0NoZWNrRm9yVUNoYXIsIG1vdmVkIHRoZSBsZW5ndGggb3ZlcmZsb3cg
Y2hlY2sKKyAgICAgICAgaW4gaGVyZSwgYW5kIG1vdmVkIHRoZSBuZWNlc3NhcnkgdXBjb252ZXJz
aW9uIGNvZGUgZnJvbSB0aGUgY29uc3QgVUNoYXIqIG92ZXJsb2FkIG9mCisgICAgICAgIHRoZSBh
cHBlbmRDaGFyYWN0ZXJzIGZ1bmN0aW9uLgorICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjph
cHBlbmRDaGFyYWN0ZXJzKTogUmVtb3ZlZCB1bm5lZWRlZCAibGVuZ3RoIGhhcyBhbHJlYWR5IG92
ZXJmbG93ZWQiCisgICAgICAgIGNoZWNrIGF0IHRoZSBzdGFydCBvZiB0aGUgZnVuY3Rpb24gc2lu
Y2UgdGhlIGNvZGUgaW4gdGhlIGZ1bmN0aW9uIGFscmVhZHkgaGFuZGxlcyB0aGF0CisgICAgICAg
IGNhc2UgY29ycmVjdGx5LiBSZWZhY3RvcmVkIHRoZSBjb25zdCBVQ2hhciogb3ZlcmxvYWQgdG8g
dXNlIHRoZSBuZXcgYXBwZW5kQ2hhcmFjdGVyczE2CisgICAgICAgIGZ1bmN0aW9uIHNvIGl0IGNh
biBzaGFyZSBtb3JlIGNvZGUgd2l0aCBTdHJpbmdCdWlsZGVyOjphcHBlbmRGcm9tQWRhcHRlcnMu
CisKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg6CisgICAgICAgIChXVEY6OlN0
cmluZ0J1aWxkZXI6OmFwcGVuZEZyb21BZGFwdGVycyk6IFVwZGF0ZWQgdGhlIGZ1bmN0aW9uIG5h
bWVzIGZvciB0aGUKKyAgICAgICAgdHdvIGFwcGVuZFVuaW5pdGlhbGl6ZWQgZnVuY3Rpb25zLCB3
aGljaCBub3cgZG8gYSBiaXQgbW9yZSB0aGFuIGJlZm9yZS4gUmVtb3ZlZCB0aGUKKyAgICAgICAg
b3ZlcmZsb3cgY2hlY2sgc2luY2UgdGhlIGFwcGVuZFVuaW5pdGlhbGl6ZWQ4LzE2IGZ1bmN0aW9u
cyBub3cgaGFuZGxlIHRoYXQ7IGJldHRlciB0bworICAgICAgICBub3QgbWFrZSB0aGUgaW5saW5l
ZCBjb2RlIGxhcmdlciB0byBoYW5kbGUgYSBmYWlsdXJlIGNhc2UuCisKIDIwMTktMDgtMTkgIFNh
bSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgogCiAgICAgICAgIFtXSExTTF0gTWFrZSBnZW5l
cmF0ZWQgTWV0YWwgY29kZSBzaG91bGQgYmUgaW5kZW50ZWQgcHJvcGVybHkgdG8gZWFzZSByZWFk
aW5nIHdoaWxlIGRlYnVnZ2luZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJp
bmdCdWlsZGVyLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQnVpbGRlci5jcHAKaW5k
ZXggNDg3OTA5MzU0MDk0ZDNkZmUwZjAzYjc2M2VmYzA5ZTM5NzJlZDg1Mi4uNmMyNWUwNDAyOWY5
N2YyODg5NDUwODFlODE4NWE1ZDU2YTFlYjE5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYv
dGV4dC9TdHJpbmdCdWlsZGVyLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1
aWxkZXIuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMC0yMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMC0y
MDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAx
MiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAt
MjU5LDE4ICsyNTksNDIgQEAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gQUxXQVlT
X0lOTElORSBDaGFyYWN0ZXJUeXBlKiBTdHJpbmdCdWlsZGVyOjphcHAKICAgICAgICAgbV9sZW5n
dGggPSByZXF1aXJlZExlbmd0aDsKICAgICAgICAgcmV0dXJuIGdldEJ1ZmZlckNoYXJhY3RlcnM8
Q2hhcmFjdGVyVHlwZT4oKSArIGN1cnJlbnRMZW5ndGg7CiAgICAgfQotICAgIAorCiAgICAgcmV0
dXJuIGFwcGVuZFVuaW5pdGlhbGl6ZWRTbG93PENoYXJhY3RlclR5cGU+KHJlcXVpcmVkTGVuZ3Ro
LnVuc2FmZUdldCgpKTsKIH0KIAotVUNoYXIqIFN0cmluZ0J1aWxkZXI6OmFwcGVuZFVuaW5pdGlh
bGl6ZWRXaXRob3V0T3ZlcmZsb3dDaGVja0ZvclVDaGFyKENoZWNrZWRJbnQzMiByZXF1aXJlZExl
bmd0aCkKK0xDaGFyKiBTdHJpbmdCdWlsZGVyOjphcHBlbmRVbmluaXRpYWxpemVkOChDaGVja2Vk
SW50MzIgcmVxdWlyZWRMZW5ndGgpCiB7Ci0gICAgcmV0dXJuIGFwcGVuZFVuaW5pdGlhbGl6ZWRX
aXRob3V0T3ZlcmZsb3dDaGVjazxVQ2hhcj4ocmVxdWlyZWRMZW5ndGgpOworICAgIGlmIChVTkxJ
S0VMWShyZXF1aXJlZExlbmd0aC5oYXNPdmVyZmxvd2VkKCkpKSB7CisgICAgICAgIGRpZE92ZXJm
bG93KCk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICByZXR1cm4gYXBwZW5k
VW5pbml0aWFsaXplZFdpdGhvdXRPdmVyZmxvd0NoZWNrPExDaGFyPihyZXF1aXJlZExlbmd0aCk7
CiB9CiAKLUxDaGFyKiBTdHJpbmdCdWlsZGVyOjphcHBlbmRVbmluaXRpYWxpemVkV2l0aG91dE92
ZXJmbG93Q2hlY2tGb3JMQ2hhcihDaGVja2VkSW50MzIgcmVxdWlyZWRMZW5ndGgpCitVQ2hhciog
U3RyaW5nQnVpbGRlcjo6YXBwZW5kVW5pbml0aWFsaXplZDE2KENoZWNrZWRJbnQzMiByZXF1aXJl
ZExlbmd0aCkKIHsKLSAgICByZXR1cm4gYXBwZW5kVW5pbml0aWFsaXplZFdpdGhvdXRPdmVyZmxv
d0NoZWNrPExDaGFyPihyZXF1aXJlZExlbmd0aCk7CisgICAgaWYgKFVOTElLRUxZKHJlcXVpcmVk
TGVuZ3RoLmhhc092ZXJmbG93ZWQoKSkpIHsKKyAgICAgICAgZGlkT3ZlcmZsb3coKTsKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIGlmIChtX2lzOEJpdCkgeworICAgICAgICBj
b25zdCBMQ2hhciogY2hhcmFjdGVyczsKKyAgICAgICAgaWYgKG1fYnVmZmVyKSB7CisgICAgICAg
ICAgICBBU1NFUlQobV9idWZmZXItPmxlbmd0aCgpID49IG1fbGVuZ3RoLnVuc2FmZUdldDx1bnNp
Z25lZD4oKSk7CisgICAgICAgICAgICBjaGFyYWN0ZXJzID0gbV9idWZmZXItPmNoYXJhY3RlcnM4
KCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQobV9zdHJpbmcubGVuZ3Ro
KCkgPT0gbV9sZW5ndGgudW5zYWZlR2V0PHVuc2lnbmVkPigpKTsKKyAgICAgICAgICAgIGNoYXJh
Y3RlcnMgPSBtX3N0cmluZy5pc051bGwoKSA/IG51bGxwdHIgOiBtX3N0cmluZy5jaGFyYWN0ZXJz
OCgpOworICAgICAgICB9CisgICAgICAgIGFsbG9jYXRlQnVmZmVyVXBDb252ZXJ0KGNoYXJhY3Rl
cnMsIGV4cGFuZGVkQ2FwYWNpdHkoY2FwYWNpdHkoKSwgcmVxdWlyZWRMZW5ndGgudW5zYWZlR2V0
KCkpKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKGhhc092ZXJmbG93ZWQoKSkpCisgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgdW5zaWduZWQgb2xkTGVuZ3RoID0gbV9sZW5ndGgu
dW5zYWZlR2V0KCk7CisgICAgICAgIG1fbGVuZ3RoID0gcmVxdWlyZWRMZW5ndGgudW5zYWZlR2V0
KCk7CisgICAgICAgIHJldHVybiBtX2J1ZmZlckNoYXJhY3RlcnMxNiArIG9sZExlbmd0aDsKKyAg
ICB9CisgICAgcmV0dXJuIGFwcGVuZFVuaW5pdGlhbGl6ZWRXaXRob3V0T3ZlcmZsb3dDaGVjazxV
Q2hhcj4ocmVxdWlyZWRMZW5ndGgpOwogfQogCiAvLyBNYWtlICdyZXF1aXJlZExlbmd0aCcgY2Fw
YWNpdHkgYmUgYXZhaWxhYmxlIGluIG1fYnVmZmVyLCB1cGRhdGUgbV9zdHJpbmcgJiBtX2xlbmd0
aCwKQEAgLTMwMSw1MCArMzI1LDI5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+
IENoYXJhY3RlclR5cGUqIFN0cmluZ0J1aWxkZXI6OmFwcGVuZFVuaW5pdGlhbGl6CiAKIHZvaWQg
U3RyaW5nQnVpbGRlcjo6YXBwZW5kQ2hhcmFjdGVycyhjb25zdCBVQ2hhciogY2hhcmFjdGVycywg
dW5zaWduZWQgbGVuZ3RoKQogewotICAgIGlmICghbGVuZ3RoIHx8IGhhc092ZXJmbG93ZWQoKSkK
KyAgICBpZiAoIWxlbmd0aCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgQVNTRVJUKGNoYXJhY3Rl
cnMpOwogCi0gICAgaWYgKG1faXM4Qml0KSB7Ci0gICAgICAgIGlmIChsZW5ndGggPT0gMSAmJiBp
c0xhdGluMShjaGFyYWN0ZXJzWzBdKSkgewotICAgICAgICAgICAgYXBwZW5kKHN0YXRpY19jYXN0
PExDaGFyPihjaGFyYWN0ZXJzWzBdKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LQotICAgICAgICAvLyBGSVhNRTogU2hvdWxkIHdlIG9wdGltaXplIG1lbW9yeSBieSBrZWVwaW5n
IHRoZSBzdHJpbmcgOC1iaXQgd2hlbiBhbGwgdGhlIGNoYXJhY3RlcnMgYXJlIExhdGluLTE/Cisg
ICAgaWYgKG1faXM4Qml0ICYmIGxlbmd0aCA9PSAxICYmIGlzTGF0aW4xKGNoYXJhY3RlcnNbMF0p
KSB7CisgICAgICAgIGFwcGVuZChzdGF0aWNfY2FzdDxMQ2hhcj4oY2hhcmFjdGVyc1swXSkpOwor
ICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgbmV3IHNp
emUgb2YgdGhlIGJ1aWxkZXIgYWZ0ZXIgYXBwZW5kaW5nLgotICAgICAgICBDaGVja2VkSW50MzIg
cmVxdWlyZWRMZW5ndGggPSBtX2xlbmd0aCArIGxlbmd0aDsKLSAgICAgICAgaWYgKHJlcXVpcmVk
TGVuZ3RoLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgICAgIHJldHVybiBkaWRPdmVyZmxvdygp
OwotICAgICAgICAKLSAgICAgICAgaWYgKG1fYnVmZmVyKSB7Ci0gICAgICAgICAgICAvLyBJZiB0
aGUgYnVmZmVyIGlzIHZhbGlkIGl0IG11c3QgYmUgYXQgbGVhc3QgYXMgbG9uZyBhcyB0aGUgY3Vy
cmVudCBidWlsZGVyIGNvbnRlbnRzIQotICAgICAgICAgICAgQVNTRVJUKG1fYnVmZmVyLT5sZW5n
dGgoKSA+PSBtX2xlbmd0aC51bnNhZmVHZXQ8dW5zaWduZWQ+KCkpOwotICAgICAgICAgICAgYWxs
b2NhdGVCdWZmZXJVcENvbnZlcnQobV9idWZmZXItPmNoYXJhY3RlcnM4KCksIGV4cGFuZGVkQ2Fw
YWNpdHkoY2FwYWNpdHkoKSwgcmVxdWlyZWRMZW5ndGgudW5zYWZlR2V0KCkpKTsKLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VSVChtX3N0cmluZy5sZW5ndGgoKSA9PSBtX2xlbmd0
aC51bnNhZmVHZXQ8dW5zaWduZWQ+KCkpOwotICAgICAgICAgICAgYWxsb2NhdGVCdWZmZXJVcENv
bnZlcnQobV9zdHJpbmcuaXNOdWxsKCkgPyBudWxscHRyIDogbV9zdHJpbmcuY2hhcmFjdGVyczgo
KSwgZXhwYW5kZWRDYXBhY2l0eShjYXBhY2l0eSgpLCByZXF1aXJlZExlbmd0aC51bnNhZmVHZXQo
KSkpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChVTkxJS0VMWShoYXNPdmVyZmxvd2VkKCkpKQot
ICAgICAgICAgICAgcmV0dXJuOworICAgIC8vIEZJWE1FOiBTaG91bGQgd2Ugb3B0aW1pemUgbWVt
b3J5IGJ5IGtlZXBpbmcgdGhlIHN0cmluZyA4LWJpdCB3aGVuIGFsbCB0aGUgY2hhcmFjdGVycyBh
cmUgTGF0aW4tMT8KIAotICAgICAgICBtZW1jcHkobV9idWZmZXJDaGFyYWN0ZXJzMTYgKyBtX2xl
bmd0aC51bnNhZmVHZXQ8dW5zaWduZWQ+KCksIGNoYXJhY3RlcnMsIHN0YXRpY19jYXN0PHNpemVf
dD4obGVuZ3RoKSAqIHNpemVvZihVQ2hhcikpOwotICAgICAgICBtX2xlbmd0aCA9IHJlcXVpcmVk
TGVuZ3RoOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFVDaGFyKiBkZXN0ID0gYXBwZW5kVW5pbml0
aWFsaXplZDxVQ2hhcj4obGVuZ3RoKTsKLSAgICAgICAgaWYgKCFkZXN0KQotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICBtZW1jcHkoZGVzdCwgY2hhcmFjdGVycywgc3RhdGljX2Nhc3Q8c2l6
ZV90PihsZW5ndGgpICogc2l6ZW9mKFVDaGFyKSk7Ci0gICAgfQorICAgIFVDaGFyKiBkZXN0aW5h
dGlvbiA9IGFwcGVuZFVuaW5pdGlhbGl6ZWQxNihtX2xlbmd0aCArIGxlbmd0aCk7CisgICAgaWYg
KFVOTElLRUxZKCFkZXN0aW5hdGlvbikpCisgICAgICAgIHJldHVybjsKKyAgICBzdGQ6Om1lbWNw
eShkZXN0aW5hdGlvbiwgY2hhcmFjdGVycywgc3RhdGljX2Nhc3Q8c2l6ZV90PihsZW5ndGgpICog
c2l6ZW9mKFVDaGFyKSk7CiAgICAgQVNTRVJUKCFoYXNPdmVyZmxvd2VkKCkpOwogICAgIEFTU0VS
VChtX2J1ZmZlci0+bGVuZ3RoKCkgPj0gbV9sZW5ndGgudW5zYWZlR2V0PHVuc2lnbmVkPigpKTsK
IH0KIAogdm9pZCBTdHJpbmdCdWlsZGVyOjphcHBlbmRDaGFyYWN0ZXJzKGNvbnN0IExDaGFyKiBj
aGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCiB7Ci0gICAgaWYgKCFsZW5ndGggfHwgaGFzT3Zl
cmZsb3dlZCgpKQorICAgIGlmICghbGVuZ3RoKQogICAgICAgICByZXR1cm47CiAKICAgICBBU1NF
UlQoY2hhcmFjdGVycyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1
aWxkZXIuaCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQnVpbGRlci5oCmluZGV4IDZkMDA5
MjhjNjQ3OTI5M2ZlOWFjMTI2YTA2ZWExOThlNmY3NzliZWUuLmUzOTdhNTRiMmE1N2FhMjdmZTU1
MjQ3ZWZiMzIxNTU4MzA0N2FjYWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3Ry
aW5nQnVpbGRlci5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQnVpbGRlci5oCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMzYwLDEwICszNjAs
OSBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IEFMV0FZ
U19JTkxJTkUgQ2hhcmFjdGVyVHlwZSogYXBwZW5kVW5pbml0aWFsaXplZCh1bnNpZ25lZCBhZGRp
dGlvbmFsTGVuZ3RoKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBBTFdB
WVNfSU5MSU5FIENoYXJhY3RlclR5cGUqIGFwcGVuZFVuaW5pdGlhbGl6ZWRXaXRob3V0T3ZlcmZs
b3dDaGVjayhDaGVja2VkSW50MzIgcmVxdWlyZWRMZW5ndGgpOwogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIENoYXJhY3RlclR5cGU+IENoYXJhY3RlclR5cGUqIGFwcGVuZFVuaW5pdGlhbGl6ZWRTbG93
KHVuc2lnbmVkIHJlcXVpcmVkTGVuZ3RoKTsKLSAgICAKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUg
VUNoYXIqIGFwcGVuZFVuaW5pdGlhbGl6ZWRXaXRob3V0T3ZlcmZsb3dDaGVja0ZvclVDaGFyKENo
ZWNrZWRJbnQzMiByZXF1aXJlZExlbmd0aCk7Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIExDaGFy
KiBhcHBlbmRVbmluaXRpYWxpemVkV2l0aG91dE92ZXJmbG93Q2hlY2tGb3JMQ2hhcihDaGVja2Vk
SW50MzIgcmVxdWlyZWRMZW5ndGgpOwotICAgIAorICAgIFdURl9FWFBPUlRfUFJJVkFURSBMQ2hh
ciogYXBwZW5kVW5pbml0aWFsaXplZDgoQ2hlY2tlZEludDMyIHJlcXVpcmVkTGVuZ3RoKTsKKyAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgVUNoYXIqIGFwcGVuZFVuaW5pdGlhbGl6ZWQxNihDaGVja2Vk
SW50MzIgcmVxdWlyZWRMZW5ndGgpOworCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVy
VHlwZT4gQUxXQVlTX0lOTElORSBDaGFyYWN0ZXJUeXBlKiBnZXRCdWZmZXJDaGFyYWN0ZXJzKCk7
CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgcmVpZnlTdHJpbmcoKSBjb25zdDsKIApAQCAt
NDAxLDI1ICs0MDAsMjAgQEAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gU3RyaW5nVHlwZUFkYXB0ZXJz
Pgogdm9pZCBTdHJpbmdCdWlsZGVyOjphcHBlbmRGcm9tQWRhcHRlcnMoU3RyaW5nVHlwZUFkYXB0
ZXJzLi4uIGFkYXB0ZXJzKQogewogICAgIGF1dG8gcmVxdWlyZWRMZW5ndGggPSBjaGVja2VkU3Vt
PGludDMyX3Q+KG1fbGVuZ3RoLCBhZGFwdGVycy5sZW5ndGgoKS4uLik7Ci0gICAgaWYgKHJlcXVp
cmVkTGVuZ3RoLmhhc092ZXJmbG93ZWQoKSkgewotICAgICAgICBkaWRPdmVyZmxvdygpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgaWYgKG1faXM4Qml0ICYmIGFyZThCaXQoYWRhcHRl
cnMuLi4pKSB7Ci0gICAgICAgIExDaGFyKiBkZXN0ID0gYXBwZW5kVW5pbml0aWFsaXplZFdpdGhv
dXRPdmVyZmxvd0NoZWNrRm9yTENoYXIocmVxdWlyZWRMZW5ndGgpOwotICAgICAgICBpZiAoIWRl
c3QpIHsKKyAgICAgICAgTENoYXIqIGRlc3RpbmF0aW9uID0gYXBwZW5kVW5pbml0aWFsaXplZDgo
cmVxdWlyZWRMZW5ndGgpOworICAgICAgICBpZiAoIWRlc3RpbmF0aW9uKSB7CiAgICAgICAgICAg
ICBBU1NFUlQoaGFzT3ZlcmZsb3dlZCgpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQotICAgICAgICBzdHJpbmdUeXBlQWRhcHRlckFjY3VtdWxhdG9yKGRlc3QsIGFkYXB0ZXJzLi4u
KTsKKyAgICAgICAgc3RyaW5nVHlwZUFkYXB0ZXJBY2N1bXVsYXRvcihkZXN0aW5hdGlvbiwgYWRh
cHRlcnMuLi4pOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIFVDaGFyKiBkZXN0ID0gYXBwZW5kVW5p
bml0aWFsaXplZFdpdGhvdXRPdmVyZmxvd0NoZWNrRm9yVUNoYXIocmVxdWlyZWRMZW5ndGgpOwot
ICAgICAgICBpZiAoIWRlc3QpIHsKKyAgICAgICAgVUNoYXIqIGRlc3RpbmF0aW9uID0gYXBwZW5k
VW5pbml0aWFsaXplZDE2KHJlcXVpcmVkTGVuZ3RoKTsKKyAgICAgICAgaWYgKCFkZXN0aW5hdGlv
bikgewogICAgICAgICAgICAgQVNTRVJUKGhhc092ZXJmbG93ZWQoKSk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgc3RyaW5nVHlwZUFkYXB0ZXJBY2N1bXVsYXRvcihk
ZXN0LCBhZGFwdGVycy4uLik7CisgICAgICAgIHN0cmluZ1R5cGVBZGFwdGVyQWNjdW11bGF0b3Io
ZGVzdGluYXRpb24sIGFkYXB0ZXJzLi4uKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1Rvb2xz
L0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA1NDNiNjAyZmZlYzk5OWQ1NTI3NzEx
ZWEyZGZkNWZkM2Y1MGM1NmY5Li4yMTk5YTk2NGZhYjY5NWU2MTMxZjFhOWU1YWRlODg2Mjk4OTM2
MTUwIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTUgQEAKKzIwMTktMDgtMjAgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29t
PgorCisgICAgICAgIFZhcmlhZGljIFN0cmluZ0J1aWxkZXI6OmFwcGVuZCBkb2VzIG5vdCBoYW5k
bGUgdXBjb252ZXJ0aW5nIGZyb20gOC1iaXQgdG8gMTYtYml0IGNvcnJlY3RseQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAwOTIxCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rl
c3RzL1dURi9TdHJpbmdCdWlsZGVyLmNwcDoKKyAgICAgICAgQ2hhbmdlZCB0ZXN0cyB0byB1c2Ug
RVhQRUNUIG1hY3JvcyBpbnN0ZWFkIG9mIEFTU0VSVCBtYWNyb3Mgc2luY2Ugd2UgZG9uJ3QKKyAg
ICAgICAgbmVlZCB0byBhYm9ydCBhZnRlciB0aGUgZmlyc3QgZmFpbHVyZS4gQWRkZWQgdGhyZWUg
bmV3IHRlc3RzIHRvIHRoZSBWYXJpYWRpY0FwcGVuZAorICAgICAgICB0ZXN0IHRvIGNvdmVyIHZh
cmlvdXMgY2FzZXMgb2YgdXBjb252ZXJ0aW5nIGZyb20gOC1iaXQgdG8gMTYtYml0IHN0cmluZ3Mu
CisKIDIwMTktMDgtMTkgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAg
ICAgICBbSlNDXSBPU1IgZW50cnkgdG8gV2FzbSBPTUcKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV1RGL1N0cmluZ0J1aWxkZXIuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XVEYvU3RyaW5nQnVpbGRlci5jcHAKaW5kZXggZDQ4MDk1NTQ0ZWU4ZDA1YzIyYmI2
MDJmNmVhYjZmZDQ0ZTU4MDUzMS4uZmE0YzU5YmM5MGQyNjQxYzVhYzFiZjA0Y2RiMzJlZTMxZDBh
OWFhYyAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU3RyaW5nQnVp
bGRlci5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU3RyaW5nQnVpbGRl
ci5jcHAKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQpAQCAtMzIsNiArMzIsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldU
RlN0cmluZ1V0aWxpdGllcy5oIgogCisjaW5jbHVkZSA8d3RmL3VuaWNvZGUvQ2hhcmFjdGVyTmFt
ZXMuaD4KKwogbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgewogCiBzdGF0aWMgdm9pZCBleHBlY3RC
dWlsZGVyQ29udGVudChjb25zdCBTdHJpbmcmIGV4cGVjdGVkLCBjb25zdCBTdHJpbmdCdWlsZGVy
JiBidWlsZGVyKQpAQCAtODUsMTggKzg3LDE4IEBAIFRFU1QoU3RyaW5nQnVpbGRlclRlc3QsIEFw
cGVuZCkKICAgICBidWlsZGVyMi5hcHBlbmQoInh5eiIpOwogICAgIGNvbnN0IExDaGFyKiBjaGFy
YWN0ZXJzID0gYnVpbGRlcjIuY2hhcmFjdGVyczgoKTsKICAgICBidWlsZGVyMi5hcHBlbmQoIjAx
MjM0NTY3ODkiKTsKLSAgICBBU1NFUlRfRVEoY2hhcmFjdGVycywgYnVpbGRlcjIuY2hhcmFjdGVy
czgoKSk7CisgICAgRVhQRUNUX0VRKGNoYXJhY3RlcnMsIGJ1aWxkZXIyLmNoYXJhY3RlcnM4KCkp
OwogICAgIGJ1aWxkZXIyLnRvU3RyaW5nUHJlc2VydmVDYXBhY2l0eSgpOyAvLyBUZXN0IGFmdGVy
IHJlaWZ5U3RyaW5nIHdpdGggYnVmZmVyIHByZXNlcnZlZC4KICAgICBidWlsZGVyMi5hcHBlbmQo
ImFiY2QiKTsKLSAgICBBU1NFUlRfRVEoY2hhcmFjdGVycywgYnVpbGRlcjIuY2hhcmFjdGVyczgo
KSk7CisgICAgRVhQRUNUX0VRKGNoYXJhY3RlcnMsIGJ1aWxkZXIyLmNoYXJhY3RlcnM4KCkpOwog
CiAgICAgLy8gVGVzdCBhcHBlbmRpbmcgVUNoYXIzMiBjaGFyYWN0ZXJzIHRvIFN0cmluZ0J1aWxk
ZXIuCiAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyRm9yVUNoYXIzMkFwcGVuZDsKICAgICBVQ2hh
cjMyIGZyYWt0dXJBQ2hhciA9IDB4MUQ1MDQ7CiAgICAgYnVpbGRlckZvclVDaGFyMzJBcHBlbmQu
YXBwZW5kQ2hhcmFjdGVyKGZyYWt0dXJBQ2hhcik7IC8vIFRoZSBmcmFrdHVyIEEgaXMgbm90IGlu
IHRoZSBCTVAsIHNvIGl0J3MgdHdvIFVURi0xNiBjb2RlIHVuaXRzIGxvbmcuCi0gICAgQVNTRVJU
X0VRKDJVLCBidWlsZGVyRm9yVUNoYXIzMkFwcGVuZC5sZW5ndGgoKSk7CisgICAgRVhQRUNUX0VR
KDJVLCBidWlsZGVyRm9yVUNoYXIzMkFwcGVuZC5sZW5ndGgoKSk7CiAgICAgYnVpbGRlckZvclVD
aGFyMzJBcHBlbmQuYXBwZW5kQ2hhcmFjdGVyKHN0YXRpY19jYXN0PFVDaGFyMzI+KCdBJykpOwot
ICAgIEFTU0VSVF9FUSgzVSwgYnVpbGRlckZvclVDaGFyMzJBcHBlbmQubGVuZ3RoKCkpOworICAg
IEVYUEVDVF9FUSgzVSwgYnVpbGRlckZvclVDaGFyMzJBcHBlbmQubGVuZ3RoKCkpOwogICAgIGNv
bnN0IFVDaGFyIHJlc3VsdEFycmF5W10gPSB7IFUxNl9MRUFEKGZyYWt0dXJBQ2hhciksIFUxNl9U
UkFJTChmcmFrdHVyQUNoYXIpLCAnQScgfTsKICAgICBleHBlY3RCdWlsZGVyQ29udGVudChTdHJp
bmcocmVzdWx0QXJyYXksIFdURl9BUlJBWV9MRU5HVEgocmVzdWx0QXJyYXkpKSwgYnVpbGRlckZv
clVDaGFyMzJBcHBlbmQpOwogICAgIHsKQEAgLTEwNSwxMiArMTA3LDEyIEBAIFRFU1QoU3RyaW5n
QnVpbGRlclRlc3QsIEFwcGVuZCkKICAgICAgICAgVUNoYXIzMiBmcmFrdHVyQUNoYXIgPSAweDFE
NTA0OwogICAgICAgICBjb25zdCBVQ2hhciBkYXRhW10gPSB7IFUxNl9MRUFEKGZyYWt0dXJBQ2hh
ciksIFUxNl9UUkFJTChmcmFrdHVyQUNoYXIpIH07CiAgICAgICAgIGJ1aWxkZXIyLmFwcGVuZENo
YXJhY3RlcnMoZGF0YSwgMik7Ci0gICAgICAgIEFTU0VSVF9FUSgyVSwgYnVpbGRlcjIubGVuZ3Ro
KCkpOworICAgICAgICBFWFBFQ1RfRVEoMlUsIGJ1aWxkZXIyLmxlbmd0aCgpKTsKICAgICAgICAg
U3RyaW5nIHJlc3VsdDIgPSBidWlsZGVyMi50b1N0cmluZygpOwotICAgICAgICBBU1NFUlRfRVEo
MlUsIHJlc3VsdDIubGVuZ3RoKCkpOworICAgICAgICBFWFBFQ1RfRVEoMlUsIHJlc3VsdDIubGVu
Z3RoKCkpOwogICAgICAgICBidWlsZGVyLmFwcGVuZChidWlsZGVyMik7CiAgICAgICAgIGJ1aWxk
ZXIuYXBwZW5kQ2hhcmFjdGVycyhkYXRhLCAyKTsKLSAgICAgICAgQVNTRVJUX0VRKDRVLCBidWls
ZGVyLmxlbmd0aCgpKTsKKyAgICAgICAgRVhQRUNUX0VRKDRVLCBidWlsZGVyLmxlbmd0aCgpKTsK
ICAgICAgICAgY29uc3QgVUNoYXIgcmVzdWx0QXJyYXlbXSA9IHsgVTE2X0xFQUQoZnJha3R1ckFD
aGFyKSwgVTE2X1RSQUlMKGZyYWt0dXJBQ2hhciksIFUxNl9MRUFEKGZyYWt0dXJBQ2hhciksIFUx
Nl9UUkFJTChmcmFrdHVyQUNoYXIpIH07CiAgICAgICAgIGV4cGVjdEJ1aWxkZXJDb250ZW50KFN0
cmluZyhyZXN1bHRBcnJheSwgV1RGX0FSUkFZX0xFTkdUSChyZXN1bHRBcnJheSkpLCBidWlsZGVy
KTsKICAgICB9CkBAIC0xMzcsNiArMTM5LDM3IEBAIFRFU1QoU3RyaW5nQnVpbGRlclRlc3QsIFZh
cmlhZGljQXBwZW5kKQogICAgICAgICBidWlsZGVyLmFwcGVuZChTdHJpbmcoIkEiKSwgIkIiLCAn
QycsICIiKTsKICAgICAgICAgZXhwZWN0QnVpbGRlckNvbnRlbnQoIjAxMjM0NTY3ODlhYmNkZUFC
QyIsIGJ1aWxkZXIpOwogICAgIH0KKworICAgIHsKKyAgICAgICAgU3RyaW5nQnVpbGRlciBidWls
ZGVyOworICAgICAgICBidWlsZGVyLmFwcGVuZChTdHJpbmcoIjAxMjM0NTY3ODkiKSwgImFiY2Qi
LCBidWxsc2V5ZSwgIiIpOworICAgICAgICBleHBlY3RCdWlsZGVyQ29udGVudCgiMDEyMzQ1Njc4
OWFiY2QiICsgU3RyaW5nKCZidWxsc2V5ZSwgMSksIGJ1aWxkZXIpOworICAgICAgICBidWlsZGVy
LmFwcGVuZChTdHJpbmcoIkEiKSwgIkIiLCAnQycsICIiKTsKKyAgICAgICAgZXhwZWN0QnVpbGRl
ckNvbnRlbnQoIjAxMjM0NTY3ODlhYmNkIiArIFN0cmluZygmYnVsbHNleWUsIDEpICsgIkFCQyIs
IGJ1aWxkZXIpOworICAgIH0KKworICAgIHsKKyAgICAgICAgLy8gVGVzdCB3aGVyZSB3ZSB1cGNv
bnZlcnQgdGhlIFN0cmluZ0J1aWxkZXIgZnJvbSA4LWJpdCB0byAxNi1iaXQsIGFuZCBkb24ndCBm
aXQgaW4gdGhlIGV4aXN0aW5nIGNhcGFjaXR5LgorICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxk
ZXI7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKFN0cmluZygiMDEyMzQ1Njc4OSIpLCAiYWJjZCIs
ICdlJywgIiIpOworICAgICAgICBleHBlY3RCdWlsZGVyQ29udGVudCgiMDEyMzQ1Njc4OWFiY2Rl
IiwgYnVpbGRlcik7CisgICAgICAgIEVYUEVDVF9UUlVFKGJ1aWxkZXIuaXM4Qml0KCkpOworICAg
ICAgICBFWFBFQ1RfTFQoYnVpbGRlci5jYXBhY2l0eSgpLCBidWlsZGVyLmxlbmd0aCgpICsgMyk7
CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKFN0cmluZygiQSIpLCAiQiIsIGJ1bGxzZXllLCAiIik7
CisgICAgICAgIGV4cGVjdEJ1aWxkZXJDb250ZW50KCIwMTIzNDU2Nzg5YWJjZGVBQiIgKyBTdHJp
bmcoJmJ1bGxzZXllLCAxKSwgYnVpbGRlcik7CisgICAgfQorCisgICAgeworICAgICAgICAvLyBU
ZXN0IHdoZXJlIHdlIHVwY29udmVydCB0aGUgU3RyaW5nQnVpbGRlciBmcm9tIDgtYml0IHRvIDE2
LWJpdCwgYnV0IHdvdWxkIGhhdmUgZml0IGluIHRoZSBjYXBhY2l0eSBpZiB0aGUgdXBjb252ZXJ0
IHdhc24ndCBuZWNlc3NhcnkuCisgICAgICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICAg
ICAgYnVpbGRlci5hcHBlbmQoU3RyaW5nKCIwMTIzNDU2Nzg5IiksICJhYmNkIiwgJ2UnLCAiIik7
CisgICAgICAgIGV4cGVjdEJ1aWxkZXJDb250ZW50KCIwMTIzNDU2Nzg5YWJjZGUiLCBidWlsZGVy
KTsKKyAgICAgICAgYnVpbGRlci5yZXNlcnZlQ2FwYWNpdHkoMzIpOworICAgICAgICBFWFBFQ1Rf
VFJVRShidWlsZGVyLmlzOEJpdCgpKTsKKyAgICAgICAgRVhQRUNUX0dFKGJ1aWxkZXIuY2FwYWNp
dHkoKSwgYnVpbGRlci5sZW5ndGgoKSArIDMpOworICAgICAgICBidWlsZGVyLmFwcGVuZChTdHJp
bmcoIkEiKSwgIkIiLCBidWxsc2V5ZSwgIiIpOworICAgICAgICBleHBlY3RCdWlsZGVyQ29udGVu
dCgiMDEyMzQ1Njc4OWFiY2RlQUIiICsgU3RyaW5nKCZidWxsc2V5ZSwgMSksIGJ1aWxkZXIpOwor
ICAgIH0KIH0KIAogVEVTVChTdHJpbmdCdWlsZGVyVGVzdCwgVG9TdHJpbmcpCkBAIC0xNDQsMzIg
KzE3NywzMiBAQCBURVNUKFN0cmluZ0J1aWxkZXJUZXN0LCBUb1N0cmluZykKICAgICBTdHJpbmdC
dWlsZGVyIGJ1aWxkZXI7CiAgICAgYnVpbGRlci5hcHBlbmQoIjAxMjM0NTY3ODkiKTsKICAgICBT
dHJpbmcgc3RyaW5nID0gYnVpbGRlci50b1N0cmluZygpOwotICAgIEFTU0VSVF9FUShTdHJpbmco
IjAxMjM0NTY3ODkiKSwgc3RyaW5nKTsKLSAgICBBU1NFUlRfRVEoc3RyaW5nLmltcGwoKSwgYnVp
bGRlci50b1N0cmluZygpLmltcGwoKSk7CisgICAgRVhQRUNUX0VRKFN0cmluZygiMDEyMzQ1Njc4
OSIpLCBzdHJpbmcpOworICAgIEVYUEVDVF9FUShzdHJpbmcuaW1wbCgpLCBidWlsZGVyLnRvU3Ry
aW5nKCkuaW1wbCgpKTsKIAogICAgIC8vIENoYW5naW5nIHRoZSBTdHJpbmdCdWlsZGVyIHNob3Vs
ZCBub3QgYWZmZWN0IHRoZSBvcmlnaW5hbCByZXN1bHQgb2YgdG9TdHJpbmcoKS4KICAgICBidWls
ZGVyLmFwcGVuZCgiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiKTsKLSAgICBBU1NFUlRfRVEo
U3RyaW5nKCIwMTIzNDU2Nzg5IiksIHN0cmluZyk7CisgICAgRVhQRUNUX0VRKFN0cmluZygiMDEy
MzQ1Njc4OSIpLCBzdHJpbmcpOwogCiAgICAgLy8gQ2hhbmdpbmcgdGhlIFN0cmluZ0J1aWxkZXIg
c2hvdWxkIG5vdCBhZmZlY3QgdGhlIG9yaWdpbmFsIHJlc3VsdCBvZiB0b1N0cmluZygpIGluIGNh
c2UgdGhlIGNhcGFjaXR5IGlzIG5vdCBjaGFuZ2VkLgogICAgIGJ1aWxkZXIucmVzZXJ2ZUNhcGFj
aXR5KDIwMCk7CiAgICAgc3RyaW5nID0gYnVpbGRlci50b1N0cmluZygpOwotICAgIEFTU0VSVF9F
UShTdHJpbmcoIjAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIpLCBzdHJpbmcp
OworICAgIEVYUEVDVF9FUShTdHJpbmcoIjAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2
d3h5eiIpLCBzdHJpbmcpOwogICAgIGJ1aWxkZXIuYXBwZW5kKCJBQkMiKTsKLSAgICBBU1NFUlRf
RVEoU3RyaW5nKCIwMTIzNDU2Nzg5YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiKSwgc3RyaW5n
KTsKKyAgICBFWFBFQ1RfRVEoU3RyaW5nKCIwMTIzNDU2Nzg5YWJjZGVmZ2hpamtsbW5vcHFyc3R1
dnd4eXoiKSwgc3RyaW5nKTsKIAogICAgIC8vIENoYW5naW5nIHRoZSBvcmlnaW5hbCByZXN1bHQg
b2YgdG9TdHJpbmcoKSBzaG91bGQgbm90IGFmZmVjdCB0aGUgY29udGVudCBvZiB0aGUgU3RyaW5n
QnVpbGRlci4KICAgICBTdHJpbmcgc3RyaW5nMSA9IGJ1aWxkZXIudG9TdHJpbmcoKTsKLSAgICBB
U1NFUlRfRVEoU3RyaW5nKCIwMTIzNDU2Nzg5YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkMi
KSwgc3RyaW5nMSk7CisgICAgRVhQRUNUX0VRKFN0cmluZygiMDEyMzQ1Njc4OWFiY2RlZmdoaWpr
bG1ub3BxcnN0dXZ3eHl6QUJDIiksIHN0cmluZzEpOwogICAgIHN0cmluZzEuYXBwZW5kKCJERUYi
KTsKLSAgICBBU1NFUlRfRVEoU3RyaW5nKCIwMTIzNDU2Nzg5YWJjZGVmZ2hpamtsbW5vcHFyc3R1
dnd4eXpBQkMiKSwgYnVpbGRlci50b1N0cmluZygpKTsKLSAgICBBU1NFUlRfRVEoU3RyaW5nKCIw
MTIzNDU2Nzg5YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUYiKSwgc3RyaW5nMSk7Cisg
ICAgRVhQRUNUX0VRKFN0cmluZygiMDEyMzQ1Njc4OWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6
QUJDIiksIGJ1aWxkZXIudG9TdHJpbmcoKSk7CisgICAgRVhQRUNUX0VRKFN0cmluZygiMDEyMzQ1
Njc4OWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGIiksIHN0cmluZzEpOwogCiAgICAg
Ly8gUmVzaXppbmcgdGhlIFN0cmluZ0J1aWxkZXIgc2hvdWxkIG5vdCBhZmZlY3QgdGhlIG9yaWdp
bmFsIHJlc3VsdCBvZiB0b1N0cmluZygpLgogICAgIHN0cmluZzEgPSBidWlsZGVyLnRvU3RyaW5n
KCk7CiAgICAgYnVpbGRlci5yZXNpemUoMTApOwogICAgIGJ1aWxkZXIuYXBwZW5kKCIjIyMiKTsK
LSAgICBBU1NFUlRfRVEoU3RyaW5nKCIwMTIzNDU2Nzg5YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4
eXpBQkMiKSwgc3RyaW5nMSk7CisgICAgRVhQRUNUX0VRKFN0cmluZygiMDEyMzQ1Njc4OWFiY2Rl
ZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDIiksIHN0cmluZzEpOwogfQogCiBURVNUKFN0cmluZ0J1
aWxkZXJUZXN0LCBUb1N0cmluZ1ByZXNlcnZlQ2FwYWNpdHkpCkBAIC0xNzgsNDMgKzIxMSw0MyBA
QCBURVNUKFN0cmluZ0J1aWxkZXJUZXN0LCBUb1N0cmluZ1ByZXNlcnZlQ2FwYWNpdHkpCiAgICAg
YnVpbGRlci5hcHBlbmQoIjAxMjM0NTY3ODkiKTsKICAgICB1bnNpZ25lZCBjYXBhY2l0eSA9IGJ1
aWxkZXIuY2FwYWNpdHkoKTsKICAgICBTdHJpbmcgc3RyaW5nID0gYnVpbGRlci50b1N0cmluZ1By
ZXNlcnZlQ2FwYWNpdHkoKTsKLSAgICBBU1NFUlRfRVEoY2FwYWNpdHksIGJ1aWxkZXIuY2FwYWNp
dHkoKSk7Ci0gICAgQVNTRVJUX0VRKFN0cmluZygiMDEyMzQ1Njc4OSIpLCBzdHJpbmcpOwotICAg
IEFTU0VSVF9FUShzdHJpbmcuaW1wbCgpLCBidWlsZGVyLnRvU3RyaW5nUHJlc2VydmVDYXBhY2l0
eSgpLmltcGwoKSk7Ci0gICAgQVNTRVJUX0VRKHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBidWlsZGVy
LmNoYXJhY3RlcnM4KCkpOworICAgIEVYUEVDVF9FUShjYXBhY2l0eSwgYnVpbGRlci5jYXBhY2l0
eSgpKTsKKyAgICBFWFBFQ1RfRVEoU3RyaW5nKCIwMTIzNDU2Nzg5IiksIHN0cmluZyk7CisgICAg
RVhQRUNUX0VRKHN0cmluZy5pbXBsKCksIGJ1aWxkZXIudG9TdHJpbmdQcmVzZXJ2ZUNhcGFjaXR5
KCkuaW1wbCgpKTsKKyAgICBFWFBFQ1RfRVEoc3RyaW5nLmNoYXJhY3RlcnM4KCksIGJ1aWxkZXIu
Y2hhcmFjdGVyczgoKSk7CiAKICAgICAvLyBDaGFuZ2luZyB0aGUgU3RyaW5nQnVpbGRlciBzaG91
bGQgbm90IGFmZmVjdCB0aGUgb3JpZ2luYWwgcmVzdWx0IG9mIHRvU3RyaW5nUHJlc2VydmVDYXBh
Y2l0eSgpLgogICAgIGJ1aWxkZXIuYXBwZW5kKCJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIp
OwotICAgIEFTU0VSVF9FUShTdHJpbmcoIjAxMjM0NTY3ODkiKSwgc3RyaW5nKTsKKyAgICBFWFBF
Q1RfRVEoU3RyaW5nKCIwMTIzNDU2Nzg5IiksIHN0cmluZyk7CiAKICAgICAvLyBDaGFuZ2luZyB0
aGUgU3RyaW5nQnVpbGRlciBzaG91bGQgbm90IGFmZmVjdCB0aGUgb3JpZ2luYWwgcmVzdWx0IG9m
IHRvU3RyaW5nUHJlc2VydmVDYXBhY2l0eSgpIGluIGNhc2UgdGhlIGNhcGFjaXR5IGlzIG5vdCBj
aGFuZ2VkLgogICAgIGJ1aWxkZXIucmVzZXJ2ZUNhcGFjaXR5KDIwMCk7CiAgICAgY2FwYWNpdHkg
PSBidWlsZGVyLmNhcGFjaXR5KCk7CiAgICAgc3RyaW5nID0gYnVpbGRlci50b1N0cmluZ1ByZXNl
cnZlQ2FwYWNpdHkoKTsKLSAgICBBU1NFUlRfRVEoY2FwYWNpdHksIGJ1aWxkZXIuY2FwYWNpdHko
KSk7Ci0gICAgQVNTRVJUX0VRKHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBidWlsZGVyLmNoYXJhY3Rl
cnM4KCkpOwotICAgIEFTU0VSVF9FUShTdHJpbmcoIjAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9w
cXJzdHV2d3h5eiIpLCBzdHJpbmcpOworICAgIEVYUEVDVF9FUShjYXBhY2l0eSwgYnVpbGRlci5j
YXBhY2l0eSgpKTsKKyAgICBFWFBFQ1RfRVEoc3RyaW5nLmNoYXJhY3RlcnM4KCksIGJ1aWxkZXIu
Y2hhcmFjdGVyczgoKSk7CisgICAgRVhQRUNUX0VRKFN0cmluZygiMDEyMzQ1Njc4OWFiY2RlZmdo
aWprbG1ub3BxcnN0dXZ3eHl6IiksIHN0cmluZyk7CiAgICAgYnVpbGRlci5hcHBlbmQoIkFCQyIp
OwotICAgIEFTU0VSVF9FUShTdHJpbmcoIjAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2
d3h5eiIpLCBzdHJpbmcpOworICAgIEVYUEVDVF9FUShTdHJpbmcoIjAxMjM0NTY3ODlhYmNkZWZn
aGlqa2xtbm9wcXJzdHV2d3h5eiIpLCBzdHJpbmcpOwogCiAgICAgLy8gQ2hhbmdpbmcgdGhlIG9y
aWdpbmFsIHJlc3VsdCBvZiB0b1N0cmluZ1ByZXNlcnZlQ2FwYWNpdHkoKSBzaG91bGQgbm90IGFm
ZmVjdCB0aGUgY29udGVudCBvZiB0aGUgU3RyaW5nQnVpbGRlci4KICAgICBjYXBhY2l0eSA9IGJ1
aWxkZXIuY2FwYWNpdHkoKTsKICAgICBTdHJpbmcgc3RyaW5nMSA9IGJ1aWxkZXIudG9TdHJpbmdQ
cmVzZXJ2ZUNhcGFjaXR5KCk7Ci0gICAgQVNTRVJUX0VRKGNhcGFjaXR5LCBidWlsZGVyLmNhcGFj
aXR5KCkpOwotICAgIEFTU0VSVF9FUShzdHJpbmcxLmNoYXJhY3RlcnM4KCksIGJ1aWxkZXIuY2hh
cmFjdGVyczgoKSk7Ci0gICAgQVNTRVJUX0VRKFN0cmluZygiMDEyMzQ1Njc4OWFiY2RlZmdoaWpr
bG1ub3BxcnN0dXZ3eHl6QUJDIiksIHN0cmluZzEpOworICAgIEVYUEVDVF9FUShjYXBhY2l0eSwg
YnVpbGRlci5jYXBhY2l0eSgpKTsKKyAgICBFWFBFQ1RfRVEoc3RyaW5nMS5jaGFyYWN0ZXJzOCgp
LCBidWlsZGVyLmNoYXJhY3RlcnM4KCkpOworICAgIEVYUEVDVF9FUShTdHJpbmcoIjAxMjM0NTY3
ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQyIpLCBzdHJpbmcxKTsKICAgICBzdHJpbmcx
LmFwcGVuZCgiREVGIik7Ci0gICAgQVNTRVJUX0VRKFN0cmluZygiMDEyMzQ1Njc4OWFiY2RlZmdo
aWprbG1ub3BxcnN0dXZ3eHl6QUJDIiksIGJ1aWxkZXIudG9TdHJpbmdQcmVzZXJ2ZUNhcGFjaXR5
KCkpOwotICAgIEFTU0VSVF9FUShTdHJpbmcoIjAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJz
dHV2d3h5ekFCQ0RFRiIpLCBzdHJpbmcxKTsKKyAgICBFWFBFQ1RfRVEoU3RyaW5nKCIwMTIzNDU2
Nzg5YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkMiKSwgYnVpbGRlci50b1N0cmluZ1ByZXNl
cnZlQ2FwYWNpdHkoKSk7CisgICAgRVhQRUNUX0VRKFN0cmluZygiMDEyMzQ1Njc4OWFiY2RlZmdo
aWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGIiksIHN0cmluZzEpOwogCiAgICAgLy8gUmVzaXppbmcg
dGhlIFN0cmluZ0J1aWxkZXIgc2hvdWxkIG5vdCBhZmZlY3QgdGhlIG9yaWdpbmFsIHJlc3VsdCBv
ZiB0b1N0cmluZ1ByZXNlcnZlQ2FwYWNpdHkoKS4KICAgICBjYXBhY2l0eSA9IGJ1aWxkZXIuY2Fw
YWNpdHkoKTsKICAgICBzdHJpbmcxID0gYnVpbGRlci50b1N0cmluZ1ByZXNlcnZlQ2FwYWNpdHko
KTsKLSAgICBBU1NFUlRfRVEoY2FwYWNpdHksIGJ1aWxkZXIuY2FwYWNpdHkoKSk7Ci0gICAgQVNT
RVJUX0VRKHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBidWlsZGVyLmNoYXJhY3RlcnM4KCkpOworICAg
IEVYUEVDVF9FUShjYXBhY2l0eSwgYnVpbGRlci5jYXBhY2l0eSgpKTsKKyAgICBFWFBFQ1RfRVEo
c3RyaW5nLmNoYXJhY3RlcnM4KCksIGJ1aWxkZXIuY2hhcmFjdGVyczgoKSk7CiAgICAgYnVpbGRl
ci5yZXNpemUoMTApOwogICAgIGJ1aWxkZXIuYXBwZW5kKCIjIyMiKTsKLSAgICBBU1NFUlRfRVEo
U3RyaW5nKCIwMTIzNDU2Nzg5YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkMiKSwgc3RyaW5n
MSk7CisgICAgRVhQRUNUX0VRKFN0cmluZygiMDEyMzQ1Njc4OWFiY2RlZmdoaWprbG1ub3BxcnN0
dXZ3eHl6QUJDIiksIHN0cmluZzEpOwogfQogCiBURVNUKFN0cmluZ0J1aWxkZXJUZXN0LCBDbGVh
cikKQEAgLTI1OSw0NCArMjkyLDQ0IEBAIFRFU1QoU3RyaW5nQnVpbGRlclRlc3QsIEVxdWFsKQog
ewogICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjE7CiAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVy
MjsKLSAgICBBU1NFUlRfVFJVRShidWlsZGVyMSA9PSBidWlsZGVyMik7Ci0gICAgQVNTRVJUX1RS
VUUoZXF1YWwoYnVpbGRlcjEsIHN0YXRpY19jYXN0PExDaGFyKj4oMCksIDApKTsKLSAgICBBU1NF
UlRfVFJVRShidWlsZGVyMSA9PSBTdHJpbmcoKSk7Ci0gICAgQVNTRVJUX1RSVUUoU3RyaW5nKCkg
PT0gYnVpbGRlcjEpOwotICAgIEFTU0VSVF9UUlVFKGJ1aWxkZXIxICE9IFN0cmluZygiYWJjIikp
OworICAgIEVYUEVDVF9UUlVFKGJ1aWxkZXIxID09IGJ1aWxkZXIyKTsKKyAgICBFWFBFQ1RfVFJV
RShlcXVhbChidWlsZGVyMSwgc3RhdGljX2Nhc3Q8TENoYXIqPigwKSwgMCkpOworICAgIEVYUEVD
VF9UUlVFKGJ1aWxkZXIxID09IFN0cmluZygpKTsKKyAgICBFWFBFQ1RfVFJVRShTdHJpbmcoKSA9
PSBidWlsZGVyMSk7CisgICAgRVhQRUNUX1RSVUUoYnVpbGRlcjEgIT0gU3RyaW5nKCJhYmMiKSk7
CiAKICAgICBidWlsZGVyMS5hcHBlbmQoIjEyMyIpOwogICAgIGJ1aWxkZXIxLnJlc2VydmVDYXBh
Y2l0eSgzMik7CiAgICAgYnVpbGRlcjIuYXBwZW5kKCIxMjMiKTsKICAgICBidWlsZGVyMS5yZXNl
cnZlQ2FwYWNpdHkoNjQpOwotICAgIEFTU0VSVF9UUlVFKGJ1aWxkZXIxID09IGJ1aWxkZXIyKTsK
LSAgICBBU1NFUlRfVFJVRShidWlsZGVyMSA9PSBTdHJpbmcoIjEyMyIpKTsKLSAgICBBU1NFUlRf
VFJVRShTdHJpbmcoIjEyMyIpID09IGJ1aWxkZXIxKTsKKyAgICBFWFBFQ1RfVFJVRShidWlsZGVy
MSA9PSBidWlsZGVyMik7CisgICAgRVhQRUNUX1RSVUUoYnVpbGRlcjEgPT0gU3RyaW5nKCIxMjMi
KSk7CisgICAgRVhQRUNUX1RSVUUoU3RyaW5nKCIxMjMiKSA9PSBidWlsZGVyMSk7CiAKICAgICBi
dWlsZGVyMi5hcHBlbmQoIjQ1NiIpOwotICAgIEFTU0VSVF9UUlVFKGJ1aWxkZXIxICE9IGJ1aWxk
ZXIyKTsKLSAgICBBU1NFUlRfVFJVRShidWlsZGVyMiAhPSBidWlsZGVyMSk7Ci0gICAgQVNTRVJU
X1RSVUUoU3RyaW5nKCIxMjMiKSAhPSBidWlsZGVyMik7Ci0gICAgQVNTRVJUX1RSVUUoYnVpbGRl
cjIgIT0gU3RyaW5nKCIxMjMiKSk7CisgICAgRVhQRUNUX1RSVUUoYnVpbGRlcjEgIT0gYnVpbGRl
cjIpOworICAgIEVYUEVDVF9UUlVFKGJ1aWxkZXIyICE9IGJ1aWxkZXIxKTsKKyAgICBFWFBFQ1Rf
VFJVRShTdHJpbmcoIjEyMyIpICE9IGJ1aWxkZXIyKTsKKyAgICBFWFBFQ1RfVFJVRShidWlsZGVy
MiAhPSBTdHJpbmcoIjEyMyIpKTsKICAgICBidWlsZGVyMi50b1N0cmluZygpOyAvLyBUZXN0IGFm
dGVyIHJlaWZ5U3RyaW5nKCkuCi0gICAgQVNTRVJUX1RSVUUoYnVpbGRlcjEgIT0gYnVpbGRlcjIp
OworICAgIEVYUEVDVF9UUlVFKGJ1aWxkZXIxICE9IGJ1aWxkZXIyKTsKIAogICAgIGJ1aWxkZXIy
LnJlc2l6ZSgzKTsKLSAgICBBU1NFUlRfVFJVRShidWlsZGVyMSA9PSBidWlsZGVyMik7CisgICAg
RVhQRUNUX1RSVUUoYnVpbGRlcjEgPT0gYnVpbGRlcjIpOwogCiAgICAgYnVpbGRlcjEudG9TdHJp
bmcoKTsgLy8gVGVzdCBhZnRlciByZWlmeVN0cmluZygpLgotICAgIEFTU0VSVF9UUlVFKGJ1aWxk
ZXIxID09IGJ1aWxkZXIyKTsKKyAgICBFWFBFQ1RfVFJVRShidWlsZGVyMSA9PSBidWlsZGVyMik7
CiB9CiAKIFRFU1QoU3RyaW5nQnVpbGRlclRlc3QsIENhblNocmluaykKIHsKICAgICBTdHJpbmdC
dWlsZGVyIGJ1aWxkZXI7CiAgICAgYnVpbGRlci5yZXNlcnZlQ2FwYWNpdHkoMjU2KTsKLSAgICBB
U1NFUlRfVFJVRShidWlsZGVyLmNhblNocmluaygpKTsKKyAgICBFWFBFQ1RfVFJVRShidWlsZGVy
LmNhblNocmluaygpKTsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IDI1NjsgaSsrKQogICAgICAg
ICBidWlsZGVyLmFwcGVuZCgneCcpOwotICAgIEFTU0VSVF9FUShidWlsZGVyLmxlbmd0aCgpLCBi
dWlsZGVyLmNhcGFjaXR5KCkpOwotICAgIEFTU0VSVF9GQUxTRShidWlsZGVyLmNhblNocmluaygp
KTsKKyAgICBFWFBFQ1RfRVEoYnVpbGRlci5sZW5ndGgoKSwgYnVpbGRlci5jYXBhY2l0eSgpKTsK
KyAgICBFWFBFQ1RfRkFMU0UoYnVpbGRlci5jYW5TaHJpbmsoKSk7CiB9CiAKIFRFU1QoU3RyaW5n
QnVpbGRlclRlc3QsIFRvQXRvbVN0cmluZykKQEAgLTMwNCwyNiArMzM3LDI2IEBAIFRFU1QoU3Ry
aW5nQnVpbGRlclRlc3QsIFRvQXRvbVN0cmluZykKICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7
CiAgICAgYnVpbGRlci5hcHBlbmQoIjEyMyIpOwogICAgIEF0b21TdHJpbmcgYXRvbVN0cmluZyA9
IGJ1aWxkZXIudG9BdG9tU3RyaW5nKCk7Ci0gICAgQVNTRVJUX0VRKFN0cmluZygiMTIzIiksIGF0
b21TdHJpbmcpOworICAgIEVYUEVDVF9FUShTdHJpbmcoIjEyMyIpLCBhdG9tU3RyaW5nKTsKIAog
ICAgIGJ1aWxkZXIucmVzZXJ2ZUNhcGFjaXR5KDI1Nik7Ci0gICAgQVNTRVJUX1RSVUUoYnVpbGRl
ci5jYW5TaHJpbmsoKSk7CisgICAgRVhQRUNUX1RSVUUoYnVpbGRlci5jYW5TaHJpbmsoKSk7CiAg
ICAgZm9yIChpbnQgaSA9IGJ1aWxkZXIubGVuZ3RoKCk7IGkgPCAxMjg7IGkrKykKICAgICAgICAg
YnVpbGRlci5hcHBlbmQoJ3gnKTsKICAgICBBdG9tU3RyaW5nIGF0b21TdHJpbmcxID0gYnVpbGRl
ci50b0F0b21TdHJpbmcoKTsKLSAgICBBU1NFUlRfRVEoMTI4dSwgYXRvbVN0cmluZzEubGVuZ3Ro
KCkpOwotICAgIEFTU0VSVF9FUSgneCcsIGF0b21TdHJpbmcxWzEyN10pOworICAgIEVYUEVDVF9F
USgxMjh1LCBhdG9tU3RyaW5nMS5sZW5ndGgoKSk7CisgICAgRVhQRUNUX0VRKCd4JywgYXRvbVN0
cmluZzFbMTI3XSk7CiAKICAgICAvLyBMYXRlciBjaGFuZ2Ugb2YgYnVpbGRlciBzaG91bGQgbm90
IGFmZmVjdCB0aGUgYXRvbWljIHN0cmluZy4KICAgICBmb3IgKGludCBpID0gYnVpbGRlci5sZW5n
dGgoKTsgaSA8IDI1NjsgaSsrKQogICAgICAgICBidWlsZGVyLmFwcGVuZCgneCcpOwotICAgIEFT
U0VSVF9FUSgxMjh1LCBhdG9tU3RyaW5nMS5sZW5ndGgoKSk7CisgICAgRVhQRUNUX0VRKDEyOHUs
IGF0b21TdHJpbmcxLmxlbmd0aCgpKTsKIAotICAgIEFTU0VSVF9GQUxTRShidWlsZGVyLmNhblNo
cmluaygpKTsKKyAgICBFWFBFQ1RfRkFMU0UoYnVpbGRlci5jYW5TaHJpbmsoKSk7CiAgICAgU3Ry
aW5nIHN0cmluZyA9IGJ1aWxkZXIudG9TdHJpbmcoKTsKICAgICBBdG9tU3RyaW5nIGF0b21TdHJp
bmcyID0gYnVpbGRlci50b0F0b21TdHJpbmcoKTsKICAgICAvLyBUaGV5IHNob3VsZCBzaGFyZSB0
aGUgc2FtZSBTdHJpbmdJbXBsLgotICAgIEFTU0VSVF9FUShhdG9tU3RyaW5nMi5pbXBsKCksIHN0
cmluZy5pbXBsKCkpOworICAgIEVYUEVDVF9FUShhdG9tU3RyaW5nMi5pbXBsKCksIHN0cmluZy5p
bXBsKCkpOwogfQogCiBURVNUKFN0cmluZ0J1aWxkZXJUZXN0LCBUb0F0b21TdHJpbmdPbkVtcHR5
KQpAQCAtMzMxLDQ1ICszNjQsNDUgQEAgVEVTVChTdHJpbmdCdWlsZGVyVGVzdCwgVG9BdG9tU3Ry
aW5nT25FbXB0eSkKICAgICB7IC8vIERlZmF1bHQgY29uc3RydWN0ZWQuCiAgICAgICAgIFN0cmlu
Z0J1aWxkZXIgYnVpbGRlcjsKICAgICAgICAgQXRvbVN0cmluZyBhdG9tU3RyaW5nID0gYnVpbGRl
ci50b0F0b21TdHJpbmcoKTsKLSAgICAgICAgQVNTRVJUX0VRKGVtcHR5QXRvbSgpLCBhdG9tU3Ry
aW5nKTsKKyAgICAgICAgRVhQRUNUX0VRKGVtcHR5QXRvbSgpLCBhdG9tU3RyaW5nKTsKICAgICB9
CiAgICAgeyAvLyBXaXRoIGNhcGFjaXR5LgogICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7
CiAgICAgICAgIGJ1aWxkZXIucmVzZXJ2ZUNhcGFjaXR5KDY0KTsKICAgICAgICAgQXRvbVN0cmlu
ZyBhdG9tU3RyaW5nID0gYnVpbGRlci50b0F0b21TdHJpbmcoKTsKLSAgICAgICAgQVNTRVJUX0VR
KGVtcHR5QXRvbSgpLCBhdG9tU3RyaW5nKTsKKyAgICAgICAgRVhQRUNUX0VRKGVtcHR5QXRvbSgp
LCBhdG9tU3RyaW5nKTsKICAgICB9CiAgICAgeyAvLyBBdG9tU3RyaW5nIGNvbnN0cnVjdGVkIGZy
b20gYSBudWxsIHN0cmluZy4KICAgICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwogICAgICAg
ICBidWlsZGVyLmFwcGVuZChTdHJpbmcoKSk7CiAgICAgICAgIEF0b21TdHJpbmcgYXRvbVN0cmlu
ZyA9IGJ1aWxkZXIudG9BdG9tU3RyaW5nKCk7Ci0gICAgICAgIEFTU0VSVF9FUShlbXB0eUF0b20o
KSwgYXRvbVN0cmluZyk7CisgICAgICAgIEVYUEVDVF9FUShlbXB0eUF0b20oKSwgYXRvbVN0cmlu
Zyk7CiAgICAgfQogICAgIHsgLy8gQXRvbVN0cmluZyBjb25zdHJ1Y3RlZCBmcm9tIGFuIGVtcHR5
IHN0cmluZy4KICAgICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwogICAgICAgICBidWlsZGVy
LmFwcGVuZChlbXB0eVN0cmluZygpKTsKICAgICAgICAgQXRvbVN0cmluZyBhdG9tU3RyaW5nID0g
YnVpbGRlci50b0F0b21TdHJpbmcoKTsKLSAgICAgICAgQVNTRVJUX0VRKGVtcHR5QXRvbSgpLCBh
dG9tU3RyaW5nKTsKKyAgICAgICAgRVhQRUNUX0VRKGVtcHR5QXRvbSgpLCBhdG9tU3RyaW5nKTsK
ICAgICB9CiAgICAgeyAvLyBBdG9tU3RyaW5nIGNvbnN0cnVjdGVkIGZyb20gYW4gZW1wdHkgU3Ry
aW5nQnVpbGRlci4KICAgICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwogICAgICAgICBTdHJp
bmdCdWlsZGVyIGVtcHR5QnVpbGRlcjsKICAgICAgICAgYnVpbGRlci5hcHBlbmQoZW1wdHlCdWls
ZGVyKTsKICAgICAgICAgQXRvbVN0cmluZyBhdG9tU3RyaW5nID0gYnVpbGRlci50b0F0b21TdHJp
bmcoKTsKLSAgICAgICAgQVNTRVJUX0VRKGVtcHR5QXRvbSgpLCBhdG9tU3RyaW5nKTsKKyAgICAg
ICAgRVhQRUNUX0VRKGVtcHR5QXRvbSgpLCBhdG9tU3RyaW5nKTsKICAgICB9CiAgICAgeyAvLyBB
dG9tU3RyaW5nIGNvbnN0cnVjdGVkIGZyb20gYW4gZW1wdHkgY2hhciogc3RyaW5nLgogICAgICAg
ICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CiAgICAgICAgIGJ1aWxkZXIuYXBwZW5kQ2hhcmFjdGVy
cygiIiwgMCk7CiAgICAgICAgIEF0b21TdHJpbmcgYXRvbVN0cmluZyA9IGJ1aWxkZXIudG9BdG9t
U3RyaW5nKCk7Ci0gICAgICAgIEFTU0VSVF9FUShlbXB0eUF0b20oKSwgYXRvbVN0cmluZyk7Cisg
ICAgICAgIEVYUEVDVF9FUShlbXB0eUF0b20oKSwgYXRvbVN0cmluZyk7CiAgICAgfQogICAgIHsg
Ly8gQ2xlYXJlZCBTdHJpbmdCdWlsZGVyLgogICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7
CiAgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiV2ViS2l0Iik7CiAgICAgICAgIGJ1aWxk
ZXIuY2xlYXIoKTsKICAgICAgICAgQXRvbVN0cmluZyBhdG9tU3RyaW5nID0gYnVpbGRlci50b0F0
b21TdHJpbmcoKTsKLSAgICAgICAgQVNTRVJUX0VRKGVtcHR5QXRvbSgpLCBhdG9tU3RyaW5nKTsK
KyAgICAgICAgRVhQRUNUX0VRKGVtcHR5QXRvbSgpLCBhdG9tU3RyaW5nKTsKICAgICB9CiB9CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>