<?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>41380</bug_id>
          
          <creation_ts>2010-06-29 15:46:28 -0700</creation_ts>
          <short_desc>linkProgram should fail when vertex/fragment shaders are not both present</short_desc>
          <delta_ts>2010-08-10 17:38:14 -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>WebGL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>41542</blocked>
    
    <blocked>41572</blocked>
    
    <blocked>43820</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Zhenyao Mo">zmo</reporter>
          <assigned_to name="Zhenyao Mo">zmo</assigned_to>
          <cc>abarth</cc>
    
    <cc>cmarrin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eric</cc>
    
    <cc>kbr</cc>
    
    <cc>oliver</cc>
    
    <cc>psawaya</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>244534</commentid>
    <comment_count>0</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-06-29 15:46:28 -0700</bug_when>
    <thetext>In GL, when a shader is not present, the program will link against fixed functionality processing.  In GLES, it should fail.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245059</commentid>
    <comment_count>1</comment_count>
      <attachid>60184</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-06-30 19:35:05 -0700</bug_when>
    <thetext>Created attachment 60184
patch

test case is copied over from conformance tests (after fixing a bug in the test).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245612</commentid>
    <comment_count>2</comment_count>
      <attachid>60184</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-07-01 15:47:41 -0700</bug_when>
    <thetext>Comment on attachment 60184
patch

Looks good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245622</commentid>
    <comment_count>3</comment_count>
      <attachid>60184</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-07-01 15:58:00 -0700</bug_when>
    <thetext>Comment on attachment 60184
patch

ok.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245698</commentid>
    <comment_count>4</comment_count>
      <attachid>60184</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-07-01 19:02:07 -0700</bug_when>
    <thetext>Comment on attachment 60184
patch

Rejecting patch 60184 from commit-queue.

Failed to run &quot;[u&apos;git&apos;, u&apos;svn&apos;, u&apos;dcommit&apos;]&quot; exit_code: 1
Last 500 characters of output:
l/canvas/WebGLShader.cpp
	M	WebCore/html/canvas/WebGLShader.h
A repository hook failed: MERGE request failed on &apos;/repository/webkit/trunk&apos;: Commit blocked by pre-commit hook (exit code 1) with output:

    The following files contain tab characters:

        trunk/LayoutTests/fast/canvas/webgl/program-test.html

    Please use spaces instead to indent.
    If you must commit a file with tabs, use svn propset to set the &quot;allow-tabs&quot; property.
 at /usr/local/git/libexec/git-core/git-svn line 570


Full output: http://webkit-commit-queue.appspot.com/results/3360165</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245942</commentid>
    <comment_count>5</comment_count>
      <attachid>60372</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-07-02 09:53:28 -0700</bug_when>
    <thetext>Created attachment 60372
revised patch: remove tabs in the test file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245967</commentid>
    <comment_count>6</comment_count>
      <attachid>60372</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-07-02 10:48:35 -0700</bug_when>
    <thetext>Comment on attachment 60372
revised patch: remove tabs in the test file.

Rejecting patch 60372 from commit-queue.

Unexpected failure when processing patch!  Please file a bug against webkit-patch.
Failed to run &quot;[&apos;./WebKitTools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-commit-queue.appspot.com&apos;, &apos;land-attachment&apos;, &apos;--force-clean&apos;, &apos;--build&apos;, &apos;--non-interactive&apos;, &apos;--ignore-builders&apos;, &apos;--build-style=both&apos;, &apos;--quiet&apos;, 60372, &apos;--test&apos;, &apos;--parent-command=commit-queue&apos;, &apos;--no-update&apos;]&quot; exit_code: 1
Last 500 characters of output:
0372&amp;action=edit
Fetching: https://bugs.webkit.org/show_bug.cgi?id=41380&amp;ctype=xml
Processing 1 patch from 1 bug.
Cleaning working directory
Processing patch 60372 from bug 41380.
NOBODY (OOPS!) found in /Users/eseidel/Projects/CommitQueue/LayoutTests/ChangeLog does not appear to be a valid reviewer according to committers.py.
ERROR: /Users/eseidel/Projects/CommitQueue/LayoutTests/ChangeLog neither lists a valid reviewer nor contains the string &quot;Unreviewed&quot; or &quot;Rubber stamp&quot; (case insensitive).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>246009</commentid>
    <comment_count>7</comment_count>
      <attachid>60372</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-07-02 12:06:30 -0700</bug_when>
    <thetext>Comment on attachment 60372
revised patch: remove tabs in the test file.

Clearing flags on attachment: 60372

Committed r62396: &lt;http://trac.webkit.org/changeset/62396&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>246010</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-07-02 12:06:35 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>246082</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-07-02 14:20:18 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/62396 might have broken Leopard Intel Debug (Tests)
The following changes are on the blame list:
http://trac.webkit.org/changeset/62395
http://trac.webkit.org/changeset/62396</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>246121</commentid>
    <comment_count>10</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-07-02 15:11:14 -0700</bug_when>
    <thetext>Skip the program-test.html for now:

https://bugs.webkit.org/show_bug.cgi?id=41542</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>246362</commentid>
    <comment_count>11</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-07-03 16:19:05 -0700</bug_when>
    <thetext>*** Bug 40746 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>60184</attachid>
            <date>2010-06-30 19:35:05 -0700</date>
            <delta_ts>2010-07-02 09:53:28 -0700</delta_ts>
            <desc>patch</desc>
            <filename>linkp.patch</filename>
            <type>text/plain</type>
            <size>22113</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MjIyMykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjUgQEAKKzIwMTAtMDYtMzAgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBsaW5rUHJv
Z3JhbSBzaG91bGQgZmFpbCB3aGVuIHZlcnRleC9mcmFnbWVudCBzaGFkZXJzIGFyZSBub3QgYm90
aCBwcmVzZW50CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD00MTM4MAorCisgICAgICAgIFRlc3Q6IGZhc3QvY2FudmFzL3dlYmdsL3Byb2dyYW0tdGVzdC5o
dG1sCisKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uY3BwOiBBZGQgZmxhZyBm
b3IgbGluayBmYWlsdXJlIGR1ZSB0byBtaXNzaW5nIHNoYWRlcnMuCisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFByb2dyYW06OldlYkdMUHJvZ3JhbSk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2Vi
R0xQcm9ncmFtLmg6IEFkZCBpbnRlcmZhY2UgZm9yIGxpbmtGYWlsdXJlIGZsYWcuCisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFByb2dyYW06OmlzTGlua0ZhaWx1cmVGbGFnU2V0KToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUHJvZ3JhbTo6c2V0TGlua0ZhaWx1cmVGbGFnKToKKyAgICAgICAgKiBo
dG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRQcm9ncmFtUGFyYW1ldGVyKTogSW50ZXJjZXB0IHdo
ZW4gbGlua0ZhaWx1cmVGbGFnIGlzIHNldC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVy
aW5nQ29udGV4dDo6bGlua1Byb2dyYW0pOiBDaGVjayBpZiB0aGVyZSBhcmUgbWlzc2luZyBzaGFk
ZXJzIGFuZCBkb24ndCBsaW5rIGlmIHllcy4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFNo
YWRlci5jcHA6IENhY2hlIHNoYWRlciB0eXBlLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xTaGFk
ZXI6OldlYkdMU2hhZGVyKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFNoYWRlci5oOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMU2hhZGVyOjpnZXRUeXBlKToKKwogMjAxMC0w
Ni0zMCAgQ3NhYmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVu
cmV2aWV3ZWQgYnVpbGRmaXggYWZ0ZXIgcjYyMTk2IGFuZCByNjIyMTQuCkluZGV4OiBXZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFByb2dyYW0uY3BwCShyZXZpc2lvbiA2MjE5MikKKysrIFdlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xQcm9ncmFtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBA
QCBQYXNzUmVmUHRyPFdlYkdMUHJvZ3JhbT4gV2ViR0xQcm9ncmFtOjpjCiAKIFdlYkdMUHJvZ3Jh
bTo6V2ViR0xQcm9ncmFtKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY3R4KQogICAgIDogQ2FudmFz
T2JqZWN0KGN0eCkKKyAgICAsIG1fbGlua0ZhaWx1cmUoZmFsc2UpCiB7CiAgICAgc2V0T2JqZWN0
KGNvbnRleHQoKS0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+Y3JlYXRlUHJvZ3JhbSgpKTsKIH0KSW5k
ZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uaAkocmV2aXNpb24gNjIxOTIpCisrKyBXZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0
NiwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGludCBudW1BY3RpdmVBdHRyaWJM
b2NhdGlvbnMoKTsKICAgICAgICAgaW50IGdldEFjdGl2ZUF0dHJpYkxvY2F0aW9uKGludCBpbmRl
eCk7CiAKKyAgICAgICAgLy8gUmV0dXJuIHRydWUgbWVhbnMgZ2V0UHJvZ3JhbVBhcmFtZXRlcihM
SU5LX1NUQVRVUykgc2hvdWxkIHJldHVybgorICAgICAgICAvLyBmYWxzZTsgcmV0dXJuIGZhbHNl
IG1lYW5zIHdlIHNob3VsZCBhY3R1YWxseSBjYWxsCisgICAgICAgIC8vIGdldFByb2dyYW1QYXJh
bWV0ZXIoTElOS19TVEFUVVMpIHRvIGZpbmQgb3V0LgorICAgICAgICBib29sIGlzTGlua0ZhaWx1
cmVGbGFnU2V0KCkgY29uc3QgeyByZXR1cm4gbV9saW5rRmFpbHVyZTsgfQorICAgICAgICB2b2lk
IHNldExpbmtGYWlsdXJlRmxhZyhib29sIGZhaWxlZCkgeyBtX2xpbmtGYWlsdXJlID0gZmFpbGVk
OyB9CisKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIFdlYkdMUHJvZ3JhbShXZWJHTFJlbmRlcmlu
Z0NvbnRleHQqKTsKICAgICAgICAgCkBAIC01NSw2ICs2MSw4IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgdmlydHVhbCBib29sIGlzUHJvZ3JhbSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7
IH0KIAogICAgICAgICBWZWN0b3I8aW50PiBtX2FjdGl2ZUF0dHJpYkxvY2F0aW9uczsKKworICAg
ICAgICBib29sIG1fbGlua0ZhaWx1cmU7CiAgICAgfTsKICAgICAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4
dC5jcHAJKHJldmlzaW9uIDYyMTkyKQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRl
cmluZ0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzc2LDEwICsxMzc2LDE0IEBAIFdl
YkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFAKICAgICBpbnQgdmFsdWUgPSAw
OwogICAgIHN3aXRjaCAocG5hbWUpIHsKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERUxF
VEVfU1RBVFVTOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTktfU1RBVFVTOgogICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZBTElEQVRFX1NUQVRVUzoKICAgICAgICAgbV9jb250
ZXh0LT5nZXRQcm9ncmFtaXYocHJvZ3JhbSwgcG5hbWUsICZ2YWx1ZSk7CiAgICAgICAgIHJldHVy
biBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8Ym9vbD4odmFsdWUpKTsKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpMSU5LX1NUQVRVUzoKKyAgICAgICAgaWYgKHByb2dyYW0tPmlzTGlua0Zh
aWx1cmVGbGFnU2V0KCkpCisgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKGZhbHNlKTsK
KyAgICAgICAgbV9jb250ZXh0LT5nZXRQcm9ncmFtaXYocHJvZ3JhbSwgcG5hbWUsICZ2YWx1ZSk7
CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8Ym9vbD4odmFsdWUpKTsK
ICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJTkZPX0xPR19MRU5HVEg6CiAgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6QVRUQUNIRURfU0hBREVSUzoKICAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpBQ1RJVkVfQVRUUklCVVRFUzoKQEAgLTE3ODYsNiArMTc5MCwyOCBAQCB2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6bGlua1Byb2dyYW0oCiAgICAgVU5VU0VEX1BBUkFNKGVjKTsK
ICAgICBpZiAoIXZhbGlkYXRlV2ViR0xPYmplY3QocHJvZ3JhbSkpCiAgICAgICAgIHJldHVybjsK
KyAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkgeworICAgICAgICBWZWN0b3I8V2ViR0xTaGFk
ZXIqPiBzaGFkZXJzOworICAgICAgICBib29sIHN1Y2NlZWQgPSBnZXRBdHRhY2hlZFNoYWRlcnMo
cHJvZ3JhbSwgc2hhZGVycywgZWMpOworICAgICAgICBpZiAoc3VjY2VlZCkgeworICAgICAgICAg
ICAgYm9vbCB2U2hhZGVyID0gZmFsc2U7CisgICAgICAgICAgICBib29sIGZTaGFkZXIgPSBmYWxz
ZTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGlpID0gMDsgaWkgPCBzaGFkZXJzLnNpemUoKSAm
JiAoIXZTaGFkZXIgfHwgIWZTaGFkZXIpOyArK2lpKSB7CisgICAgICAgICAgICAgICAgaWYgKHNo
YWRlcnNbaWldLT5nZXRUeXBlKCkgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9TSEFERVIp
CisgICAgICAgICAgICAgICAgICAgIHZTaGFkZXIgPSB0cnVlOworICAgICAgICAgICAgICAgIGVs
c2UgaWYgKHNoYWRlcnNbaWldLT5nZXRUeXBlKCkgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdN
RU5UX1NIQURFUikKKyAgICAgICAgICAgICAgICAgICAgZlNoYWRlciA9IHRydWU7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBpZiAoIXZTaGFkZXIgfHwgIWZTaGFkZXIpCisgICAgICAgICAg
ICAgICAgc3VjY2VlZCA9IGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmICghc3VjY2VlZCkg
eworICAgICAgICAgICAgcHJvZ3JhbS0+c2V0TGlua0ZhaWx1cmVGbGFnKHRydWUpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHByb2dyYW0tPnNldExpbmtGYWlsdXJl
RmxhZyhmYWxzZSk7CisgICAgfQorCiAgICAgbV9jb250ZXh0LT5saW5rUHJvZ3JhbShwcm9ncmFt
KTsKICAgICBwcm9ncmFtLT5jYWNoZUFjdGl2ZUF0dHJpYkxvY2F0aW9ucygpOwogICAgIGNsZWFu
dXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMU2hhZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hh
ZGVyLmNwcAkocmV2aXNpb24gNjIxOTIpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hh
ZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQCBQYXNzUmVmUHRyPFdlYkdM
U2hhZGVyPiBXZWJHTFNoYWRlcjo6Y3JlCiAKIFdlYkdMU2hhZGVyOjpXZWJHTFNoYWRlcihXZWJH
TFJlbmRlcmluZ0NvbnRleHQqIGN0eCwgR3JhcGhpY3NDb250ZXh0M0Q6OldlYkdMRW51bVR5cGUg
dHlwZSkKICAgICA6IENhbnZhc09iamVjdChjdHgpCisgICAgLCBtX3R5cGUodHlwZSkKIHsKICAg
ICBzZXRPYmplY3QoY29udGV4dCgpLT5ncmFwaGljc0NvbnRleHQzRCgpLT5jcmVhdGVTaGFkZXIo
dHlwZSkpOwogfQpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNoYWRlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuaAkocmV2aXNpb24gNjIx
OTIpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM5LDEyICszOSwxNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIAogICAgICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJHTFNoYWRlcj4gY3JlYXRlKFdlYkdMUmVuZGVyaW5nQ29u
dGV4dCosIEdyYXBoaWNzQ29udGV4dDNEOjpXZWJHTEVudW1UeXBlKTsKIAorICAgICAgICBHcmFw
aGljc0NvbnRleHQzRDo6V2ViR0xFbnVtVHlwZSBnZXRUeXBlKCkgY29uc3QgeyByZXR1cm4gbV90
eXBlOyB9CisKICAgICBwcml2YXRlOgogICAgICAgICBXZWJHTFNoYWRlcihXZWJHTFJlbmRlcmlu
Z0NvbnRleHQqLCBHcmFwaGljc0NvbnRleHQzRDo6V2ViR0xFbnVtVHlwZSk7CiAKICAgICAgICAg
dmlydHVhbCB2b2lkIF9kZWxldGVPYmplY3QoUGxhdGZvcm0zRE9iamVjdCk7CiAKICAgICAgICAg
dmlydHVhbCBib29sIGlzU2hhZGVyKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgICAg
IEdyYXBoaWNzQ29udGV4dDNEOjpXZWJHTEVudW1UeXBlIG1fdHlwZTsKICAgICB9OwogICAgIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNjIyMjMpCisrKyBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxMC0w
Ni0zMCAgWmhlbnlhbyBNbyAgPHptb0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGxpbmtQcm9ncmFtIHNob3VsZCBmYWlsIHdoZW4g
dmVydGV4L2ZyYWdtZW50IHNoYWRlcnMgYXJlIG5vdCBib3RoIHByZXNlbnQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQxMzgwCisKKyAgICAgICAgKiBm
YXN0L2NhbnZhcy93ZWJnbC9wcm9ncmFtLXRlc3QtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAg
ICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9wcm9ncmFtLXRlc3QuaHRtbDogQWRkZWQuCisKIDIwMTAt
MDYtMzAgIENzYWJhIE9zenRyb2dvbsOhYyAgPG9zc3lAd2Via2l0Lm9yZz4KIAogICAgICAgICBV
bnJldmlld2VkIGZpeC4gVXBkYXRlIFF0IHNwZWNpZmljIGV4cGVjdGVkIGZpbGVzIGFmdGVyIHI2
MjIxNS4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3Byb2dyYW0tdGVzdC1l
eHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wv
cHJvZ3JhbS10ZXN0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zh
c3QvY2FudmFzL3dlYmdsL3Byb2dyYW0tdGVzdC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNTggQEAKK1Rlc3RzIHRoYXQgcHJvZ3JhbSBjb21waWxpbmcvbGlua2luZy91c2lu
ZyB3b3JrcyBjb3JyZWN0bHkuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBv
ZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCisKK0Nh
bnZhcy5nZXRDb250ZXh0CitQQVNTIGNvbnRleHQgZXhpc3RzCitQQVNTIGdvb2QgdmVydGV4IHNo
YWRlciBzaG91bGQgY29tcGlsZQorUEFTUyBnb29kIHZlcnRleCBzaGFkZXIgIzIgc2hvdWxkIGNv
bXBpbGUKK1BBU1MgYmFkIHZlcnRleCBzaGFkZXIgc2hvdWxkIGZhaWwgdG8gY29tcGlsZQorUEFT
UyBnb29kIGZyYWdtZW50IHNoYWRlciBzaG91bGQgY29tcGlsZQorUEFTUyBnb29kIGZyYWdtZW50
IHNoYWRlciAjMiBzaG91bGQgY29tcGlsZQorUEFTUyBiYWQgZnJhZ21lbnQgc2hhZGVyIHNob3Vs
ZCBmYWlsIHRvIGNvbXBpbGUKK1BBU1Mgc2hvdWxkIGJlIG5vIGVycm9ycyBhdCB0aGlzIHBvaW50
CitQQVNTIGF0dGFjaGluZyBhIHZlcnRleCBzaGFkZXIgc2hvdWxkIHN1Y2NlZWQKK1BBU1MgYXR0
YWNoaW5nIGFuIGFscmVhZHkgYXR0YWNoZWQgdmVydGV4IHNoYWRlciBzaG91bGQgZ2VuZXJhdGUg
SU5WQUxJRF9PUEVSQVRJT04KK1BBU1MgYXR0YWNoaW5nIGEgZnJhZ21lbnQgc2hhZGVyIHNob3Vs
ZCBzdWNjZWVkCitQQVNTIGF0dGFjaGluZyBhbiBhbHJlYWR5IGF0dGFjaGVkIGZyYWdtZW50IHNo
YWRlciBzaG91bGQgZ2VuZXJhdGUgSU5WQUxJRF9PUEVSQVRJT04KK1BBU1MgZGV0YWNoaW5nIGEg
dmVydGV4IHNoYWRlciBzaG91bGQgc3VjY2VlZAorUEFTUyBkZXRhY2hpbmcgYSBub3QgYWxyZWFk
eSBhdHRhY2hlZCB2ZXJ0ZXggc2hhZGVyIHNob3VsZCBnZW5lcmF0ZSBJTlZBTElEX09QRVJBVElP
TgorUEFTUyBkZXRhY2hpbmcgYSBmcmFnbWVudCBzaGFkZXIgc2hvdWxkIHN1Y2NlZWQKK1BBU1Mg
ZGV0YWNoaW5nIGEgbm90IGFscmVhZHkgYXR0YWNoZWQgZnJhZ21lbnQgc2hhZGVyIHNob3VsZCBn
ZW5lcmF0ZSBJTlZBTElEX09QRVJBVElPTgorUEFTUyBnZXRBdHRhY2hlZFNoYWRlcnMgc2hvdWxk
IHJldHVybiBhbiBlbXB0eSBsaXN0IGJ5IGRlZmF1bHQKK1BBU1MgYXR0YWNoaW5nIGEgc2luZ2xl
IHNoYWRlciBzaG91bGQgZ2l2ZSB0aGUgZXhwZWN0ZWQgbGlzdAorUEFTUyBhdHRhY2hpbmcgc29t
ZSBzaGFkZXJzIHNob3VsZCBnaXZlIHRoZSBleHBlY3RlZCBsaXN0CitQQVNTIGF0dGFjaGluZyBh
IHNoYWRlciBhbmQgZGV0YWNoaW5nIGl0IHNob3VkIGxlYXZlIGFuIGVtcHR5IGxpc3QKK1BBU1Mg
YXR0YWNoaW5nIHNvbWUgc2hhZGVycyBhbmQgZGV0YWNoaW5nIHRoZW0gaW4gc2FtZSBvcmRlciBz
aG91ZCBsZWF2ZSBhbiBlbXB0eSBsaXN0CitQQVNTIGF0dGFjaGluZyBzb21lIHNoYWRlcnMgYW5k
IGRldGFjaGluZyB0aGVtIGluIHJhbmRvbSBvcmRlciBzaG91ZCBsZWF2ZSBhbiBlbXB0eSBsaXN0
CitQQVNTIGF0dGFjaGluZyBhbmQgZGV0YWNoaW5nIHNvbWUgc2hhZGVycyBzaG91bGQgbGVhdmUg
dGhlIGRpZmZlcmVuY2UgbGlzdAorUEFTUyBhdHRhY2hpbmcgYW5kIGRldGFjaGluZyBzb21lIHNo
YWRlcnMgc2hvdWxkIGxlYXZlIHRoZSBkaWZmZXJlbmNlIGxpc3QKK1BBU1MgYXR0YWNoaW5nIGEg
c2hhZGVyIHRoYXQgZmFpbGVkIHRvIGNvbXBpbGUgc2hvdWxkIHN0aWxsIHNob3cgaXQgaW4gdGhl
IGxpc3QKK1BBU1MgYXR0YWNoaW5nIHNoYWRlcnMsIGluY2x1ZGluZyBvbmUgdGhhdCBmYWlsZWQg
dG8gY29tcGlsZSwgc2hvdWxkIHN0aWxsIHNob3cgdGhlIGl0IGluIHRoZSBsaXN0CitQQVNTIHZh
bGlkIHByb2dyYW0gc2hvdWxkIGxpbmsKK1BBU1MgdXNpbmcgYSB2YWxpZCBwcm9ncmFtIHNob3Vs
ZCBzdWNjZWVkCitQQVNTIHZhbGlkIHByb2dyYW0gIzIgc2hvdWxkIGxpbmsKK1BBU1MgdXNpbmcg
YSB2YWxpZCBwcm9ncmFtIHNob3VsZCBzdWNjZWVkCitQQVNTIHByb2dyYW0gd2l0aCBubyBmcmFn
bWVudCBzaGFkZXIgc2hvdWxkIGZhaWwgdG8gbGluaworUEFTUyB1c2luZyBhbiBpbnZhbGlkIHBy
b2dyYW0gc2hvdWxkIGdlbmVyYXRlIElOVkFMSURfT1BFUkFUSU9OCitQQVNTIHByb2dyYW0gd2l0
aCBubyB2ZXJ0ZXggc2hhZGVyIHNob3VsZCBmYWlsIHRvIGxpbmsKK1BBU1MgdXNpbmcgYW4gaW52
YWxpZCBwcm9ncmFtIHNob3VsZCBnZW5lcmF0ZSBJTlZBTElEX09QRVJBVElPTgorUEFTUyBwcm9n
cmFtIHdpdGggYmFkIHZlcnRleCBzaGFkZXIgc2hvdWxkIGZhaWwgdG8gbGluaworUEFTUyB1c2lu
ZyBhbiBpbnZhbGlkIHByb2dyYW0gc2hvdWxkIGdlbmVyYXRlIElOVkFMSURfT1BFUkFUSU9OCitQ
QVNTIHByb2dyYW0gd2l0aCBiYWQgZnJhZ21lbnQgc2hhZGVyIHNob3VsZCBmYWlsIHRvIGxpbmsK
K1BBU1MgdXNpbmcgYW4gaW52YWxpZCBwcm9ncmFtIHNob3VsZCBnZW5lcmF0ZSBJTlZBTElEX09Q
RVJBVElPTgorUEFTUyBwcm9ncmFtIHdpdGggYmFkIHNoYWRlcnMgc2hvdWxkIGZhaWwgdG8gbGlu
aworUEFTUyB1c2luZyBhbiBpbnZhbGlkIHByb2dyYW0gc2hvdWxkIGdlbmVyYXRlIElOVkFMSURf
T1BFUkFUSU9OCitQQVNTIHVzaW5nIGEgdmFsaWQgcHJvZ3JhbSBzaG91bGRuJ3QgZ2VuZXJhdGUg
YSBHTCBlcnJvcgorUEFTUyBzaG91bGQgYmUgbm8gZXJyb3JzIGF0IHRoaXMgcG9pbnQgIzIKK1BB
U1MgZHJhd2luZyB3aXRoIGEgdmFsaWQgcHJvZ3JhbSBzaG91bGRuJ3QgZ2VuZXJhdGUgYSBHTCBl
cnJvcgorUEFTUyB1c2luZyBhbiBpbnZhbGlkIHByb2dyYW0gc2hvdWxkIGdlbmVyYXRlIElOVkFM
SURfT1BFUkFUSU9OCitQQVNTIGRyYXdpbmcgd2l0aCBhbiBpbnZhbGlkIHByb2dyYW0gc2hvdWxk
IGdlbmVyYXRlIHNvbWUgR0wgZXJyb3IgWFhYCitQQVNTIGxpbmtpbmcgc2hvdWxkIGZhaWwgd2l0
aCBpbi11c2UgZm9ybWVybHkgZ29vZCBwcm9ncmFtLCB3aXRoIG5ldyBiYWQgc2hhZGVyIGF0dGFj
aGVkCitQQVNTIGRyYXdpbmcgd2l0aCBhIHZhbGlkIHdoZW4gbGFzdCB1c2VkIHByb2dyYW0gc2hv
dWxkbid0IGdlbmVyYXRlIGEgR0wgZXJyb3IKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRy
dWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJn
bC9wcm9ncmFtLXRlc3QuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2NhbnZh
cy93ZWJnbC9wcm9ncmFtLXRlc3QuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zh
c3QvY2FudmFzL3dlYmdsL3Byb2dyYW0tdGVzdC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDI0OCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJh
bnNpdGlvbmFsLy9FTiIKKyAgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+
Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50
PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiLz4KKzx0aXRsZT5XZWJHTCBQcm9ncmFtIENvbXBp
bGluZy9MaW5raW5nIENvbmZvcm1hbmNlIFRlc3Q8L3RpdGxlPgorPGxpbmsgcmVsPSJzdHlsZXNo
ZWV0IiBocmVmPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiLz4KKzxzY3Jp
cHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiIHR5cGU9InRleHQvamF2
YXNjcmlwdCI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3dlYmdsLXRlc3QuanMi
IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYg
aWQ9ImRlc2NyaXB0aW9uIj48L2Rpdj4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPGNhbnZh
cyBpZD0iY2FudmFzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIj4gPC9jYW52YXM+Cis8c2NyaXB0IHR5
cGU9InRleHQvamF2YXNjcmlwdCI+CitmdW5jdGlvbiBnbygpIHsKKyAgICBkZXNjcmlwdGlvbigi
VGVzdHMgdGhhdCBwcm9ncmFtIGNvbXBpbGluZy9saW5raW5nL3VzaW5nIHdvcmtzIGNvcnJlY3Rs
eS4iKTsKKworICAgIGRlYnVnKCIiKTsKKyAgICBkZWJ1ZygiQ2FudmFzLmdldENvbnRleHQiKTsK
KworICAgIHZhciBnbCA9IGNyZWF0ZTNEQ29udGV4dChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
Y2FudmFzIikpOworICAgIGlmICghZ2wpIHsKKyAgICAgICAgdGVzdEZhaWxlZCgiY29udGV4dCBk
b2VzIG5vdCBleGlzdCIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgdGVzdFBhc3Nl
ZCgiY29udGV4dCBleGlzdHMiKTsKKworICAgIGdsLmNsZWFyQ29sb3IoMC4wLCAwLjAsIDAuMCwg
MC4wKTsKKyAgICBnbC5jbGVhcihnbC5DT0xPUl9CVUZGRVJfQklUIHwgZ2wuREVQVEhfQlVGRkVS
X0JJVCk7CisKKworLy8vLy8vLyBDaGVjayBjb21waWxlU2hhZGVyKCkgLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8KKworICAgIHZhciB2cyA9IGdsLmNyZWF0ZVNoYWRlcihnbC5WRVJURVhf
U0hBREVSKTsKKyAgICBnbC5zaGFkZXJTb3VyY2UodnMsICJhdHRyaWJ1dGUgdmVjNCBhVmVydGV4
OyBhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7IHZhcnlpbmcgdmVjNCB2Q29sb3I7IHZvaWQgbWFpbigp
IHsgdkNvbG9yID0gYUNvbG9yOyBnbF9Qb3NpdGlvbiA9IGFWZXJ0ZXg7IH0iKTsKKyAgICBnbC5j
b21waWxlU2hhZGVyKHZzKTsKKworICAgIGFzc2VydE1zZyhnbC5nZXRTaGFkZXJQYXJhbWV0ZXIo
dnMsIGdsLkNPTVBJTEVfU1RBVFVTKSA9PSB0cnVlLAorICAgICAgICAgICAgICAiZ29vZCB2ZXJ0
ZXggc2hhZGVyIHNob3VsZCBjb21waWxlIik7CisKKyAgICB2YXIgdnMyID0gZ2wuY3JlYXRlU2hh
ZGVyKGdsLlZFUlRFWF9TSEFERVIpOworICAgIGdsLnNoYWRlclNvdXJjZSh2czIsICJhdHRyaWJ1
dGUgdmVjNCBhVmVydGV4OyBhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7IHZhcnlpbmcgdmVjNCB2Q29s
b3I7IHZvaWQgbWFpbigpIHsgdkNvbG9yID0gYUNvbG9yOyBnbF9Qb3NpdGlvbiA9IGFWZXJ0ZXgg
KiAwLjU7IH0iKTsKKyAgICBnbC5jb21waWxlU2hhZGVyKHZzMik7CisKKyAgICBhc3NlcnRNc2co
Z2wuZ2V0U2hhZGVyUGFyYW1ldGVyKHZzMiwgZ2wuQ09NUElMRV9TVEFUVVMpID09IHRydWUsCisg
ICAgICAgICAgICAgICJnb29kIHZlcnRleCBzaGFkZXIgIzIgc2hvdWxkIGNvbXBpbGUiKTsKKwor
ICAgIHZhciB2c0JhZCA9IGdsLmNyZWF0ZVNoYWRlcihnbC5WRVJURVhfU0hBREVSKTsKKyAgICBn
bC5zaGFkZXJTb3VyY2UodnNCYWQsICJXSUxMIE5PVCBDT01QSUxFOyIpOworICAgIGdsLmNvbXBp
bGVTaGFkZXIodnNCYWQpOworCisgICAgYXNzZXJ0TXNnKGdsLmdldFNoYWRlclBhcmFtZXRlcih2
c0JhZCwgZ2wuQ09NUElMRV9TVEFUVVMpID09IGZhbHNlLAorICAgICAgICAgICAgICAiYmFkIHZl
cnRleCBzaGFkZXIgc2hvdWxkIGZhaWwgdG8gY29tcGlsZSIpOworCisgICAgdmFyIGZzID0gZ2wu
Y3JlYXRlU2hhZGVyKGdsLkZSQUdNRU5UX1NIQURFUik7CisgICAgZ2wuc2hhZGVyU291cmNlKGZz
LCAiI2lmZGVmIEdMX0VTXG5wcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNlbmRpZlxuIHZhcnlp
bmcgdmVjNCB2Q29sb3I7IHZvaWQgbWFpbigpIHsgZ2xfRnJhZ0NvbG9yID0gdkNvbG9yOyB9Iik7
CisgICAgZ2wuY29tcGlsZVNoYWRlcihmcyk7CisKKyAgICBhc3NlcnRNc2coZ2wuZ2V0U2hhZGVy
UGFyYW1ldGVyKGZzLCBnbC5DT01QSUxFX1NUQVRVUykgPT0gdHJ1ZSwKKyAgICAgICAgICAgICAg
Imdvb2QgZnJhZ21lbnQgc2hhZGVyIHNob3VsZCBjb21waWxlIik7CisKKyAgICB2YXIgZnMyID0g
Z2wuY3JlYXRlU2hhZGVyKGdsLkZSQUdNRU5UX1NIQURFUik7CisgICAgZ2wuc2hhZGVyU291cmNl
KGZzMiwgIiNpZmRlZiBHTF9FU1xucHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZW5kaWZcbiB2
YXJ5aW5nIHZlYzQgdkNvbG9yOyB2b2lkIG1haW4oKSB7IGdsX0ZyYWdDb2xvciA9IHZDb2xvciAq
IDAuNTsgfSIpOworICAgIGdsLmNvbXBpbGVTaGFkZXIoZnMyKTsKKworICAgIGFzc2VydE1zZyhn
bC5nZXRTaGFkZXJQYXJhbWV0ZXIoZnMyLCBnbC5DT01QSUxFX1NUQVRVUykgPT0gdHJ1ZSwKKyAg
ICAgICAgICAgICAgImdvb2QgZnJhZ21lbnQgc2hhZGVyICMyIHNob3VsZCBjb21waWxlIik7CisK
KyAgICB2YXIgZnNCYWQgPSBnbC5jcmVhdGVTaGFkZXIoZ2wuRlJBR01FTlRfU0hBREVSKTsKKyAg
ICBnbC5zaGFkZXJTb3VyY2UoZnNCYWQsICJXSUxMIE5PVCBDT01QSUxFOyIpOworICAgIGdsLmNv
bXBpbGVTaGFkZXIoZnNCYWQpOworCisgICAgYXNzZXJ0TXNnKGdsLmdldFNoYWRlclBhcmFtZXRl
cihmc0JhZCwgZ2wuQ09NUElMRV9TVEFUVVMpID09IGZhbHNlLAorICAgICAgICAgICAgICAiYmFk
IGZyYWdtZW50IHNoYWRlciBzaG91bGQgZmFpbCB0byBjb21waWxlIik7CisKKyAgICBhc3NlcnRN
c2coZ2wuZ2V0RXJyb3IoKSA9PSBnbC5OT19FUlJPUiwKKyAgICAgICAgICAgICAgInNob3VsZCBi
ZSBubyBlcnJvcnMgYXQgdGhpcyBwb2ludCIpOworCisvLy8vLy8vIENoZWNrIGF0dGFjaFNoYWRl
cigpIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyAgICBmdW5jdGlvbiBjaGVja0F0
dGFjaFNoYWRlcihhbHJlYWR5X2F0dGFjaGVkX3NoYWRlcnMsIHNoYWRlciwgZXhwZWN0ZWRfZXJy
b3JfY29kZSwgZXJybXNnKSB7CisgICAgICAgIHZhciBwcm9nID0gZ2wuY3JlYXRlUHJvZ3JhbSgp
OworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFscmVhZHlfYXR0YWNoZWRfc2hhZGVycy5s
ZW5ndGg7ICsraSkKKyAgICAgICAgICAgIGdsLmF0dGFjaFNoYWRlcihwcm9nLCBhbHJlYWR5X2F0
dGFjaGVkX3NoYWRlcnNbaV0pOworICAgICAgICBpZihnbC5nZXRFcnJvcigpICE9IGdsLk5PX0VS
Uk9SKQorICAgICAgICAgICAgYXNzZXJ0TXNnKGZhbHNlLCAidW5leHBlY3RlZCBlcnJvciBpbiBh
dHRhY2hTaGFkZXIoKSIpOworICAgICAgICBnbC5hdHRhY2hTaGFkZXIocHJvZywgc2hhZGVyKTsK
KyAgICAgICAgYXNzZXJ0TXNnKGdsLmdldEVycm9yKCkgPT0gZXhwZWN0ZWRfZXJyb3JfY29kZSwg
ZXJybXNnKTsKKyAgICB9CisKKyAgICBjaGVja0F0dGFjaFNoYWRlcihbXSwgdnMsIGdsLk5PX0VS
Uk9SLCAiYXR0YWNoaW5nIGEgdmVydGV4IHNoYWRlciBzaG91bGQgc3VjY2VlZCIpOworICAgIGNo
ZWNrQXR0YWNoU2hhZGVyKFt2c10sIHZzLCBnbC5JTlZBTElEX09QRVJBVElPTiwKKyAgICAgICAg
ICAgICAgICAgICAgICAiYXR0YWNoaW5nIGFuIGFscmVhZHkgYXR0YWNoZWQgdmVydGV4IHNoYWRl
ciBzaG91bGQgZ2VuZXJhdGUgSU5WQUxJRF9PUEVSQVRJT04iKTsKKyAgICBjaGVja0F0dGFjaFNo
YWRlcihbXSwgZnMsIGdsLk5PX0VSUk9SLCAiYXR0YWNoaW5nIGEgZnJhZ21lbnQgc2hhZGVyIHNo
b3VsZCBzdWNjZWVkIik7CisgICAgY2hlY2tBdHRhY2hTaGFkZXIoW2ZzXSwgZnMsIGdsLklOVkFM
SURfT1BFUkFUSU9OLAorICAgICAgICAgICAgICAgICAgICAgICJhdHRhY2hpbmcgYW4gYWxyZWFk
eSBhdHRhY2hlZCBmcmFnbWVudCBzaGFkZXIgc2hvdWxkIGdlbmVyYXRlIElOVkFMSURfT1BFUkFU
SU9OIik7CisKKy8vLy8vLy8gQ2hlY2sgZGV0YWNoU2hhZGVyKCkgLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8KKworICAgIGZ1bmN0aW9uIGNoZWNrRGV0YWNoU2hhZGVyKGFscmVhZHlfYXR0
YWNoZWRfc2hhZGVycywgc2hhZGVyLCBleHBlY3RlZF9lcnJvcl9jb2RlLCBlcnJtc2cpIHsKKyAg
ICAgICAgdmFyIHByb2cgPSBnbC5jcmVhdGVQcm9ncmFtKCk7CisgICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgYWxyZWFkeV9hdHRhY2hlZF9zaGFkZXJzLmxlbmd0aDsgKytpKQorICAgICAgICAg
ICAgZ2wuYXR0YWNoU2hhZGVyKHByb2csIGFscmVhZHlfYXR0YWNoZWRfc2hhZGVyc1tpXSk7Cisg
ICAgICAgIGlmKGdsLmdldEVycm9yKCkgIT0gZ2wuTk9fRVJST1IpCisgICAgICAgICAgICBhc3Nl
cnRNc2coZmFsc2UsICJ1bmV4cGVjdGVkIGVycm9yIGluIGF0dGFjaFNoYWRlcigpIik7CisgICAg
ICAgIGdsLmRldGFjaFNoYWRlcihwcm9nLCBzaGFkZXIpOworICAgICAgICBhc3NlcnRNc2coZ2wu
Z2V0RXJyb3IoKSA9PSBleHBlY3RlZF9lcnJvcl9jb2RlLCBlcnJtc2cpOworICAgIH0KKworICAg
IGNoZWNrRGV0YWNoU2hhZGVyKFt2c10sIHZzLCBnbC5OT19FUlJPUiwgImRldGFjaGluZyBhIHZl
cnRleCBzaGFkZXIgc2hvdWxkIHN1Y2NlZWQiKTsKKyAgICBjaGVja0RldGFjaFNoYWRlcihbZnNd
LCB2cywgZ2wuSU5WQUxJRF9PUEVSQVRJT04sCisgICAgICAgICAgICAgICAgICAgICAgImRldGFj
aGluZyBhIG5vdCBhbHJlYWR5IGF0dGFjaGVkIHZlcnRleCBzaGFkZXIgc2hvdWxkIGdlbmVyYXRl
IElOVkFMSURfT1BFUkFUSU9OIik7CisgICAgY2hlY2tEZXRhY2hTaGFkZXIoW2ZzXSwgZnMsIGds
Lk5PX0VSUk9SLCAiZGV0YWNoaW5nIGEgZnJhZ21lbnQgc2hhZGVyIHNob3VsZCBzdWNjZWVkIik7
CisgICAgY2hlY2tEZXRhY2hTaGFkZXIoW3ZzXSwgZnMsIGdsLklOVkFMSURfT1BFUkFUSU9OLAor
ICAgICAgICAgICAgICAgICAgICAgICJkZXRhY2hpbmcgYSBub3QgYWxyZWFkeSBhdHRhY2hlZCBm
cmFnbWVudCBzaGFkZXIgc2hvdWxkIGdlbmVyYXRlIElOVkFMSURfT1BFUkFUSU9OIik7CisKKy8v
Ly8vLy8gQ2hlY2sgZ2V0QXR0YWNoZWRTaGFkZXJzKCkgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8KKworICAgIGZ1bmN0aW9uIGNoZWNrR2V0QXR0YWNoZWRTaGFkZXJzKHNoYWRlcnNfdG9f
YXR0YWNoLCBzaGFkZXJzX3RvX2RldGFjaCwgZXhwZWN0ZWRfc2hhZGVycywgZXJybXNnKSB7Cisg
ICAgICAgIHZhciBwcm9nID0gZ2wuY3JlYXRlUHJvZ3JhbSgpOworICAgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IHNoYWRlcnNfdG9fYXR0YWNoLmxlbmd0aDsgKytpKQorICAgICAgICAgICAgZ2wu
YXR0YWNoU2hhZGVyKHByb2csIHNoYWRlcnNfdG9fYXR0YWNoW2ldKTsKKyAgICAgICAgaWYoZ2wu
Z2V0RXJyb3IoKSAhPSBnbC5OT19FUlJPUikKKyAgICAgICAgICAgIGFzc2VydE1zZyhmYWxzZSwg
InVuZXhwZWN0ZWQgZXJyb3IgaW4gYXR0YWNoU2hhZGVyKCkiKTsKKyAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBzaGFkZXJzX3RvX2RldGFjaC5sZW5ndGg7ICsraSkKKyAgICAgICAgICAgIGds
LmRldGFjaFNoYWRlcihwcm9nLCBzaGFkZXJzX3RvX2RldGFjaFtpXSk7CisgICAgICAgIGlmKGds
LmdldEVycm9yKCkgIT0gZ2wuTk9fRVJST1IpCisgICAgICAgICAgICBhc3NlcnRNc2coZmFsc2Us
ICJ1bmV4cGVjdGVkIGVycm9yIGluIGRldGFjaFNoYWRlcigpIik7CisgICAgICAgIGFzc2VydE1z
ZyhhcmVBcnJheXNFcXVhbChnbC5nZXRBdHRhY2hlZFNoYWRlcnMocHJvZyksIGV4cGVjdGVkX3No
YWRlcnMpLCBlcnJtc2cpOworICAgIH0KKyAgICBjaGVja0dldEF0dGFjaGVkU2hhZGVycyhbXSwg
W10sIFtdLCAiZ2V0QXR0YWNoZWRTaGFkZXJzIHNob3VsZCByZXR1cm4gYW4gZW1wdHkgbGlzdCBi
eSBkZWZhdWx0Iik7CisgICAgY2hlY2tHZXRBdHRhY2hlZFNoYWRlcnMoW2ZzXSwgW10sIFtmc10s
ICJhdHRhY2hpbmcgYSBzaW5nbGUgc2hhZGVyIHNob3VsZCBnaXZlIHRoZSBleHBlY3RlZCBsaXN0
Iik7CisgICAgY2hlY2tHZXRBdHRhY2hlZFNoYWRlcnMoW2ZzLCB2cywgZnMyLCB2czJdLCBbXSwg
W2ZzLCB2cywgZnMyLCB2czJdLAorICAgICAgICAiYXR0YWNoaW5nIHNvbWUgc2hhZGVycyBzaG91
bGQgZ2l2ZSB0aGUgZXhwZWN0ZWQgbGlzdCIpOworICAgIGNoZWNrR2V0QXR0YWNoZWRTaGFkZXJz
KFtmc10sIFtmc10sIFtdLCAiYXR0YWNoaW5nIGEgc2hhZGVyIGFuZCBkZXRhY2hpbmcgaXQgc2hv
dWQgbGVhdmUgYW4gZW1wdHkgbGlzdCIpOworICAgIGNoZWNrR2V0QXR0YWNoZWRTaGFkZXJzKFtm
cywgdnMsIGZzMiwgdnMyXSwgW2ZzLCB2cywgZnMyLCB2czJdLCBbXSwKKyAgICAgICAgImF0dGFj
aGluZyBzb21lIHNoYWRlcnMgYW5kIGRldGFjaGluZyB0aGVtIGluIHNhbWUgb3JkZXIgc2hvdWQg
bGVhdmUgYW4gZW1wdHkgbGlzdCIpOworICAgIGNoZWNrR2V0QXR0YWNoZWRTaGFkZXJzKFtmcywg
dnMsIGZzMiwgdnMyXSwgW2ZzLCB2czIsIHZzLCBmczJdLCBbXSwKKyAgICAgICAgImF0dGFjaGlu
ZyBzb21lIHNoYWRlcnMgYW5kIGRldGFjaGluZyB0aGVtIGluIHJhbmRvbSBvcmRlciBzaG91ZCBs
ZWF2ZSBhbiBlbXB0eSBsaXN0Iik7CisgICAgY2hlY2tHZXRBdHRhY2hlZFNoYWRlcnMoW2ZzLCB2
cywgZnMyLCB2czJdLCBbdnNdLCBbZnMsIGZzMiwgdnMyXSwKKyAgICAgICAgImF0dGFjaGluZyBh
bmQgZGV0YWNoaW5nIHNvbWUgc2hhZGVycyBzaG91bGQgbGVhdmUgdGhlIGRpZmZlcmVuY2UgbGlz
dCIpOworICAgIGNoZWNrR2V0QXR0YWNoZWRTaGFkZXJzKFtmcywgdnMsIGZzMiwgdnMyXSwgW2Zz
LCB2czJdLCBbdnMsIGZzMl0sCisgICAgICAgICJhdHRhY2hpbmcgYW5kIGRldGFjaGluZyBzb21l
IHNoYWRlcnMgc2hvdWxkIGxlYXZlIHRoZSBkaWZmZXJlbmNlIGxpc3QiKTsKKyAgICBjaGVja0dl
dEF0dGFjaGVkU2hhZGVycyhbZnNCYWRdLCBbXSwgW2ZzQmFkXSwKKyAgICAgICAgImF0dGFjaGlu
ZyBhIHNoYWRlciB0aGF0IGZhaWxlZCB0byBjb21waWxlIHNob3VsZCBzdGlsbCBzaG93IGl0IGlu
IHRoZSBsaXN0Iik7CisgICAgY2hlY2tHZXRBdHRhY2hlZFNoYWRlcnMoW2ZzLCB2c0JhZCwgZnMy
XSwgW10sIFtmcywgdnNCYWQsIGZzMl0sCisgICAgICAgICJhdHRhY2hpbmcgc2hhZGVycywgaW5j
bHVkaW5nIG9uZSB0aGF0IGZhaWxlZCB0byBjb21waWxlLCBzaG91bGQgc3RpbGwgc2hvdyB0aGUg
aXQgaW4gdGhlIGxpc3QiKTsKKworLy8vLy8vLyBDaGVjayBsaW5rUHJvZ3JhbSgpIGFuZCB1c2VQ
cm9ncmFtIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyAgICBmdW5jdGlvbiBjaGVj
a0xpbmtBbmRVc2Uoc2hhZGVycywgZXhwZWN0ZWRfc3RhdHVzLCBlcnJtc2cpIHsKKyAgICAgICAg
dmFyIHByb2cgPSBnbC5jcmVhdGVQcm9ncmFtKCk7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgc2hhZGVycy5sZW5ndGg7ICsraSkKKyAgICAgICAgICAgIGdsLmF0dGFjaFNoYWRlcihwcm9n
LCBzaGFkZXJzW2ldKTsKKyAgICAgICAgZ2wuYmluZEF0dHJpYkxvY2F0aW9uKHByb2csIDAsICJh
VmVydGV4Iik7CisgICAgICAgIGdsLmJpbmRBdHRyaWJMb2NhdGlvbihwcm9nLCAxLCAiYUNvbG9y
Iik7CisgICAgICAgIGdsLmxpbmtQcm9ncmFtKHByb2cpOworICAgICAgICBpZihnbC5nZXRFcnJv
cigpICE9IGdsLk5PX0VSUk9SKQorICAgICAgICAgICAgYXNzZXJ0TXNnKGZhbHNlLCAidW5leHBl
Y3RlZCBlcnJvciBpbiBsaW5rUHJvZ3JhbSgpIik7CisgICAgICAgIGFzc2VydE1zZyhnbC5nZXRQ
cm9ncmFtUGFyYW1ldGVyKHByb2csIGdsLkxJTktfU1RBVFVTKSA9PSBleHBlY3RlZF9zdGF0dXMs
CisgICAgICAgICAgICAgICAgICBlcnJtc2cpOworICAgICAgICBpZiAoZXhwZWN0ZWRfc3RhdHVz
ID09IHRydWUgJiYgZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9nLCBnbC5MSU5LX1NUQVRVUykg
PT0gZmFsc2UpCisgICAgICAgICAgICBkZWJ1ZyhnbC5nZXRQcm9ncmFtSW5mb0xvZyhwcm9nKSk7
CisgICAgICAgIGlmKGdsLmdldEVycm9yKCkgIT0gZ2wuTk9fRVJST1IpCisgICAgICAgICAgICBh
c3NlcnRNc2coZmFsc2UsICJ1bmV4cGVjdGVkIGVycm9yIGluIGdldFByb2dyYW1QYXJhbWV0ZXIo
KSIpOworICAgICAgICBnbC51c2VQcm9ncmFtKHByb2cpOworICAgICAgICBpZihleHBlY3RlZF9z
dGF0dXMgPT0gdHJ1ZSkKKyAgICAgICAgICAgIGFzc2VydE1zZyhnbC5nZXRFcnJvcigpID09IGds
Lk5PX0VSUk9SLCAidXNpbmcgYSB2YWxpZCBwcm9ncmFtIHNob3VsZCBzdWNjZWVkIik7CisgICAg
ICAgIGlmKGV4cGVjdGVkX3N0YXR1cyA9PSBmYWxzZSkKKyAgICAgICAgICAgIGFzc2VydE1zZyhn
bC5nZXRFcnJvcigpID09IGdsLklOVkFMSURfT1BFUkFUSU9OLAorICAgICAgICAgICAgICAgICJ1
c2luZyBhbiBpbnZhbGlkIHByb2dyYW0gc2hvdWxkIGdlbmVyYXRlIElOVkFMSURfT1BFUkFUSU9O
Iik7CisgICAgICAgIHJldHVybiBwcm9nOworICAgIH0KKworICAgIHZhciBwcm9nR29vZDEgPSBj
aGVja0xpbmtBbmRVc2UoW3ZzLCBmc10sIHRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAidmFsaWQgcHJvZ3JhbSBzaG91bGQgbGluayIpOworCisgICAg
dmFyIHByb2dHb29kMiA9IGNoZWNrTGlua0FuZFVzZShbdnMsIGZzMl0sIHRydWUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsaWQgcHJvZ3JhbSAjMiBz
aG91bGQgbGluayIpOworCisgICAgdmFyIHByb2dCYWQxID0gY2hlY2tMaW5rQW5kVXNlKFt2c10s
IGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHJv
Z3JhbSB3aXRoIG5vIGZyYWdtZW50IHNoYWRlciBzaG91bGQgZmFpbCB0byBsaW5rIik7CisKKyAg
ICB2YXIgcHJvZ0JhZDIgPSBjaGVja0xpbmtBbmRVc2UoW2ZzXSwgZmFsc2UsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwcm9ncmFtIHdpdGggbm8gdmVydGV4
IHNoYWRlciBzaG91bGQgZmFpbCB0byBsaW5rIik7CisKKyAgICB2YXIgcHJvZ0JhZDMgPSBjaGVj
a0xpbmtBbmRVc2UoW3ZzQmFkLCBmc10sIGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAicHJvZ3JhbSB3aXRoIGJhZCB2ZXJ0ZXggc2hhZGVyIHNob3Vs
ZCBmYWlsIHRvIGxpbmsiKTsKKworICAgIHZhciBwcm9nQmFkNCA9IGNoZWNrTGlua0FuZFVzZShb
dnMsIGZzQmFkXSwgZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJwcm9ncmFtIHdpdGggYmFkIGZyYWdtZW50IHNoYWRlciBzaG91bGQgZmFpbCB0byBs
aW5rIik7CisKKyAgICB2YXIgcHJvZ0JhZDUgPSBjaGVja0xpbmtBbmRVc2UoW3ZzQmFkLCBmc0Jh
ZF0sIGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
cHJvZ3JhbSB3aXRoIGJhZCBzaGFkZXJzIHNob3VsZCBmYWlsIHRvIGxpbmsiKTsKKworICAgIGds
LnVzZVByb2dyYW0ocHJvZ0dvb2QxKTsKKyAgICBhc3NlcnRNc2coZ2wuZ2V0RXJyb3IoKSA9PSBn
bC5OT19FUlJPUiwKKyAgICAgICAgICAgICAgInVzaW5nIGEgdmFsaWQgcHJvZ3JhbSBzaG91bGRu
J3QgZ2VuZXJhdGUgYSBHTCBlcnJvciIpOworCisgICAgdmFyIHZidWYgPSBnbC5jcmVhdGVCdWZm
ZXIoKTsKKyAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdmJ1Zik7CisgICAgZ2wu
YnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIG5ldyBGbG9hdDMyQXJyYXkoWworICAgICAgICAg
ICAgICAwLjAsIDAuMCwgMC4wLCAxLjAsCisJCQkJCQkJMS4wLCAwLjAsIDAuMCwgMS4wLAorCQkJ
CQkJCTEuMCwgMS4wLCAwLjAsIDEuMCwKKwkJCQkJCQkwLjAsIDEuMCwgMC4wLCAxLjBdKSwgZ2wu
U1RBVElDX0RSQVcpOworICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoMCwgNCwgZ2wuRkxPQVQs
IGZhbHNlLCAwLCAwKTsKKyAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSgwKTsKKyAgICBn
bC52ZXJ0ZXhBdHRyaWIzZigxLCAxLjAsIDAuMCwgMC4wKTsKKworICAgIGFzc2VydE1zZyhnbC5n
ZXRFcnJvcigpID09IGdsLk5PX0VSUk9SLAorICAgICAgICAgICAgICAic2hvdWxkIGJlIG5vIGVy
cm9ycyBhdCB0aGlzIHBvaW50ICMyIik7CisKKyAgICBnbC51c2VQcm9ncmFtKHByb2dHb29kMSk7
CisgICAgZ2wuZHJhd0FycmF5cyhnbC5UUklBTkdMRVMsIDAsIDMpOworICAgIGFzc2VydE1zZyhn
bC5nZXRFcnJvcigpID09IGdsLk5PX0VSUk9SLAorICAgICAgICAgICAgICAiZHJhd2luZyB3aXRo
IGEgdmFsaWQgcHJvZ3JhbSBzaG91bGRuJ3QgZ2VuZXJhdGUgYSBHTCBlcnJvciIpOworCisgICAg
Z2wudXNlUHJvZ3JhbShwcm9nQmFkMSk7CisgICAgYXNzZXJ0TXNnKGdsLmdldEVycm9yKCkgPT0g
Z2wuSU5WQUxJRF9PUEVSQVRJT04sCisgICAgICAgICAgICAgICJ1c2luZyBhbiBpbnZhbGlkIHBy
b2dyYW0gc2hvdWxkIGdlbmVyYXRlIElOVkFMSURfT1BFUkFUSU9OIik7CisgICAgZ2wuZHJhd0Fy
cmF5cyhnbC5UUklBTkdMRVMsIDAsIDMpOworICAgIGFzc2VydE1zZyhnbC5nZXRFcnJvcigpICE9
IGdsLk5PX0VSUk9SLAorICAgICAgICAgICAgICAiZHJhd2luZyB3aXRoIGFuIGludmFsaWQgcHJv
Z3JhbSBzaG91bGQgZ2VuZXJhdGUgc29tZSBHTCBlcnJvciBYWFgiKTsKKworICAgIGdsLnVzZVBy
b2dyYW0ocHJvZ0dvb2QyKTsKKyAgICBnbC5hdHRhY2hTaGFkZXIocHJvZ0dvb2QyLCBmc0JhZCk7
CisgICAgZ2wubGlua1Byb2dyYW0ocHJvZ0dvb2QyKTsKKyAgICBhc3NlcnRNc2coZ2wuZ2V0UHJv
Z3JhbVBhcmFtZXRlcihwcm9nR29vZDIsIGdsLkxJTktfU1RBVFVTKSA9PSBmYWxzZSwKKyAgICAg
ICAgICAgICAgImxpbmtpbmcgc2hvdWxkIGZhaWwgd2l0aCBpbi11c2UgZm9ybWVybHkgZ29vZCBw
cm9ncmFtLCB3aXRoIG5ldyBiYWQgc2hhZGVyIGF0dGFjaGVkIik7CisKKyAgICBnbC51c2VQcm9n
cmFtKHByb2dHb29kMSk7CisgICAgZ2wuZHJhd0FycmF5cyhnbC5UUklBTkdMRVMsIDAsIDQpOwor
ICAgIGFzc2VydE1zZyhnbC5nZXRFcnJvcigpID09IGdsLk5PX0VSUk9SLAorICAgICAgICAgICAg
ICAiZHJhd2luZyB3aXRoIGEgdmFsaWQgd2hlbiBsYXN0IHVzZWQgcHJvZ3JhbSBzaG91bGRuJ3Qg
Z2VuZXJhdGUgYSBHTCBlcnJvciIpOworfQorCitkZWJ1ZygiIik7CitzdWNjZXNzZnVsbHlQYXJz
ZWQgPSB0cnVlOworCitnbygpOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVz
b3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+CisKKzwvYm9keT4KKzwvaHRtbD4K
</data>
<flag name="review"
          id="47523"
          type_id="1"
          status="+"
          setter="dglazkov"
    />
    <flag name="commit-queue"
          id="47524"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>60372</attachid>
            <date>2010-07-02 09:53:28 -0700</date>
            <delta_ts>2010-07-02 12:06:30 -0700</delta_ts>
            <desc>revised patch: remove tabs in the test file.</desc>
            <filename>linkp.patch</filename>
            <type>text/plain</type>
            <size>21843</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MjIyMykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjUgQEAKKzIwMTAtMDYtMzAgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBsaW5rUHJv
Z3JhbSBzaG91bGQgZmFpbCB3aGVuIHZlcnRleC9mcmFnbWVudCBzaGFkZXJzIGFyZSBub3QgYm90
aCBwcmVzZW50CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD00MTM4MAorCisgICAgICAgIFRlc3Q6IGZhc3QvY2FudmFzL3dlYmdsL3Byb2dyYW0tdGVzdC5o
dG1sCisKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uY3BwOiBBZGQgZmxhZyBm
b3IgbGluayBmYWlsdXJlIGR1ZSB0byBtaXNzaW5nIHNoYWRlcnMuCisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFByb2dyYW06OldlYkdMUHJvZ3JhbSk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2Vi
R0xQcm9ncmFtLmg6IEFkZCBpbnRlcmZhY2UgZm9yIGxpbmtGYWlsdXJlIGZsYWcuCisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFByb2dyYW06OmlzTGlua0ZhaWx1cmVGbGFnU2V0KToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUHJvZ3JhbTo6c2V0TGlua0ZhaWx1cmVGbGFnKToKKyAgICAgICAgKiBo
dG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRQcm9ncmFtUGFyYW1ldGVyKTogSW50ZXJjZXB0IHdo
ZW4gbGlua0ZhaWx1cmVGbGFnIGlzIHNldC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVy
aW5nQ29udGV4dDo6bGlua1Byb2dyYW0pOiBDaGVjayBpZiB0aGVyZSBhcmUgbWlzc2luZyBzaGFk
ZXJzIGFuZCBkb24ndCBsaW5rIGlmIHllcy4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFNo
YWRlci5jcHA6IENhY2hlIHNoYWRlciB0eXBlLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xTaGFk
ZXI6OldlYkdMU2hhZGVyKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFNoYWRlci5oOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMU2hhZGVyOjpnZXRUeXBlKToKKwogMjAxMC0w
Ni0zMCAgQ3NhYmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVu
cmV2aWV3ZWQgYnVpbGRmaXggYWZ0ZXIgcjYyMTk2IGFuZCByNjIyMTQuCkluZGV4OiBXZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFByb2dyYW0uY3BwCShyZXZpc2lvbiA2MjE5MikKKysrIFdlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xQcm9ncmFtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBA
QCBQYXNzUmVmUHRyPFdlYkdMUHJvZ3JhbT4gV2ViR0xQcm9ncmFtOjpjCiAKIFdlYkdMUHJvZ3Jh
bTo6V2ViR0xQcm9ncmFtKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY3R4KQogICAgIDogQ2FudmFz
T2JqZWN0KGN0eCkKKyAgICAsIG1fbGlua0ZhaWx1cmUoZmFsc2UpCiB7CiAgICAgc2V0T2JqZWN0
KGNvbnRleHQoKS0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+Y3JlYXRlUHJvZ3JhbSgpKTsKIH0KSW5k
ZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uaAkocmV2aXNpb24gNjIxOTIpCisrKyBXZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0
NiwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGludCBudW1BY3RpdmVBdHRyaWJM
b2NhdGlvbnMoKTsKICAgICAgICAgaW50IGdldEFjdGl2ZUF0dHJpYkxvY2F0aW9uKGludCBpbmRl
eCk7CiAKKyAgICAgICAgLy8gUmV0dXJuIHRydWUgbWVhbnMgZ2V0UHJvZ3JhbVBhcmFtZXRlcihM
SU5LX1NUQVRVUykgc2hvdWxkIHJldHVybgorICAgICAgICAvLyBmYWxzZTsgcmV0dXJuIGZhbHNl
IG1lYW5zIHdlIHNob3VsZCBhY3R1YWxseSBjYWxsCisgICAgICAgIC8vIGdldFByb2dyYW1QYXJh
bWV0ZXIoTElOS19TVEFUVVMpIHRvIGZpbmQgb3V0LgorICAgICAgICBib29sIGlzTGlua0ZhaWx1
cmVGbGFnU2V0KCkgY29uc3QgeyByZXR1cm4gbV9saW5rRmFpbHVyZTsgfQorICAgICAgICB2b2lk
IHNldExpbmtGYWlsdXJlRmxhZyhib29sIGZhaWxlZCkgeyBtX2xpbmtGYWlsdXJlID0gZmFpbGVk
OyB9CisKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIFdlYkdMUHJvZ3JhbShXZWJHTFJlbmRlcmlu
Z0NvbnRleHQqKTsKICAgICAgICAgCkBAIC01NSw2ICs2MSw4IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgdmlydHVhbCBib29sIGlzUHJvZ3JhbSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7
IH0KIAogICAgICAgICBWZWN0b3I8aW50PiBtX2FjdGl2ZUF0dHJpYkxvY2F0aW9uczsKKworICAg
ICAgICBib29sIG1fbGlua0ZhaWx1cmU7CiAgICAgfTsKICAgICAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4
dC5jcHAJKHJldmlzaW9uIDYyMTkyKQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRl
cmluZ0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzc2LDEwICsxMzc2LDE0IEBAIFdl
YkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFAKICAgICBpbnQgdmFsdWUgPSAw
OwogICAgIHN3aXRjaCAocG5hbWUpIHsKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERUxF
VEVfU1RBVFVTOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTktfU1RBVFVTOgogICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZBTElEQVRFX1NUQVRVUzoKICAgICAgICAgbV9jb250
ZXh0LT5nZXRQcm9ncmFtaXYocHJvZ3JhbSwgcG5hbWUsICZ2YWx1ZSk7CiAgICAgICAgIHJldHVy
biBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8Ym9vbD4odmFsdWUpKTsKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpMSU5LX1NUQVRVUzoKKyAgICAgICAgaWYgKHByb2dyYW0tPmlzTGlua0Zh
aWx1cmVGbGFnU2V0KCkpCisgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKGZhbHNlKTsK
KyAgICAgICAgbV9jb250ZXh0LT5nZXRQcm9ncmFtaXYocHJvZ3JhbSwgcG5hbWUsICZ2YWx1ZSk7
CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8Ym9vbD4odmFsdWUpKTsK
ICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJTkZPX0xPR19MRU5HVEg6CiAgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6QVRUQUNIRURfU0hBREVSUzoKICAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpBQ1RJVkVfQVRUUklCVVRFUzoKQEAgLTE3ODYsNiArMTc5MCwyOCBAQCB2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6bGlua1Byb2dyYW0oCiAgICAgVU5VU0VEX1BBUkFNKGVjKTsK
ICAgICBpZiAoIXZhbGlkYXRlV2ViR0xPYmplY3QocHJvZ3JhbSkpCiAgICAgICAgIHJldHVybjsK
KyAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkgeworICAgICAgICBWZWN0b3I8V2ViR0xTaGFk
ZXIqPiBzaGFkZXJzOworICAgICAgICBib29sIHN1Y2NlZWQgPSBnZXRBdHRhY2hlZFNoYWRlcnMo
cHJvZ3JhbSwgc2hhZGVycywgZWMpOworICAgICAgICBpZiAoc3VjY2VlZCkgeworICAgICAgICAg
ICAgYm9vbCB2U2hhZGVyID0gZmFsc2U7CisgICAgICAgICAgICBib29sIGZTaGFkZXIgPSBmYWxz
ZTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGlpID0gMDsgaWkgPCBzaGFkZXJzLnNpemUoKSAm
JiAoIXZTaGFkZXIgfHwgIWZTaGFkZXIpOyArK2lpKSB7CisgICAgICAgICAgICAgICAgaWYgKHNo
YWRlcnNbaWldLT5nZXRUeXBlKCkgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9TSEFERVIp
CisgICAgICAgICAgICAgICAgICAgIHZTaGFkZXIgPSB0cnVlOworICAgICAgICAgICAgICAgIGVs
c2UgaWYgKHNoYWRlcnNbaWldLT5nZXRUeXBlKCkgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdN
RU5UX1NIQURFUikKKyAgICAgICAgICAgICAgICAgICAgZlNoYWRlciA9IHRydWU7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBpZiAoIXZTaGFkZXIgfHwgIWZTaGFkZXIpCisgICAgICAgICAg
ICAgICAgc3VjY2VlZCA9IGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmICghc3VjY2VlZCkg
eworICAgICAgICAgICAgcHJvZ3JhbS0+c2V0TGlua0ZhaWx1cmVGbGFnKHRydWUpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHByb2dyYW0tPnNldExpbmtGYWlsdXJl
RmxhZyhmYWxzZSk7CisgICAgfQorCiAgICAgbV9jb250ZXh0LT5saW5rUHJvZ3JhbShwcm9ncmFt
KTsKICAgICBwcm9ncmFtLT5jYWNoZUFjdGl2ZUF0dHJpYkxvY2F0aW9ucygpOwogICAgIGNsZWFu
dXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMU2hhZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hh
ZGVyLmNwcAkocmV2aXNpb24gNjIxOTIpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hh
ZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQCBQYXNzUmVmUHRyPFdlYkdM
U2hhZGVyPiBXZWJHTFNoYWRlcjo6Y3JlCiAKIFdlYkdMU2hhZGVyOjpXZWJHTFNoYWRlcihXZWJH
TFJlbmRlcmluZ0NvbnRleHQqIGN0eCwgR3JhcGhpY3NDb250ZXh0M0Q6OldlYkdMRW51bVR5cGUg
dHlwZSkKICAgICA6IENhbnZhc09iamVjdChjdHgpCisgICAgLCBtX3R5cGUodHlwZSkKIHsKICAg
ICBzZXRPYmplY3QoY29udGV4dCgpLT5ncmFwaGljc0NvbnRleHQzRCgpLT5jcmVhdGVTaGFkZXIo
dHlwZSkpOwogfQpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNoYWRlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuaAkocmV2aXNpb24gNjIx
OTIpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM5LDEyICszOSwxNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIAogICAgICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJHTFNoYWRlcj4gY3JlYXRlKFdlYkdMUmVuZGVyaW5nQ29u
dGV4dCosIEdyYXBoaWNzQ29udGV4dDNEOjpXZWJHTEVudW1UeXBlKTsKIAorICAgICAgICBHcmFw
aGljc0NvbnRleHQzRDo6V2ViR0xFbnVtVHlwZSBnZXRUeXBlKCkgY29uc3QgeyByZXR1cm4gbV90
eXBlOyB9CisKICAgICBwcml2YXRlOgogICAgICAgICBXZWJHTFNoYWRlcihXZWJHTFJlbmRlcmlu
Z0NvbnRleHQqLCBHcmFwaGljc0NvbnRleHQzRDo6V2ViR0xFbnVtVHlwZSk7CiAKICAgICAgICAg
dmlydHVhbCB2b2lkIF9kZWxldGVPYmplY3QoUGxhdGZvcm0zRE9iamVjdCk7CiAKICAgICAgICAg
dmlydHVhbCBib29sIGlzU2hhZGVyKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgICAg
IEdyYXBoaWNzQ29udGV4dDNEOjpXZWJHTEVudW1UeXBlIG1fdHlwZTsKICAgICB9OwogICAgIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNjIyMjMpCisrKyBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxMC0w
Ni0zMCAgWmhlbnlhbyBNbyAgPHptb0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGxpbmtQcm9ncmFtIHNob3VsZCBmYWlsIHdoZW4g
dmVydGV4L2ZyYWdtZW50IHNoYWRlcnMgYXJlIG5vdCBib3RoIHByZXNlbnQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQxMzgwCisKKyAgICAgICAgKiBm
YXN0L2NhbnZhcy93ZWJnbC9wcm9ncmFtLXRlc3QtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAg
ICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9wcm9ncmFtLXRlc3QuaHRtbDogQWRkZWQuCisKIDIwMTAt
MDYtMzAgIENzYWJhIE9zenRyb2dvbsOhYyAgPG9zc3lAd2Via2l0Lm9yZz4KIAogICAgICAgICBV
bnJldmlld2VkIGZpeC4gVXBkYXRlIFF0IHNwZWNpZmljIGV4cGVjdGVkIGZpbGVzIGFmdGVyIHI2
MjIxNS4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3Byb2dyYW0tdGVzdC1l
eHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wv
cHJvZ3JhbS10ZXN0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zh
c3QvY2FudmFzL3dlYmdsL3Byb2dyYW0tdGVzdC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNTggQEAKK1Rlc3RzIHRoYXQgcHJvZ3JhbSBjb21waWxpbmcvbGlua2luZy91c2lu
ZyB3b3JrcyBjb3JyZWN0bHkuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBv
ZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCisKK0Nh
bnZhcy5nZXRDb250ZXh0CitQQVNTIGNvbnRleHQgZXhpc3RzCitQQVNTIGdvb2QgdmVydGV4IHNo
YWRlciBzaG91bGQgY29tcGlsZQorUEFTUyBnb29kIHZlcnRleCBzaGFkZXIgIzIgc2hvdWxkIGNv
bXBpbGUKK1BBU1MgYmFkIHZlcnRleCBzaGFkZXIgc2hvdWxkIGZhaWwgdG8gY29tcGlsZQorUEFT
UyBnb29kIGZyYWdtZW50IHNoYWRlciBzaG91bGQgY29tcGlsZQorUEFTUyBnb29kIGZyYWdtZW50
IHNoYWRlciAjMiBzaG91bGQgY29tcGlsZQorUEFTUyBiYWQgZnJhZ21lbnQgc2hhZGVyIHNob3Vs
ZCBmYWlsIHRvIGNvbXBpbGUKK1BBU1Mgc2hvdWxkIGJlIG5vIGVycm9ycyBhdCB0aGlzIHBvaW50
CitQQVNTIGF0dGFjaGluZyBhIHZlcnRleCBzaGFkZXIgc2hvdWxkIHN1Y2NlZWQKK1BBU1MgYXR0
YWNoaW5nIGFuIGFscmVhZHkgYXR0YWNoZWQgdmVydGV4IHNoYWRlciBzaG91bGQgZ2VuZXJhdGUg
SU5WQUxJRF9PUEVSQVRJT04KK1BBU1MgYXR0YWNoaW5nIGEgZnJhZ21lbnQgc2hhZGVyIHNob3Vs
ZCBzdWNjZWVkCitQQVNTIGF0dGFjaGluZyBhbiBhbHJlYWR5IGF0dGFjaGVkIGZyYWdtZW50IHNo
YWRlciBzaG91bGQgZ2VuZXJhdGUgSU5WQUxJRF9PUEVSQVRJT04KK1BBU1MgZGV0YWNoaW5nIGEg
dmVydGV4IHNoYWRlciBzaG91bGQgc3VjY2VlZAorUEFTUyBkZXRhY2hpbmcgYSBub3QgYWxyZWFk
eSBhdHRhY2hlZCB2ZXJ0ZXggc2hhZGVyIHNob3VsZCBnZW5lcmF0ZSBJTlZBTElEX09QRVJBVElP
TgorUEFTUyBkZXRhY2hpbmcgYSBmcmFnbWVudCBzaGFkZXIgc2hvdWxkIHN1Y2NlZWQKK1BBU1Mg
ZGV0YWNoaW5nIGEgbm90IGFscmVhZHkgYXR0YWNoZWQgZnJhZ21lbnQgc2hhZGVyIHNob3VsZCBn
ZW5lcmF0ZSBJTlZBTElEX09QRVJBVElPTgorUEFTUyBnZXRBdHRhY2hlZFNoYWRlcnMgc2hvdWxk
IHJldHVybiBhbiBlbXB0eSBsaXN0IGJ5IGRlZmF1bHQKK1BBU1MgYXR0YWNoaW5nIGEgc2luZ2xl
IHNoYWRlciBzaG91bGQgZ2l2ZSB0aGUgZXhwZWN0ZWQgbGlzdAorUEFTUyBhdHRhY2hpbmcgc29t
ZSBzaGFkZXJzIHNob3VsZCBnaXZlIHRoZSBleHBlY3RlZCBsaXN0CitQQVNTIGF0dGFjaGluZyBh
IHNoYWRlciBhbmQgZGV0YWNoaW5nIGl0IHNob3VkIGxlYXZlIGFuIGVtcHR5IGxpc3QKK1BBU1Mg
YXR0YWNoaW5nIHNvbWUgc2hhZGVycyBhbmQgZGV0YWNoaW5nIHRoZW0gaW4gc2FtZSBvcmRlciBz
aG91ZCBsZWF2ZSBhbiBlbXB0eSBsaXN0CitQQVNTIGF0dGFjaGluZyBzb21lIHNoYWRlcnMgYW5k
IGRldGFjaGluZyB0aGVtIGluIHJhbmRvbSBvcmRlciBzaG91ZCBsZWF2ZSBhbiBlbXB0eSBsaXN0
CitQQVNTIGF0dGFjaGluZyBhbmQgZGV0YWNoaW5nIHNvbWUgc2hhZGVycyBzaG91bGQgbGVhdmUg
dGhlIGRpZmZlcmVuY2UgbGlzdAorUEFTUyBhdHRhY2hpbmcgYW5kIGRldGFjaGluZyBzb21lIHNo
YWRlcnMgc2hvdWxkIGxlYXZlIHRoZSBkaWZmZXJlbmNlIGxpc3QKK1BBU1MgYXR0YWNoaW5nIGEg
c2hhZGVyIHRoYXQgZmFpbGVkIHRvIGNvbXBpbGUgc2hvdWxkIHN0aWxsIHNob3cgaXQgaW4gdGhl
IGxpc3QKK1BBU1MgYXR0YWNoaW5nIHNoYWRlcnMsIGluY2x1ZGluZyBvbmUgdGhhdCBmYWlsZWQg
dG8gY29tcGlsZSwgc2hvdWxkIHN0aWxsIHNob3cgdGhlIGl0IGluIHRoZSBsaXN0CitQQVNTIHZh
bGlkIHByb2dyYW0gc2hvdWxkIGxpbmsKK1BBU1MgdXNpbmcgYSB2YWxpZCBwcm9ncmFtIHNob3Vs
ZCBzdWNjZWVkCitQQVNTIHZhbGlkIHByb2dyYW0gIzIgc2hvdWxkIGxpbmsKK1BBU1MgdXNpbmcg
YSB2YWxpZCBwcm9ncmFtIHNob3VsZCBzdWNjZWVkCitQQVNTIHByb2dyYW0gd2l0aCBubyBmcmFn
bWVudCBzaGFkZXIgc2hvdWxkIGZhaWwgdG8gbGluaworUEFTUyB1c2luZyBhbiBpbnZhbGlkIHBy
b2dyYW0gc2hvdWxkIGdlbmVyYXRlIElOVkFMSURfT1BFUkFUSU9OCitQQVNTIHByb2dyYW0gd2l0
aCBubyB2ZXJ0ZXggc2hhZGVyIHNob3VsZCBmYWlsIHRvIGxpbmsKK1BBU1MgdXNpbmcgYW4gaW52
YWxpZCBwcm9ncmFtIHNob3VsZCBnZW5lcmF0ZSBJTlZBTElEX09QRVJBVElPTgorUEFTUyBwcm9n
cmFtIHdpdGggYmFkIHZlcnRleCBzaGFkZXIgc2hvdWxkIGZhaWwgdG8gbGluaworUEFTUyB1c2lu
ZyBhbiBpbnZhbGlkIHByb2dyYW0gc2hvdWxkIGdlbmVyYXRlIElOVkFMSURfT1BFUkFUSU9OCitQ
QVNTIHByb2dyYW0gd2l0aCBiYWQgZnJhZ21lbnQgc2hhZGVyIHNob3VsZCBmYWlsIHRvIGxpbmsK
K1BBU1MgdXNpbmcgYW4gaW52YWxpZCBwcm9ncmFtIHNob3VsZCBnZW5lcmF0ZSBJTlZBTElEX09Q
RVJBVElPTgorUEFTUyBwcm9ncmFtIHdpdGggYmFkIHNoYWRlcnMgc2hvdWxkIGZhaWwgdG8gbGlu
aworUEFTUyB1c2luZyBhbiBpbnZhbGlkIHByb2dyYW0gc2hvdWxkIGdlbmVyYXRlIElOVkFMSURf
T1BFUkFUSU9OCitQQVNTIHVzaW5nIGEgdmFsaWQgcHJvZ3JhbSBzaG91bGRuJ3QgZ2VuZXJhdGUg
YSBHTCBlcnJvcgorUEFTUyBzaG91bGQgYmUgbm8gZXJyb3JzIGF0IHRoaXMgcG9pbnQgIzIKK1BB
U1MgZHJhd2luZyB3aXRoIGEgdmFsaWQgcHJvZ3JhbSBzaG91bGRuJ3QgZ2VuZXJhdGUgYSBHTCBl
cnJvcgorUEFTUyB1c2luZyBhbiBpbnZhbGlkIHByb2dyYW0gc2hvdWxkIGdlbmVyYXRlIElOVkFM
SURfT1BFUkFUSU9OCitQQVNTIGRyYXdpbmcgd2l0aCBhbiBpbnZhbGlkIHByb2dyYW0gc2hvdWxk
IGdlbmVyYXRlIHNvbWUgR0wgZXJyb3IgWFhYCitQQVNTIGxpbmtpbmcgc2hvdWxkIGZhaWwgd2l0
aCBpbi11c2UgZm9ybWVybHkgZ29vZCBwcm9ncmFtLCB3aXRoIG5ldyBiYWQgc2hhZGVyIGF0dGFj
aGVkCitQQVNTIGRyYXdpbmcgd2l0aCBhIHZhbGlkIHdoZW4gbGFzdCB1c2VkIHByb2dyYW0gc2hv
dWxkbid0IGdlbmVyYXRlIGEgR0wgZXJyb3IKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRy
dWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJn
bC9wcm9ncmFtLXRlc3QuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2NhbnZh
cy93ZWJnbC9wcm9ncmFtLXRlc3QuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zh
c3QvY2FudmFzL3dlYmdsL3Byb2dyYW0tdGVzdC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDIzNSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJh
bnNpdGlvbmFsLy9FTiIKKyAgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+
Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50
PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiLz4KKzx0aXRsZT5XZWJHTCBQcm9ncmFtIENvbXBp
bGluZy9MaW5raW5nIENvbmZvcm1hbmNlIFRlc3Q8L3RpdGxlPgorPGxpbmsgcmVsPSJzdHlsZXNo
ZWV0IiBocmVmPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiLz4KKzxzY3Jp
cHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiIHR5cGU9InRleHQvamF2
YXNjcmlwdCI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3dlYmdsLXRlc3QuanMi
IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYg
aWQ9ImRlc2NyaXB0aW9uIj48L2Rpdj4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPGNhbnZh
cyBpZD0iY2FudmFzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIj4gPC9jYW52YXM+Cis8c2NyaXB0IHR5
cGU9InRleHQvamF2YXNjcmlwdCI+CitmdW5jdGlvbiBnbygpIHsKKyAgICBkZXNjcmlwdGlvbigi
VGVzdHMgdGhhdCBwcm9ncmFtIGNvbXBpbGluZy9saW5raW5nL3VzaW5nIHdvcmtzIGNvcnJlY3Rs
eS4iKTsKKworICAgIGRlYnVnKCIiKTsKKyAgICBkZWJ1ZygiQ2FudmFzLmdldENvbnRleHQiKTsK
KworICAgIHZhciBnbCA9IGNyZWF0ZTNEQ29udGV4dChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
Y2FudmFzIikpOworICAgIGlmICghZ2wpIHsKKyAgICAgICAgdGVzdEZhaWxlZCgiY29udGV4dCBk
b2VzIG5vdCBleGlzdCIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgdGVzdFBhc3Nl
ZCgiY29udGV4dCBleGlzdHMiKTsKKworICAgIGdsLmNsZWFyQ29sb3IoMC4wLCAwLjAsIDAuMCwg
MC4wKTsKKyAgICBnbC5jbGVhcihnbC5DT0xPUl9CVUZGRVJfQklUIHwgZ2wuREVQVEhfQlVGRkVS
X0JJVCk7CisKKworLy8vLy8vLyBDaGVjayBjb21waWxlU2hhZGVyKCkgLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8KKworICAgIHZhciB2cyA9IGdsLmNyZWF0ZVNoYWRlcihnbC5WRVJURVhf
U0hBREVSKTsKKyAgICBnbC5zaGFkZXJTb3VyY2UodnMsICJhdHRyaWJ1dGUgdmVjNCBhVmVydGV4
OyBhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7IHZhcnlpbmcgdmVjNCB2Q29sb3I7IHZvaWQgbWFpbigp
IHsgdkNvbG9yID0gYUNvbG9yOyBnbF9Qb3NpdGlvbiA9IGFWZXJ0ZXg7IH0iKTsKKyAgICBnbC5j
b21waWxlU2hhZGVyKHZzKTsKKworICAgIGFzc2VydE1zZyhnbC5nZXRTaGFkZXJQYXJhbWV0ZXIo
dnMsIGdsLkNPTVBJTEVfU1RBVFVTKSA9PSB0cnVlLAorICAgICAgICAgICAgICAiZ29vZCB2ZXJ0
ZXggc2hhZGVyIHNob3VsZCBjb21waWxlIik7CisKKyAgICB2YXIgdnMyID0gZ2wuY3JlYXRlU2hh
ZGVyKGdsLlZFUlRFWF9TSEFERVIpOworICAgIGdsLnNoYWRlclNvdXJjZSh2czIsICJhdHRyaWJ1
dGUgdmVjNCBhVmVydGV4OyBhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7IHZhcnlpbmcgdmVjNCB2Q29s
b3I7IHZvaWQgbWFpbigpIHsgdkNvbG9yID0gYUNvbG9yOyBnbF9Qb3NpdGlvbiA9IGFWZXJ0ZXgg
KiAwLjU7IH0iKTsKKyAgICBnbC5jb21waWxlU2hhZGVyKHZzMik7CisKKyAgICBhc3NlcnRNc2co
Z2wuZ2V0U2hhZGVyUGFyYW1ldGVyKHZzMiwgZ2wuQ09NUElMRV9TVEFUVVMpID09IHRydWUsCisg
ICAgICAgICAgICAgICJnb29kIHZlcnRleCBzaGFkZXIgIzIgc2hvdWxkIGNvbXBpbGUiKTsKKwor
ICAgIHZhciB2c0JhZCA9IGdsLmNyZWF0ZVNoYWRlcihnbC5WRVJURVhfU0hBREVSKTsKKyAgICBn
bC5zaGFkZXJTb3VyY2UodnNCYWQsICJXSUxMIE5PVCBDT01QSUxFOyIpOworICAgIGdsLmNvbXBp
bGVTaGFkZXIodnNCYWQpOworCisgICAgYXNzZXJ0TXNnKGdsLmdldFNoYWRlclBhcmFtZXRlcih2
c0JhZCwgZ2wuQ09NUElMRV9TVEFUVVMpID09IGZhbHNlLAorICAgICAgICAgICAgICAiYmFkIHZl
cnRleCBzaGFkZXIgc2hvdWxkIGZhaWwgdG8gY29tcGlsZSIpOworCisgICAgdmFyIGZzID0gZ2wu
Y3JlYXRlU2hhZGVyKGdsLkZSQUdNRU5UX1NIQURFUik7CisgICAgZ2wuc2hhZGVyU291cmNlKGZz
LCAiI2lmZGVmIEdMX0VTXG5wcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNlbmRpZlxuIHZhcnlp
bmcgdmVjNCB2Q29sb3I7IHZvaWQgbWFpbigpIHsgZ2xfRnJhZ0NvbG9yID0gdkNvbG9yOyB9Iik7
CisgICAgZ2wuY29tcGlsZVNoYWRlcihmcyk7CisKKyAgICBhc3NlcnRNc2coZ2wuZ2V0U2hhZGVy
UGFyYW1ldGVyKGZzLCBnbC5DT01QSUxFX1NUQVRVUykgPT0gdHJ1ZSwKKyAgICAgICAgICAgICAg
Imdvb2QgZnJhZ21lbnQgc2hhZGVyIHNob3VsZCBjb21waWxlIik7CisKKyAgICB2YXIgZnMyID0g
Z2wuY3JlYXRlU2hhZGVyKGdsLkZSQUdNRU5UX1NIQURFUik7CisgICAgZ2wuc2hhZGVyU291cmNl
KGZzMiwgIiNpZmRlZiBHTF9FU1xucHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZW5kaWZcbiB2
YXJ5aW5nIHZlYzQgdkNvbG9yOyB2b2lkIG1haW4oKSB7IGdsX0ZyYWdDb2xvciA9IHZDb2xvciAq
IDAuNTsgfSIpOworICAgIGdsLmNvbXBpbGVTaGFkZXIoZnMyKTsKKworICAgIGFzc2VydE1zZyhn
bC5nZXRTaGFkZXJQYXJhbWV0ZXIoZnMyLCBnbC5DT01QSUxFX1NUQVRVUykgPT0gdHJ1ZSwKKyAg
ICAgICAgICAgICAgImdvb2QgZnJhZ21lbnQgc2hhZGVyICMyIHNob3VsZCBjb21waWxlIik7CisK
KyAgICB2YXIgZnNCYWQgPSBnbC5jcmVhdGVTaGFkZXIoZ2wuRlJBR01FTlRfU0hBREVSKTsKKyAg
ICBnbC5zaGFkZXJTb3VyY2UoZnNCYWQsICJXSUxMIE5PVCBDT01QSUxFOyIpOworICAgIGdsLmNv
bXBpbGVTaGFkZXIoZnNCYWQpOworCisgICAgYXNzZXJ0TXNnKGdsLmdldFNoYWRlclBhcmFtZXRl
cihmc0JhZCwgZ2wuQ09NUElMRV9TVEFUVVMpID09IGZhbHNlLAorICAgICAgICAgICAgICAiYmFk
IGZyYWdtZW50IHNoYWRlciBzaG91bGQgZmFpbCB0byBjb21waWxlIik7CisKKyAgICBhc3NlcnRN
c2coZ2wuZ2V0RXJyb3IoKSA9PSBnbC5OT19FUlJPUiwKKyAgICAgICAgICAgICAgInNob3VsZCBi
ZSBubyBlcnJvcnMgYXQgdGhpcyBwb2ludCIpOworCisvLy8vLy8vIENoZWNrIGF0dGFjaFNoYWRl
cigpIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyAgICBmdW5jdGlvbiBjaGVja0F0
dGFjaFNoYWRlcihhbHJlYWR5X2F0dGFjaGVkX3NoYWRlcnMsIHNoYWRlciwgZXhwZWN0ZWRfZXJy
b3JfY29kZSwgZXJybXNnKSB7CisgICAgICAgIHZhciBwcm9nID0gZ2wuY3JlYXRlUHJvZ3JhbSgp
OworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFscmVhZHlfYXR0YWNoZWRfc2hhZGVycy5s
ZW5ndGg7ICsraSkKKyAgICAgICAgICAgIGdsLmF0dGFjaFNoYWRlcihwcm9nLCBhbHJlYWR5X2F0
dGFjaGVkX3NoYWRlcnNbaV0pOworICAgICAgICBpZihnbC5nZXRFcnJvcigpICE9IGdsLk5PX0VS
Uk9SKQorICAgICAgICAgICAgYXNzZXJ0TXNnKGZhbHNlLCAidW5leHBlY3RlZCBlcnJvciBpbiBh
dHRhY2hTaGFkZXIoKSIpOworICAgICAgICBnbC5hdHRhY2hTaGFkZXIocHJvZywgc2hhZGVyKTsK
KyAgICAgICAgYXNzZXJ0TXNnKGdsLmdldEVycm9yKCkgPT0gZXhwZWN0ZWRfZXJyb3JfY29kZSwg
ZXJybXNnKTsKKyAgICB9CisKKyAgICBjaGVja0F0dGFjaFNoYWRlcihbXSwgdnMsIGdsLk5PX0VS
Uk9SLCAiYXR0YWNoaW5nIGEgdmVydGV4IHNoYWRlciBzaG91bGQgc3VjY2VlZCIpOworICAgIGNo
ZWNrQXR0YWNoU2hhZGVyKFt2c10sIHZzLCBnbC5JTlZBTElEX09QRVJBVElPTiwKKyAgICAgICAg
ICAgICAgICAgICAgICAiYXR0YWNoaW5nIGFuIGFscmVhZHkgYXR0YWNoZWQgdmVydGV4IHNoYWRl
ciBzaG91bGQgZ2VuZXJhdGUgSU5WQUxJRF9PUEVSQVRJT04iKTsKKyAgICBjaGVja0F0dGFjaFNo
YWRlcihbXSwgZnMsIGdsLk5PX0VSUk9SLCAiYXR0YWNoaW5nIGEgZnJhZ21lbnQgc2hhZGVyIHNo
b3VsZCBzdWNjZWVkIik7CisgICAgY2hlY2tBdHRhY2hTaGFkZXIoW2ZzXSwgZnMsIGdsLklOVkFM
SURfT1BFUkFUSU9OLAorICAgICAgICAgICAgICAgICAgICAgICJhdHRhY2hpbmcgYW4gYWxyZWFk
eSBhdHRhY2hlZCBmcmFnbWVudCBzaGFkZXIgc2hvdWxkIGdlbmVyYXRlIElOVkFMSURfT1BFUkFU
SU9OIik7CisKKy8vLy8vLy8gQ2hlY2sgZGV0YWNoU2hhZGVyKCkgLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8KKworICAgIGZ1bmN0aW9uIGNoZWNrRGV0YWNoU2hhZGVyKGFscmVhZHlfYXR0
YWNoZWRfc2hhZGVycywgc2hhZGVyLCBleHBlY3RlZF9lcnJvcl9jb2RlLCBlcnJtc2cpIHsKKyAg
ICAgICAgdmFyIHByb2cgPSBnbC5jcmVhdGVQcm9ncmFtKCk7CisgICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgYWxyZWFkeV9hdHRhY2hlZF9zaGFkZXJzLmxlbmd0aDsgKytpKQorICAgICAgICAg
ICAgZ2wuYXR0YWNoU2hhZGVyKHByb2csIGFscmVhZHlfYXR0YWNoZWRfc2hhZGVyc1tpXSk7Cisg
ICAgICAgIGlmKGdsLmdldEVycm9yKCkgIT0gZ2wuTk9fRVJST1IpCisgICAgICAgICAgICBhc3Nl
cnRNc2coZmFsc2UsICJ1bmV4cGVjdGVkIGVycm9yIGluIGF0dGFjaFNoYWRlcigpIik7CisgICAg
ICAgIGdsLmRldGFjaFNoYWRlcihwcm9nLCBzaGFkZXIpOworICAgICAgICBhc3NlcnRNc2coZ2wu
Z2V0RXJyb3IoKSA9PSBleHBlY3RlZF9lcnJvcl9jb2RlLCBlcnJtc2cpOworICAgIH0KKworICAg
IGNoZWNrRGV0YWNoU2hhZGVyKFt2c10sIHZzLCBnbC5OT19FUlJPUiwgImRldGFjaGluZyBhIHZl
cnRleCBzaGFkZXIgc2hvdWxkIHN1Y2NlZWQiKTsKKyAgICBjaGVja0RldGFjaFNoYWRlcihbZnNd
LCB2cywgZ2wuSU5WQUxJRF9PUEVSQVRJT04sCisgICAgICAgICAgICAgICAgICAgICAgImRldGFj
aGluZyBhIG5vdCBhbHJlYWR5IGF0dGFjaGVkIHZlcnRleCBzaGFkZXIgc2hvdWxkIGdlbmVyYXRl
IElOVkFMSURfT1BFUkFUSU9OIik7CisgICAgY2hlY2tEZXRhY2hTaGFkZXIoW2ZzXSwgZnMsIGds
Lk5PX0VSUk9SLCAiZGV0YWNoaW5nIGEgZnJhZ21lbnQgc2hhZGVyIHNob3VsZCBzdWNjZWVkIik7
CisgICAgY2hlY2tEZXRhY2hTaGFkZXIoW3ZzXSwgZnMsIGdsLklOVkFMSURfT1BFUkFUSU9OLAor
ICAgICAgICAgICAgICAgICAgICAgICJkZXRhY2hpbmcgYSBub3QgYWxyZWFkeSBhdHRhY2hlZCBm
cmFnbWVudCBzaGFkZXIgc2hvdWxkIGdlbmVyYXRlIElOVkFMSURfT1BFUkFUSU9OIik7CisKKy8v
Ly8vLy8gQ2hlY2sgZ2V0QXR0YWNoZWRTaGFkZXJzKCkgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8KKworICAgIGZ1bmN0aW9uIGNoZWNrR2V0QXR0YWNoZWRTaGFkZXJzKHNoYWRlcnNfdG9f
YXR0YWNoLCBzaGFkZXJzX3RvX2RldGFjaCwgZXhwZWN0ZWRfc2hhZGVycywgZXJybXNnKSB7Cisg
ICAgICAgIHZhciBwcm9nID0gZ2wuY3JlYXRlUHJvZ3JhbSgpOworICAgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IHNoYWRlcnNfdG9fYXR0YWNoLmxlbmd0aDsgKytpKQorICAgICAgICAgICAgZ2wu
YXR0YWNoU2hhZGVyKHByb2csIHNoYWRlcnNfdG9fYXR0YWNoW2ldKTsKKyAgICAgICAgaWYoZ2wu
Z2V0RXJyb3IoKSAhPSBnbC5OT19FUlJPUikKKyAgICAgICAgICAgIGFzc2VydE1zZyhmYWxzZSwg
InVuZXhwZWN0ZWQgZXJyb3IgaW4gYXR0YWNoU2hhZGVyKCkiKTsKKyAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBzaGFkZXJzX3RvX2RldGFjaC5sZW5ndGg7ICsraSkKKyAgICAgICAgICAgIGds
LmRldGFjaFNoYWRlcihwcm9nLCBzaGFkZXJzX3RvX2RldGFjaFtpXSk7CisgICAgICAgIGlmKGds
LmdldEVycm9yKCkgIT0gZ2wuTk9fRVJST1IpCisgICAgICAgICAgICBhc3NlcnRNc2coZmFsc2Us
ICJ1bmV4cGVjdGVkIGVycm9yIGluIGRldGFjaFNoYWRlcigpIik7CisgICAgICAgIGFzc2VydE1z
ZyhhcmVBcnJheXNFcXVhbChnbC5nZXRBdHRhY2hlZFNoYWRlcnMocHJvZyksIGV4cGVjdGVkX3No
YWRlcnMpLCBlcnJtc2cpOworICAgIH0KKyAgICBjaGVja0dldEF0dGFjaGVkU2hhZGVycyhbXSwg
W10sIFtdLCAiZ2V0QXR0YWNoZWRTaGFkZXJzIHNob3VsZCByZXR1cm4gYW4gZW1wdHkgbGlzdCBi
eSBkZWZhdWx0Iik7CisgICAgY2hlY2tHZXRBdHRhY2hlZFNoYWRlcnMoW2ZzXSwgW10sIFtmc10s
ICJhdHRhY2hpbmcgYSBzaW5nbGUgc2hhZGVyIHNob3VsZCBnaXZlIHRoZSBleHBlY3RlZCBsaXN0
Iik7CisgICAgY2hlY2tHZXRBdHRhY2hlZFNoYWRlcnMoW2ZzLCB2cywgZnMyLCB2czJdLCBbXSwg
W2ZzLCB2cywgZnMyLCB2czJdLAorICAgICAgICAiYXR0YWNoaW5nIHNvbWUgc2hhZGVycyBzaG91
bGQgZ2l2ZSB0aGUgZXhwZWN0ZWQgbGlzdCIpOworICAgIGNoZWNrR2V0QXR0YWNoZWRTaGFkZXJz
KFtmc10sIFtmc10sIFtdLCAiYXR0YWNoaW5nIGEgc2hhZGVyIGFuZCBkZXRhY2hpbmcgaXQgc2hv
dWQgbGVhdmUgYW4gZW1wdHkgbGlzdCIpOworICAgIGNoZWNrR2V0QXR0YWNoZWRTaGFkZXJzKFtm
cywgdnMsIGZzMiwgdnMyXSwgW2ZzLCB2cywgZnMyLCB2czJdLCBbXSwKKyAgICAgICAgImF0dGFj
aGluZyBzb21lIHNoYWRlcnMgYW5kIGRldGFjaGluZyB0aGVtIGluIHNhbWUgb3JkZXIgc2hvdWQg
bGVhdmUgYW4gZW1wdHkgbGlzdCIpOworICAgIGNoZWNrR2V0QXR0YWNoZWRTaGFkZXJzKFtmcywg
dnMsIGZzMiwgdnMyXSwgW2ZzLCB2czIsIHZzLCBmczJdLCBbXSwKKyAgICAgICAgImF0dGFjaGlu
ZyBzb21lIHNoYWRlcnMgYW5kIGRldGFjaGluZyB0aGVtIGluIHJhbmRvbSBvcmRlciBzaG91ZCBs
ZWF2ZSBhbiBlbXB0eSBsaXN0Iik7CisgICAgY2hlY2tHZXRBdHRhY2hlZFNoYWRlcnMoW2ZzLCB2
cywgZnMyLCB2czJdLCBbdnNdLCBbZnMsIGZzMiwgdnMyXSwKKyAgICAgICAgImF0dGFjaGluZyBh
bmQgZGV0YWNoaW5nIHNvbWUgc2hhZGVycyBzaG91bGQgbGVhdmUgdGhlIGRpZmZlcmVuY2UgbGlz
dCIpOworICAgIGNoZWNrR2V0QXR0YWNoZWRTaGFkZXJzKFtmcywgdnMsIGZzMiwgdnMyXSwgW2Zz
LCB2czJdLCBbdnMsIGZzMl0sCisgICAgICAgICJhdHRhY2hpbmcgYW5kIGRldGFjaGluZyBzb21l
IHNoYWRlcnMgc2hvdWxkIGxlYXZlIHRoZSBkaWZmZXJlbmNlIGxpc3QiKTsKKyAgICBjaGVja0dl
dEF0dGFjaGVkU2hhZGVycyhbZnNCYWRdLCBbXSwgW2ZzQmFkXSwKKyAgICAgICAgImF0dGFjaGlu
ZyBhIHNoYWRlciB0aGF0IGZhaWxlZCB0byBjb21waWxlIHNob3VsZCBzdGlsbCBzaG93IGl0IGlu
IHRoZSBsaXN0Iik7CisgICAgY2hlY2tHZXRBdHRhY2hlZFNoYWRlcnMoW2ZzLCB2c0JhZCwgZnMy
XSwgW10sIFtmcywgdnNCYWQsIGZzMl0sCisgICAgICAgICJhdHRhY2hpbmcgc2hhZGVycywgaW5j
bHVkaW5nIG9uZSB0aGF0IGZhaWxlZCB0byBjb21waWxlLCBzaG91bGQgc3RpbGwgc2hvdyB0aGUg
aXQgaW4gdGhlIGxpc3QiKTsKKworLy8vLy8vLyBDaGVjayBsaW5rUHJvZ3JhbSgpIGFuZCB1c2VQ
cm9ncmFtIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyAgICBmdW5jdGlvbiBjaGVj
a0xpbmtBbmRVc2Uoc2hhZGVycywgZXhwZWN0ZWRfc3RhdHVzLCBlcnJtc2cpIHsKKyAgICAgICAg
dmFyIHByb2cgPSBnbC5jcmVhdGVQcm9ncmFtKCk7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgc2hhZGVycy5sZW5ndGg7ICsraSkKKyAgICAgICAgICAgIGdsLmF0dGFjaFNoYWRlcihwcm9n
LCBzaGFkZXJzW2ldKTsKKyAgICAgICAgZ2wuYmluZEF0dHJpYkxvY2F0aW9uKHByb2csIDAsICJh
VmVydGV4Iik7CisgICAgICAgIGdsLmJpbmRBdHRyaWJMb2NhdGlvbihwcm9nLCAxLCAiYUNvbG9y
Iik7CisgICAgICAgIGdsLmxpbmtQcm9ncmFtKHByb2cpOworICAgICAgICBpZiAoZ2wuZ2V0RXJy
b3IoKSAhPSBnbC5OT19FUlJPUikKKyAgICAgICAgICAgIGFzc2VydE1zZyhmYWxzZSwgInVuZXhw
ZWN0ZWQgZXJyb3IgaW4gbGlua1Byb2dyYW0oKSIpOworICAgICAgICBhc3NlcnRNc2coZ2wuZ2V0
UHJvZ3JhbVBhcmFtZXRlcihwcm9nLCBnbC5MSU5LX1NUQVRVUykgPT0gZXhwZWN0ZWRfc3RhdHVz
LCBlcnJtc2cpOworICAgICAgICBpZiAoZXhwZWN0ZWRfc3RhdHVzID09IHRydWUgJiYgZ2wuZ2V0
UHJvZ3JhbVBhcmFtZXRlcihwcm9nLCBnbC5MSU5LX1NUQVRVUykgPT0gZmFsc2UpCisgICAgICAg
ICAgICBkZWJ1ZyhnbC5nZXRQcm9ncmFtSW5mb0xvZyhwcm9nKSk7CisgICAgICAgIGlmIChnbC5n
ZXRFcnJvcigpICE9IGdsLk5PX0VSUk9SKQorICAgICAgICAgICAgYXNzZXJ0TXNnKGZhbHNlLCAi
dW5leHBlY3RlZCBlcnJvciBpbiBnZXRQcm9ncmFtUGFyYW1ldGVyKCkiKTsKKyAgICAgICAgZ2wu
dXNlUHJvZ3JhbShwcm9nKTsKKyAgICAgICAgaWYgKGV4cGVjdGVkX3N0YXR1cyA9PSB0cnVlKQor
ICAgICAgICAgICAgYXNzZXJ0TXNnKGdsLmdldEVycm9yKCkgPT0gZ2wuTk9fRVJST1IsICJ1c2lu
ZyBhIHZhbGlkIHByb2dyYW0gc2hvdWxkIHN1Y2NlZWQiKTsKKyAgICAgICAgaWYgKGV4cGVjdGVk
X3N0YXR1cyA9PSBmYWxzZSkKKyAgICAgICAgICAgIGFzc2VydE1zZyhnbC5nZXRFcnJvcigpID09
IGdsLklOVkFMSURfT1BFUkFUSU9OLCAidXNpbmcgYW4gaW52YWxpZCBwcm9ncmFtIHNob3VsZCBn
ZW5lcmF0ZSBJTlZBTElEX09QRVJBVElPTiIpOworICAgICAgICByZXR1cm4gcHJvZzsKKyAgICB9
CisKKyAgICB2YXIgcHJvZ0dvb2QxID0gY2hlY2tMaW5rQW5kVXNlKFt2cywgZnNdLCB0cnVlLCAi
dmFsaWQgcHJvZ3JhbSBzaG91bGQgbGluayIpOworICAgIHZhciBwcm9nR29vZDIgPSBjaGVja0xp
bmtBbmRVc2UoW3ZzLCBmczJdLCB0cnVlLCAidmFsaWQgcHJvZ3JhbSAjMiBzaG91bGQgbGluayIp
OworICAgIHZhciBwcm9nQmFkMSA9IGNoZWNrTGlua0FuZFVzZShbdnNdLCBmYWxzZSwgInByb2dy
YW0gd2l0aCBubyBmcmFnbWVudCBzaGFkZXIgc2hvdWxkIGZhaWwgdG8gbGluayIpOworICAgIHZh
ciBwcm9nQmFkMiA9IGNoZWNrTGlua0FuZFVzZShbZnNdLCBmYWxzZSwgInByb2dyYW0gd2l0aCBu
byB2ZXJ0ZXggc2hhZGVyIHNob3VsZCBmYWlsIHRvIGxpbmsiKTsKKyAgICB2YXIgcHJvZ0JhZDMg
PSBjaGVja0xpbmtBbmRVc2UoW3ZzQmFkLCBmc10sIGZhbHNlLCAicHJvZ3JhbSB3aXRoIGJhZCB2
ZXJ0ZXggc2hhZGVyIHNob3VsZCBmYWlsIHRvIGxpbmsiKTsKKyAgICB2YXIgcHJvZ0JhZDQgPSBj
aGVja0xpbmtBbmRVc2UoW3ZzLCBmc0JhZF0sIGZhbHNlLCAicHJvZ3JhbSB3aXRoIGJhZCBmcmFn
bWVudCBzaGFkZXIgc2hvdWxkIGZhaWwgdG8gbGluayIpOworICAgIHZhciBwcm9nQmFkNSA9IGNo
ZWNrTGlua0FuZFVzZShbdnNCYWQsIGZzQmFkXSwgZmFsc2UsICJwcm9ncmFtIHdpdGggYmFkIHNo
YWRlcnMgc2hvdWxkIGZhaWwgdG8gbGluayIpOworCisgICAgZ2wudXNlUHJvZ3JhbShwcm9nR29v
ZDEpOworICAgIGFzc2VydE1zZyhnbC5nZXRFcnJvcigpID09IGdsLk5PX0VSUk9SLAorICAgICAg
ICAgICAgICAidXNpbmcgYSB2YWxpZCBwcm9ncmFtIHNob3VsZG4ndCBnZW5lcmF0ZSBhIEdMIGVy
cm9yIik7CisKKyAgICB2YXIgdmJ1ZiA9IGdsLmNyZWF0ZUJ1ZmZlcigpOworICAgIGdsLmJpbmRC
dWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB2YnVmKTsKKyAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZ
X0JVRkZFUiwKKyAgICAgICAgICAgICAgICAgIG5ldyBGbG9hdDMyQXJyYXkoWworICAgICAgICAg
ICAgICAgICAgICAgIDAuMCwgMC4wLCAwLjAsIDEuMCwKKyAgICAgICAgICAgICAgICAgICAgICAx
LjAsIDAuMCwgMC4wLCAxLjAsCisgICAgICAgICAgICAgICAgICAgICAgMS4wLCAxLjAsIDAuMCwg
MS4wLAorICAgICAgICAgICAgICAgICAgICAgIDAuMCwgMS4wLCAwLjAsIDEuMF0pLAorICAgICAg
ICAgICAgICAgICAgZ2wuU1RBVElDX0RSQVcpOworICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIo
MCwgNCwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTsKKyAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJB
cnJheSgwKTsKKyAgICBnbC52ZXJ0ZXhBdHRyaWIzZigxLCAxLjAsIDAuMCwgMC4wKTsKKworICAg
IGFzc2VydE1zZyhnbC5nZXRFcnJvcigpID09IGdsLk5PX0VSUk9SLAorICAgICAgICAgICAgICAi
c2hvdWxkIGJlIG5vIGVycm9ycyBhdCB0aGlzIHBvaW50ICMyIik7CisKKyAgICBnbC51c2VQcm9n
cmFtKHByb2dHb29kMSk7CisgICAgZ2wuZHJhd0FycmF5cyhnbC5UUklBTkdMRVMsIDAsIDMpOwor
ICAgIGFzc2VydE1zZyhnbC5nZXRFcnJvcigpID09IGdsLk5PX0VSUk9SLAorICAgICAgICAgICAg
ICAiZHJhd2luZyB3aXRoIGEgdmFsaWQgcHJvZ3JhbSBzaG91bGRuJ3QgZ2VuZXJhdGUgYSBHTCBl
cnJvciIpOworCisgICAgZ2wudXNlUHJvZ3JhbShwcm9nQmFkMSk7CisgICAgYXNzZXJ0TXNnKGds
LmdldEVycm9yKCkgPT0gZ2wuSU5WQUxJRF9PUEVSQVRJT04sCisgICAgICAgICAgICAgICJ1c2lu
ZyBhbiBpbnZhbGlkIHByb2dyYW0gc2hvdWxkIGdlbmVyYXRlIElOVkFMSURfT1BFUkFUSU9OIik7
CisgICAgZ2wuZHJhd0FycmF5cyhnbC5UUklBTkdMRVMsIDAsIDMpOworICAgIGFzc2VydE1zZyhn
bC5nZXRFcnJvcigpICE9IGdsLk5PX0VSUk9SLAorICAgICAgICAgICAgICAiZHJhd2luZyB3aXRo
IGFuIGludmFsaWQgcHJvZ3JhbSBzaG91bGQgZ2VuZXJhdGUgc29tZSBHTCBlcnJvciBYWFgiKTsK
KworICAgIGdsLnVzZVByb2dyYW0ocHJvZ0dvb2QyKTsKKyAgICBnbC5hdHRhY2hTaGFkZXIocHJv
Z0dvb2QyLCBmc0JhZCk7CisgICAgZ2wubGlua1Byb2dyYW0ocHJvZ0dvb2QyKTsKKyAgICBhc3Nl
cnRNc2coZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9nR29vZDIsIGdsLkxJTktfU1RBVFVTKSA9
PSBmYWxzZSwKKyAgICAgICAgICAgICAgImxpbmtpbmcgc2hvdWxkIGZhaWwgd2l0aCBpbi11c2Ug
Zm9ybWVybHkgZ29vZCBwcm9ncmFtLCB3aXRoIG5ldyBiYWQgc2hhZGVyIGF0dGFjaGVkIik7CisK
KyAgICBnbC51c2VQcm9ncmFtKHByb2dHb29kMSk7CisgICAgZ2wuZHJhd0FycmF5cyhnbC5UUklB
TkdMRVMsIDAsIDQpOworICAgIGFzc2VydE1zZyhnbC5nZXRFcnJvcigpID09IGdsLk5PX0VSUk9S
LAorICAgICAgICAgICAgICAiZHJhd2luZyB3aXRoIGEgdmFsaWQgd2hlbiBsYXN0IHVzZWQgcHJv
Z3JhbSBzaG91bGRuJ3QgZ2VuZXJhdGUgYSBHTCBlcnJvciIpOworfQorCitkZWJ1ZygiIik7Citz
dWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworCitnbygpOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+CisKKzwvYm9k
eT4KKzwvaHRtbD4K
</data>

          </attachment>
      

    </bug>

</bugzilla>